PXE - Preboot Execution Environment (Raspberry Pi 4): Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
 
(29 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 119: Zeile 119:


[https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhcpdconf https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhcpdconf]
[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 ===
Zeile 166: Zeile 171:


==== Konfigurationsdateien ====
==== Konfigurationsdateien ====
{{note|20.12.2020}}


Die Konfigurationsdateien werden im Verzeichnis ''/pxelinux.cfg/'' unterhalb des TFTP-Wurzelverzeichnisses angelegt:
Die Konfigurationsdateien werden im Verzeichnis ''/pxelinux.cfg/'' unterhalb des TFTP-Wurzelverzeichnisses angelegt:
Zeile 172: Zeile 179:
sudo mkdir /srv/tftp/pxelinux.cfg/
sudo mkdir /srv/tftp/pxelinux.cfg/
</pre>
</pre>
Es muss eine Konfigurationsdatei mit dem Namen ''default'' geben, falls keine client-spezifische Konfigurationsdatei gefunden werden kann:


<pre>
<pre>
Zeile 177: Zeile 186:
</pre>
</pre>


Und spezifische Konfigurationen anhand der MAC-Adresse in '''Kleinbuchstaben''' mit vorangestellten ''01-'':
{{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''.
z.B. ergibt die MAC-Adresse ''DC:A6:32:BE:D1:7D'' die Konfigurationsdatei ''01-dc-a6-32-be-d1-7d''.
Zeile 187: Zeile 208:
Alternativ können die Konfigurationsdateien auch nach der IP-Adresse in Hexadezimal-Schreibweise mit '''Großbuchstaben''' benannt werden.
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''.
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].
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 ====
==== Betriebssystem ====
===== Server =====


<pre>
<pre>
??
sudo mkdir /srv/tftp/NFS_Freigabe
</pre>
</pre>


==== Links ====
===== Client =====


[https://wiki.syslinux.org/wiki/index.php?title=PXELINUX https://wiki.syslinux.org/wiki/index.php?title=PXELINUX]
<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/]
[https://wiki.ubuntuusers.de/PXE-Boot/ https://wiki.ubuntuusers.de/PXE-Boot/]
Zeile 206: Zeile 303:


[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]

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