PXE my Linux
Wie mit Hilfe des grml-Terminalservers ein alter Rechner ohne Bootmedium in die Linux-Welt geholt werden konnte.
Bei $KUNDE konnte ich einen Compaq Deskpro EN (Small Form Factor) P500 abgreifen.
Das ist ein Damals[tm] (ca. 1998) durchaus teurer und luxuriöser Arbeitsplatzrechner, der in einer Windows-Welt mit 256 MB Speicher und einem 500-MHz-P3 nicht mehr wirklich was zu tun hat. Meine Aufgabe war, das Gerät in die Linux-Welt zu holen, was sich aufgrund der Ausstattung des Gerätes nicht als wirklich einfach herausstellte:
- Das CD-ROM ist ausgebaut, und auch ein normal großes ist nicht verfügbar.
- auch mit "aktuellem" BIOS vom November 1999 ist keine Bootfähigkeit über USB gegeben
- Diskettenlaufwerk vorhanden
- kein Desktop-Rechner verfügbar, an den man schnell die Platte hätte hängen können
- kein USB-Gehäuse verfügbar, mit dem man schnell die Platte an ein Notebook hätte hängen können.
Ich hatte die Kiste schon für "probieren wir's am Mittwoch nochmal, wenn wir von daheim ein CD-ROM geholt haben" an die Seite gestellt, da fiel mir ein, dass das neue grml ja "Terminalserverfunktionen" hat. Dieses Feature ist vor dem Hintergrund der Windows Terminal Services zwar nicht wirklich geschickt benannt, hat aber an der vorliegenden Stelle geholfen.
Die Idee ist, dass man einen Rechner mit der grml-CD bootet und auf diesem den grml-Terminalserver startet. Das sollte man tunlichst nicht einem produktiven Netz machen, denn mit diesem Aufruf wird das grml-System zum DHCP-Server, der fleissig an anfragende Clients IP-Adressen ausgibt und ihnen obendrein aufträgt, über das Netz ein grml zu booten.
Die dafür notwendigen tftp- und nfs-Dienste werden natürlich automatisch gleich mitgestartet, und man kann sogar dem startenden grml Aufrufkommandos (z.B. ssh=terminalserver) mitgeben.
Damit ist es möglich, ein so autistisches System wie den oben beschriebenen Deskpro kopflos so zu booten, dass man über das Netz in das über das Netz laufende grml hinein-ssh-en kann, ohne das eigentliche Zielsystem auch nur anfassen zu müssen. Damit ist dann - in der Theorie - die Installation meines Debian-Serversystems mit den bereits ausgearbeiteten Bordmitteln möglich.
In der Praxis ist das natürlich ein bisschen komplexer. Nachdem die Grundeigung des Verfahrens in per Crossoverkabel geprüft wurde, bemerke ich schmerzhaft, dass meine Installmethode im Installationsnetz funktionierendes Internet voraussetzt. Das einzige Netz, das kurzfristig dafür in Frage kommt und an meinem Arbeitsplatz verfügbar ist, ist das Gästenetz, indem es - natürlich - einen DHCP-Server gibt, der sich - da er mit auf dem als Firewall dienenden Linux-System läuft und noch einige andere Netzsegmente versorgt - nicht so wirklich einfach abschalten lässt.
Also konfigurieren wir den bereits vorhandenen DHCP-Server so, dass er den Testclient qua Mac-Adresse zum Booten an den grml-Terminalserver verweist und schalten den DHCP-Server auf dem grml-Terminalserver aus. Dann der Druck auf den großen Knopf, und - nix passiert. Nach einigen Minuten des Debuggens und der Verifikation dessen, dass es klaglos funktioniert, wenn der zum grml-Terminalserver gehörende DHCP-Server seinen Dienst versieht, kommt ethereal zum
Einsatz, was das Ergebnis hat, dass beide DHCP-Antworten mit dem Verweis zum Booten vom grml-Terminalserver ziemlich identisch aussehen.
Nach kurzer Konferenz im IRC kommt von ixs der Tipp, dass einige ältere PXE-Firmwares
ungeachtet eines anders lautenden Verweises in der DHCP-Antwort immer von dem Rechner booten wollen, der ihnen auch die IP-Adresse zugewiesen hat. Nach ein bisshen tcpdump auf der Firewall bestätigt sich diese Vermutung: Das Drecksding will nicht nur von der IP-Adresse booten, die ihm die IP-Adresse zugewiesen hat, sondern spricht sogar die Server-ID des DHCP-Servers an (die im vorliegenden Fall die externe IP-Adresse der Firewall ist und die nun garantiert auf keinen
Fall nach drinnen antworten wird).
Nun, grml-Terminalserver kann für nicht PXE-fähige Systeme auf sehr komfortable Weise Bootdisketten erzeugen. Nach Auswahl der entsprechenden Option wirft grml erstmal den C-Compiler an und baut einen grub mit Netzunterstützung für die gängigen Netzwerkkarten. Mit dieser Diskette im Laufwerk klappt's dann auch mit dem Boot des grml-Linux
über das Netz, so dass die Installation des eigentlichen Ziel-Linux fortschreiten kann. Fein.
Durch einen noch aktiven Debugging-Dump sehe ich später, dass sich der grub, mit dem das grml nun über das Netz gezerrt wird, sogar seine Konfiguration in Form einer menu.lst per tftp über das Netz ziehen möchte, was dafür spricht, dass das ganze Spiel extrem flexibel sein wird, wenn man mal noch mehr Flexibilität braucht.
Fazit: Viel gelernt. Unter anderem habe ich zum ersten Mal im Leben ein Linux über das Netz gebootet und festgestellt, dass ein gutes Tool immer noch etwas mehr kann als man vermutet hatte, und dass grml ein wirklich verdammt gutes Tool ist.
Und natürlich: All Hardware Sucks. Aber das wissen wir ja alle.
Comments
Display comments as Linear | Threaded
Hans Bonfigt on :
Siehe auch
http://etherboot.anadex.de/
Kann man auch bequem auf ein IDE-Flash-ROM übertragen.
Gruß Hans