Observed (B4, 2026-07-23 greenfield flush + reinstall)
After the 2026-07-23 greenfield, /etc/systemd/system contained only these sigmond units: sigmond-loopback-multicast.service, sigmond-radiod-watchdog.{service,timer}, sigmond-timing-watchdog.{service,timer} (symlinks, 09:26), and sigmond-wisdom.service (a copy, 09:27).
Missing — everything else install.sh's "sigmond systemd units" section (the systemd/sigmond-*.service|timer copy loop, present since 51f0367) is supposed to install:
sigmond-shm-precreate.service (+ /usr/local/sbin/sigmond-shm-precreate symlink)
sigmond-timing-reconcile.{service,timer}
sigmond-storage-trim-*.{service,timer} (incl. the enabled-by-default storage-trim-all)
sigmond-decode-health-collect.{service,timer} (+ sbin symlink)
Consequences on B4
- First reboot hit the chrony/SHM ownership race that
sigmond-shm-precreate exists to prevent (timing-chain-architecture step 2): timestd-core-recorder failed its first start, chronyd created NTP SHM 0/2 as root:0600, writers locked out, FUSE/HPPS reach 0 until manual ipcrm surgery.
- No sink.db retention janitor since the flush —
pending_uploads accumulated ~750k rows in ~2 days (first trim after restoring the timer planned ~715k deletions).
- No timing reconciler (inert on B4 anyway — no gpsd — but part of the shipped baseline).
Restored by hand 2026-07-24
Units copied per install.sh convention, sbin symlinks made, shm-precreate + timing-reconcile.timer enabled, storage-trim-all.timer enabled --now (after verifying wd-tar delivery current on wd30, so the backlog was safe to trim).
Suspected cause
The reinstall path (smd/installer.py-driven component flow) symlinks each component's systemd/ units but appears not to run — or not to reach — install.sh's own sigmond-unit section; timestamps show the component symlink pass ran (09:26-09:28) while the copy loop's units are absent. Alternatively the flush removed them and the re-run skipped the section. Not yet reproduced.
Suggested fix
Either have installer.py treat the sigmond repo's own systemd/ dir like any component's (link everything + apply the documented enable set), or make the greenfield flow assert post-install that the baseline unit set exists (smd admin validate harmonize rule, like the ka9q_web_target rule added for fault 2).
Related: hf-timestd bdac6cf + 60715e4 added writer-side hf-timestd shm-init ExecStartPre (create + in-place repair), so the SHM lockout specifically can no longer recur even where precreate is missing — but the baseline-install gap affects more than SHM.
🤖 Generated with Claude Code
Observed (B4, 2026-07-23 greenfield flush + reinstall)
After the 2026-07-23 greenfield,
/etc/systemd/systemcontained only these sigmond units:sigmond-loopback-multicast.service,sigmond-radiod-watchdog.{service,timer},sigmond-timing-watchdog.{service,timer}(symlinks, 09:26), andsigmond-wisdom.service(a copy, 09:27).Missing — everything else
install.sh's "sigmond systemd units" section (thesystemd/sigmond-*.service|timercopy loop, present since 51f0367) is supposed to install:sigmond-shm-precreate.service(+/usr/local/sbin/sigmond-shm-precreatesymlink)sigmond-timing-reconcile.{service,timer}sigmond-storage-trim-*.{service,timer}(incl. the enabled-by-defaultstorage-trim-all)sigmond-decode-health-collect.{service,timer}(+ sbin symlink)Consequences on B4
sigmond-shm-precreateexists to prevent (timing-chain-architecture step 2): timestd-core-recorder failed its first start, chronyd created NTP SHM 0/2 asroot:0600, writers locked out, FUSE/HPPS reach 0 until manualipcrmsurgery.pending_uploadsaccumulated ~750k rows in ~2 days (first trim after restoring the timer planned ~715k deletions).Restored by hand 2026-07-24
Units copied per install.sh convention, sbin symlinks made,
shm-precreate+timing-reconcile.timerenabled,storage-trim-all.timerenabled --now (after verifying wd-tar delivery current on wd30, so the backlog was safe to trim).Suspected cause
The reinstall path (smd/installer.py-driven component flow) symlinks each component's
systemd/units but appears not to run — or not to reach — install.sh's own sigmond-unit section; timestamps show the component symlink pass ran (09:26-09:28) while the copy loop's units are absent. Alternatively the flush removed them and the re-run skipped the section. Not yet reproduced.Suggested fix
Either have installer.py treat the sigmond repo's own
systemd/dir like any component's (link everything + apply the documented enable set), or make the greenfield flow assert post-install that the baseline unit set exists (smd admin validateharmonize rule, like the ka9q_web_target rule added for fault 2).Related: hf-timestd bdac6cf + 60715e4 added writer-side
hf-timestd shm-initExecStartPre (create + in-place repair), so the SHM lockout specifically can no longer recur even where precreate is missing — but the baseline-install gap affects more than SHM.🤖 Generated with Claude Code