32.8. Plattenloser Betrieb mit PXE

Aktualisiert von Jean-François Dockès.
Reorganisiert und erweitert von Alex Dupre.

Das Intel® Preboot eXecution Environment (PXE) erlaubt es dem Betriebssystem über das Netzwerk zu starten. Zum Beispiel kann ein FreeBSD-System, ohne lokale Festplatte, über das Netzwerk gestartet und betrieben werden. Die Dateisysteme werden dabei über einen NFS-Server eingehangen. PXE-Unterstützung steht in der Regel im BIOS zur Verfügung. Um PXE beim Systemstart zu verwenden, müssen Sie im BIOS des Rechners die Option Über das Netzwerk starten aktivieren. Alternativ können Sie während der PC-Initialisierung auch eine Funktionstaste drücken.

Um die notwendigen Dateien für ein Betriebssystem für den Start über das Netzwerk bereitzustellen, benötigt ein PXE-Setup einen richtig konfigurierten DHCP-, TFTP- und NFS-Server, wobei:

Sobald das Gastsystem startet, erhält es vom DHCP-Server Informationen, wo der initiale Bootloader per TFTP zu bekommen ist. Nachdem das Gastsystem diese Informationen erhalten hat, lädt es den Bootloader über TFTP herunter und führt diesen anschließend aus. In FreeBSD ist /boot/pxeboot der Bootloader. Nachdem /boot/pxeboot ausgeführt und der FreeBSD-Kernel geladen wurde, wird mit dem Rest der FreeBSD-Bootsequenz, wie in Kapitel 13, FreeBSDs Bootvorgang beschrieben, fortgefahren.

Dieser Abschnitt beschreibt, wie Sie diese Dienste auf einem FreeBSD-System so konfigurieren, sodass andere Systeme FreeBSD über PXE starten können. Weitere Informationen finden Sie in diskless(8).

Achtung:

Wie beschrieben, ist das System, welches diese Dienste bereitstellt, unsicher. Daher sollte es in einem geschützten Bereich des Netzwerks aufgestellt und von anderen Hosts als nicht vertrauenswürdig eingestuft werden.

32.8.1. Konfiguration der PXE-Umgebung

Beigetragen von Craig Rodrigues.

Die in diesem Abschnitt dargestellten Schritte konfigurieren die in FreeBSD enthaltenen NFS- und TFTP-Server. Der folgende Abschnitt beschreibt die Installation und Konfiguration des DHCP-Servers. In diesem Beispiel verwenden wir /b/tftpboot/FreeBSD/install, welches die Dateien für PXE-Benutzer enthält. Es ist wichtig, dass dieses Verzeichnis existiert und das der gleiche Verzeichnisname ebenfalls in /etc/inetd.conf und /usr/local/etc/dhcpd.conf gesetzt wird.

  1. Erstellen Sie das Root-Verzeichnis, welches eine FreeBSD-Installation enthält und über NFS eingehangen werden kann.

    # export NFSROOTDIR=/b/tftpboot/FreeBSD/install
    # mkdir -p ${NFSROOTDIR}
  2. Aktivieren Sie den NFS-Server, indem Sie folgende Zeile in /etc/rc.conf hinzufügen:

    nfs_server_enable="YES"

    Exportieren Sie das Root-Verzeichnis über NFS, indem Sie folgende Zeile in /etc/exports hinzufügen:

    /b -ro -alldirs
  3. Starten Sie den NFS-Server:

    # service nfsd start
  4. Aktivieren Sie inetd(8), indem Sie folgende Zeile in /etc/rc.conf hinzufügen:

    inetd_enable="YES"
  5. Kommentieren Sie die folgende Zeile in /etc/inetd.conf aus, indem Sie sicherstellen, dass die Zeile nicht mit einem #-Zeichen beginnt:

    tftp dgram udp wait root /usr/libexec/tftp tftp -l -s /b/tftpboot

    Anmerkung:

    Einige PXE-Versionen benötigen die TCP-Version von TFTP. In diesem Fall können Sie die zweite tftp-Zeile, welche stream tcp enthält, auskommentieren.

  6. Starten Sie inetd(8):

    # service inetd start
  7. Erstellen Sie einen neues Basissystem und einen FreeBSD-Kernel (detaillierte Anweisungen hierzu finden Sie unter Abschnitt 25.7, „Das komplette Basissystem neu bauen“):

    # cd /usr/src
    # make buildworld
    # make buildkernel
  8. Installieren sie FreeBSD in das Verzeichnis, welches über NFS eingehangen ist:

    # make installworld DESTDIR=${NFSROOTDIR}
    # make installkernel DESTDIR=${NFSROOTDIR}
    # make distribution DESTDIR=${NFSROOTDIR}
              
  9. Testen Sie den TFTP-Server und vergewissern Sie sich, dass Sie den Bootloader herunterladen können, der über PXE bereitgestellt wird:

    # tftp localhost
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds
              
  10. Bearbeiten Sie ${NFSROOTDIR}/etc/fstab und erstellen Sie einen Eintrag, um das Root-Dateisystem über NFS einzuhängen:

    # Device                                      Mountpoint    FSType    Options   Dump  Pass
    myhost.example.com:/b/tftpboot/FreeBSD/install    /         nfs       ro        0     0
              

    Ersetzen Sie myhost.example.com durch den Hostnamen oder die IP-Adresse Ihres NFS-Servers. In diesem Beispiel wird das Root-Dateisystem schreibgeschützt eingehangen, um ein potenzielles Löschen des Inhalts durch die NFS-Clients zu verhindern.

  11. Setzen Sie das root-Passwort in der PXE-Umgebung für Client-Maschinen, die über PXE starten:

    # chroot ${NFSROOTDIR} 
    # passwd
  12. Falls erforderlich, aktivieren Sie ssh(1) root-Logins für Client-Maschinen, die über PXE starten, indem Sie die Option PermitRootLogin in ${NFSROOTDIR}/etc/ssh/sshd_config aktivieren. Dies ist in sshd_config(5) dokumentiert.

  13. Führen Sie alle weiteren Anpassungen der PXE-Umgebung in ${NFSROOTDIR} durch, wie zum Beispiel die Installation weiterer Pakete, oder dass Bearbeiten der Passwortdatei mit vipw(8).

Booten Sie von einem NFS-Root-Volume, so erkennt /etc/rc dies und startet daraufhin das /etc/rc.initdiskless Skript. Lesen Sie die Kommentare in diesem Skript um zu verstehen, was dort vor sich geht. Weil das NFS-Root-Verzeichnis schreibgeschützt ist, wir aber Schreibzugriff für /etc und /var benötigen, müssen wir diese Verzeichnisse über Speicher-Dateisysteme (memory backed file system) einbinden.

# chroot ${NFSROOTDIR}
# mkdir -p conf/base
# tar -c -v -f conf/base/etc.cpio.gz --format cpio
--gzip etc
# tar -c -v -f conf/base/var.cpio.gz --format cpio
--gzip var

32.8.2. Konfiguration des DHCP-Servers

Der DHCP-Server muss nicht auf der selben Maschine laufen wie der TFTP- und NFS-Server, aber er muss über das Netzwerk erreichbar sein.

DHCP ist nicht Bestandteil des FreeBSD Basissystems, kann jedoch über den Port net/isc-dhcp42-server oder als Paket nachinstalliert werden.

Einmal installiert, bearbeiten Sie seine Konfigurationsdatei, /usr/local/etc/dhcpd.conf. Konfigurieren Sie die next-server, filename und root-path Einstellungen, wie in diesem Beispiel zu sehen ist:

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.3;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
option domain-name-servers 192.168.35.35, 192.168.35.36;
option domain-name "example.com";

# IP address of TFTP server
next-server 192.168.0.1;

# path of boot loader obtained via tftp
filename "FreeBSD/install/boot/pxeboot";

# pxeboot boot loader will try to NFS mount this directory for root FS
option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/";
}

Die Anweisung next-server wird benutzt, um die IP-Adresse des TFTP-Servers anzugeben.

Die Anweisung filename definiert den Pfad zu /boot/pxeboot. Da hier der relative Dateiname verwendet wird, bedeutet das, dass /b/tftpboot nicht im Pfad enthalten ist.

Die Option root-path bestimmt den Pfad zum NFS root-Dateisystem.

Sobald die Änderungen gespeichert werden, aktivieren Sie NFS beim Systemstart, indem Sie die folgende Zeile in /etc/rc.conf hinzufügen:

dhcpd_enable="YES"

Starten Sie anschließend den DHCP-Dienst:

# service isc-dhcpd
start

32.8.3. Fehlersuche bei PXE Problemen

Sobald alle Dienste konfiguriert und gestartet wurden, sollten PXE-Clients in der Lage sein, FreeBSD automatisch über das Netzwerk zu starten. Wenn ein bestimmter Client beim hochfahren keine Verbindung herstellen kann, sehen Sie im BIOS nach, ob die Option für den Start über das Netzwerk konfiguriert ist.

Dieser Abschnitt gibt einige Tipps zu Fehlerbehebung und zeigt, wie Sie Konfigurationsprobleme eingrezen können für den Fall, dass PXE-Clients nicht in der Lage sind über das Netzwerk zu starten.

  1. Benutzen Sie den net/wireshark Port um Fehler im Netzwerkverkehr während des Bootvorgangs von PXE zu finden. Der Bootvorgang wird im folgenden Diagramm schematisch dargestellt.

    Abbildung 32.1. PXE-Bootvorgang mit NFS Root Mount
    PXE-Bootvorgang mit NFS Root Mount

    1

    Client sendet eine DHCPDISCOVER Nachricht.

    2

    Der DHCP-Server antwortet mit einer IP-Adresse, sowie den Werten für next-server, filename und root-path.

    3

    Der Client sendet eine TFTP-Anfrage an next-server, mit der Bitte filename zu empfangen.

    4

    Der TFTP-Server antwortet und sendet filename zum Client.

    5

    Der Client führt filename, sprich pxeboot(8) aus, was wiederum den Kernel lädt. Wenn der Kernel ausgeführt wird, wird das Root-Dateisystem, welches in root-path spezifiziert ist, über NFS eingebunden.


  2. Schauen Sie in /var/log/xferlog auf Ihrem TFTP-Server und vergewissern Sie sich, dass die pxeboot-Datei von der richtigen Adresse heruntergeladen wurde. Um die obige Konfiguration von /usr/local/etc/dhcpd.conf zu testen, geben Sie folgendes ein:

    # tftp 192.168.0.1
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds

    Weitere Informationen finden Sie in tftpd(8) und tftp(1). Die BUGS-Sektionen dieser Seiten dokumentieren einige Einschränkungen von TFTP.

  3. Achten Sie darauf, dass Sie das Root-Dateisystem über NFS einhängen können. Auch hier können Sie Ihre Einstellungen aus /usr/local/etc/dhcpd.conf wie folgt testen:

    # mount -t nfs 192.168.0.1:/b
    /tftpboot/FreeBSD/install /mnt

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.