Netboot installer: TFTP/HTTP servers, initramfs, EEPROM artifacts, plan

This commit is contained in:
Adam Carr
2026-09-19 10:06:05 -07:00
parent 5ff3d66d76
commit c38dcb83c5
7 changed files with 455 additions and 0 deletions

View File

@@ -28,6 +28,36 @@
- Synology NAS on same LAN — shared storage target (NFS) for cluster
workloads
## Rebuild architecture (decided 2026-09-19)
Fully unattended network reimage, no per-node physical access:
- **Synology** (`192.168.1.157`) hosts three services (all auto-start, see
`configs/`):
- `planck-tftp.service` — custom python TFTP server on :69 serving
`/volume1/plancknetboot/tftp/` (firmware, kernel, installer initramfs)
- `planck-netboot.service` — python HTTP helper on :8000 (GET `rootfs.tar`
template, GET `/events/<name>` progress log, POST = upload)
- NFS read-only export of the share for future use
- **Installer initramfs** (`configs/installer-init.sh`): busybox + sfdisk +
e2fsprogs. Identifies the node by CPU serial (map in
`configs/hostmap`), wipes `/dev/sda`, downloads the Debian 13 Raspberry Pi
OS Lite template over HTTP, installs it, sets hostname/ssh keys/user,
POSTs `pieeprom-revert.upd/.sig` to `tftp/<serial>/`, reboots.
- **Bootloader flow**: nodes' EEPROM is flashed (via staged `pieeprom.upd`
from the old OS) to install-mode: `BOOT_ORDER=0xf142` (network first),
`TFTP_IP=192.168.1.157`, `TFTP_PREFIX=1` (per-serial dirs),
`ENABLE_SELF_UPDATE=1`. After install, the TFTP-served
`bootloader_update=1` config + `<serial>/pieeprom.upd` reverts the node to
`BOOT_ORDER=0xf14` (USB first). Fresh OS boots from SSD; firstboot service
tidies up.
- **Reinstall a node anytime**: stage install-mode EEPROM again + reboot
(delete `tftp/<serial>/pieeprom.*` on the Synology first if it exists).
- Node password: see `configs/node-password.txt` (gitignored). SSH is
key-based; password exists for console/sudo recovery.
- UniFi MFA blocks API access; DHCP reservations deferred — mDNS
(`planck0NN.local`) works across subnets today.
## Phases
- [x] Phase 0 — Access + inventory (SSH keys on all 20, docs/)