function MM_preloadImages() { //v2.0
if (document.images) {
var imgFiles = MM_preloadImages.arguments;
if (document.preloadArray==null) document.preloadArray = new Array();
var i = document.preloadArray.length;
with (document) for (var j=0; j Aktuelle Informationen zum Thema: Auf "GOE.NET | Anleitungen"! Dieser Artikel ist ein Update des Textes zu Linux-XTerminals, wie er in
der Augustausgabe des Linuxmagazins
abgedruckt wurde. Die aktuellste Version ist bitte über die
Anleitungsseite Ein Beispielfilesystem für die X-Terminals kann
hier heruntergeladen werden. Eine ältere Version
steht an dieser Stelle zur Verfügung. Die Internet-AG des Studentenwerks, die an der Universität Göttingen
die Internet-Grundversorgung für die Studierenden leistete, stand
vor der Aufgabe, mehrere dezentrale internetfähige Arbeitsräme und -plätze
auf dem Campus einzurichten. Die finanziellen Aufwendungen und der spätere
Administrationsaufwand sollten sich in Grenzen halten, da auch
die hiesige Universität nur über sehr wenig freie
Finanzmittel verfügte.
An den Arbeitsplätzen sollten die BenutzerInnen vorkonfigurierte
Grafikoberflächen vorfinden, mit denen alle Internetdienste ohne
weiteren Einstellungen sofort einsetzbar sind. Die X-Terminals
sind ein Teil dieser Verinfachungs- und Vereinheitlichungsstrategie, da sie
einen dezentralen Zugriff auf wenige zentrale Server erlauben. Dadurch soll der Beratungs-
und Einweisungsaufwand vor Ort gering gehalten werden.
Später sollen diese Programme um diverse Officepakete
erweitert werden. Das Kernstück des Studierendennetzes in Göttingen besteht
aus einem zentralen Authentifizierungs- sowie einem Fileserver
mit den Homeverzeichnissen
und den persönlichen Konfigurationsdateien der einzelnen BenutzerInnen.
Auf diesem und weiteren Linux-Servern werden die Grunddienste, wie
Mail, WWW (private Seiten der UserInnen) und News vorgehalten. Von diesem zentralen Server aus, werden alle dezentralen Terminalserver
per NIS (dem Network Information Service zur Userauthentifizierung)
und per NFS (dem Networkfilesystem, das die Homeverzeichnisse enthält)
mit allen notwendigen Benutzerdaten versorgt. So sind relevante Benutzerdaten
vor Ort obsolet womit sich der Konfigurationsaufwand dieser Rechner
auf die angebotenen Applikationen beschränkt. Die
Userhomeverzeichnisse und der Teil des Verzeichnisbaumes, der
Manpages und Dokumentation bereithält wird durch den
Automounter eingebunden. Die Server für die Terminals verteilen sich über den
gesamten Campus der Universität und hängen alle über Switches
vor Ort in dem gemeinsamen VLAN des Studinetzes, welches
im Backbone-Bereich mit mindestens 100Mbit arbeitet.
An diesen Switches sind, zum Teil über HUB's, die Terminals
an 10Mbit-Ports angeschlossen.
Auf den Terminalservern laufen alle Benutzerprozesse, wie der
Webbrowser, das Mailprogramm, der Chatclient, das Officepaket etc. Die
X-Terminals booten dabei als Diskless-Workstations per
Bootp-Request von einem verfügbaren Terminal-Server und bekommen
von diesem das Authentifizierungsfenster eines der antwortenden
X11-Windowserver bereitgestellt oder starten einen Chooser, in
dem alle verwendbaren Server angezeigt werden.
Durch eine X11-Broadcast-Anfrage antwortet (hoffentlich) der nächste
bzw. am schwächsten belastete Server. Im Chooser melden
sich verfügbare Server mit ihrer Userzahl und Systemlast. Dadurch
verringert sich das Ärgernis von Systemausfällen
für die Benutzerin. Bleibt
ein Server im Nutzerbetrieb stehen, wird durch ein Neustart des Terminals
sichergestellt, dass weitergearbeitet werden kann. Somit bleiben
die Terminals auch bei Teilausfällen im Netz immer noch
benutzbar. Hieraus können aber Probleme resultieren, die sich im XDMCP und
der Netzwerkstruktur begründen. Beim Broadcast eines
Terminals antwortet nicht unbedingt der am wenigsten belastete Server. Gerade beim gleichzeitigen
Start vieler Terminals steht die Belastung eines Servers noch nicht
fest. So kann man sich statt des einfachen Broadcastes vorstellen,
dass das Terminal deshalb eine Chooseranfrage an sich selbst stellt und
dieser Chooser per Broadcast aus dem Netz die Server ermittelt
oder auf eine vorgegebene Serverliste zurückgreift. An die X-Terminals werden (aus heutiger Sicht :-)) kaum Hardwareanforderungen gestellt:
486DX66 mit 16MB und einer 2MB-Grafikkarte mit einem 15-17"-Monitor
erlauben bereits ein gutes und zügiges Arbeiten unter einer grafischen
Oberfläche. Zum Jahreswechsel 1998/99 wurde für eine
Grundkonfiguration eines solchen Arbeitsplatzes weniger als 1000DM
(WinChip 200Mhz auf einen Intel-VX-Board mit 2MB S3 Grafikkarte,
NE2000-kompatible PCI-Netzwerkkarte und 17" Monitor)
ausgegeben, da auf Festplatten, CD-Laufwerke und Floppydrives
verzichtet werden konnte. Konfigurationen mit geringerer Prozessorleistung,
12MB und geringerer Farbtiefe (8bit) sind auch lauffähig und aus
älteren Beständen noch im Einsatz. Wobei es hier durchaus zu
Beeinträchtigungen in der Laufzeitstabilität durch
wachsende Speicherallokation des X-Servers kommen kann. Trotz anspruchsvoller und intuitiver Oberfläche, wie dem
KDE/GNOME (X11 Windowmanager, die sich am CDE und anderen modernen
Grafikoberflächen orientieren)
und größeren Applikationen, wie das Unix-Offic-Paket
Applixware und Netscapes
Communicator, genügt die beschriebene Hardwarekonfiguration,
die unter einem neüren NT als hoffnungslos veraltet gilt und zu langsam
verschrottet werden müßte. Die Kombination aus KDE, Netscape
und StarOffice ermöglicht ein ähnliches Arbeiten wie unter
Windows, mit dem Vorteil, daß die Programme zentral administriert
und konfiguriert werden können. Im universitären Bereich
lohnt es sich, bei Software auch Wege jenseits der ausgetretenen Pfade
zu beschreiten. Gerade bei der notorischen Finanzknappheit der öffentlichen
Einrichtungen stellt Linux eine mehr als brauchbare Alternative dar. Der Wettlauf zwischen neuer Software und größeren Hardwareanforderungen,
wie ihn das Wintel-Kartell gerne bestimmen möchte, beschränkt
sich in diesem Falle auf den Terminalserver. Bisher bewegte sich die Serverausstattung im Göttinger Studierendennetz
zwischen einem Cyrix P166+ mit 96MB und 2*1,2 GB Festplatte für
fünf Terminals und zwei Dual-PII- 266 mit 512MB und 4*4 GB Festplatte
für 25 Arbeitsplätze. Alle Bauteile sind PC-Standardlösungen,
was schnellen und preiswerten Austausch ausgefallener Komponenten
gestattet. Auch beim Administrationsaufwand erweist sich dieses System als sparsam,
da Software-Updates für die X-Clients automatisch für alle
Geräte auf einmal erfolgen. Generell sind alle Terminalserver
mit einer gleichartigen Grundkonfiguration versehen, was ein einfaches
Kopieren von Updates von einem Gerät zum anderen erlaubt. Die Betriebssicherheit in diesem Netz kann durch den Einsatz weiterer
Server erhöht werden. Durch die X- und Bootp- Anfragen
als Braodcasts ist ein für den User unbemerkter Wechsel nach
dem Neustart des Terminals bei Ausfall eines Gerätes möglich.
Dieses Konzept erlaubt weiterhin entfernt gelegene
Terminalpools, da aufgrund der geringen Zahl der Verschleissteile die
Ausfallwahrscheinlichkeit sinkt. Die Chance eines Hacker-Einbruchs
in die Terminal-Systeme ist als sehr gering einzuschätzen,
da nur ein sehr reduziertes Filesystem mit geringen Rechten und
keine zusätzlichen Netzwerkdienste zur Verfügung stehen. Ein großer Vorteil der verwendeten Konfiguration liegt in der
Möglichkeit, diese parallel mit bestehenden Systemen zu betreiben.
So kann in den zumeinst mit älteren Geräten ausgestatteten
Rechner-Pools der Universität die beschriebene Lösung einfach
in bestehende Netzwerkstrukturen eingegliedert werden. Das verwendete
Bootp-Paket ermöglich eine Multi-Boot-Option, d.h. die Benutzerin
kann beim Startvorgang des Rechners darüber entscheiden, welches
Betriebssystem gewählt werden soll. So ist es möglich von
der Festplatte das überlicherweise verwendete Windowssystem zu
booten oder alternativ aus dem Netz ein Minimal-Linux zu starten,
welches dann zum X-Terminalserver eine X11-Verbindung aufbaut. Dadurch
bleibt die relativ hohe Netzbelastung durch den Export der Arbeitsoberfläche
lokal und kann durch einfache Maßnahmen, wie dem Einsatz einer
Switch vom restlichen Netz abgeschottet werden. Der notwendige Eingriff in die bestehenden Systeme beschränkt
sich dabei auf den Einbau eines Boot-Roms, das mittels EPROM-Programmierer
aus alten Mainboard-Roms gewonnen werden kann. Alle anderen Komponenten können
in ihrer Konfiguration übernommen werden. Das installierte Betriebssystem
ist durch die geeignete Kernelkonfiguration vor Benutzerzugriffen
geschützt. Zusätzlich besteht die Option des seperaten
Accountings, wenn die X-Terminals andere IP-Nummern als das ursprüngliche
System verwenden. Auf diese Art und Weise läßt sich auch
der Zugang zu speziellen Resourcen, wie Druckern, Plottern und Belichtern
sperren oder ermöglichen. Verschiedene Benutzerklassen können
einfach in ein und dem selben Raum, mit derselben Hardwareausstattung
bedient werden. Das Bootp-Protokoll und als Weiterentwicklung das DHCP ermöglichen die
automatische Netzwerk- und Bootkonfiguration von Clientsystemen. Dazu
müssen keinerlei Informationen zu IP-Nummer, Netzmaske etc. auf dem
Clientrechner bekannt sein. Dieses ermöglicht eine einfache Anpassung bei
Änderungen in der Netzwerkstruktur und erlaubt festspeicherlose
Clients und einen leichten Wechsel eines Gerätes zwischen verschiedenen
Netzen. Die eleganteste Lösung für X-Terminals (auf Basis von
Standard-PC-Hardware) besteht in der Installation
eines Boot-EPROM's auf der Netzwerkkarte. Der Terminals werden in
anhand ihrer Hardwareadresse der Netzwerkkarte (MAC) identifiziert. Bootp ist ein UDP-basiertes Netzwerkprotokoll, über das grundsätzl
Daten zur Konfiguration eines Clientsystems übertragen werden
können. Die einzelnen Parameter werden untenstehend im Zusammenhang mit
den beiden existierenden Implementationen erläutert. Ein Teil der
Informationen, die bereitgestellt werden, übernimmt der Kernel schon
durch den Bootp-Prozess, der vom EPROM gestartet wird. Hierzu gehört
die IP-Konfiguration mit Netzmaske und Standardgateway. Die Informationen
zur DNS-Auflösung werden später gesondert angefragt. Testen kann
man beide Bootp-Dienste durch den Befehl bootpc -hwaddr [MAC des
Terminals]. Für diesen Test und den Aufruf des dhcpcd
für die DNS-Konfiguration sind bestimmte Kerneloptionen notwendig. Die Parameter des bootpdlassen sich am besten anhand der /etc/bootptab, der zentralen
Konfigurationsdatei des bootpd erläutern: Wenn für alle Terminals die gleichen Parameter gelten, könnten diese in
einer gemeinsamen Konfiguration definiert werden (hier .default). Es können
auch mehrere solcher Konfigurationen angegeben und mit dem 'tc'-Feld
entsprechend zugewiesen werden. Sehen die Konfigurationen für die einzelnen
Terminals sehr verschieden aus, werden diese hinter dem Namen des Terminals
(hier terminal01) angegeben. Der Zeilenumbruch wird durch das '\' versteckt,
es erleichtert die Lesbarkeit.
Alle Felder müssen mit Doppelpunkten voneinander getrennt sein. Als weitere
Optionen können Timeserver, YP-Server & Domain ... übertragen werden. Dabei muss bedacht werden, dass das Bootp-UDP-Paket nur eine bestimmte
Menge an Informationentransferieren kann, d.h. nicht alle dargestellten
Optionen auf einmal übertragen werden können. Die Felder für das TFTP (Trivial FTP, sehr abgespecktes FTP-Protokoll)
weisen schon auf eine weitere Funktion hin, die in der beschriebenen
Konfiguration benötigt wird, aber nicht zwingend gemeinsam mit Bootp
verwendet werden muss... Leider gibt es in unserer Umgebung in Abständen Probleme mit dem
TFTPD auf Serverseite, so dass für einige Zeit einige Bootp/TFTP-Server den Kernel nicht
übertragen und sich das ganze in einer Fehlermeldung: Sollte es notwendig viele Optionen an die Clientsysteme zu übertragen,
empfielt sich der Einsatz des dhcpd, der auch über eine
umfangreichere Palette an Optionen verfügt. Für Server, die eine
Mischumgebung aus Windowsystemen mit dynamischer IP-Zuweisung und
X-Terminals bestehen, kommt nur noch DHCP in Frage. Weiterentwicklungen finden
in erster Linie beim dhcpd statt, die verwendeten bootdp
Implementationen stammen aus den Anfängen der 90er und werden nur noch
im Falle grober Sicherheitslöcher gepatcht. Das
Internet-Software-Consortium entwickelt z.B. eine
Beispielimplementation des DHCP und einiger anderer Internetprotokolle. Der
Sourcecode liegt in dem meisten Fällen auch in einer Linuxanpassung vor. Die meisten Optionen sind selbsterklärend. Der dhcpd ist
vielfältig konfigurierbar, so dass z.B. eine dynamische Adressvergabe
für Windowsrechner und eine statische Bootkonfiguration für die
Terminals von einem Server aus erfolgen können. Der Dhcpd läuft
am besten als Stand-Alone-Prozess, wobei darauf geachtet werden sollte, dass
dann der bootpd in der /etc/inetd.conf auskommentiert wurde. Das TFTP dient zum Transfer des zu bootenden Netzkernels (welche Optionen
dieser enthalten muss und wie man ihn mit einer entsprechenden Bootsignatur
versieht, wird in den folgenden Abschnitten erklärt). Das Protokoll
muss neben der Bootp-Implentation auf ein 16k bzw. 32k EPROM passen, welches
auf die Netzwerkkarte des (plattenlosen) Terminals gesteckt wird, und ist deshalb
sehr klein gehalten. Es bietet keinen Schutz durch Passwortauthentifizierung
und sollte deshalb mit Vorsicht aufgesetzt werden. Eine
Absicherung des
TFTP-Transports hat Werner Koch geschrieben. Dabei kann zum einen durch
das Boot-Protokoll ein TFTP-Root angegeben werden, was einen Zugriff auf die
Root-Ebene des Servers verhindert.Auch beim Aufruf des Dämons
in der /etc/inetd.conf kann ein Root-Verzeichnis angegeben werden: Im vorgestellten Falle dient der Bootp-Server auch gleichzeitig als
NFS-Server für das Root-Filesystem unserer XTerminals. Im Kernel wird
dafür die Option '[*] Root file system on NFS ' aktiviert (weitere
Optionen auch weiter unten). Damit versucht das Terminal nach dem Start
des Kernels sein Filesystem vom Server zu mounten (siehe hierzu auch die
mknbi-Optionen). Damit dieses gestattet wird, sollten zum einen die beiden NFS-Daemonen
(rpc.nfsd und rpc.mountd) auf dem Server installiert und aktiviert sein. In
der /etc/exports werden die Freigaben eingetragen: Im Beispielfalle befindet sich der NFS-Root-Tree unter '/boot/root'. Aus
Sicherheitsgründen wird das Filesystem nur ReadOnly exportiert, für
Testzwecke empfielt sich aber die Einstellung ReadWrite mit Root-Zugriff
(rw, no_root_squash). Wenn als NFS-Server eine abweichende Hardware- bzw.
Softwareplattform zum Einsatz kommt, ist zu überprüfen, ob das
Deviceverzeichnis (/dev) der Terminals komplett richtig mit Major- &
Minornummern übertragen wird. In einer Umgebung aus DEC-Alpha-Stations
(DEC-Unix und RedHat-Linux) gelang dieser Export bisher nicht sauber. ...erfolgt in der Datei /etc/inetd.conf, wobei in den meisten Fällen nur
für die beiden im verherigen Abschnitt gezeigten Zeilen die Kommentierung
entfernt und der Datenpfad angepasst werden muss. Danach sollte der inetd neu gestartet
werden. Damit der Linux-Kernel in der beschriebenen Umgebung aus dem Netz
gebootet werden kann, sind einige Einstellungen erforderlich: Zum Schluss muss das zImage mit einer speziellen Bootsignatur versehen
werden: Es gibt eine Reihe von Netzwerkkarten, die vom Etherboot-Paket
unterstützt werden. Dazu gohören die NE2000 und kompatiblen in der ISA und
PCI-Version, bis hin zu den 100Mbit-Typen mit dem RTL 8139 oder Tulip Chipset,
die 3COM 503 und 509, die WD8003 und 8013 kompatiblen. SMC-Ultra-Karten, die
Davicom 9102 sowie bestimmte Tulip-Chip-basierte Modelle sind auch einsatzfähig. Die
Netzwerkkarte sollte einen Sockel für das Bootrom enthalten und eine
Bootromgrösse von 16k bzw. 32k unterstützen. Mit einigen Einschränkungen
kann man den Code auch für ein 8k Rom erstellen. Sehr gute Erfahrungen
machten wir mit allen NE2000 kompatiblen, den SMC und den 3C509-Karten.
Von den neueren (100Mbit-Typen) wurden bisher die RTL8139-basierten
Netzwerkadapter erfolgreich getestet. Ein andere Herangehensweise waehlt das Netbootpaket von Gero Kuhlmann.
Dieses Paket unterstützt alle Netzwerkkarten, die über einen Packetdriver
(freie Implementation auch im Crynwr-Paket) oder einen NDIS-Treiber
verfügen. Hierzu bekommt das EPROM einen kleinen Bootblock verpasst, der
zürst den Netzwerkkartentreiber und dann Bootp/TFTP aufruft. Mit diesem Paket funktionieren auch die oben angesprochenen
RTL8139-Implementationen (hier wiederum musste man den NDIS-Treiber einsetzen,
der auch der Packetdriver nicht funktionierte). Weiterhin lief auch
die parallel getestete Karte mit dem DEC-Tulip-Chip (10Mbit und 100Mbit
Version). Einige neuere Boards (meistens All-In-One-Mainboards mit Onboard
Netzwerkadapter) besitzen bereits eine BIOS-Option - "Boot
from Network", die leider aber nur Novell-IPX unterstützt. Eine Reihe von
Boards ist ähnlich erweiterbar: Verfügt das Board über ein
Award-BIOS und genügend freien Speicher darin (ca. 9kbyte sind
erforderlich), so lässt sich der Netbootcode dem BIOS hinzufügen. AWARD bietet für OEMs ein Tool "cbrom.exe" an,
welches das Hinzufügen und Entfernen von BIOS-Komponenten ermöglicht.
Neben diesem Tool benötigt man noch das klassiche Awardflash
(awdflash.exe), welches mit dem Mainboard mitgeliefert wird. Für das AMI-Bios existiert wohl auch solch ein Tool, welches aber
nicht allgemein zu Verfügung gestellt wird, weshalb hier noch keine
Tests stattfinden konnten. Voraussetzung dieser Option ist das Vorhandensein von genügend freiem
Speicher im BIOS-Flashrom. Dieses bekommt man heraus, indem man den
Flashrominhalt mit awdflash.exe in eine Datei schreibt und mit dem
Aufruf von cbrom biosdatei /d diese analysiert. Wenn mehr als 9kbyte
im komprimierten Speicherblock verfügbar sind, lassen sich die meisten
Boot-Codes unterbringen. Evtl. kann man durch Löschen von
BIOS-Zusätzen, wie Virenschutz und NCR-SCSI-Unterstützung den
benötigten Platz schaffen. Der Bootcode wird durch das BIOS-Tool komprimiert, so dass man sich nicht
darum kümmern muss. Mit cbrom biosdatei /isa netboot.rom D000:0
schreibt man den Boot-Code (netboot.rom) in die BIOS-Datei. "D000:0" gibt den
Speicherbereich an, in den der Code beim Start des Rechners dekomprimiert
werden soll. Das Tool meldet die Kompressionsrate und beendet sich anschliessend
(wenn kein Fehler auftrat ohne weitere Meldung).
Das Ergebnis lässt sich mit der zuerst genannten CBROM-Beispielzeile
überprüfen. Anschliessend wird die BIOS-Datei mit awdflash wieder
ins Flash zurückgeschrieben (Backup des Original-BIOS-Codes anlegen!). Wenn man den Bootcode direkt im BIOS unterbringt, empfielt sich eine
Abfrage, ob lokal gebootet werden soll, da das BIOS nach seinem Hochlauf
sofort den Bootcode ausführt. (Befindet sich dieser in einem seperaten
ROM, ist es kein Problem dieses im Notfall zu entfernen, mit dem Code im
BIOS-ROM entfällt diese Option aber!) Erfolgreich getestet wurde diese Vorgehensweise mit einem
Socket7-All-In-One-Board von PCChips und einem neueren Gigabyte
Intel-BX-basiertem Slot1 Board. Beide BIOSse verf&umml;gten &umml;ber ausreichend
freien Speicher, da das Flashrom 256kbyte (2MBit Typ 29E020 ...) gross war.
Vorteil dieser Lösung: Alle notwendigen Handlungen können ohne
Zusatzgeräte ausgeführt werden. Möchte man auf Nummer Sicher
gehen, kann man ein Flash-ROM-Baustein der gleichen Grösse kaufen
(ca. 10DM) und nach dem erfolgreichen Booten des Rechners gegen den
eingebauten Baustein austauschen (VORSICHT, da dieses bei laufendem Rechner
erfolgt). Dann "brennt" man mit dem Flash-Utility den Code in den neuen
Baustein und hat den alten als Backup bei Fehlversuchen in der Hinterhand.
Für die beschriebene Lösung kann in keinster Weise eine Garantie
übernommen werden, auch wenn diese Operation mehrfach mit Erfolg
durchgeführt werden konnte! Lässt sich die eben beschriebene Variante wegen zu alten Boards/BIOS
oder zu geringem freien Speicher im Flash nicht anwenden, kann man
auf seperate EPROMs ausweichen. Als Eproms können alte
BIOS-Steine von Mainboards verwendet werden, so sie ein Fenster zum Löschen
des Inhalts besitzen. So können alte 286er Hauptbretter zumindest zum Teil
weiterverwendet werden :-) Neu kosten die Bausteine je nach Händler
um die 4 bis 10DM. Die Typenbezeichnung für ein 32k EPROM sieht
ähnlich 27C256 aus. Gelöscht
werden können die klassischen EPROM's mit einer UV-Lampe, die
Weiterentwicklung sind elektisch löschbare Bausteine, wie sie für
Flashroms auf Mainboards, Grafikkarten oder auch in Modems verwendet werden.
Weiterhin muss man sich irgendwo einen EPROM-Brenner organisieren oder mit
dem Code jemanden aufsuchen, der so ein Teil rumliegen hat. Rechenzentren,
Uniinstitute der Physik oder Informatik sollten soetwas besitzen. Eine weitere Möglichkeit bietet sich in der Verwendung von EEPROMīs.
Dieses sind elektrisch löschbare EPROMīs, wie sie auch auf modernen
Mainboards im Einsatz sind. Im später beschriebenen Netboot-Paket ist
eine Bauanleitung für eine Flashcard dabei. Diese FLashcard kann in
einem ISA-Slot Platz finden und auch dauerhaft anstelle des Boot-ROMīs auf
der Netzwerkkarte eingesetzt werden. In den meisten Fällen ist die Boot-Rom-Option der Netzwerkkarte entweder
über die Konfigurationssoftware oder einen Jumper zu aktivieren. Weiterhin
muss ein Adressbereich für das ROM ausgewählt werden. In diesem
Speicherbereich sollten sich keine anderen BIOSes befinden, was aber auf einem
Terminal kaum vorkommen sollte. Verfügt die Netzwerkkarte über keinen Sockel, so kann der Code auch
über eine Floppy gebootet oder auch als Boot-Option z.B. unter Windows9X
eingetragen werden. Dazu kann man neben dem ROM-Code auch Code für die Floppy
und eine .COM Datei compilieren. Da diese Dateien sehr klein sind, bietet
sich hier das Recycling alter 5,25" Laufwerke geradezu an. Derzeit ist die Version 4.2.X aktuell. Diese sollte auf jedem
grösserern FTP-Archiv vorhanden sein. Das Paket wird wie üblich
entpackt mit 'tar -xlzf etherboot.tgz' entpackt.
Es gibt ein umfangreiches Verzeichnis
mit Anleitungen in verschiedenen Formaten unter doc/. Die Verzeichnisse
src-16/ bzw. src-32/ enthalten die Dateien zur Erzeugung des Codes für 16k
(128k-1) bzw. 32k (256k-1) Eproms. Nach dem Aufruf von 'make' erhält man
für jeden Typ Netzwerkkarte ein *.rom und *.bin Image, wobei ersteres
später in das Eprom gebrannt wird. Im Netbootverzeichnis (hier: netboot-0.7.3)
liegt der Code für das 'mknbi' (-linux). Zürst werden hier mit 'configure'
eingige Anpassungen vorgenommen, dann mit 'make' der Code erzeugt. Die neüste Version ist die
0.9, welche nun auch die Komprimierung grosser (Packet/NDIS-) Treiber
unterstützt. Die maximal unterstützte EPROM-Grösse ist zur Zeit 64k
(27C512). Dieses Paket liegt als TGZ vor, muss entpackt, danach mit
īconfigureī angepasst und anschliessend mit īmakeī kompiliert werden. Ein
ROM-Image (hiermit wird automatisch auch ein Floppyimage zu Testzwecken
erzeugt) erstellt man durch īmake bootromī. Wenn die benutzte Netzwerkkarte
nicht in der umfänglichen Liste (zur Zeit 129 Einträge), sollte der
Pfad zum Paket- oder NDIS-Treiber der Netzwerkkartendiskette (und die Vendor
und PCI-ID, angezeigt am Ende des Bootvorganges, bevor das OS geladen wird)
bekannt sein. Anschliessend kann das eine erzeugte Image mit der Endung .flo
auf eine Diskette (dd if=image.flo of=/dev/fd0) kopiert und im Terminal
getestet werden. NILO steht für Network Interface Loader und soll das Booten von
Linux/BSD und den Windozen erlauben. Dieser Loader ist die
Weiterentwicklung beider vorher beschriebenen Pakete und soll durch die
Verwendung der Linux-Kerneltreiber jede von Linux unterstützte
Netzwerkkarte benutzen können. Dieses Paket befindet sich noch in der
Entwicklung und ist noch nicht in jedem Falle einsatzfähig. Die XTerminals basieren auf der Suse6.2
Linuxdistribution und verwenden einen
Kernel der 2.2er Version. Die Software des Bootvorganges wurde an die
besonderen Gegebenheiten (readonly NFS) und Erfordernisse (bestimmte
Zusatzdienste) angepasst. Ein
Beispiel-TGZ (Suse60)(welches derzeit ca. 60MB (28
komprimiert) umfasst) liegt
hier auf diesem Server, wobei natürlich einige Anpassungen an die lokalen
Konfigurationen unumgänglich sind. Die neue Version basierend auf
Suse6.2 kann hier heruntergeladen werden. Diese befindet sich aber noch in der Erprobungsphase. Neben dem Terminalhauptverzeichnis
(in diesem Falle 'root' genannt) enhält das Paket auch einen
Beispielkernel (V2.2.12 mit Unterstützung für 3C509, NE2000
ISA/PCI, RTL 8139 und SMC-Ultra). Alle Angaben von absoluten Dateinamen
beziehen sich auf das NFS-Root, d.h. so wie sie im Verzeichnisbaum auf dem
Terminal sichtbar sind. Auf dem Server ist entsprechend das NFS-Root
hinzuzufügen, wobei man bei symbolischen Links etwas aufpassen sollte,
da diese hier natürlich von den Bedingungen des XTerminals abweichen.
Der Umfang der Terminalinstallation lässt sich weiter reduzieren, in
einer älteren Version basierend auf Suse4.2 wurden lediglich 20MB
benötigt (bei geringerem Funktionsangebot).
Gleichzeitig soll die Unterstützung verschiedenartiger
PC-Hardware sichergestellt werden. Die Terminals
sollen am Ende mehrere Aufgaben erfüllen (können): Die Hauptaufgabe der Terminals besteht in der Bereitstellung der Grafikconsole,
wobei je nach Erfordernis entweder die Server per Broadcast oder per
indirektem Broadcast über einen Chooser ausgewählt werden sollen.
Broadcast stellt sicher, dass solange mindestens ein Server läuft, immer
ein Login angeboten wird. In der /etc/rc.config (zentrale
Suse-Konfigurationsdatei) kann hierzu als Startoption
für das Display "broadcast" oder "indirect" eingetragen werden. Wenn ein Chooser gewünscht wird, verbindet sich
das Terminal mit sich selbst ($HOSTNAME in der /usr/X11R6/bin/xrun),
wobei dann der lokale xdm die Broadcastanfragen übernimmt und im
chooser darstellt. So wird auch in dieser Einstellung eine
Abhängigkeit von einem bestimmten Server vermieden. Hierfür muss in der
/etc/rc.config die Aktivierung des xdm
erfolgen. Dieser übernimmt nur das Management der xdmcp Anfragen, kümmert
sich aber nicht um die Verfügbarkeit des lokalen Displays. Diese
erfolgt über
ein spezielles Skript zur Auswahl der richtigen Hardwareeinstellungen
(Beschreibung im nachsten Abschnitt). Die Xaccess Datei (/usr/lib/X11/Xaccess)
lässt dabei nur die Anfrage des Choosers zu, auf einen Broadcast anwortet
das Gerät selbst nicht, da es weder mit Serverfunktionionalität ausgestattet
wurde, noch die Hardware diese in den meisten Fällen zulässt. Ziel der Konfiguration der Gesamtanlage war es, für alle Terminals
denselben NFS-Root-Baum zu verwenden, um einen möglichst geringen
Administrationsaufwand sicherzustellen. Anpassungen für die Hardware der
Grafikkterminals erfolgen an zwei Stellen: Diese Auswahl geschieht in der Datei xrun im Verzeichnis /usr/X11R6/bin,
in dem auch die verschiedenen Grafikkartenserver liegen. In dieser Datei
wird anhand des Terminalnames entschieden, welcher Grafikkartenserver in
Kombination mit welcher X11-Konfigurationsdatei (alle in /etc: XF86Config.S3
...) ausgewählt wird. Das ganze geschieht über eine einfache
CASE-Anweisung anhand des Hostnames.
Gleichzeitig sorgt diese Datei für den Restart des X11, so
es sich beendet haben sollte oder abstürzte. Auf diese Weise können ohne Probleme neü Terminals ins Netz
eingefügt werden, bei Bedarf wird eine weitere Auswahlspalte in der
xrun hinzugefügt. Mit diesem Konzept wird
eine Hardware-Breite von 486DX66 (mit 12MB und 1MB Grafikkarte am 14"-Monitor
mit 1024x768 im Interlace-Modus) bis hin zum WinChip200 (mit 32MB und 4MB
Grafikkarte am 17"-Monitor mit 90Hz Bildwiederholfreqünz) abgedeckt. Soll auf dem Client selbst ein XDM mit einem Chooser für das
Gerät laufen, so sind mindestens 12(16)MB vorzusehen, da
f&uul;r XDM und Chooser weitere Libraries in den Speicher laden (ca. plus 3
(Standard-XFree-Chooser) - 4 MB (khostchooser), je nach Auswahlfenster). Da
aber der X-Server nach jedem Auslogvorgang neu gestartet wird, besteht kein
Konflikt im Speicherverbrauch, da in dem Moment, wo der Xserver mehr
Speicher alloziert (für Farben, Fonts ...) der Chooserprozess sich
bereits beendete. Sollen mehr darstellbare Farben angezeigt werden (die vorgestellte
Implemetation verwendet 16bit Farbtiefe, bei älteren Karten 8bit)
oder soll die
Bildschirmauflösung steigen, so muss mit einem höheren Speicherbedarf
für den XServerprozess kalkuliert werden. Aus Sicherheitsgründen soll das NFS-Root-Verzeichnis aller Terminals nur
ReadOnly vom Server bereitgestellt werden. So wird verhindert, dass bei der
unumgänglich grosszügigen Class-B-Netz-Freigabe, keine Veränderungen am
Filesystem der Terminals (durch Externe ohne Zugriff auf den Bootp-Server)
vorgenommen werden können. Eine explizite Freigabe einzelner IP-Nummern
oder recht enger Bereiche in der /etc/exports ufert sehr schnell aus und
bietet auch keine Sicherheit gegen Missbrauch der IP, wenn ein Terminal
offline ist. Eine Einschränkung in der Sicherheit
stellt die notwendige Dateifreigabe im all-readable Modus dar oder
wahlweise die NFS-Option 'no_root_squash'. Als allererster Vorgang wird eine RAM-Disk angelegt und mit dem
Minix-Dateisystem versehen und danach RW gemountet. Im Beispielfalle umfasst
die Ramdisk 512kByte (hartkodiert bei der Kompilation des Kernels).
Anschliessend wird aus dem RO-NFS-Bereich (hier
/var/ram ) der Teil des Dateisystems, der RW-Zugriffe gestatten soll, in die
RAM-Disk kopiert. Diese Bereiche umfasst das /dev Verzeichnis (in erster
Linie für die Zugriffe auf die Terminaldevices tty1 (-tty6)), ein Teil des
/var Verzeichnisses (z.B. 'run' für das Schreiben des utmp-Files,
tmp für die X11-Locks, den Tastaturkompiler und die /etc/resolf.conf).
Dateien im restlichen Verzeichnisbaum, auf die
Schreibzugriffe notwendig sind (/etc/adjtime) oder Dateien, die beim ersten
Mount unsichtbar bleiben sollen (/etc/mtab), werden geeignet in die RAM-Disk
verlinkt. Anschliessend erfolgt die Konfiguration der DNS-Auflösung durch den
Aufruf von dhcpcd -H -D, welcher die /etc/resolv.conf in der RAM-Disk
mit der konkreten Bootumgebung überschreibt. Danach sieht das Bootskript (/sbin/init.d/boot) wieder vergleichbar zur
Standardkonfiguration aus, wobei alle unnötigen Vorgänge
(Filesystemchecks, Swap etc.) entfernt wurden.
Der Start bestimmter Dienste wird weiterhin durch die rc Skripten und die
geeignete Verlinkung dieser in den INIT-Leveln (sbin/init.d/rcX.d)
sowie durch die /etc/rc.config sichergestellt.
Die Netzwerkkonfiguration entfällt dabei, da
diese bereits über die Bootp-Parameter (siehe Abschnitt II)
erfolgte. Diese Feature wird nicht unbedingt zum Betrieb des Terminals benötigt
und kann in der /etc/inittab abgeschaltet werden. Es ermöglicht aber ein
umfangreiches Debugging und das Studium des Systemverhaltens.
Weiterhin können so neü Funktionen implementiert werden, ohne dass man nur
auf die teilweisse dürren Fehlermeldungen, die auf dem Schirm des Terminals
erscheinen, angewiesen wäre. Das Login am Terminal erweist sich als sehr
nützlich, wenn man z.B. den Prozessstatus oder die RAM-Auslastung
feststellen möchte. Das Console Login steht in der vorliegenden
Konfiguration nur dem Super-User zur Verfügung, wobei natürlich auch über
die Bootp-Konfiguration NIS-Daten verfügbar gemacht werden könnten. Weiterhin kann durch Setzen der entsprechenden Option in der
/etc/rc.config der SSHD gestartet werden, was ein erleichtertes
Remote-Debugging erlaubt. Es sollte jedoch daran gedacht werden, dass
jeder zusätzliche Prozess Speicherplatz benötigt und es somit
auf knapp dimensionierten Terminals knapp werden kann. Ein Logfile schreibt das Terminal nicht, es wäre aber natürlich möglich es remote an einen Syslogserver übertragen zu lassen. Da aber keine
wichtigen Netzwerk und Logindienste (ausser der Konsole) zur Verfügung
stehen, schien mir die Ueberwachung in diesem Falle nicht notwendig. Wer
es dennoch einschalten möchte, kann die Option "LOGGING" in der
/etc/rc.config Datei auf "yes" setzen. Alle
Veränderung des Filesystems gehen mit einem Neustart verloren, so dass auch
hierüber keine Statusmeldungen notwendig erschienen. Die recht komfortablen
Startmeldungen der Suse-Implementation geben schon beim Start einen guten
Ueberblick. Durch Zurücksetzen des Default-Runlevels auf '2' (in der
/etc/inittab) lässt sich die Bildschirmausgabe gut beobachten und
interpretieren und bei Bedarf ein weiteres X (z.B. bei neür Hardware)
einrichten... Alle Terminals der geeigneten Hardwareausstattung (in diesem Falle
ausreichend CPU-Leistung) beteiligen sich am RC5DES Kontest, da die
Bereitstellung des X (und evtl. des XDMCP Chooser) viel Rechenpower
ungenutzt lässt. Auch diese Option lässt sich über die /etc/rc.config ein- und
ausschalten, der Start abhängig von der Hardwareleistung kann analog
zur xrun Datei (siehe 2.XServer) erfolgen. Ergeben sich gut
parallelisierbare Probleme (wie z.B. im Linux-Cluster) oder für einige
mathematische Anwendungen, lassen sich diese Maschinen im Hintergrund auch
für solche Projekte konfigurieren und nutzen. Der verwendete XFree-Server unterstützt einen Keybordcompiler. Auf
diese Weise kann on-the-fly eine Anpassung der Tastatur an unterschiedliche
X11-Plattformen geschehen. Dafür verwendet der Keybordcompiler ein
Verzeichnis in der Ramdisk, in dem die Tastaturanpassungen abgelegt werden.
So funktionierte die Tastaturanpassung bei einem Connect auf ein
DEC-Alpha-System ohne Problem, bei SUN (Solaris) und IBM-AIX mit kleinen
Einschränkungen. Die Probleme aus der Zeit der klassichen X-Terminals
mit kryptischen Anpassungen der XKeysymDB und Konsorten entfallen dadurch in
den meisten Fällen. Inzwischen erhöhte sich die Zahl der eingesetzten Terminals auf
knapp 100. Weitere Institutionen denken darüber nach, dieses System
auch für eigene Angebote zu nutzen. Inzwischen erhalten die neueren
Terminals eine 100Mbit Netzwerkkarte, da die Preisunterschiede zu den
10Mbit-Karten bei der Beschaffung nicht ins Gewicht fallen. Auch wenn sich
die Zahl der standalone betriebenen Arbeitsplätze erhöht, wird das
Konzept der Terminals wegen ihres geringen Wartungsaufwandes und ihrer
geringen Kosten beibehalten werden. Inzwischen gibt es Überlegungen
über diese Terminals weitere Angebote, wie bestimmte
Univerwaltungsdienste (Immatrikulation, Zugriff auf Prüfungsämter)
oder die Bibliothek über den Chooser zusätzlich anzubieten.
Hierdurch lässt sich die Verantwortung trennen: Jeder Server steht bei
der ihn betreibenden Institution (Bibliothek, Prüfungsamt,
Rechenzentrum), die Terminals werden gemeinsam benutzt, da die Clientel die
gleiche ist und somit die Aufstellung verschiedener Rechner für
verschiedene Anwendungen entfällt. Aufgrund der
starken Verbreitung von Linux am Campus sehen sich sogar ignorante Institute
gezwungen bei ihrer Webseitendarstellung auf die Kompatibilität zu
Netscape unter Linux zu achten :-)) Text von Dirk v. Suchodoletz (dirk@goe.net)
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Diskless XTerminals unter Linux
I. Client/Server-Systeme im Studinetz in Göttingen
II. Bootp/Dhcp und das Etherboot-/Netboot-Package
III. Einrichtung und Betrieb der XTerminals
IV. Weiterführende Links
I. Client/Server-Systeme im Studinetz in Göttingen
0.Intro
Unter
dem Kosten- und Administrationsaspekt fiel eine Lösung ala Windows-NT
oder Windows95/98 sofort aus, auch andere kommerzielle Netzwerklösungen
konnten nicht zum Einsatz kommen. Deshalb besannen wir uns auf
das inzwischen schon recht alte, in Netzwerkumgebungen aber immer noch sehr
geeignete Prinzip des X-Terminals zurück. X-Terminals sind Minimalrechner,
die analog zu den bekannten Terminals der Mainframe-Zeit eine
Bildschirmausgabe und eine Tastatureingabe ermoglichen. Hierbei beschränkt
sich das System nicht mehr nur auf eine Textausgabe, sondern ermöglicht inzwischen
Grafikdisplays, wie sie von klassischen Workstations bekannt sind; bei immer
noch beachtlicher Geschwindigkeit. Als Betriebssystem wurde daher Linux
gewählt, da es zum einen kostenlos verfügbar ist, auf der
anderen Seite sich sehr flexibel an Netzwerkumgebungen anpassen läßt.
Gleichzeitig soll dem Umstand Rechnung getragen werden, dass an
den meisten Arbeitsplätzen keine Betreuung geleistet werden
kann, d.h. dass wenn das System stehenbleibt, abstürtzt etc.
das 'normale Userverhalten' zur Reaktivierung ausreicht. Bei
einem linuxbasierten NFS-Filesystem, welches read-only gemountet wird,
bereitet es kein Prolem, wenn ein User ein Reset auslöst oder den
Ausschalter betätigt. Dieses wird durch die Broadcastfähigkeit
der X11-Clients
(entweder direkt oder über einen Host-Chooser) bzw.
Bootp-Protokolle, die nachfolgend eingehender
betrachtet werden, sichergestellt. Inzwischen wird dieses zuerst in
einer Studierendenumgebung getestete System auch im Mathematischen
Institut der Universität
Göttingen eingesetzt, da dort eine Reihe älterer SW-XTerminals
ausgetauscht werden mussten.
1. Anforderungen an die Arbeitsplätze
2. Aufbau des Studierendennetzes in Göttingen
3. Hardwareanforderungen an die Terminals
4. Hardwareanforderungen an die Server / Ausbau bei neuer Software
Linux
ermöglicht durch dieses Network-Computing, ein Schlagwort, welches
im Zuge des Administrationsaufwandes der Einzelplatzrechner und der
damit verbundenen Kosten (Total Cost of Ownership), immer wieder genannt
wird, die Weiterverwendung der vorhandenen Hardware ohne Restriktionen
des Bedienungskomforts und der Geschwindigkeit. Die meisten Internet-Anwenungen,
Officepakete und andere an der Uni eingesetzte Standardsoftware benötigen
keine ständig wachsende Grafik-Leistung, wie sonst im Bereich
der Spielesoftware zu beobachten. 5. Administrationsaufwand
6. Einsatz in bestehender Infrastruktur
II. Bootp/Dhcp/TFTP und das Etherboot-/Netboot-Package
0. Intro
1A. Das Bootp-Protokoll
1A. Die Implementation als bootpd
.default:\ # es können mehrere Profile definiert werden
:td=/boot/:\ # TFTP Rootverzeichnis
:hd=/boot/:\ # Homeverzeichnis des Bootfiles
:rp=/boot/root:\ # RootPath für das exportiere NFS-Verzeichnis
:bf=bootimg:\ # BootFile, das Image des Kernels
:ht=ether:\ # Hardwaretype (Ethernet)
:sm=255.255.0.0:\ # Netmaske (hier Class-B)
:gw=172.16.98.254:\ # Gateway
:ns=172.16.98.1:\ # Nameserver
:dn=your.domain:\ # Domainname
:vm=rfc1084:\ # Vendor Magic
:hn:to=-18000: # Hostname übergeben: TimeOut
terminal01:tc=.default:\ # verwende '.default' Profil
:ha=0020AF5733BB:\ # MAC-Adresse der Netzwerkkarte des Terminals
:ip=172.16.189.111: # zuzuweisende IP-Adresse für das
Terminal
loading
/boot/bootimg ... XXX .sleep. äussert. Deshalb experimentieren
wir gerade mit dem neueren (und verbesserten)
TFTPD des Netbootpaketes herum. Mit diesem sehen wir die beschriebene
Fehlermeldung seltener, dafür beendet sich der Prozess nach
Übertragung des Bootkernels in vielen Fällen nicht korrekt unabhängig von der verwendeten (x)inetd-Implementation. Beim NILO-Paket findet man eine Standalone-Implementierung des TFTPD. Diese verhält sich in Tests bisher am zuverlässigsten.1B. Implementation als dhcpd
server-identifier dhcpd-server.your.domain;
option domain-name "your.domain";
filename "/boot/bootimg";
use-host-decl-names on; # damit die Terminals den Hostnamen übertragen
bekommen
subnet 172.16.0.0 netmask 255.255.0.0 {
option domain-name-servers 172.16.24.1, 172.16.10.46; # DNS
option netbios-name-servers 172.16.63.252; # Netbios, falls auch
Windowssysteme von diesem Server booten
option routers 172.16.98.254;
option broadcast-address 172.16.255.255;
}
# -- client specific --
host terminal01 {
hardware ethernet 00:20:AF:57:33:BB; # MAC-Adresse
fixed-address 172.16.189.111; } # zuzuweisende IP-Adresse für das Terminal
2. Das TFTP-Protokoll
[...]
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd
/boot
bootps dgram udp wait root /usr/sbin/bootpd bootpd -c
/boot
#
[...]
oder: (Ausschnitt der /etc/xinetd.conf)
[...]
# disabled = bootps
# disabled = tftp
[...]
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = nobody
only_from = 134.76.0.0
server = /usr/sbin/in.tftpd
server_args = /boot
}
service bootps
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/bootpd
server_args = -c /boot
}
3. Konfiguration des Servers
NFS-Konfiguration
4. Erstellen des speziellen Linux-Kernels
(Nur Auszüge der .config im Kernelverzeichnis Kernel-Version 2.2.10)
[...]
CONFIG_BLK_DEV_RAM=y
[...]
CONFIG_PACKET=y # notwendig für dhcpcd Anfrage
CONFIG_FILTER=y
CONFIG_UNIX=y
CONFIG_INET=y
[...]
CONFIG_IP_PNP=y
[...]
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
[...]
Erstere Option ermöglicht die Ramdiskunterstützung. Hier habe ich im
Sourcecode die Grösse auf 128k (Standard sind 4MB) reduziert, weil nur sehr wenige Kilobyte
benötigt werden. Die weiteren Einstellungen starten die Kernel
IP-Autokonfiguration, die letzten legen das Rootfilesystem auf das NFS
fest.
mknbi -k zImage -o bootimg -d /boot/root -i rom
Die Optionen geben nacheinander das Kernelfile, das Outputfile (der
dann netzbootfähige Kernel) und das NFS-Root an. Die letzte Option
übergibt dem Kernel die Information, dass er seine IP-Konfiguration
über die Bootp-Anfrage des Bootroms bezieht. Das mknbi stammt
aus dem Netbootpaket. Hier sollte immer die aktuelle Version verwendet
werden, da sonst evtl. Schwierigkeiten beim Starten des Kernels durch das
ROM auftreten könnten. Ein mknbi passend zur Version 4.2.1. des
Etherbootpaketes liegt im /sbin Verzeichnis des
Terminalbaumes.5. Netzwerkkarten
6. Der Bootcode im Mainboardbios (AWARD)
7. EPROMS / Sonstige Unterbringung des Bootcodes
8. Das Etherboot-Paket
9. Das Netboot-Paket
10. Das NILO-Projekt
III. Einrichtung und Betrieb der XTerminals
0. Intro
1. XDisplay
2. XServer (Hardwareauswahl)
3. Der Bootvorgang
4. Console/SSH-Remote Login
5. Debugging
6. Zusatzdienste
7. X11-Zugriff auf Nicht-Linux Server
8. Ausblicke
IV. Weiterführende Links
![]()
![]()
![]()