- Was ist das? Wozu braucht man das?
- Wie geht das?
- DHCP
- TFTP, pxelinux
- Kernel
- NFS Root
- NFS Swap
- Support
- Links
Was ist das? Wozu braucht man das?
„Thin Clients” verfolgen das Ziel, die Verwaltung von Arbeitsplatzrechnern zu zentralisieren. Speicherkapazität wird zentral vorgehalten und in Backupkonzepte einbezogen. Konfigurationen werden zentral verwaltet.
Da es beim diskless Rechner nicht um die Kostenersparnis für die lokale Platte, sondern um die zentrale Verwaltung und Sicherung geht, werden aus Performancegründen gerne „near diskless” Systeme mit eine lokalen Platte für Swap- und Temporärdateien eingesetzt.
Bei diesem Artikel geht es nicht um den Einsatz von FibreChannel oder iSCSI HBAs mit Boot-Prom (int 13 für „Wintel” und „EFI” für Itanium) sondern um booten über NAS. Es geht auch primär im Unix, weil booten vom NAS bei Windows nur bedingt oder gar nicht möglich ist. Als Beispiel wird SuSE Linux benutzt.
Ein verwandtes Thema ist, das Netzwerk nur zu nutzen, um das Betriebssystem auf Rechner zu installieren, die mit einer leeren Festplatte ausgeliefert werden. („Remote Installation Services” oder kurz „RIS”) In diesem Fall wird das Installationsprogramm über das Netz gebootet, das eigentliche Betriebssystem bootet aber von der lokalen Festplatte.
Wie geht das?
- Das diskless System, das vom Netz gebootet werden soll (im folgenden „Netboot-System”) genannt, holt sich seine IP-Konfiguration vom DHCP-Server. Dieser übergibt zusätzlich zu dieser Konfiguration einen Verweis auf den TFTP-Server
- Der TFTP-Server liefert ein Mini-Linux („pxelinux”). Dieses kann entweder dem Benutzer ein Menü mit verschiedenen Boot-Möglichkeiten darstellen oder selber eine Auswahl treffen, was als nächstes zu laden ist.
- Jetzt wird ein geeignet angepasster Linux Kernel geladen, dem als Parameter mitgegeben wird, wo er einen NFS-Export mit seinem Root-Filesystem findet.
- Der NFS Export und die Daten darauf, müssen vorher von einem anderen Rechner aus angelegt worden sein.
Es ist hilfreich zwei Maschinen zu haben, die identisch sind bis auf die Tatsache, dass eine lokal und die andere vom Netz bootet. Die eine nenne ich im folgenden „Referenzsystem”, die andere „Netboot-System”.
DHCP
Damit die Netzwerkkarte irgendetwas tun kann, bevor das Betriebssystem geladen ist,
z. B. eine RARP, bootp oder DHCP-Anfrage schicken und anschließend mit dem
TFTP-Server zu kommunizieren braucht sie entweder ein spezielles Boot-Prom oder
Unterstützung durch das BIOS. Hierfür gibt es verschiedene Methoden,
z. B. „Etherboot”. Daher gibt
es eine verwirrende Vielfalt von z. T. recht komplexen Dokumenten.
Glücklicherweise beherrschen die meisten aktuellen Rechner beherrschen von Hause
aus PXE, so dass sich die Konfiguration des DHCP-Servers sehr einfach gestaltet:.
Unter SuSE Linux kann man eine Grundkonfiguration mit „yast2 dhcp-server
einrichten, und auf einem Windows-Server kann ein DCHP-Server ebenfalls mit ein
paar Mausklicks eingerichtet werden. Danach muss man zwei Optionen zumr Konfiguration
des DHCP-Servers hinzufügen:
filename "/pxelinux.0"; next-server name oder IP des TFTP-Servers;
Weitere, oft genannte Optionen sind nach meinen Erfahrungen nicht nötig.
TFTP, pxelinux
Unter SuSE Linux kann der TFTP-Server mit „yast2 tftp-server”
installiert werden. Dabei wird das Verzeichnis „/tftpboot”
angelegt. Dorthin muss man die Datei „pxelinux.0” (Das
„Mini-Linux”) kopieren. Man bekommt sie von der
Syslinux-Site oder aus dem SuSE
syslinux RPM,
das diese Datei unter „/usr/share/syslinux/pxelinux.0” ablegt.
Das Konfigurationsverzeichnis liegt unter „/tftpboot/pxelinux.cfg”. In diesem Verzeichnis sucht
pxelinux nach einer Datei, deren Namen der MAC-Adresse des Clients entsrpicht,
dann nach einer Datei, die der IP-Adresse oder dem Subnet des Clients entspricht
und zuletzt nach einer Datei namens „default”. Diese
Datei könnte z. B. wie folgt aussehen:
default netboot prompt 0 # timeout 10 label netboot kernel /SuSE/i386/vmlinuz append root=/dev/nfs rw nfsroot=servername:/nfsroot ip=dhcp label install kernel /SuSE/i386/linux-install append initrd=/SuSE/i386/initrd-install install=nfs://servername/Instserver/source/suse/ label local LOCALBOOT 0
Achtung: „/SuSE” ist hier relativ zu „/tftpboot”
Die Option „install” ist dazu gedacht, ein System mit lokaler, aber noch leerer Platte zu installieren.
Manchmal wird „localboot” als Default gewählt, damit Maschinen, die nicht über Netz booten sollen, und schon gar nicht eine Neuinstallation via Netz veranlassen sollen, bei deinen aber PXE versehentlich eingeschaltet ist, trotzdem korrekt booten.
Kernel
Zunächst muss der Kernel oder die initrd alle Module enthalten, die zur Unterstützung
der Hardware erforderlich sind. Wenn man beides vom „Referenzsystem” auf den TFTP-Server
kopiert, ist das schon mal ein guter Anfang. Allerdings benötigt der Kernel die Option
„CONFIG_ROOT_NFS”, die ihrerseits „CONFIG_IP_PNP”
voraussetzt. Diese Optionen sind normalerweise im Kernel nicht enthalten, wie man mit
„zcat /proc/config.gz | grep CONFIG_ROOT_NFS” oder
„grep CONFIG_ROOT_NFS /boot/config-`uname -r`”
leicht feststellen kann.
Um einen neuen Kernel zu bauen, müssen auf dem Linux-System die Entwicklungsumgebung und
die Kernel Sourcen installiert sein. Die Konfiguration des aktuell laufenden Kernels kann man
mit „make cloneconfig” in die Entwicklungsumgebung übernehmen.
Dann kann man mit „make menuconfig” die erforderlichen Änderunge
vornehmen.
Es empfiehlt sich olgende Optionen built-in (nicht als initrd-Module) zu setzen:
device driver | network support | networking options
TCP/IP networking
IP Kernel level autoconfiguration
dhcp support, Bootp support
Network device support
Ethernet 10 or 100 MBit
AMD Pcnet32 PCI support
Filesystem
Network File Systems
NFS file system support
Root file system on NFS
Mit „make bzImage” kann neue Kernel kompiliert werden. Mit
„cp /usr/src/linux/arch/i386/boot/bzImage /tftpboot/SuSE/i386/vmlinuz”
wir er auf dem TFTP-Server abgelegt. (Je nach Architektur könnte statt
„i386” dort z. B. auch „x86_64” stehen.)
Die (hier nicht behandelte) Alternative zu einem Kernel, der seine Root-Verzeichnis auf
NFS legen kann, ist ein mini-Root-Filesystem auf einer Ramdisk, das nur die
darunterliegenden Verzeichnisse (/usr, /var, /home, ...)
auf NFS liegen hat. Auf diese Art wäre es auch denkbar, einen Teil der Dateisysteme,
z. B. Swap, nicht per NFS sondern per Software iSCSI initiator anzubinden.
NFS Root
Den NFS Export auf dem Referenzsystem unter „/var/tmp/dirinstall”
mounten und dann mit „yast2 dirinstall” ein Linux dorthin installieren
oder unter „/mnt” mounten und dann mit
„cd /; cp -R alles außer /mnt mnt”
das Referenzsystem dorthin kopieren. Mit „chroot /var/tmp/dirinstall”
bzw. „chroot /mnt” kann man in diese Umgebung wechseln und dann z. B.
mit „yast” die notwendigen Anpassungen (z. B. andere Netzwerkadresse
als das Referenzsystem) vornehmen.
Die Reihenfolge, in der die Dienste gestartet und gestoppt werden, ist nicht für den
Einsatz eines NFS-Root optimiert. Insbesondere die Netzwerkdienste werden beim herunterfahren
zu früh gestoppt. Ein Eintrag CONNECTION_CHECK_BEFORE_IFDOWN="yes"
in /etc/sysconfig/network/eth-id-mac-addr kann helfen.
NFS Swap
Beim Swappen über NFS ist mit sehr schlechter Performance zu rechnen. Es ist auch nicht unmittelbar supportet. Der Workaround ist, auf dem NFS Mount eine Datei in der Größe des beabsichtigten Swapspaces anzulegen, diese dann mit dem Loopback-Treiber zu mounten und das gemountete „Laufwerk” dann als Swapspace zu formatieren. Besser ist, genügend RAM zu verwenden, so dass kein Swap nötig ist oder eine lokale Platte zum Swappen zu verwenden. Die letztere Aussage ist natürlich problematisch in einer Firma, die betont, dass NAS schneller sei als lokale Platten.
Support
Die meisten Linux Distributoren verweisen darauf, dass man mit einem selbstgebauten Kernel den Support verliert. Einige Kollegen haben mich auf die Dokumentation von FujitsuSiemens FlexFrame hingewiesen, die über NFS booten und viel einfacher zu installieren seien, als ich es oben beschrieben habe. Dort hat FSC sich alle o.g. Gedanken gemacht und übernimmt auch die Pflege des „unsupporteten” Linux.
Links
- iSCSI boot
- Diskless Linux
- How to Install Red Hat Linux via PXE and Kickstart:
- Computer Mutter GmbH PXE-Boot-Server Installation - Mini Howto bzw. Kurzanleitung
- Tipps, Howto
