english version
Net-PCs mit Linux
I. Arbeitsplätze an Net-PCs / DXS
II. Einrichten der Diskless X Stations
III. Fazit/Ausblicke/Weiterführende Links
II. Einrichten der Diskless X Stations
0.Intro
Diskless X-Stations sollen den Administrationsaufwand senken, dabei
aber gleichzeitig eine gewisse Breite an Hardware unterstuetzen, da sich
der Einsatz der jeweils nächsten PC-Generation schrittweise vollziehen
können soll. Mithin soll der kleinste gemeinsame Nenner aller zur
Verfügung stehenden Rechner trotzdem höchste Performance und
Anwenderfreundlichkeit sicherstellen.
Der anfängliche Startvorgang erfolgt analog zu dem der
X-Terminals. Eine kleine Bootsoftware, die
auf der Clientmaschine installiert ist, sendet Bootp-/Dhcpbroadcastpakete
in das lokale Netz und erhält zuerst ihre IP-konfiguration und dann einen
Bootkernel per Tftp übertragen.
Die Ähnlichkeit zur X-Terminallösung stellt hochflexible
Umgebungen sicher und ermöglicht einfache Migration des PC' zwischen
X-Terminal und Diskless X-Station.
1. Booten des Kernels
Durch Bootp/DHCP erfolgt die grundsätzliche Übertragung der
Netzwerkdaten zu dem anfragenden Gerät, so dass keinerlei Information
dieser Art auf den DXS vorliegen muss. Es kommt eine Lösung mit Boot-PROMs
(basierend auf dem Netboot- bzw. Etherbootpaket) und geeigeneten Netzwerkkarten
in Frage. Einige Netzwerkkarten, wie die 3C905C von 3COM bringen ein eigenes
BIOS mit, welches tcp/ip basiertes Booten über Bootp/Tftp erlaubt.
Bei preiswerteren Netzwerkkarten benötigt man meistens ein seperates ROM,
welches den Bootcode aufnimmt. Die aktuelle Mainboardhardware erlaubt hingegen
eine Vereinfachung der Plazierung des Bootcodes.
In den meisten Fällen kann die erforderliche Software zum System-BIOS
hinzugefuegt und dann mit den üblichen Softwaretools ins Mainboard-ROM geflasht
werden. Für die Erläuterungen der Bootcodepakete und des Bootp-Servers sei
auf die Ausführungen zu den X-Terminals
verwiesen. In den meisten Fällen wird man inzwischen auf DHCP setzen, da es
die Übermittlung vielfältiger Konfigurationparameter gestattet,
wie er weiter unten beschrieben wird.
2. Der Bootcode im Mainboardbios
Einige All-In-One-Mainboards (Audio, Netzwerkadapter) vermitteln bereits
die Idee, was erreicht werden soll: Es gibt bereits eine BIOS-Einstellung
- "Boot from Network", leider jedoch meist nur für ein IPX/SPX Netzwerk.
Dieses lässt sich jedoch in den meisten Fällen modifizieren...
Die meisten handeslüblichen neuen Mainboards, verfügen über ein AWARD-
bzw. AMI-BIOS, welchen in einem Flashspeicher untergebracht ist. Mit
einer speziellen Software lässt sich der Bootcode dem BIOS hinzufügen. In vielen
Fällen kann so auf seperate EPROMs und damit auf einen EPROM-Brenner verzichtet
werden.
Man benötigt jeweils zwei Softwaretools, eines zum Auslesen und
Beschreiben des Speicherbausteins und eines zum Modifizieren des BIOS-Codes.
Die Tools zum Programmieren des Flashs liegen üblicherweise dem Board bei
oder sind einfach überAWARD (hier
awdflash.exe) oder AMI (dann amiflash.exe)
zu beziehen.
Auch unter Linux gibt es inzwischen (wenn auch noch eingeschränkte)
Option: Das < href="http://www.freiburg.linux.de/~stepan/bios">/dev/bios"
Projekt beschäftigt sich damit über ein Kerneldevice auf verschiedene
Flashbausteine zuzugreifen. So kann durch einfaches Laden des Moduls und
Anleigen des Devices mit "dd" das Bios ausgelesen und geschrieben werden.
Trotzdem ist hier noch Vorsicht angebracht, da nicht alle Chipsets und
Flashgrössen vollständig unterstützt sind.
Zur Analyse und Modifikation eines AWARD-BIOS verwendet man
cbrom.exe,
für ein AMI-BIOS amibcp.exe. Die beiden genannten Tools können zusäztlichen
Code hinzufügen oder überflüssige Bioskomponenten entfernen.
Auf diese Weisen kann man Etherboot in das Mainboardbios integrieren, ohne
überhaupt den Rechner aufschrauben zu müssen.
Zuerst speichert man das Biosimage in eine Datei (z.B. als bios.bin) und
legt möglichst noch ein Backup an oder man lädt die aktuelle
Version des BIOS von der Website des Boardherstellers herunter.
AWARD-Bios
Mit "cbrom bios.bin /d" ermittelt, wieviel Platz noch im
ROM-File vorhanden ist und für unseren Code zur Verfügung steht. Das Bios
im Flashrom liegt komprimiert vor, cbrom komprimiert unseren Code,
wenn es diesen dem Bios hinzufügt. Man benötigt deshalb, in Abhängigkeit
von Treiber unserer Netzwerkkarte, 8 bis 20 kByte freien Speicherplatz. Ist
nicht genügend vorhanden, können nicht benötigte Bioskomponenten entfernt
werden: Das Logo des Herstellers oder der Symbios/NCR SCSI-Code werden für
plattenlose Systeme nicht benötigt. "cbrom bios.bin /[pci|ncr|logo|isa]
release" entfernt solche nicht benötigten Teile.
Mit dem Kommando "cbrom bios.bin /[pci|isa] bootimg.rom [D000:0]" fügt man
den kompilierten Etherbootcode zum Bios hinzu. Das bootimg.rom ist der Code,
den man sonst in ein EPROM brennen würde. Die Option [pci/isa] hängt vom
Typ der Netzwerkkarte ab. Wenn man eine ISA-Karte verwendet, gibt man cbrom
noch die Speicheradresse mit, an die der Code wärend des Bootens kopiert
werden soll.
AMI-Bios
Das AMI-Tool (amibcp.exe) lässt sich interaktiv menugesteuert bedienen: Man
startet das Tool ohne Kommandozeilenparameter und lädt das Biosfile über den
ersten
Menupunkt: "Load BIOS from Disk File". Bearbeitet wird das BIOS über die dritte Menuoption "Edit BIOS Modules". Am unteren Bildschirmrand wird die noch
verfügbare Speichermenge für Erweiterungen angeziegt. Sollte dieser nicht
ausreichen, kann man versuchen überflüssige BIOS-Komponenten (Hersteller-Logo
...) zu entfernen.
Mit der "INS"-Taste kann man Zusatzmodule einfügen. Das
Modul kann "compressed" eingefügt werden, was bevorzugt werden sollte. Mit
"ESC" kann man den Edit-Bereich verlassen und mit Menupunkt Zwei: "Save BIOS
File to Disk" das veränderte Biosfile speichern.
Achtung: Man sollte Etherboot mit den Optionen -DASK_BOOT oder
-DEMERGENCYDISKBOOT kompilieren, da man sonst nciht mehr auf Diskette oder
Platte zugreifen kann. Der Code den man dem BIOS hinzufügt, wird noch vor
dem ersten Platten- oder Floppyzugriff ausgeführt.
3. Weitere Möglichkeiten des Bootens
Möchte man den Computer unter mehreren Betriebssystemen nutzen, z.B. neben
dem auf Festplatte installierten ms windos NT als X-Terminal starten,
verwendet man bei etherboot dazu die Compileoption -DASK_BOOT.
In einigen Fällen
gibt es jedoch Hardwarekonflikte zwischen Windows-NT und dem installierten
EPROM. Für diese Fälle kann man DOS Executables produzieren (z.B. mit make
rtl8139.com), welche die .rom Images in ihrer Funktionalität ersetzen.
Soweit man nicht auf einen bereits vorhandenen DOS-Bootsektor zurückgreifen
kann, erzeugt man ihn mittels Formatieren und Installieren einer Festplatte
mit DOS, bevor man NT einspielt (vgl. Win-NT Multiboot-HOWTO).
Man benötigt zudem die DOS Systemdateien (IO.SYS, MSDOS.SYS oder KERNEL.SYS
wenn man Freedos verwendet) und kopiert diese in das Verzeichnis des NT
Loaders. Wenn man die .COM Datei über die Autoexec.bat aufrufen möchte,
sollte man auch die entsprechende COMMAND.COM bereitstellen oder man nennt
die Etherbootdatei einfach nach COMMAND.COM um. Diese wird dann anstelle der
DOS-Shell aufgerufen, was Benutzereingriffe, wie Abbrüche etc. verhindert.
Anschliessend fügt man der BOOT.INI eine Zeile hinzu, als wollte man DOS
booten:
[boot loader]
timeout=20
default=C:\bootsect.dos
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation, Version 4.0"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation, Version 4.0 [VGA-Modus]" /basevideo /sos
C:\bootsect.dos="DHCP/TFTP (Linux diskless via etherboot)"
Unter Windows 95 bzw. 98 kann die .COM-Datei einfach über das Bootmenü
aufgerufen werden.
4. DHCP und Konfigurationsdateien
Dhcp wird aufgrund seiner Flexibilität zum zentralen
Konfigurationstool. Es wird versucht werden, über diesen Dienst alle
relevanten Informationen zum Betrieb einer Diskless X-Station zu
übertragen. Neben den klassischen Parametern, wie Hostname, IP-Adresse,
Netzmaske und Gateway, zählt dazu eine Reihe von Servern: X-Display-, Time-,
Swap-, NIS-Server etc. Darüberhinaus soll in einem Stringfeld die
Konfiguration von Grafikkarte und Monitor, incl. Mausanschluss übermittelt
werden. Ein weiteres Feld nimmt Kommandozeilen auf, die an die Datei
boot.local angehangen und ausgeführt werden auf. So lassen sich der Sound
konfigurieren oder zusätzliche Gerätetreiber laden.
Im weiteren bezieht sich die Beschreibung auf die Dhcp-Implementation
des Internet Software Consortioums (ISC). Diese liegt inzwischen in der
dritten Version vor und unterstützt eine ganze Reihe von Features.
A. Serverseite
Die DHCP-Konfigurationsdatei /etc/dhcpd.conf kann gegenüber den
Einstellungen für X-Terminals z.B. über Informationen zum Font-,
Print-, Swap- und NIS-Server durch entsprechende Optionstrings erweitert
werden:
option nis-domain string;
option nis-servers ip-address [, ip-address... ];
option font-servers ip-address [, ip-address... ];
option lpr-servers ip-address [, ip-address... ];
option swap-server ip-address [, ip-address... ];
DHCP bietet die Möglichkeit Vendoroptionen aufzunehmen, d.h. es
können eigene Optionen definiert werden. Hierfür steht ein Codebereich von
128 - 255 zur Verfügung. Wenn man sehr viel Information übertragen will,
sollte man die Paketgrösse des Bootpreplypakets über den Standard hinaus
erhöhen. Diese Optionen werden zu Bginn der
Konfigurationsdatei vom dhcpd definiert:
# -- much info transferred --
dhcp-max-message-size 1024;
# -- user defined options --
option bootlocal-script code 151 = string;
option x-server-defs code 152 = string;
Wobei folgende Variablen verwendet werden können: string, integer,
boolean, text, ip-number. Diese können auch zu Arrays
zusammengefasst werden. Anschliessend verwendet man diese Optionen
genauso, wie die bereits vordefinierten:
group {
option x-server-defs "de MouseMan ttyS0 65 90 XF86_S3 accel 16";
option bootlocal-script "insmod agpgart >>/dev/null";
...
host dxs01 {
...
Das "group" Statement hilft hierbei, neben der Unterteilung nach
Subnetzen, Konfigurationsblöcke mit gleichen Parametern zusammenzufassen.
So muss nicht für jeden Host die gesamte Palette wiederholt werden.
Eine Beispielkonfiguration könnte wie folgt aussehen:
option domain-name "stud.uni-goettingen.de goe.net gwdg.de";
filename "/boot/bootimg";
use-host-decl-names on;
default-lease-time 72000;
max-lease-time 144000;
subnet 134.76.60.0 netmask 255.255.252.0 {
option domain-name-servers 134.76.60.21, 134.76.60.100;
option ntp-servers ntps1.gwdg.de, ntps2.gwdg.de, ntps3.gwdg.de;
option font-servers dionysos.stud.uni-goettingen.de;
option x-display-manager s4, s5, s6, s9, s10, s11, s12;
# option netbios-name-servers 134.76.63.252;
option routers 134.76.63.254;
option broadcast-address 134.76.63.255;
# range 134.76.60.201 134.76.60.253;
}
group {
option option-151 "de PS/2 psaux 96 100 XF86_SVGA svga 16";
option option-152 "modprobe -qa agpgart esssolo1";
host klusi {
hardware ethernet 00:00:1C:D9:78:D9;
fixed-address 134.76.60.64; }
...
B: Clienteinstellungen
Auf der Clientseite sorgt dhclient für die Konfiguration der
einzelnen Variablen, in dem die Daten vom Server angefordert und durch
dhclient-script in die Konfiguration der DXS eingefügt werden.
Die Konfiguration, welche Daten überhaupt angefordert werden sollen,
welche für den Betrieb zwingend notwendig sind, bzw. nur bei
Vorhandensein abgefragt werden, erfolgt in der Datei
/etc/dhclient.conf. Benutzerdefinierte Optionen werden durch
"option-XXX" abgefragt, wobei XXX durch den Zahlenwert ersetzt wird, wie
er in der /etc/dhcpd.conf definiert wurde. Das zu übertragende
Datenmaximum wird durch die MTU-Size des Netzwerkes begrenzt. Wie auch bei den
Servereinstellungen gilt: Soll viel Information übertragen werden, muss
die Grösse des Bootreplypakets angepasst werden. Dieses lässt sich vom
Server mit "send dhcp-max-message-size 1024" anfordern.
dhclient-script ist ein umfangreiches Shellskript,
welches entweder über den Aufruf der entsprechenden Kommandos den Hostname
setzt oder /etc/resolv.conf anlegt, sondern auch Konfigurationsdateien
parsen oder neu anlegen kann. Mit dem ISC-DHCP wird ein Beispielskript
verteilt, welches dann um alle Optionen erweitert werden muss, die über
die Minimalkonfiguration von IP-Adresse, Hostname und DNS-Auflösung
hinausgehen. Alle Konfigurationsdateien, die von diesem
Vorgang berührt werden, sind deshalb in die Ramdisk verlinkt. So kann das
Basisfilesystem Readonly bleiben und einheitlich für alle Geräte verwendet
werden.
5. Der Bootkernel
Die Anforderungen an den Kernel einer DXS sind gegenüber einem
X-Terminal gewachsen. Er soll
zugleich eine breite Hardwarepalette unterstützen, dabei aber
flexibel bleiben, damit nicht für jede neue Hardware ein seperater
Kernel erstellt werden muss. Deshalb und um den neuen
Aufgaben der Soundwiedergabe, dem Anschluss von Userdevices etc. gerecht zu
werdeni, wird er modular aufgebaut. Auf diese Weise lassen sich sehr viele
verschiede Komponenten
unterstützen, ohne dass dabei Konflikte zum Basiskernel entstehen und
sich ein entsprechend grosser Overhead ergibt. Die Unterstützung für
alle verwendeten Netzwerkkarten, sowie die Basisfilesysteme NFS und Minix
(für die Ramdisk) müssen sebstverständlich statisch eingebunden
sein, da diese zu Beginn des Bootvorganges benötigt werden.
Kandidaten für die modulare Unterstützung sind deshalb alle
Zusatzdevices, die nicht an allen Arbeitsplätzen zur Verfügung
stehen müssen. Dazu gehört die breite Palette an unterstützten
Soundkarten, verschiedene SCSI-Adapter und Geräte, USB-Unterstützung,
serielle Mäuse
und Drucker, Removable Devices, wie ZIP und LS120 etc. Besondere Filesysteme
oder Treiber, wie den AGP-Gart für ausgesuchte Grafikhardware,
welche nur unter bestimmten Bedingungen zur Verfügung stehen
müssen und
weitere Funktionen werden auch als Modul zur Verfügung gestellt.
Ansonsten gelten die Voraussetzungen, wie sie für die X-Terminals
bereits getroffen wurden.
In der /etc/modules.conf liegen die Anweisungen, welche
Kernelmodule geladen werden muessen, wenn ein bestimmtes Device z.B. der
IDE/ATAPI-Treiber fuer das ZIP-Drive angefordert wird.
6. NFS als Basisfilesystem
Das Networkfilesystem bildet die Basis des gesamten DXS-Projekts. Eine
hohe Stabilität, Verfügbarkeit und Zuverlässigkeit müssen
gewährleistet sein. Hierin liegen zur Zeit noch einige Probleme von Linux
begründet. Die derzeitige Kernelarchitektur enthält noch einige
Schwächen, so dass die derzeitige Implementation Schwächen zeigt. Diese
lassen sich umgehen, wenn man Abstriche in der Geschwindigkeit in Kauf
nimmt und z.B. auf den Kernel-NFSD verzichtet. Da aber gerade die Filesystemperformance
die Brauchbarkeit der DXS beeinflusst, stehen der Kernel-NFSD und die NFS
Version3-Unterstützung auf der Wunschliste. Hierdurch kann der
Datendurchsatz nocheinmal verdoppelt werden.
Das Filesystem einer Arbeitsstation setzt sich aus mehreren Teilen
zusammen. Zürst wird das Basisfilesystem analog zur
XTerminalimplementation als Root-NFS gemountet. Dieses enthält alle zum
weiteren Booten notwendige Systemsoftware: Binärdateien, Bibliotheken und
Skripten. Hierbei wurde versucht die Struktur weitestgehend an der
Standardinstallation zu orientieren und nur wenige unumgängliche Dateien
an die speziellen Erfordernisse plattenloser Clients anzupassen. Dies soll
verhindern, dass bei allfälligen Systemupdates zu viele Abhängigkeiten
beachtet werden müssen. In einem nächsten Schritt liesse sich durch das
Anlegen von Hardlinks weiterer Aufwand reduzieren.
Anschliessend werden das /usr- und /opt-Verzeichnis, wie auch das Root-NFS
readonly hinzugemountet. Somit besteht kein Risiko der Veränderung
systemwichtiger Dateinen. Durch die komplette Übernahme der beiden
wichtigsten Verzeichnisse für Anwenderprogramme, entfällt die spezielle
Softwareadministration für die DXS. Weiterhin wird in den Bereich der
RAM-Disk unter /tmp/users eine schreibbare NFS-Partition eingehängt, die
den beschreibbaren Platz im Dateisystem ausdehnt.
Per Automounter werden auf Anforderung die Homeverzeichnisse der User
eingefügt. Um auch hier eine höhere Ausfallsicherheit zu erhalten, wurde
der Automounter so modifiziert, dass er mehrere Server auf Erreichbarkeit
prüfen und dann einhängen kann.
Eine Beispielumgebung für DXS (stark abhängig von der
Serverinstallation!!) liegt als Tar-Ball vor.
7. Die Startskripten
Das erste Skript, welches beim Booten vom Client ausgeführt wird, ist
gegenueber der Standardinstallation an die plattenlose Umgebungsbedinung
angepasst worden. Hier werden die einzelnen Bereiche des Filesystems
gemountet und dhclient gestartet, um zum fruehest moeglichen
Zeitpunkt alle Konfigurationsoptionen zur Verfuegung zu haben. In
boot.local werden weitere Anpassungen vorgenommen, die diesmal aber
abhänging vom Hostnamen passieren: So lässt sich angepasst an das
Gerät das entsprechende Soundtreibermodul installieren, bei Bedarf die Treiber
für die Videokarte oder andere Devices laden.
Zum Schluss wird wieder das Auswahlskript fuer den X-Server (in
/bin/xrun) aktiv, welches anhand des Rechnernames die geeignete Auswahl
von Hardwaretreiber und Konfigurationsdatei trifft.
Zurück
Weiter
Text von Dirk v. Suchodoletz (dirk@goe.net)