fix(boot): OTA-enable app layer + sensorgnome ordering + app-service retry-forever - #52
Merged
Merged
Conversation
…e retry-forever
Boot-sequence hardening from the boot-sequence KB review (ground-truth verified):
- install-systemd.sh MUST_BE_ENABLED now covers the 7 app-layer units
(station-hardware-server/radio/web/lcd-interface, station-boot, bootcount,
sensorgnome) — previously enabled only by Ansible, so a lost symlink / Ansible-free
image came up with no app layer. OTA now self-heals it.
- sensorgnome.service: After=ctt-board-detect.service bootcount.service (the units that
produce its synchronous inputs /etc/ctt/station-id + /etc/bootcount). The old
After=station-boot was a stale premise and raced bootcount; dropped the malformed
WantedBy=...station-boot.service.
- station-{hardware-server,radio,web,lcd}-interface: StartLimitIntervalSec=0 + RestartSec=5
so a transient boot crash-loop retries forever instead of hitting systemd's default
5-in-10s give-up and leaving a headless station dark (matches the radio driver).
Validated: systemd-analyze verify clean on all four app units on a real station; NM
absent-line default confirmed = yes on NM 1.30.6.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Boot-sequence hardening from the boot-sequence KB review. Three findings, all verified against ground truth (not the doc's word).
Findings A + B + #11
A — app layer wasn't OTA-enabled.
install-systemd.sh'sMUST_BE_ENABLEDcovered only the 10 native/OS units; the 7 Node/SensorGnome units were deployed as files but enabled only by Ansible/manufacturing. A lost symlink or an Ansible-free image → full native layer, no app layer. Now they're in the list, so OTA self-heals enablement.B — sensorgnome ordered on a stale premise (the doc's own fix was incomplete). The doc caught that
After=station-bootwas stale (station-bootno longer writesstation-id) and suggestedAfter=ctt-board-detect. Butmachine.jsreads two files synchronously at load:/etc/ctt/station-id(ctt-board-detect) and/etc/bootcount(bootcount.service). sensorgnome and bootcount were bothAfter=station-boot, neither after the other → a real race. Corrected toAfter=ctt-board-detect.service bootcount.service; dropped the malformedWantedBy=…station-boot.service.#11 — app services couldn't retry forever.
station-*hadRestart=on-failurebut no start-limit override → a transient boot crash-loop hits systemd's default 5-in-10s give-up and landsfailedon a headless station. AddedStartLimitIntervalSec=0+RestartSec=5(matches the radio driver).Validation
systemd-analyze verifyclean on all four app units on a real station (correct[Unit]/[Service]placement, no cycle).autoconnectline as defaultyes— confirmed on real NM 1.30.6.verifyalready guarantees (offered as belt-and-suspenders).Also adds the missing CHANGELOG entry for the deploy-dir OTA-clobber fix (PR #50).
🤖 Generated with Claude Code