Boot Ramdisk initrd mit PXE
um einen X86 basierten Rechner übers netz zu booten muss dass Mainboard Bios und die Netzwerkkarte PXE unterstützen (pre boot execution environment). Beim Booten setzt der Rechner einen DHCP Request ab. Vom DHCP Server erhält er einen bootpfad der auf ein passendes PXE Binary auf einem
TFTP Server verweist. PXE lädt dann Kernel und Ramdisk vom netz und startet den Kernel.
PXELinux
PXELinux stellt ein konfigurierbares PXE zur Verfügung. Download und auspacken. In ein per tftp verfügbares Verzeichnis. die Datei pxelinux.0 ablegen. Dem DHCP Server mitteilen, dass er bei einem DHCP Request die option bootfile name (67)
/pxe/pxelinux.0
ausliefern soll.
Der Rechner wird die Datei pxelinux.0 herunterladen und ausführen. pxelinux sucht dann nach seiner Configdatei. Dies erfolgt in folgender Reihenfolge bis er eine findet
- hardware-typ + mac-adresse, z.B. /pxe/pxelinux.cfg/01-00-13-95-aa-bb-cc (01 ist ethernet)
- ip adresse als hexadezimal, z.B. für 192.168.1.1 /pxe/pxelinux.cfg/C0A80101
- weglassen der letzten stelle /pxe/pxelinux.cfg/C0A8010, /pxe/pxelinux.cfg/C0A801, ... /pxe/pxelinux.cfg/C
- /pxe/pxelinux.cfg/default
- Fehlermeldung, fünf minuten pause, Rechner reset
Wir verwenden die exakte IP Adresse zur Konfiguration.
Eine Beispiel Configdatei
DEFAULT linux
# display boot prompt
PROMPT 1
# 10 second timeout
TIMEOUT 100
DISPLAY help.txt
LABEL linux
MENU LABEL linux ramdisk
KERNEL kernel
APPEND initrd=ramdisk.img ramdisk_size=32768 root=/dev/ram
LABEL menu
KERNEL menu.c32
Es wird der inhalt der datei help.txt ausgegeben. Dann wird ein Prompt gezeigt. Erfolgt zehn Sekunden keine Eingabe wird der default eintrag "linux" gebootet. Schreibt man "menu" so erhält man eine Liste aller definierten labels. Bootet man "linux" so wird als kernel die Datei kernel verwendet und als Ramdisk die Datei ramdisk.img.
Hier ein komplettes Verzeichnis mit kernel und config Dateien
.../pxe/pxelinux.0
.../pxe/help.txt
.../pxe/menu.c32
.../pxe/pxelinux.cfg/8CB584FC -> link auf hostname
.../pxe/pxelinux.cfg/hostname -> link auf default
.../pxe/pxelinux.cfg/default
.../pxe/kernel
.../pxe/ramdisk.img
die ganzen Links damit man weiss welcher Rechner das ist ohne sich das übersetzen zu müssen.