PXE - Preboot Execution Environment (Raspberry Pi 4): Unterschied zwischen den Versionen
(→Links) |
|||
(84 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
=== Bootlader === | === Bootlader === | ||
==== Links ==== | ==== Update ==== | ||
Zuerst das System auf den neuesten Stand bringen: | |||
<pre> | |||
sudo apt-get update && sudo apt-get full-upgrade | |||
sudo reboot | |||
</pre> | |||
Mit folgenden Befehl kann man überprüfen, ob es eine neuere Bootlader-Version gibt: | |||
<pre> | |||
sudo rpi-eeprom-update | |||
</pre> | |||
Mit der Option ''-a'' kann die neueste Version intalliert werden: | |||
<pre> | |||
sudo rpi-eeprom-update -a | |||
sudo reboot | |||
</pre> | |||
===== Links ===== | |||
[https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md] | [https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md] | ||
[https://github.com/raspberrypi/rpi-eeprom/ https://github.com/raspberrypi/rpi-eeprom/] | [https://github.com/raspberrypi/rpi-eeprom/ 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: | |||
<pre> | |||
cd ~/temp | |||
cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-09-03.bin pieeprom.bin | |||
sudo rpi-eeprom-config pieeprom.bin > bootconf.txt | |||
</pre> | |||
Die Datei | |||
<pre> | |||
vi bootconf.txt | |||
</pre> | |||
bearbeiten und den Eintrag ''BOOT_ORDER'' auf ''0x21'' (zuerst von SD-Karte, dann vom Netzwerk) setzen: | |||
<pre> | |||
BOOT_ORDER=0x21 | |||
</pre> | |||
Danach aus dem usrprünglichen Bootloader und der geänderten Konfiguration einen neuen erstellen: | |||
<pre> | |||
sudo rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin | |||
</pre> | |||
Zum Abschluss den Bootloader aktualisieren und das System neu starten: | |||
<pre> | |||
sudo rpi-eeprom-update -d -f ./pieeprom-new.bin | |||
sudo reboot | |||
</pre> | |||
Nach dem Neustart kann die Konfiguration mittels | |||
<pre> | |||
vcgencmd bootloader_config | |||
</pre> | |||
kontrolliert werden. | |||
===== Links ===== | |||
[https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md] | |||
== Server == | == Server == | ||
=== DHCP-Server === | |||
Installation und Grundkonfiguration siehe [[ISC-DHCPD (Linux)|ISC-DHCPD]] | |||
==== PXE-Boot aktivieren ==== | |||
Die Datei | |||
<pre> | |||
sudo vi /etc/dhcp/dhcpd.conf | |||
</pre> | |||
bearbeiten und folgenden Zeilen hinzfügen | |||
<pre> | |||
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"; | |||
} | |||
} | |||
</pre> | |||
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://wiki.syslinux.org/wiki/index.php?title=PXELINUX] | |||
[https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhcpdconf https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhcpdconf] | |||
[https://www.gtkdb.de/index_7_333.html https://www.gtkdb.de/index_7_333.html] | |||
[http://www.net.co.at/doc/howto/docs/pxe_howto/ch04.html http://www.net.co.at/doc/howto/docs/pxe_howto/ch04.html] | |||
=== TFTP Server === | === TFTP Server === | ||
Siehe dazu [[tftpd-hpa (Linux)|tftpd-hpa]] | |||
=== NFS Server === | |||
Installation und Grundkonfiguration [[NFS Server (Linux)|NFS Server]] | |||
Um das Root-Verzeichnis ''/srv/tftp'' des TFTP-Server und alle Unververzeichnisse lesend für NFS-Clients freizugeben die Datei | |||
<pre> | |||
sudo vi /etc/exports | |||
</pre> | |||
editieren und folgende Zeile hinzufügen: | |||
<pre> | |||
/srv/tftp 192.168.2.0/255.255.255.0(ro,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check) | |||
</pre> | |||
Beschreibung der Parameter siehe [[NFS Server (Linux)#Konfiguration|NFS Server#Konfiguration]] | |||
Testen siehe [[NAS Laufwerk einbinden (Linux)#OHNE_Eintrag in .2Fetc.2Ffstab|NAS Laufwerk einbinden#OHNE_Eintrag in /etc/fstab]] | |||
=== Bootdateien === | |||
==== PXE-Bootdateien ==== | |||
Damit das Booten über PXE funktioniert, müssen die Pakete | |||
<pre> | |||
sudo apt-get install pxelinux syslinux-common | |||
</pre> | |||
installiert und daraus folgende Dateien ins TFTP-Wurzelverzeichnis kopiert werden: | |||
<pre> | |||
sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/ | |||
</pre> | |||
<pre> | |||
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,libcom32.c32,libutil.c32,vesamenu.c32} /srv/tftp/ | |||
</pre> | |||
==== Konfigurationsdateien ==== | |||
{{note|20.12.2020}} | |||
Die Konfigurationsdateien werden im Verzeichnis ''/pxelinux.cfg/'' unterhalb des TFTP-Wurzelverzeichnisses angelegt: | |||
<pre> | |||
sudo mkdir /srv/tftp/pxelinux.cfg/ | |||
</pre> | |||
Es muss eine Konfigurationsdatei mit dem Namen ''default'' geben, falls keine client-spezifische Konfigurationsdatei gefunden werden kann: | |||
<pre> | |||
sudo vi /srv/tftp/pxelinux.cfg/default | |||
</pre> | |||
{{note|KERNEL und APPEND noch nicht korrekt}} | |||
[https://bbs.archlinux.org/viewtopic.php?id=217104 https://bbs.archlinux.org/viewtopic.php?id=217104] | |||
<pre> | |||
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 | |||
</pre> | |||
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''. | |||
<pre> | |||
sudo vi /srv/tftp/pxelinux.cfg/01-dc-a6-32-be-d1-7d | |||
</pre> | |||
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 https://www.browserling.com/tools/ip-to-hex]. | |||
===== Links ===== | |||
[https://wiki.syslinux.org/wiki/index.php?title=PXELINUX https://wiki.syslinux.org/wiki/index.php?title=PXELINUX] | |||
[https://wiki.ubuntuusers.de/PXE-Boot/ https://wiki.ubuntuusers.de/PXE-Boot/] | |||
==== Betriebssystem ==== | |||
===== Server ===== | |||
<pre> | |||
sudo mkdir /srv/tftp/NFS_Freigabe | |||
</pre> | |||
===== Client ===== | |||
<pre> | |||
sudo vi /etc/initramfs-tools/initramfs.conf | |||
</pre> | |||
<pre> | |||
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 | |||
</pre> | |||
<pre> | |||
sudo uname -a | |||
</pre> | |||
<pre> | |||
Linux testclient 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux | |||
</pre> | |||
<pre> | |||
sudo ls -ltr /boot/kernel*.img | |||
</pre> | |||
<pre> | |||
mkinitramfs -o /home/pi/temp/kernel7l.img | |||
</pre> | |||
<pre> | |||
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/. | |||
</pre> | |||
Um zu verhindern, dass nach dem Booten die IP-Adresse nochmals verändert wird, die Datei | |||
<pre> | |||
sudo vi /mnt/raspbian-diskless/etc/dhcpcd.conf | |||
</pre> | |||
editieren und folgende Zeilen einfügen: | |||
<pre> | |||
# 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 | |||
</pre> | |||
Um die NFS-Freigabe unter ''root'' (<code>/</code>) einzubinden, die Datei | |||
<pre> | |||
sudo vi /mnt/raspbian-diskless/etc/fstab | |||
</pre> | |||
folgendermassen anpassen: | |||
<pre> | |||
# <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 | |||
</pre> | |||
===== Links ===== | |||
[https://wiki.ubuntuusers.de/PXE-Boot/ https://wiki.ubuntuusers.de/PXE-Boot/] | |||
== Links == | == Links == | ||
[https://hackaday.com/2019/11/11/network-booting-the-pi-4/ https://hackaday.com/2019/11/11/network-booting-the-pi-4/] | [https://hackaday.com/2019/11/11/network-booting-the-pi-4/ https://hackaday.com/2019/11/11/network-booting-the-pi-4/] | ||
[https://docs.oracle.com/cd/E37670_01/E41137/html/ol-dnsmasq-conf.html https://docs.oracle.com/cd/E37670_01/E41137/html/ol-dnsmasq-conf.html] | |||
<pre> | |||
See dnsmasq(8) for explanation of pxe-service syntax. | |||
</pre> | |||
[https://www.elektronik-kompendium.de/sites/raspberry-pi/1906281.htm https://www.elektronik-kompendium.de/sites/raspberry-pi/1906281.htm] | |||
[https://wiki.syslinux.org/wiki/index.php?title=PXE_native_boot_menu https://wiki.syslinux.org/wiki/index.php?title=PXE_native_boot_menu] | |||
[https://www.debian.org/releases/jessie/i386/ch04s05.html.de https://www.debian.org/releases/jessie/i386/ch04s05.html.de] | [https://www.debian.org/releases/jessie/i386/ch04s05.html.de https://www.debian.org/releases/jessie/i386/ch04s05.html.de] | ||
[https://wiki.ubuntuusers.de/PXE-Boot/ https://wiki.ubuntuusers.de/PXE-Boot/] | [https://wiki.ubuntuusers.de/PXE-Boot/ https://wiki.ubuntuusers.de/PXE-Boot/] | ||
[https://www.virtuallyghetto.com/2020/07/two-methods-to-network-boot-raspberry-pi-4.html https://www.virtuallyghetto.com/2020/07/two-methods-to-network-boot-raspberry-pi-4.html] | |||
Zurück zu [[PXE - Preboot Execution Environment (unterschiedliche Versionen)|PXE - Preboot Execution Environment]] | Zurück zu [[PXE - Preboot Execution Environment (unterschiedliche Versionen)|PXE - Preboot Execution Environment]] |
Aktuelle Version vom 20. Dezember 2020, 18:26 Uhr
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