30 Commits
Author SHA1 Message Date
sir_melonchenandClaude Opus 5.5 6329ce2427 fix(bindgen): accept Active Directory names in dynamic zones
ci / Go (lint, test, vuln) (push) Successful in 6m42s
ci / Shell and licence headers (push) Successful in 13s
ci / Release build (dry run) (push) Successful in 3m9s
install / Installation (debian:13) (push) Successful in 3m29s
install / Installation (rocky:9) (push) Successful in 4m6s
ci / Protobuf (push) Successful in 7s
ci / Web (lint, test, audit, build) (push) Successful in 1m43s
ci / End-to-end (server, agents, BIND, Kea) (push) Successful in 3m27s
ci / Integration (real BIND and Kea) (push) Successful in 2m50s
ci / Development environment (compose) (push) Successful in 14s
install / Installation (debian:12) (push) Successful in 3m25s
install / Installation (ubuntu:22.04) (push) Successful in 3m36s
install / Installation (ubuntu:24.04) (push) Successful in 3m26s
release / release (push) Successful in 3m18s
Netlogon registers A records below _msdcs (gc._msdcs.<domain>), which the
default check-names of primary zones refuses; dynamic zones now get
check-names ignore. Troubleshooting for dcdiag in ACTIVE-DIRECTORY.md, an
end-to-end check of such an update.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:20:20 +02:00
sir_melonchenandClaude Opus 5.5 b222022339 test(e2e): address table entries in the dynamic zone (ADR 0026)
A static address in a second network with domain ad.e2e.test reaches the
existing dynamic zone on the primary and, after the transfer, on the
secondary; after deleting it the name is gone while the records added by
nsupdate earlier stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 05:51:05 +02:00
sir_melonchenandClaude Opus 5.5 2555028956 fix: agents enrolled by hand run as systemd services
ci / Protobuf (push) Successful in 12s
ci / Web (lint, test, audit, build) (push) Successful in 2m44s
ci / Shell and licence headers (push) Successful in 21s
ci / Go (lint, test, vuln) (push) Successful in 6m22s
ci / Release build (dry run) (push) Successful in 3m51s
ci / Integration (real BIND and Kea) (push) Successful in 2m33s
ci / Development environment (compose) (push) Successful in 17s
ci / End-to-end (server, agents, BIND, Kea) (push) Successful in 4m14s
install / Installation (debian:12) (push) Successful in 4m54s
install / Installation (debian:13) (push) Successful in 5m6s
install / Installation (ubuntu:22.04) (push) Successful in 5m16s
install / Installation (rocky:9) (push) Successful in 7m28s
install / Installation (ubuntu:24.04) (push) Successful in 8m58s
release / release (push) Successful in 4m11s
An agent installed without token and enrolled with the command of the web
interface never ran as a service: the installer left the unit disabled and
the root-run enrollment left an identity the service user could not read.
The installer now always enables the agent unit (it waits for the
identity via ConditionPathExists), enroll as root hands the state over to
the service user and enables and starts the unit, and rerunning or
upgrading the installer repairs agents enrolled by hand. The web interface
shows the matching installer command next to the enroll command.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 02:44:03 +02:00
sir_melonchenandClaude Opus 5.5 346d24cb34 fix: address check pings with a raw socket and asks the DNS agents
ci / Protobuf (push) Successful in 16s
ci / Web (lint, test, audit, build) (push) Successful in 2m53s
ci / Shell and licence headers (push) Successful in 23s
ci / Release build (dry run) (push) Successful in 3m46s
ci / Integration (real BIND and Kea) (push) Successful in 2m47s
ci / Development environment (compose) (push) Successful in 18s
install / Installation (debian:13) (push) Successful in 6m59s
ci / Go (lint, test, vuln) (push) Successful in 6m4s
ci / End-to-end (server, agents, BIND, Kea) (push) Successful in 3m50s
install / Installation (debian:12) (push) Successful in 6m17s
install / Installation (ubuntu:22.04) (push) Successful in 6m31s
install / Installation (rocky:9) (push) Successful in 9m53s
install / Installation (ubuntu:24.04) (push) Successful in 6m38s
release / release (push) Successful in 4m15s
On the user's server the check reported "socket: permission denied" for
ping and asked only the server's own resolver. Ping now falls back to a
raw ICMP socket (the server unit gets CAP_NET_RAW, like /bin/ping); DNS
asks the DNS agents outside clusters when no name server addresses are
configured, gives every server its own timeout, and explains missing
records (dynamic zone, system resolver, not deployed yet).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:06:55 +02:00
sir_melonchenandClaude Opus 5.5 328c1d9c3c test: DHCP ranges as dynamic entries in e2e, install and bench scripts
Networks are created without pools; the e2e and installation tests assign
the old pool range with POST /networks/{id}/range and check that Kea gets
the pools around the reservation and that a dynamic entry resolves (A and
PTR). The lease step now expects the lease to update the existing dynamic
entry (MAC, lease_hostname) without renaming it. The benchmark assigns the
/16 DHCP test range at setup (65,521 dynamic entries, noted in the report);
the /21 data networks have no range any more.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:02:05 +02:00
sir_melonchenandClaude Opus 5.5 b160b2dc85 test(install): check that the precheck stops on runners with little disk, then use --force
install / Installation (debian:12) (push) Successful in 6m22s
install / Installation (debian:13) (push) Successful in 6m24s
install / Installation (rocky:9) (push) Successful in 10m27s
install / Installation (ubuntu:22.04) (push) Successful in 6m27s
install / Installation (ubuntu:24.04) (push) Successful in 5m45s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 00:31:13 +02:00
sir_melonchen 5a28216291 Merge remote-tracking branch 'origin/main' into worktree-agent-m6-installer 2026-10-16 00:30:41 +02:00
sir_melonchenandClaude Opus 5.5 fad05ff1ab test(install): build the systemd images with the host network; docs: precheck table
install / Installation (debian:12) (push) Successful in 3m41s
install / Installation (debian:13) (push) Successful in 3m47s
install / Installation (rocky:9) (push) Successful in 23m4s
install / Installation (ubuntu:22.04) (push) Successful in 3m58s
install / Installation (ubuntu:24.04) (push) Failing after 2m39s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 20:30:44 +02:00
sir_melonchenandClaude Opus 5.5 3872eb47c3 fix(systemd): allow netlink for the DHCP agent (kea-dhcp4 -t detects interfaces)
install / Installation (debian:12) (push) Failing after 7m35s
install / Installation (debian:13) (push) Successful in 4m8s
install / Installation (rocky:9) (push) Successful in 5m5s
install / Installation (ubuntu:24.04) (push) Successful in 4m2s
install / Installation (ubuntu:22.04) (push) Failing after 7m48s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 20:05:09 +02:00
sir_melonchenandClaude Opus 5.5 f5f6ceb019 test(bench): report timings with 0.1 ms resolution
bench / Benchmark (server, BIND, Kea) (push) Successful in 9m35s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 19:41:28 +02:00
sir_melonchenandClaude Opus 5.5 464e7399db test(bench): dnsperf from Debian with an HTTPS fallback
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 19:41:13 +02:00
sir_melonchenandClaude Opus 5.5 342327c33d test(bench): take dnsperf from Alpine
bench / Benchmark (server, BIND, Kea) (push) Failing after 2m10s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:10:57 +02:00
sir_melonchenandClaude Opus 5.5 3d79c106e6 test(bench): retry package downloads
bench / Benchmark (server, BIND, Kea) (push) Failing after 5m4s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:52:36 +02:00
sir_melonchenandClaude Opus 5.5 0a73192c0d fix(install): survive missing tools under pipefail, license exit codes; docs: INSTALL.md
install / Installation (debian:13) (push) Failing after 2m45s
install / Installation (ubuntu:22.04) (push) Failing after 2m48s
install / Installation (debian:12) (push) Failing after 2m28s
install / Installation (rocky:9) (push) Failing after 6m1s
install / Installation (ubuntu:24.04) (push) Failing after 2m42s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:48:17 +02:00
sir_melonchenandClaude Opus 5.5 bd06881576 test(bench): round timings and drop ratios
bench / Benchmark (server, BIND, Kea) (push) Failing after 3m33s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:44:32 +02:00
sir_melonchenandClaude Opus 5.5 d3f0181aec test: installation test in systemd containers of all supported systems
install / Installation (debian:12) (push) Failing after 2m0s
install / Installation (ubuntu:22.04) (push) Canceled after 0s
install / Installation (ubuntu:24.04) (push) Canceled after 0s
install / Installation (debian:13) (push) Canceled after 3m42s
install / Installation (rocky:9) (push) Canceled after 1m59s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:44:30 +02:00
sir_melonchenandClaude Opus 5.5 f36548d81d feat: add the installer scripts/install.sh (ADR 0024)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:44:29 +02:00
sir_melonchenandClaude Opus 5.5 aec9a90320 test(bench): rename hosts so that the second revision differs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:43:18 +02:00
sir_melonchenandClaude Opus 5.5 72824f130e test(bench): finer perfdhcp rate steps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:39:54 +02:00
sir_melonchenandClaude Opus 5.5 9b310ed633 test(bench): report the stored size of each revision
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:39:48 +02:00
sir_melonchenandClaude Opus 5.5 9c61d31ef8 test(bench): install perfdhcp from the ISC repository
bench / Benchmark (server, BIND, Kea) (push) Successful in 8m35s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:34:45 +02:00
sir_melonchenandClaude Opus 5.5 43bf44a8ca test: benchmark of server, BIND and Kea with generated data
bench / Benchmark (server, BIND, Kea) (push) Canceled after 1m30s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:33:24 +02:00
sir_melonchenandClaude Opus 5.5 31229f060d test: probe distribution facts for the installer (temporary)
install / Probe debian:12 (push) Failing after 58s
install / Probe debian:13 (push) Successful in 1m2s
install / Probe ubuntu:22.04 (push) Successful in 1m7s
install / Probe ubuntu:24.04 (push) Successful in 1m3s
install / Probe rocky:9 (push) Successful in 7m33s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:28:33 +02:00
sir_melonchenandClaude Opus 5.5 9a6c3f5159 fix(kea): read the HA user from a file as Kea 3.x requires
Kea 3.x rejects clear-text users and passwords in HTTP authentication
("use of clear text 'user' is NOT SECURE"). Control socket clients now
use user-file and password-file, HA peers basic-auth-user-file and
basic-auth-password-file. The new secret artifact ddi-suite-ha-user
sits next to the password file (HAConfig.UserFile, set by derive);
keagen requires the file names ddi-suite-ha-password and
ddi-suite-ha-user. The DHCP agent handles both credential files alike:
consistent references in one directory, validation copy pointing at
the revision's files, written before the configuration, restored on a
failed reload, removed when HA goes away, compared by the health check.
Integration test and e2e read the user from the file; ADR 0023 updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:28:18 +02:00
sir_melonchenandClaude Opus 5.5 d3b892ef9a test(e2e): DNS cluster, dynamic updates, Kea HA and lease adoption
A second BIND joins as secondary, a second Kea forms an HA pair. The test
checks zone transfers, records, updates by address and by TSIG key (and a
refused one), that revisions keep dynamic records, the HA state over the
authenticated control socket and the adoption of a lease as address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:02:14 +02:00
sir_melonchenandClaude Opus 5.5 e32a30cfeb chore(deploy): include ddi-suite-keys.conf before ddi-suite.conf
The development and end-to-end named.conf include the TSIG keys file, which starts empty, so named starts before the first revision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:42:53 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 7b01f2f2f8 test(e2e): reuse the API session instead of logging in for every step
ci / Protobuf (push) Successful in 18s
ci / Web (lint, test, audit, build) (push) Successful in 1m19s
ci / Release build (dry run) (push) Successful in 2m9s
ci / Integration (real BIND and Kea) (push) Successful in 11m26s
ci / Shell and licence headers (push) Successful in 19s
ci / Go (lint, test, vuln) (push) Successful in 4m46s
ci / End-to-end (server, agents, BIND, Kea) (push) Successful in 2m7s
ci / Development environment (compose) (push) Successful in 12s
Every api.sh step logged in again and the run hit the login rate limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:35:32 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 e7a0fbb123 test(e2e): pending changes, manual mode with push, diff, rollback, events
New steps before the revoke step: /config/pending reports nothing after
revision 2 and the new address afterwards; the DHCP agent switched to
manual mode stays on revision 2 while the DNS agent reaches 3, and an
explicit push of revision 3 brings it there with a succeeded push
deployment; the diff of revision 3 contains the new host; rolling back
to revision 1 creates revision 4 with SOA serial 4 and without the later
names; /events announces a revision created while listening.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:11:27 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 d3e5807a09 test: retry image pulls, executable e2e scripts, fix truncation test
ci / Protobuf (push) Successful in 18s
ci / Web (lint, test, audit, build) (push) Successful in 1m16s
ci / Shell and licence headers (push) Successful in 20s
ci / Release build (dry run) (push) Successful in 2m9s
ci / Go (lint, test, vuln) (push) Successful in 4m19s
ci / End-to-end (server, agents, BIND, Kea) (push) Successful in 1m49s
ci / Development environment (compose) (push) Successful in 12s
ci / Integration (real BIND and Kea) (push) Successful in 5m12s
Docker Hub timed out on the shared runner; pulls now retry and fall back
to a local image. The e2e scripts were committed without the executable
bit. The truncation test checked letters that the marker itself contains.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:37:53 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 56347ec5ff test: end-to-end test of the agent path, fix first CI findings
ci / Web (lint, test, audit, build) (push) Successful in 1m1s
ci / Shell and licence headers (push) Successful in 7s
ci / Go (lint, test, vuln) (push) Failing after 2m40s
ci / Protobuf (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 2m27s
ci / End-to-end (server, agents, BIND, Kea) (push) Failing after 1m26s
ci / Development environment (compose) (push) Successful in 13s
ci / Integration (real BIND and Kea) (push) Failing after 1m58s
test/e2e runs server, PostgreSQL, BIND and Kea with both agents in
containers (make test-e2e, CI job End-to-end): enrollment with the
command from the API, revision 1 and 2 applied and served by BIND and
Kea, unchanged data creates no revision, revoking disconnects the agent
while BIND keeps serving.

Fixes from the first CI run: quote a spec description containing a
comma, exempt the agent lock-out routes in the route protection test,
whole-second certificate lifetimes, a push replacing queued pulls, the
truncation marker containing the letter checked, and curl|grep -q under
pipefail in the server smoke test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:29:58 +02:00