====== Záchranné OpenWRT - netboot ====== Motivace: Přes NFS můžeme buď nabootovat plnohodnotnou distribuci (tomu se věnuje stránka [[:radar:rp-netboot]]), nebo si můžeme trápení s NFS a nastavením mountu / po síti ušetřit a nabootovat minimalistickou live distribuci, která funguje z initramdisku, který se stahuje přes TFTP přímo bootloaderem. ===== OpenWRT ===== Když si kompilujete vlastní OpenWRT pro amd64, tak v make menuconfig můžete zaškrtnout Target Images → Ramdisk nebo tak něco, vyrobí to soubor openwrt-x86-64-generic-initramfs-kernel.bin a ten jde nabootovat jako ramdisk a běží to z něj. Oficiální obrazy ale tuhle volbu zaškrtnutou nemají a nabootovat bez rootfs device se mi to nepodařilo. Vlastní openwrt si kompilovat nechcete, protože pak nejdou instalovat jejich balíčky a zejména kernel moduly. Bylo zjištěno, že ty obrazy se liší pouze přítomností souboru /init v initramdiku (ten co chceme ho má, oficiální buildy ho nemají). Pořídíme si soubory z https://archive.openwrt.org/releases/23.05.1/targets/x86/64/ * xxx-x86-64-generic-kernel.bin * rozbalený rootfs V tom rozbalením rootfs vyrobíme /init (a asi chmod +x) s následujícím obsahem: #!/bin/sh export INITRAMFS=1 # switch to tmpfs to allow run daemons in jail on initramfs boot DIRS=$(echo *) NEW_ROOT=/new_root mkdir -p $NEW_ROOT mount -t tmpfs tmpfs $NEW_ROOT cp -pr $DIRS $NEW_ROOT exec switch_root $NEW_ROOT /sbin/init # cd rozbalený_root # find . -print0 | fakeroot cpio --null -o --format=newc | gzip -9 > ../initrd.gz Připravíme si grub.cfg: set timeout=2000 menuentry 'OpenWRT rescue' { linux kernel.bin console=ttyS0,115200 initrd initrd.gz } ===== Netboot ===== Chceme to bootovat z OpenWRT routeru (v našem případě console), který poskytne TFTP. V /etc/dnsmasq.conf přidáme: enable-tftp tftp-root=/tmp/tftp dhcp-boot=grubnetx64.efi,,192.168.57.1 Pro OpenWRT>=23, které má dnsmasq v ujailu, jsem vymyslel jen do /etc/init.d/dnsmasq přidat to do procd_add_jail_mount Do /tmp/tftp nakopírujeme potřebné soubory: ssh $1 "mkdir -p /tmp/tftp/grub" scp -O grub.cfg $1:/tmp/tftp/grub/ SCP="rsync -zz --inplace -avhPe ssh" $SCP /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi $1:/tmp/tftp/ $SCP openwrt-22.03.5-x86-64-generic-kernel.bin $1:/tmp/tftp/kernel.bin $SCP initrd.gz $1:/tmp/tftp/ A mělo by to bootovat…