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.
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:
Diese Option
weist dhcpd an, den Wert der
| |
Die Anweisung
| |
Die Anweisung
| |
Die Option
|
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.
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:
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:
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:
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.
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.
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):
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:
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:
/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.
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>.