spore
NFS/PXE, signed native-boot, and production DNS server. The HTTP/RAM chain is Fleet/forge's EEPROM fallback; folly monitors each service.
NVMe-rooted. Config:
nix/hosts/spore.nix.Reached as
spore.lolwtf.ca.Redundant LAN NTP server paired with Fleet/capsule (
nix/services/ntp-server.nix) and published with it astime.lolwtf.ca. Chrony uses authenticated NTS upstreams (time.nrc.ca,time.chu.nrc.ca), polls Capsule, and serves UDP/123 to routed10.0.0.0/8clients. Orphan fallback reports stratum 10; neither Pi is stratum 1 without a hardware reference clock.CoreDNS sinkhole using the shared
nix/services/coredns-sinkhole.nixpolicy.dns.lolwtf.capublishes spore with Fleet/capsule as the resolver pair.Verify with
chronyc tracking,chronyc sources -v, andchronyc authdata.Netboot serving
There is no application, database, or dynamic boot decision — the Nix-built image is the policy. Spore serves files over HTTP (nginx) plus TFTP (dnsmasq); boot integrity is enforced by the EEPROM signature and the initrd's cmdline-pinned squashfs digest.
x86 k8s nodes netboot off the static iPXE tree in
/var/lib/tftpboot(nix/services/pxe-netboot.nix): DHCP → TFTPboot/ipxe.efi→menu.ipxe→ per-target kernel/initrd over HTTP.spore-native-boot-rackpi5.service(nix/services/spore-native-boot.nix) is the signed-RAM-image publisher for Fleet/forge. It signsboot.imgwith/var/lib/pi-boot-sign/private.pem, atomically switches the stableboot.img/boot.sigpair under/rackpi5-ram/, and publishes each squashfs as/<sha256>.squashfs. The signed initrd requests its pinned digest, so an activation cannot mix boot and root generations.The local artifact timer probes the current image, signature, and digest-addressed squashfs over nginx and exports
spore_native_boot_artifact_availablethrough node-exporter's textfile collector. A publisher failure doesn't prevent nginx from serving the independent x86 PXE tree; it costs forge its last-resort fallback.
Build and recovery
Validate without activating:
nix build .#nixosConfigurations.spore.config.system.build.toplevel --no-linkon a native aarch64 builder.Before changing forge's boot path, verify the publisher and artifact-check units, confirm the three
spore_native_boot_artifact_availableseries are1, and confirm the EEPROM contains the matching public key.Roll back with
sudo nixos-rebuild switch --rollback; the selected generation republishes its matching signed rackpi5 artifacts.
Linked references 4
LAN CoreDNS sinkhole, rooted on the NVMe through the retained NIXOS_DNS/FW_DNS filesystem layout. It shares nix/services/coredns-sinkhole.nix with Fleet/spore. Config: nix/hosts/capsule.nix.
Redundant LAN NTP server paired with Fleet/spore (nix/services/ntp-server.nix). Chrony uses authenticated NTS upstreams (time.nrc.ca, time.chu.nrc.ca), polls Spore, and serves UDP/123 to routed 10.0.0.0/8 clients. If all upstream time disappears, orphan mode elects one Pi to preserve a common timebase at stratum 10.
Fleet/spore publishes the signed RAM image used by forge's EEPROM HTTP fallback through spore-native-boot-rackpi5.service.
| Host | Purpose | Hardware |
|---|---|---|
| Fleet/spore | NFS, PXE, signed native-boot, DNS and NTP | Pi 5 8 GB, NVMe |
| Fleet/capsule | DNS sinkhole and NTP | Pi 5 8 GB, NVMe |
| Fleet/forge | arm64 build host, harmonia cache, OCI builder | Pi 5 8 GB, NVMe |
| Fleet/homepi4 | kiosk | Pi 4B 8 GB, 7" touch display |
| Fleet/weatherpi4 | weather kiosk | Pi 4B 8 GB |
| Fleet/cloudpi4 | utility and CoreDNS canary | Pi 4B 4 GB |
| Fleet/radiopi0 | radio | Pi Zero W |
| Fleet/blinkypi0 | LED display | Pi Zero W |