Das FreeBSD-Handbuch
Zurück | Kapitel 32. Weiterführende Netzwerkthemen | Weiter

# 32.7. 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 mindestens zwei Möglichkeiten, den Kernel über das Netzwerk zu laden:

  - PXE: Das Preboot eXecution Environment System von Intel® ist eine Art intelligentes Boot-ROM, das in einigen Netzwerkkarten oder Hauptplatinen verwendet wird. Weitere Informationen finden Sie in pxeboot(8).

  - Der Port Etherboot (`net/etherboot`) erzeugt ROM-fähigen Code, um einen Kernel über das Netzwerk zu laden. Dieser Code kann entweder auf ein Boot-PROM einer Netzwerkkarte gebrannt werden, was von vielen Netzwerkkarten unterstützt wird. Oder er kann von einer lokalen Diskette, Festplatte oder von einem laufenden MS-DOS®-System geladen werden.

- Das Beispielskript `/usr/share/examples/diskless/clone_root` erleichtert die Erzeugung und die Wartung des root-Dateisystems auf dem Server. Das Skript muss wahrscheinlich angepasst werden, dennoch werden Sie schnell zu einem Ergebnis kommen.

- Die Startdateien, die einen plattenlosen Systemstart erkennen und unterstützen, sind nach der Installation in `/etc` vorhanden.

- Dateiauslagerungen können sowohl via NFS als auch auf die lokale Platte erfolgen.

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:

- Die plattenlosen Rechner haben ein gemeinsames `/`- sowie ein gemeinsames `/usr`-Dateisystem, die jeweils schreibgeschützt sind.

  Das root-Dateisystem ist eine Kopie eines Standardwurzelverzeichnisses von FreeBSD (üblicherweise das des Servers), bei dem einige Konfigurationsdateien durch für den plattenlosen Betrieb geeignete Versionen ersetzt wurden.

  Für die Bereiche des root-Dateisystems, die beschreibbar sein müssen, werden mit md(4) virtuelle Dateisysteme erzeugt. Dies bedeutet aber auch, dass alle Veränderungen verloren gehen, wenn das System neu gestartet wird.

- Der Kernel wird, in Abhängigkeit von der jeweiligen Situation, entweder von Etherboot oder von PXE transferiert und geladen.

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

### 32.7.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;
                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;
                  filename "/tftpboot/kernel.diskless";
                  option root-path "192.168.4.4:/data/misc/diskless";
                }
               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";
                }
              }

  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``
  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).
  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.
  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.7.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.7.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.7.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.7.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.7.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) 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.7.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.7.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.7.2.8. Den Auslagerungsbereich konfigurieren

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

#### 32.7.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.7.2.9. Verschiedenes

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

Zurück | Zum Anfang | Weiter
Link-Aggregation und Failover | Nach oben | ISDN - diensteintegrierendes digitales Netzwerk

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