Skip to content

greenfield/reinstall leaves sigmond's own systemd units uninstalled (shm-precreate, timing-reconcile, storage-trim, decode-health) #39

Description

@rrobinett

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

  1. 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.
  2. No sink.db retention janitor since the flushpending_uploads accumulated ~750k rows in ~2 days (first trim after restoring the timer planned ~715k deletions).
  3. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions