Checkpoint: netboot debug state before model swap

This commit is contained in:
Adam Carr
2026-09-19 10:37:53 -07:00
parent c38dcb83c5
commit 328c21e21c
3 changed files with 88 additions and 46 deletions

View File

@@ -58,6 +58,54 @@ Fully unattended network reimage, no per-node physical access:
- UniFi MFA blocks API access; DHCP reservations deferred — mDNS
(`planck0NN.local`) works across subnets today.
## Current debug state (paused here, swap to stronger model)
First live test on planck020 (EEPROM install-mode staged, works — confirmed
via `vcgencmd bootloader_config` showing BOOT_ORDER=0xf142, TFTP_IP,
TFTP_PREFIX=1):
- **TFTP chain works**: bootloader + firmware fetch firmware, config.txt,
cmdline.txt, kernel8.img, and the initramfs (`initramfs8` via
`auto_initramfs=1` — the explicit `initramfs <file> followkernel` syntax
did NOT work on this bootloader; use auto_initramfs + file named
`initramfs8`). All transfers show DONE on the Synology TFTP server
(`journalctl -u planck-tftp`). "STALLED" log lines are harmless — they're
duplicate/speculative client sessions that never get ACKed.
- **Custom TFTP server gotcha**: firmware requires `tsize` in the OACK —
without it transfers stall. Fixed in
`configs/planck-tftp-server.py` (deployed version on Synology is current).
- **Kernel boots** (node pings ~25s after reboot with a DHCP-assigned IP —
init reached DHCP), but **no HTTP requests ever arrive** at the
planck-netboot helper (no `/events/` GETs, no template GET, journal
always empty). Then the node reboots into the OLD OS (~2-3 min cycle).
So initramfs `/init` is either crashing before/inside wget, or HTTP egress
from the initramfs fails silently, and the test-mode `poweroff -f` acts
like a reboot (node returns on old OS — actually likely USB fallback after
a failed netboot pass).
- planck020 EEPROM is still in install-mode; every reboot retries netboot
then falls back to old OS. To restore it: stage revert via
`rpi-eeprom-config --config revert.boot.conf` flow from the old OS (see
EEPROM configs in git history / regenerate from
`/lib/firmware/raspberrypi/bootloader/stable/pieeprom-2023-01-11.bin`).
### Next steps for whoever continues
1. Get console visibility on the netbooted node: add per-log-line HTTP
reporting in `configs/installer-init.sh` (each `log()` also does
`wget -q -O /dev/null "$HTTP/events/<serial>-<msg>"` once DHCP is up),
plus flush a tmpfs log file after DHCP. Alternatively boot with
`console=serial0,115200` and attach a USB-serial cable to planck020.
2. Suspects for the silent init death: busybox `wget` HTTP behavior in
initramfs (try `wget -O-` verbose, test with numeric IP + port 8000 —
verified reachable from other nodes), or udhcpc script path issues.
Consider testing initramfs content standalone (gunzip + cpio listing).
3. Template tarball + all services are already on the Synology
(`/volume1/plancknetboot/`): rootfs.tar (sha256 e37837bee03ae2b3...),
tftp/ (firmware, initramfs8, auto_initramfs config), HTTP helper :8000,
TFTP :69. Credentials for Synology SSH are session-only (not stored).
4. Once one node completes end-to-end, the rest is a loop: stage
install-mode EEPROM per node + reboot (script this in `scripts/`).
## Phases
- [x] Phase 0 — Access + inventory (SSH keys on all 20, docs/)