Raspberry Pi über das Netzwerk booten

In diesem Artikel zeige ich euch wie ihr den Raspberry Pi über das Netzwerk booten könnt. Neben der USB Bootoption ist das die große Neuerung. Endlich ist man nicht mehr auf die SD Karten angewiesen, die gerade bei stärkerer Beanspruchung oft als das schwächste Bauteil durch Ausfälle aufgezeigt haben. Ein über das Netzwerk bootfähiger Raspberry Pi ist eine Option für Rechenzentren, möglicherweise gibt es bald mehr Raspberry Pi Root Hoster.

Raspberry Pi über das Netzwerk booten

Raspberry Pi über das Netzwerk booten

Mit der Netzwerk Boot Option (network booting) ist es nun erstmals möglich den Raspberry Pi komplett ohne SD Karte und anderen angeschlossenen Speichergeräten direkt über ein Betriebssystem Image aus dem Netzwerk zu starten. Das hat mehrere Vorteile, die vor allem Rechenzentren zugute kommen:

  • keine Probleme mehr mit kaputten SD Karten
  • NFS Images können für mehrere Raspberry Pis verwendet werden, nur die zentrale Quelle muss aktualisiert werden
  • man kann Raspberry Pis komplett ohne angeschlossene Geräte betreiben (headless)

Das Setup für das folgende Tutorial sieht wie folgt aus:

  • einen DHCP Server der für das Netzwerk das Image bereitstellt
  • einen oder mehrere Clients

In meinem Fall sind das zwei Raspberry Pi 3 Geräte. Der erste übernimmt die Rolle des Servers und benötigt ganz normal eine SD Karte mit dem Raspbian Image, der zweite Raspberry Pi 3 wird ausschließlich über das Netzwerk gebootet und benötigt keinen Speicher. Das Tutorial basiert auf dem Artikel auf raspberrypi.org.

Client Konfiguration

Wie bereits im letzten Artikel erwähnt muss man am Raspberry Pi 3 im ersten Schritt die neuen Bootoptionen aktivieren. Das funktioniert mit einer speziellen start.elf und bootcode.bin Datei. In originalen Anleitung wird vorgeschlagen dazu Raspbian Lite auf eine SD Karte zu kopieren. Falls man das macht sollte man im ersten Schritt rpi-update und rsync nachinstallieren:

Im nächsten Schritt aktivieren wir die neuen Boot Optionen:

Das fügt den Konfigurationsparameter program_usb_boot_mode=1 ans Ende der config.txt im boot Ordner. Man muss den Raspberry Pi nun neu starten. Nach dem Neustart sollte

die Ausgabe 3020000a liefern. Damit stellen wir sicher, dass die neuen Bootmodi  verfügbar sind. Nun können wir die letzte Zeile in der config.txt wieder entfernen:

Wir können die Pi nun ausschalten, die Konfiguration ist vollständig.

Server Konfiguration

Nachdem wir beim Client die Option aus der config.txt wieder entfernt haben können wir die SD Karte vom Client entfernen und nun für den Server verwenden. Es wird vorgeschlagen nun das Filesystem auf die gesamte SD Karte auszudehnen. Das geht über das Raspberry Pi Konfigurationstool:

Das ist zwar nicht zwingend notwendig, macht aber Sinn, wenn man den Server sinnvoll einsetzen möchte.

Netzwerk Dateisystem bereitstellen

Der Client bezieht beim Netzwerk Boot sein Dateisystem über das Netzwerk. Wir müssen deshalb auf dem Server dieses in irgend einer Art und Weise bereitstellen. Ob das nun auf der SD Karte oder einem angeschlossenen Massenspeicher liegt ist ganz egal. Im einfachsten Fall erstellt man nun auf der SD Karte ein 1:1 Abbild des Filesystems:

Wir erstellen einen neuen Ordner für das Filesystem unseres ersten Client Rechners und kopieren anschließend das komplette Dateisystem dort hinein. Der nfs Ordner selbst wird davon ausgenommen. Wie auch im letzten Tutorial müssen wir im Anschluss die SSH Schlüssel regenerieren:

Netzwerkinformationen bereitstellen

Im folgenden gehe ich davon aus, dass der Raspberry Pi 3 Server bereits im Netzwerk läuft. Ob LAN oder WLAN ist da egal. Mit dem folgenden Kommando finden wir heraus, welche IP das Gateway für dieses Netzwerk bereitstellt:

Das erzeugt eine Ausgabe wie diese:

In diesem Fall hat der Server die IP Adresse 192.168.1.101, ist mit LAN verbunden (eth0) und die Broudcast Adresse für das Netz ist 192.168.1.255. Für jeden der ein wenig Ahnung von Netzwerktechnik kein Problem zu verstehen. Zusätzlich zu diesen beiden Informationen benötigen wir noch die IP Adresse vom DNS Server. Diese bekommen wir mit folgendem Kommando:

Statische IP setzen

Ich habe bereits an anderer Stelle gezeigt wie man auf dem Raspberry Pi eine statische IP setzen kann. Das müssen wir nun auch bewerkstelligen. Die Konfiguration dafür findet man unter:

Die Zeile

muss nun mit folgender Konfiguration ersetzt werden:

Die neue Netzwerk Adresse des Servers wird 192.168.1.2, als Gateway wurde in diesem Fall 192.168.1.1 definiert, das ist mein WLAN Router. Nun schalten wir den DHCP Daemon aus und wechseln auf das normale Debian Networking:

einmal mit sudo reboot neu starten und die Änderungen treten in kraft.

DHCP vorbereiten

Im nächsten Schritt fügen wir das Gateway den DNS Einträgen hinzu. Mit dem nächsten Kommando machen wir die Datei unveränderbar, damit dnsmasq diese nicht mehr verändern kann:

Laut der Dokumentation müssen wir an dieser Stelle noch einmal zusätzlich Software installieren:

dnsmasq soll nun mit der DNS Namensauflösung aufhören aufhören:

Nach dem Neustart starten wir tcpdump um nach DHCP Paketen vom Client Raspberry Pi zu suchen

Raspberry Pi Client kommt ins Spiel

An dieser Stelle stecken wir nun den Client Raspberry Pi den wir im ersten Teil des Tutorials konfiguriert hatten ans Netzwerk und starten ihn. Nach circa 10 Sekunden sollten wir das erste Paket vom Client Rechner über das Netzwerk am Server empfangen. Da werden auf der Kommandozeile Zeilen wie diese auftauchen:

Bis jetzt ist die Kommunikation sehr einseitig, denn der Server antwortet auf die Client anfragen nicht. Das ändern wir nun indem wir dnsmasq konfigurieren um auf DHCP Anfragen zu antworten:

Den gesamten Inhalt der Datei mit folgenden Text ersetzen:

Wie man sieht wird die IP Adresse des Broadcast des eigenen Netzwerk eingesetzt. Dieses müsst ihr gegebenenfalls an eure Netzwerkkonfiguration anpassen. In der Konfiguration wir ebenfalls auf einen Ordner /tftpboot verwiesen. Diesen erstellen wir nun wie folgt:

Ob alles läuft erfahren wir indem wir den dnsmasq log näher ansehen. Wir geben auf der Konsole jeweils die neu eintreffenden Zeilen aus:

Man achte auf folgende Log Einträge:

Es wird im neu angelegten Ordner nach der bootcode.bin Datei gesucht. Diese existiert nicht, wir legen sie deshalb zusammen mit der start.elf Datei an. Zusätzlich benötigen wir auch noch einen Kernel, am besten kopiert man das komplette boot Verzeichnis:

Der Client Raspberry Pi wird nun soweit booten können bis das Dateisystem ins Spiel kommt. Das fehlt noch und wird im letzten Schritt noch hinzugefügt.

NFS Dateisystem

Ganz zu Beginn haben wir unser Dateisystem geklont und im /nfs/client1 Ordner abgelegt. Das soll nun als root Dateisystem für den Client Rechner verwendet werden. Das geht mit folgenden Schritten:

So jetzt haben wir es gleich geschafft. Wir müssen nur noch die /tftpboot/cmdline.txt Datei konfigurieren. Die Zeile root= wird wie folgt geändert:

Wir setzen hier die IP Adresse vom Client Rechner. Ein letzter Schritt hindert uns noch, damit das System auf dem Client Rechner korrekt startet. Wir müssen die beiden Einträge der SD Karte aus der fstab löschen. Dazu öffnen wir die fstab Datei des kopierten Dateisystems:

und löschen beide Einträge /dev/mmcblkp1 und /dev/mmcblkp2.
Wow, fertig. Der Client Raspberry Pi startet jetzt ohne angeschlossenen Speicher über das Netzwerk und schreibt sein Dateisystem auf den am Server angelegten Ordner. Wir können nun die Konfiguration für einen zweiten, dritten, …usw. Client beginnen.

Raspberry Pi 1, 2 und Pi Zero

Für die älteren Modelle gibt es den Bootmodus auch, jedoch kann dieser nicht ohne SD Karte gespeichert werden. Wie schon im Artikel zum USB booten reicht es wenn eine modifizierte bootcode.bin Datei auf der SD Karte kopiert wird. Die erste Bootphase läuft dann von der SD Karte, der Rest kommt dann über das Netzwerk.

Fazit

Ich habe euch in einem sehr langen Artikel gezeigt wie man den Raspberry Pi über das Netzwerk booten kann. Diese Bootoption ist neu und derzeit noch in einem Beta Status. Trotzdem kann man es schon sehr gut einsetzen um mehrere Raspberry Pi Clients über das Netzwerk von einem zentralen Netzwerkspeicher (NAS) aus gestartet werden. Endlich braucht man sich keine Gedanken mehr zu defekten SD Karten machen und kann für die komplette Raspberry Pi Client Farm auf einmal ein Backup erstellen.

Was denkt ihr darüber? Wie viele Raspberry Pis laufen bei euch über das Netzwerk?

(Visited 2.084 times, 1 visits today)

Das könnte auch interessant sein...

2 Antworten

  1. Dani sagt:

    Wichtig hinzufügen ist, dass das Booten über Netzwerk *OHNE* SD-Karte nur mit dem RPi3 verfügbar ist, da dieser den Bootcode speichern kann.
    Man kann allerdings auch ältere Pis übers Netzwerk booten, muss allerdings dann nur den Bootcode darauf speichern.

    LG

  2. Walter sagt:

    Ist der Start und das Systemverhalten via LAN Boot schneller?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.