32.8. Start und Betrieb von FreeBSD über ein Netzwerk

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

FreeBSD kann über ein Netzwerk starten und arbeiten, ohne eine lokale Festplatte zu verwenden, indem es Dateisysteme eines NFS-Servers in den eigenen Verzeichnisbaum einhängt. Dazu sind, von den Standardkonfigurationsdateien abgesehen, keine Systemänderungen nötig. Ein solches System kann leicht installiert werden, da alle notwendigen Elemente bereits vorhanden sind:

Es gibt verschiedene Wege, einen plattenlosen Rechner einzurichten. Viele Elemente sind daran beteiligt, die fast immer an den persönlichen Geschmack angepasst werden können. Im folgenden Abschnitt wird die Installation eines kompletten Systems beschrieben, wobei der Schwerpunkt auf Einfachheit und Kompatibilität zu den Standardstartskripten von FreeBSD liegt. Das beschriebene System hat folgende Eigenschaften:

Achtung:

Das hier beschriebene System ist nicht sicher. Es sollte nur in einem gesicherten Bereich eines Netzwerks verwendet werden und für andere Rechner nicht erreichbar sein.

Alle Informationen in diesem Abschnitt wurden unter FreeBSD 5.2.1-RELEASE getestet.

32.8.1. Hintergrundinformationen

Die Einrichtung von plattenlosen Rechnern ist einfach, aber auch fehleranfällig. Der Grund dafür sind auftretende Fehler, die sich oft nur schwer zuordnen lassen. Unter anderem sind dafür folgende Umstände verantwortlich:

  • Kompilierte Optionen haben zur Laufzeit unterschiedliche Auswirkungen.

  • Fehlermeldungen sind oft kryptisch oder fehlen vollständig.

Daher ist es nützlich, über die im Hintergrund ablaufenden Mechanismen Bescheid zu wissen. Dadurch wird es einfacher, eventuell auftretende Fehler zu beheben.

Verschiedene Operationen müssen ausgeführt werden, um ein System erfolgreich zu starten:

  • Der Rechner benötigt einige Startparameter, wie seine IP-Adresse, die Namen ausführbarer Dateien, den Servernamen sowie den root-Pfad. Für die Übermittlung dieser Informationen wird entweder das DHCP- oder das BOOTP-Protokoll verwendet. Bei DHCP handelt es sich um eine abwärtskompatible Erweiterung von BOOTP, die die gleichen Portnummern und das gleiche Paketformat verwendet.

    Es ist möglich, das System so zu konfigurieren, dass es nur BOOTP verwendet. Das Serverprogramm bootpd(8) ist bereits im FreeBSD-Basissystem enthalten.

    DHCP hat im Vergleich zu BOOTP allerdings mehrere Vorteile (bessere Konfigurationsdateien, die Möglichkeit zur Verwendung von PXE, sowie viele andere, die nicht in direktem Zusammenhang mit dem plattenlosen Betrieb stehen). Dieser Abschnitt beschreibt die Konfiguration mittels DHCP. Wenn möglich, werden aber entsprechende Beispiele für bootpd(8) angeführt. Die Beispielkonfiguration nutzt das Softwarepaket ISC DHCP.

  • Der Rechner muss ein oder mehrere Programme in den lokalen Speicher laden. Dazu wird entweder TFTP oder NFS verwendet. Die Auswahl zwischen TFTP und NFS erfolgt über das Setzen von verschiedenen Kompilieroptionen. Ein häufig gemachter Fehler ist es, Dateinamen für das falsche Protokoll anzugeben: TFTP transferiert normalerweise alle Dateien aus einem einzigen Verzeichnis des Servers, und erwartet einen Pfad relativ zu diesem Verzeichnis. NFS verlangt hingegen absolute Dateipfade.

  • Die möglichen Bootstrap-Programme und der Kernel müssen initialisiert und ausgeführt werden. Dabei gibt es zwei Möglichkeiten:

    • PXE lädt pxeboot(8). Dabei handelt es sich um eine modifizierte Version des FreeBSD-Laders der Boot-Phase drei. Der loader(8) beschafft alle für den Systemstart notwendigen Parameter, und hinterlegt diese in der Kernelumgebung, bevor er die Kontrolle übergibt. Es ist hier möglich, den GENERIC-Kernel zu verwenden.

    • Etherboot lädt den Kernel hingegen direkt. Dafür müssen Sie allerdings einen Kernel mit spezifischen Optionen erzeugen.

    PXE und Etherboot sind zwar im Großen und Ganzen gleichwertig, da der Kernel aber viele Aufgaben an loader(8) übergibt, sollte bevorzugt PXE eingesetzt werden.

    Wenn Ihr BIOS und Ihre Netzwerkkarten PXE unterstützen, sollten Sie es auch verwenden.

  • Zuletzt muss der Rechner auf seine Dateisysteme zugreifen können. Dafür wird stets NFS verwendet.

Weitere Informationen finden Sie in diskless(8).

32.8.2. Installationsanweisungen

32.8.2.1. Konfiguration unter Verwendung von ISC DHCP

Der ISC DHCP-Server kann Anfragen sowohl von BOOTP als auch von DHCP beantworten.

isc-dhcp 3.1 ist nicht Teil des Basissystems. Sie müssen es daher zuerst installieren. Verwenden Sie dazu den Port net/isc-dhcp31-server oder das entsprechende Paket.

Nachdem ISC DHCP installiert ist, muss das Programm konfiguriert werden (normalerweise in /usr/local/etc/dhcpd.conf). Im folgenden Beispiel verwendet Rechner margaux Etherboot, während Rechner corbieres PXE verwendet:

          default-lease-time 600;
          max-lease-time 7200;
          authoritative;

          option domain-name "example.com";
          option domain-name-servers 192.168.4.1;
          option routers 192.168.4.1;

          subnet 192.168.4.0 netmask 255.255.255.0 {
            use-host-decl-names on; 1
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.4.255;

            host margaux {
              hardware ethernet 01:23:45:67:89:ab;
              fixed-address margaux.example.com;
              next-server 192.168.4.4;2
              filename "/tftpboot/kernel.diskless";3
              option root-path "192.168.4.4:/data/misc/diskless";4
            }
           host corbieres {
             hardware ethernet 00:02:b3:27:62:df;
              fixed-address corbieres.example.com;
              next-server 192.168.4.4;
              filename "pxeboot";
              option root-path "192.168.4.4:/data/misc/diskless";
            }
          }
        

1

Diese Option weist dhcpd an, den Wert der host-Deklaration als Rechnernamen des plattenlosen Rechners zu senden. Alternativ kann man der host-Deklaration Folgendes hinzufügen: option host-name margaux

2

Die Anweisung next-server bestimmt den TFTP- oder NFS-Server, von dem der Loader oder der Kernel geladen werden (in der Voreinstellung ist das der DHCP-Server selbst).

3

Die Anweisung filename bestimmt die Datei, die Etherboot als nächstes lädt. Das genaue Format hängt von der gewählten Transfermethode ab. Etherboot kann sowohl mit NFS als auch mit TFTP kompiliert werden. In der Voreinstellung wird der FreeBSD-Port mit NFS-Unterstützung kompiliert. PXE verwendet TFTP, daher wird im Beispiel ein relativer Dateipfad verwendet. Dies kann aber, je nach Konfiguration des TFTP-Servers, auch anders sein. Beachten Sie, dass PXE pxeboot lädt, und nicht den Kernel. Es ist auch möglich, das Verzeichnis /boot einer FreeBSD-CD-ROM von pxeboot laden zu lassen. pxeboot(8) kann einen GENERIC-Kernel laden, dadurch ist es möglich, PXE von einer entfernten CD-ROM zu starten.

4

Die Option root-path bestimmt den Pfad des root-Dateisystems in normaler NFS-Schreibweise. Wird PXE verwendet, ist es möglich, die IP-Adresse des Rechners wegzulassen, solange nicht die Kerneloption BOOTP aktiviert wird. Der NFS-Server entspricht in diesem Fall dem TFTP-Server.

32.8.2.2. Konfiguration bei Verwendung von BOOTP

Es folgt nun eine der Konfiguration von DHCP entsprechende Konfiguration (für einen Client) für bootpd. Zu finden ist die Konfigurationsdatei unter /etc/bootptab.

Beachten Sie bitte, dass Etherboot mit der Option NO_DHCP_SUPPORT kompiliert werden muss, damit BOOTP verwendet werden kann. PXE hingegen benötigt DHCP. Der einzige offensichtliche Vorteil von bootpd ist, dass es bereits im Basissystem vorhanden ist.

.def100:\
  :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
  :sm=255.255.255.0:\
  :ds=192.168.4.1:\
  :gw=192.168.4.1:\
  :hd="/tftpboot":\
  :bf="/kernel.diskless":\
  :rp="192.168.4.4:/data/misc/diskless":

margaux:ha=0123456789ab:tc=.def100

32.8.2.3. Ein Startprogramm unter Verwendung von Etherboot erstellen

Die Internetseite von Etherboot enthält ausführliche Informationen, die zwar vor allem für Linux gedacht sind, aber dennoch nützliche Informationen enthalten. Im Folgenden wird daher nur grob beschrieben, wie Sie Etherboot auf einem FreeBSD-System einsetzen können.

Als Erstes müssen Sie net/etherboot als Paket oder als Port installieren.

Sie können Etherboot so konfigurieren, dass TFTP anstelle von NFS verwendet wird, indem Sie die Datei Config im Quellverzeichnis von Etherboot bearbeiten.

Für unsere Installation verwenden wir eine Startdiskette. Für Informationen zu anderen Methoden (PROM oder MS-DOS®-Programme) lesen Sie bitte die Dokumentation zu Etherboot.

Um eine Startdiskette zu erzeugen, legen Sie eine Diskette in das Laufwerk des Rechners ein, auf dem Sie Etherboot installiert haben. Danach wechseln Sie in das Verzeichnis src des Etherboot-Verzeichnisbaums und geben Folgendes ein:

# gmake bin32/devicetype.fd0

devicetype hängt vom Typ der Ethernetkarte ab, über die der plattenlose Rechner verfügt. Lesen Sie dazu NIC im gleichen Verzeichnis, um den richtigen Wert für devicetype zu bestimmen.

32.8.2.4. Das System mit PXE starten

In der Voreinstellung lädt der pxeboot(8)-Loader den Kernel über NFS. Soll stattdessen TFTP verwendet werden, muss beim Kompilieren die Option LOADER_TFTP_SUPPORT in der Datei /etc/make.conf eingetragen sein. Sehen Sie sich die Datei /usr/share/examples/etc/make.conf für weitere Anweisungen an.

Es gibt zwei Optionen für make.conf, die nützlich sein können, wenn Sie eine plattenlose serielle Konsole einrichten wollen: BOOT_PXELDR_PROBE_KEYBOARD, und BOOT_PXELDR_ALWAYS_SERIAL.

Um PXE beim Systemstart zu verwenden, müssen Sie im BIOS des Rechner die Option Über das Netzwerk starten aktivieren. Alternativ können Sie während der PC-Initialisierung auch eine Funktionstaste drücken.

32.8.2.5. Serverkonfiguration - TFTP und NFS

Wenn Sie PXE oder Etherboot so konfiguriert haben, dass diese TFTP verwenden, müssen Sie auf dem Dateiserver tftpd aktivieren:

  1. Erzeugen Sie ein Verzeichnis, in dem tftpd seine Dateien ablegt, beispielsweise /tftpboot.

  2. Fügen Sie folgende Zeile in /etc/inetd.conf ein:

    tftp    dgram   udp     wait    root  /usr/libexec/tftpd    tftpd -s /tftpboot

    Anmerkung:

    Anscheinend benötigen zumindest einige PXE-Versionen die TCP-Version von TFTP. Sollte dies bei Ihnen der Fall sein, fügen Sie eine zweite Zeile ein, in der Sie dgram udp durch stream tcp ersetzen.

  3. Weisen Sie inetd an, seine Konfiguration erneut einzulesen (Damit der folgende Befehl funktioniert, muss die Option inetd_enable="YES" in der Datei /etc/rc.conf vorhanden sein.):

    # /etc/rc.d/inetd restart

Sie können das Verzeichnis /tftpboot an einem beliebigen Ort auf dem Server ablegen. Stellen Sie aber sicher, dass Sie diesen Ort sowohl in inetd.conf als auch in dhcpd.conf eingetragen haben.

Außerdem müssen Sie NFS aktivieren und die entsprechenden Verzeichnisse exportieren.

  1. Fügen Sie folgende Zeile in /etc/rc.conf ein:

    nfs_server_enable="YES"
  2. Exportieren Sie das Verzeichnis, in dem sich das Wurzelverzeichnis für den plattenlosen Betrieb befindet, indem Sie folgende Zeile in /etc/exports einfügen (passen Sie dabei den mountpoint an und ersetzen Sie margaux corbieres durch den Namen Ihres plattenlosen Rechners):

    /data/misc -alldirs -ro margaux
  3. Weisen sie nun mountd an, seine Konfigurationsdatei erneut einzulesen. Wenn Sie NFS erst in der Datei /etc/rc.conf aktivieren mussten, sollten Sie stattdessen den Rechner neu starten. Dadurch wird die Konfigurationsdatei ebenfalls neu eingelesen.

    # /etc/rc.d/mountd restart

32.8.2.6. Einen plattenlosen Kernel erzeugen

Wenn Sie Etherboot verwenden, müssen Sie in die Kernelkonfigurationsdatei Ihres plattenlosen Clients zusätzlich folgende Optionen einfügen:

options     BOOTP          # Use BOOTP to obtain IP address/hostname
options     BOOTP_NFSROOT  # NFS mount root file system using BOOTP info

Außerdem können Sie die Optionen BOOTP_NFSV3, BOOT_COMPAT sowie BOOTP_WIRED_TO verwenden (sehen Sie sich dazu auch die Datei NOTES an).

Die Namen dieser Optionen sind historisch bedingt. Sie ermöglichen eine unterschiedliche Verwendung von DHCP und BOOTP innerhalb des Kernels. Es ist auch möglich, eine strikte Verwendung von BOOTP oder DHCP zu erzwingen.

Erzeugen Sie den neuen Kernel (lesen Sie dazu auch Kapitel 9, Konfiguration des FreeBSD-Kernels) und kopieren Sie ihn an den in dhcpd.conf festgelegten Ort.

Anmerkung:

Wenn Sie PXE verwenden, ist die Erzeugung eines Kernels zwar nicht unbedingt nötig, sie wird allerdings dennoch empfohlen. Die Aktivierung dieser Optionen bewirkt, dass die Anzahl der möglichen DHCP-Anforderungen während des Kernelstarts erhöht wird. Ein kleiner Nachteil sind eventuell auftretende Inkonsistenzen zwischen den neuen Werten und den von pxeboot(8) erhaltenen Werten. Der große Vorteil dieser Variante ist es, dass dabei der Rechnername gesetzt wird, den Sie ansonsten durch eine andere Methode, beispielsweise in einer clientspezifischen rc.conf-Datei festlegen müssten.

Anmerkung:

Damit der Kernel von Etherboot geladen werden kann, müssen device hints im Kernel einkompiliert sein. Dazu setzen Sie normalerweise folgende Option in die Kernelkonfigurationsdatei (sehen Sie sich dazu auch die kommentierte Datei NOTES an):

hints         "GENERIC.hints"

32.8.2.7. Das root-Dateisystem erzeugen

Sie müssen für den plattenlosen Rechner ein root-Dateisystem erzeugen, und zwar an dem in dhcpd.conf als root-path festgelegten Ort.

32.8.2.7.1. make world zum Füllen des Dateisystems einsetzen

Diese schnelle Methode installiert ein komplettes jungfräuliches System (und nicht nur ein root-Dateisystem) nach DESTDIR. Dazu müssen Sie lediglich das folgende Skript ausführen:

#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make buildworld && make buildkernel
make installworld && make installkernel
cd /usr/src/etc; make distribution

Danach müssen Sie noch die dadurch in DESTDIR erzeugten Dateien /etc/rc.conf sowie /etc/fstab Ihren Wünschen anpassen.

32.8.2.8. Den Auslagerungsbereich konfigurieren

Falls nötig, kann eine auf dem NFS-Server liegende Datei als Auslagerungsdatei eingerichtet werden.

32.8.2.8.1. Eine NFS-Auslagerungsdatei einrichten

Der Kernel unterstützt beim Systemstart keine NFS-Auslagerungsdatei. Diese muss daher in den Startskripten aktiviert werden, indem ein beschreibbares Dateisystem eingehängt wird, um dort die Auslagerungsdatei zu erzeugen und zu aktivieren. Um eine Auslagerungsdatei zu erzeugen, gehen Sie wie folgt vor:

# dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000

Um die Auslagerungsdatei zu aktivieren, fügen Sie folgende Zeile in rc.conf ein:

swapfile=/path/to/swapfile

32.8.2.9. Verschiedenes

32.8.2.9.1. Schreibgeschütztes Dateisystem /usr

Wenn am plattenlosen Rechner X läuft, müssen Sie die Konfigurationsdatei von XDM anpassen, da Fehlermeldungen in der Voreinstellung auf /usr geschrieben werden.

32.8.2.9.2. Der Server läuft nicht unter FreeBSD

Wenn das root-Dateisystem nicht auf einem FreeBSD-Rechner liegt, muss das Dateisystem zuerst unter FreeBSD erzeugt werden. Anschließend wird es beispielsweise mit tar oder cpio an den gewünschten Ort kopiert.

Dabei kann es Probleme mit den Gerätedateien in /dev geben, die durch eine unterschiedliche Darstellung der Major- und Minor-Number von Geräten auf beiden Systemen hervorgerufen werden. Eine Problemlösung besteht darin, das root-Verzeichnis auf einem FreeBSD-Rechner einzuhängen und die Gerätedateien dort mit devfs(5) zu erzeugen.

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>.