Netboot installer: TFTP/HTTP servers, initramfs, EEPROM artifacts, plan
This commit is contained in:
30
docs/PLAN.md
30
docs/PLAN.md
@@ -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/)
|
||||
|
||||
Reference in New Issue
Block a user