First boot โ
The first power-up is the longest one. The Pi has to:
- Complete second-stage debootstrap (postinst scripts run on the actual hardware now)
- Apply minimal config (hostname, fstab, apt sources, dpkg no-doc/no-locale rules)
- Bring up wifi STA on
IoTfor internet apt update+ install runit-init โ this is the moment systemd-sysv gets dropped and runit takes PID 1- Install the tool stack + bluez + nexmon build deps
- Create the
nt:ntuser, NOPASSWD sudo, autologin getty on tty1 - Build nexmon for BCM43436 (~15 min)
- Patched firmware lands in
/lib/firmware/brcm/ - Configure runit services (sshd, wpa_supplicant, dhclient, hostapd for
nosferato-mgmt, dnsmasq for AP+tether) - Set up USB OTG
g_multicomposite gadget - Strip locales, docs (~80MB recovered)
- Self-disable + reboot
Total: 30โ45 min depending on apt mirror speed.
Watching it happen โ
Two ways:
- Serial console โ UART on GPIO 14/15 at 115200 baud. Anything with a USB-TTL adapter (e.g. a CP2102) will show every step.
- Tail the log after the fact โ once the rig is reachable,
cat /var/log/nosferato-firstboot.log.
When something fails โ
The only step likely to bite is the nexmon build (it pulls ~200MB of build deps + cross-compiles a kernel module). If it does:
sh
ssh nt@10.10.10.1
cd ~/nexmon
source setup_env.sh
cd patches/bcm43436b0/9_88_4_65/nexmon
make
sudo cp brcmfmac43436-sdio.bin /lib/firmware/brcm/
sudo rebootEverything else is idempotent โ re-trigger by re-creating /boot/nosferato-firstboot and rebooting. (You probably don't want to though โ it'll re-clone nexmon.)