openSUSE Leap 42.1 PXE Server / Raspberry Pi PXE boot: Teil 1

openSUSE Leap 42.1 PXE Server

Hallo zusammen,

In diesem Artikel möchte ich euch gerne zeigen, wie einfach ihr einen openSUSE Leap 42.1 PXE Server an den Start bekommt.

Das nächste Release von Raspbian wird nun endlich PXE boot direkt unterstützten (nur für den Raspberry Pi 3). Damit entfällt dann sogar die SD-Karte für die /boot Partition. Diese war bei NFS basierten root-Partitionen bisher noch immer benötigt worden. Wer auf das next-Release wechselt, kann diese Funktion auch schon testen.

Die allgemeinen Anleitungen im Internet behandeln das Thema mit den Standard Diensten wie dnsmasq und tftp. So auch die Entwickler des Raspberry Projektes. Ihr bekommt diese Pakete zwar auch für Leap – im Standard kommt dort aber der ISC DHCP und atftpd zum Einsatz. Ein Erbe der Enterprise Distribution SLES. Für uns kein Stress. 🙂

Vorbereiten der SD-Karte für den Raspberry Pi

Übertragt wie gewöhnlich das aktuelle Rasbian Image auf eine SD-Karte. Dies kann die lite oder auch die normale Version des Jessie Images sein. Bootet nun euren Pi und führt eine Grundkonfiguration mit raspi-config durch.

Danach wechselt ihr auf das next-Release:

sudo apt-get update; sudo apt-get install rpi-update
sudo BRANCH=next rpi-update

Anschliessend fügt ihr am Ende der Datei /boot/config.txt mit dem nachfolgenden Befehl noch folgende Zeile hinzu und startet den Pi neu:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Nach erfolgtem Neustart könnt ihr die Zeile mit nano oder vi wieder aus der Datei entfernen. Führt nun zur Sicherheit folgenden Befehl aus:

vcgencmd otp_dump | grep 17:

Die Ausgabe sollte „17:3020000a“ entsprechen. Somit hat alles geklappt. Euer Pi ist nun auf dem next-Release und grundsätzlich Netzwerk Boot-fähig.

openSUSE Leap 42.1 PXE Server Pakete

Ihr benötigt – so noch nicht installiert – folgende Pakete:

sudo zypper in dhcp-server atftp nfs-kernel-server

Konfigurieren des ISC DHCP

Editiert jetzt die Konfigurationsdatei des DHCP-Servers. Ich habe hier schon einmal eine kleine Besonderheit für den PXE-boot des Raspberry Pi eingebaut (option 43). Diese ist aber für einen normalen PXEClient nicht notwendig.

# /etc/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none; ddns-updates off;

allow booting;
allow bootp;

option OPT43 code 43 = text;

class "rpi" {
   match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
   option OPT43 "Raspberry Pi Boot   ";
}

subnet 192.168.178.0 netmask 255.255.255.0 {
   option broadcast-address 192.168.178.255;
   pool {
      allow members of "rpi";
      range dynamic-bootp 192.168.178.240 192.168.178.254;

      default-lease-time 180;
      max-lease-time 360;
   }
}

Vielleicht kurz zur Erklärung der ISC DHCP Konfiguration. Diese Konfiguration geht davon aus, dass in eurem Netzwerk bereits ein DHCP-Server vorhanden ist (z.B. in eurem Heimrouter). Er verteilt also nur Leases an Clients, deren erste 10 Bytes des „vendor-class-identifier“ im BOOTPREQUEST gleich „PXEClient“ sind. Diese Leases werden deutlich verkürzt ausgegeben, da diese nach dem PXE-Boot nicht mehr benötigt werden. Denn dann greift der existierende DHCP-Dienst eures Routers wieder.

Das Setzen der Option 43 wird vom Bootloader des Raspberry Pi benötigt. Die Option 43 soll unserem Raspi also sagen: „Ja, ist wirklich für dich!“. Durch einen Fehler im Bootloader muss aktuell allerdings 3x Spaces an den String angehangen werden damit es funktioniert.

Aktiviert und startet im Anschluß den Dienst.

sudo systemctl enable dhcpd.service
sudo systemctl start dhcpd.service

Falls ihr in Schwierigkeiten kommt und nicht wisst, was euer DHCP-Server so treibt – kein Problem. Werft einfach einen tcpdump an. Die Ausgabe wird via Pipe an das Tool dhcpdump aus den DHCP-Tools weitergeleitet. Schon sieht die Ausgabe direkt lesbar aus:

sudo tcpdump -lenx port bootps or port bootpc | dhcpdump

Anfrage und Antwort sollten dann in etwa so aussehen, wenn alles gut gegangen ist:

  TIME: 23:52:43.198827
    IP: > (b8:27:eb:a2:c9:3a) > BOOTP/DHCP (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 26f30339
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: b8:27:eb:a2:c9:3a:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  55 ( 12) Parameter Request List     43 (Vendor specific info)
                                             60 (Vendor class identifier)
                                             67 (Bootfile name)
                                            128 (???)
                                            129 (???)
                                            130 (???)
                                            131 (???)
                                            132 (???)
                                            133 (???)
                                            134 (???)
                                            135 (???)
                                             66 (TFTP server name)

OPTION:  93 (  2) Client System             0000             ..
OPTION:  94 (  3) Client NDI                010201           ...
OPTION:  97 ( 17) UUID/GUID                 0044444444444444 .DDDDDDD
                                            4444444444444444 DDDDDDDD
                                            44               D
OPTION:  60 ( 32) Vendor class identifier   PXEClient:Arch:00000:UNDI:002001
---------------------------------------------------------------------------
  TIME: 23:52:44.200138
    IP: > (00:22:19:21:04:9d) > BOOTP/DHCP (b8:27:eb:a2:c9:3a)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 26f30339
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 192.168.178.32
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: b8:27:eb:a2:c9:3a:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
OPTION:  54 (  4) Server identifier         192.168.178.27
OPTION:  51 (  4) IP address leasetime      300 (5m)
OPTION:  43 ( 20) Vendor specific info      5261737062657272 Raspberr
                                            7920506920426f6f y Pi Boo
                                            74202020         t
OPTION:   1 (  4) Subnet mask               255.255.255.0
---------------------------------------------------------------------------

Konfigurieren des Advanced TFTP

Die Konfiguration liegt unter /etc/sysconfig/atftpd. Diese muss aber zur Funktion grundsätzlich nicht angepasst werden. Kopiert einfach den gesamten Inhalt der boot-Partition der SD-Karte unter /srv/tftpboot:

sudo mount /dev/sdf1 /mnt
sudo cp -r /mnt/* /srv/tftpboot
sudo umount /mnt

Jetzt noch den Dienst aktivieren und starten. Beachtet bitte, dass der Dienst wie klar zu erkennen, via systemd gestartet wird und die Aktivierung des Dienstes via Socket geschieht. Das Starten des Dienstes aftpd.service bringt also gar nichts und schlägt im besten Fall einfach fehl.

sudo systemctl enable atftpd.socket
sudo systemctl start atftpd.socket

Konfigurieren des NFS-Kernel-Server

Erstellt einen neuen NFS Export. Zum Beispiel:

echo "/srv/nfs/rpi3 *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

Kopiert dann den gesamten Inhalt der root-Partition der SD-Karte an den Ort, welchen ihr in eurem neuen Export angegeben habt. In meinem Beispiel nach /srv/nfs/rpi3:

sudo mkdir -p /srv/nfs/rpi3
sudo mount /dev/sdf2 /mnt
sudo cp -axv /mnt/. /srv/nfs/rpi3
sudo umount /mnt

Aktiviert und startet zu guter Letzt den NFS-Server:

sudo systemctl enable nfs-server
sudo systemctl start nfs-server

Raspberry Pi PXE boot: Teil 2

Herzlichen Glühstrumpf, jetzt habt ihr mit openSUSE Leap 42.1 einen PXE Server an den Start bekommen!

In meinem nächsten Blogpost zeige ich euch, was ihr noch an der Konfiguration im tftpboot und im NFS Export ändern müsst, damit ihr euren Raspberry Pi darüber auch booten könnt.

Viele Späße,
swarkn

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn
pinterest
swarkn

Autor: swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.

Ein Gedanke zu „openSUSE Leap 42.1 PXE Server / Raspberry Pi PXE boot: Teil 1“

Schreib uns einen Kommentar :)