PXE - Preboot Execution Environment (Raspberry Pi 4)
Client
Bootlader
Update
Zuerst das System auf den neuesten Stand bringen:
sudo apt-get update && sudo apt-get full-upgrade sudo reboot
Mit folgenden Befehl kann man überprüfen, ob es eine neuere Bootlader-Version gibt:
sudo rpi-eeprom-update
Mit der Option -a kann die neueste Version intalliert werden:
sudo rpi-eeprom-update -a sudo reboot
Links
https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md
https://github.com/raspberrypi/rpi-eeprom/
Bootreihenfolge anpassen
Nach einem full-upgrade befindet sich die neueste Bootlader-Version in /lib/firmware/raspberrypi/bootloader/stable/. Diese wird in lokales Verzeichnis kopiert und die Konfiguration exportiert:
cd ~/temp cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-09-03.bin pieeprom.bin sudo rpi-eeprom-config pieeprom.bin > bootconf.txt
Die Datei
vi bootconf.txt
bearbeiten und den Eintrag BOOT_ORDER auf 0x21 (zuerst von SD-Karte, dann vom Netzwerk) setzen:
BOOT_ORDER=0x21
Danach aus dem usrprünglichen Bootloader und der geänderten Konfiguration einen neuen erstellen:
sudo rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin
Zum Abschluss den Bootloader aktualisieren und das System neu starten:
sudo rpi-eeprom-update -d -f ./pieeprom-new.bin sudo reboot
Nach dem Neustart kann die Konfiguration mittels
vcgencmd bootloader_config
kontrolliert werden.
Links
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md
Server
DHCP-Server
Installation und Grundkonfiguration siehe ISC-DHCPD
PXE-Boot aktivieren
Die Datei
sudo vi /etc/dhcp/dhcpd.conf
bearbeiten und folgenden Zeilen hinzfügen
allow booting; allow bootp; group { # IP address of the TFTP server next-server 192.168.2.1; host tftpclient { # ethernet address of the client hardware ethernet DC:A6:32:BE:D1:7D; # static ip address (optional) fixed-address 192.168.2.105; filename "pxelinux.0"; } }
Dabei ist group optional und dient nur dazu, gewisse Parameter (hier die IP-Adresse des TFTP-Servers) für mehrere host's gemeinsam zu definieren.
Links
https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhcpdconf
https://www.gtkdb.de/index_7_333.html
http://www.net.co.at/doc/howto/docs/pxe_howto/ch04.html
TFTP Server
Siehe dazu tftpd-hpa
NFS Server
Installation und Grundkonfiguration NFS Server
Um das Root-Verzeichnis /srv/tftp des TFTP-Server und alle Unververzeichnisse lesend für NFS-Clients freizugeben die Datei
sudo vi /etc/exports
editieren und folgende Zeile hinzufügen:
/srv/tftp 192.168.2.0/255.255.255.0(ro,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check)
Beschreibung der Parameter siehe NFS Server#Konfiguration
Testen siehe NAS Laufwerk einbinden#OHNE_Eintrag in /etc/fstab
Bootdateien
PXE-Bootdateien
Damit das Booten über PXE funktioniert, müssen die Pakete
sudo apt-get install pxelinux syslinux-common
installiert und daraus folgende Dateien ins TFTP-Wurzelverzeichnis kopiert werden:
sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,libcom32.c32,libutil.c32,vesamenu.c32} /srv/tftp/
Konfigurationsdateien
20.12.2020
Die Konfigurationsdateien werden im Verzeichnis /pxelinux.cfg/ unterhalb des TFTP-Wurzelverzeichnisses angelegt:
sudo mkdir /srv/tftp/pxelinux.cfg/
Es muss eine Konfigurationsdatei mit dem Namen default geben, falls keine client-spezifische Konfigurationsdatei gefunden werden kann:
sudo vi /srv/tftp/pxelinux.cfg/default
KERNEL und APPEND noch nicht korrekt
https://bbs.archlinux.org/viewtopic.php?id=217104
BENUTZERNAME LABEL raspbian-diskless MENU LABEL Raspbian ^Diskless KERNEL raspbian-diskless/kernel7l.img APPEND netboot=nfs nfsroot=192.168.2.1:/srv/tftp/NFS_Freigabe/raspbian-diskless rw initrd=raspbian-diskless/kernel7l.img
Und optional client-spezifische Konfigurationen anhand der MAC-Adresse in Kleinbuchstaben mit vorangestellten 01-:
z.B. ergibt die MAC-Adresse DC:A6:32:BE:D1:7D die Konfigurationsdatei 01-dc-a6-32-be-d1-7d.
sudo vi /srv/tftp/pxelinux.cfg/01-dc-a6-32-be-d1-7d
Alternativ können die Konfigurationsdateien auch nach der IP-Adresse in Hexadezimal-Schreibweise mit Großbuchstaben benannt werden.
Z.B. 192.168.2.105 ergibt in Hexzahlen C0.A8.02.69 bzw. 0xC0A80269 und dann als Dateinamen eben C0A80269 (auch abgekürzt für Netzbereiche möglich - z.B.: C0A80).
IP zu Hexadecimal-Konverter: https://www.browserling.com/tools/ip-to-hex.
Links
https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
https://wiki.ubuntuusers.de/PXE-Boot/
Betriebssystem
Server
sudo mkdir /srv/tftp/NFS_Freigabe
Client
sudo vi /etc/initramfs-tools/initramfs.conf
DEVICE=eth0 # ## BOOT: [ local | nfs ] ## ## local - Boot off of local media (harddrive, USB stick). ## ## nfs - Boot using an NFS drive as the root of the drive. ## # BOOT=nfs
sudo uname -a
Linux testclient 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux
sudo ls -ltr /boot/kernel*.img
mkinitramfs -o /home/pi/temp/kernel7l.img
sudo mount -tnfs -onolock 192.168.2.1:/srv/tftp/NFS_Freigabe /mnt sudo cp -ax /. /mnt/raspbian-diskless/. sudo cp -ax /dev/. /mnt/raspbian-diskless/dev/.
Um zu verhindern, dass nach dem Booten die IP-Adresse nochmals verändert wird, die Datei
sudo vi /mnt/raspbian-diskless/etc/dhcpcd.conf
editieren und folgende Zeilen einfügen:
# Be a BOOTP client. Basically, this just doesn't send a DHCP Message # Type option and will only interact with a BOOTP server. # All other DHCP options still work. bootp
Um die NFS-Freigabe unter root (/
) einzubinden, die Datei
sudo vi /mnt/raspbian-diskless/etc/fstab
folgendermassen anpassen:
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 #PARTUUID=ebc71db7-01 /boot vfat defaults 0 2 #PARTUUID=ebc71db7-02 / ext4 defaults,noatime 0 1 /dev/nfs / nfs defaults 1 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Links
https://wiki.ubuntuusers.de/PXE-Boot/
Links
https://hackaday.com/2019/11/11/network-booting-the-pi-4/
https://docs.oracle.com/cd/E37670_01/E41137/html/ol-dnsmasq-conf.html
See dnsmasq(8) for explanation of pxe-service syntax.
https://www.elektronik-kompendium.de/sites/raspberry-pi/1906281.htm
https://wiki.syslinux.org/wiki/index.php?title=PXE_native_boot_menu
https://www.debian.org/releases/jessie/i386/ch04s05.html.de
https://wiki.ubuntuusers.de/PXE-Boot/
https://www.virtuallyghetto.com/2020/07/two-methods-to-network-boot-raspberry-pi-4.html
Zurück zu PXE - Preboot Execution Environment