PXE - Preboot Execution Environment (Raspberry Pi 4)

Aus Tutorials
Zur Navigation springen Zur Suche springen

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