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.
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).
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"; } }
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
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.
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.
Wenn Sie PXE oder Etherboot so konfiguriert haben, dass diese TFTP verwenden, müssen Sie auf dem Dateiserver tftpd aktivieren:
Erzeugen Sie ein Verzeichnis, in dem tftpd seine Dateien ablegt, beispielsweise /tftpboot.
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.
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.
Fügen Sie folgende Zeile in /etc/rc.conf ein:
nfs_server_enable="YES"
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
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
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"
Sie müssen für den plattenlosen Rechner ein root-Dateisystem erzeugen, und zwar an dem in dhcpd.conf als root-path festgelegten Ort.
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.
Falls nötig, kann eine auf dem NFS-Server liegende Datei als Auslagerungsdatei eingerichtet werden.
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
Wenn am plattenlosen Rechner X läuft, müssen Sie die Konfigurationsdatei von XDM anpassen, da Fehlermeldungen in der Voreinstellung auf /usr geschrieben werden.
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
<[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.