Store replay diagnostics, including FATAL termination, are invisible from the host #8
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/vm#8
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The store replay's entire log — including the FATAL diagnostics of its fail-closed termination path — is visible only in the guest's own journal, which dies with the machine on exactly the boot that needs a diagnosis. The host operator of a terminated boot sees a silent QEMU exit-restart loop with zero diagnostics.
Mechanism (measured, not inferred)
Under the systemd initrd,
boot.postBootCommands(and NixOS activation) run inside the initrd unitinitrd-nixos-activation-start, whose stdout goes to the guest's journald — not to the serial console at any loglevel. Thestage-2-initkmsg tee branch is skipped underIN_NIXOS_SYSTEMD_STAGE1, so raisingloglevel(measured atloglevel=8) changes nothing.Evidence
On a healthy boot the replay's lines exist only in the guest journal (recovered over SSH;
journalctl -bin the guest):On a TERMINATED boot (contract 6a's fail-closed path, exercised by a cache-missing sabotage against a whiteouted lower store) the same channel is the only one carrying
FATAL: no cached registration for <key>— and it dies with the machine. The host-side journal for that run holds 67 distinctmicrovm@<machine>[PID]incarnations, each reaching "Starting NixOS Activation" and then vanishing;Restart=alwaysrespawns the unit roughly every 15 s and sshd never comes up. Nothing the host can read explains why.Contract 6a's promise that a failed replay "terminates the boot before systemd consumers" holds — that half was measured-pass. The diagnostic story around it does not survive contact with the systemd initrd.
What is needed
terminate()— and ideally the whole replay log — should write to/dev/consoleor/dev/kmsgdirectly, so the diagnostics reach the host-visible serial console instead of a journal that is destroyed with the boot that failed.Measured at microvm.nix
39a499ab, nixpkgsb6018f87, kernel 6.12.93, vm8a1eb0f.Refs allod/strategy#20