Content
Mini-Howto: Comment booter fli4l par le réseau
[Translate to French:] Dieses Howto beschreibt, wie man die Speicherplatzbegrenzung der Diskette, den Lärm einer Festplatte und die Kosten der CompactFlash-Lösung vermeiden kann, indem man den fli4l-Router vom Netz bootet.
Hardware/Software Vorraussetzungen
Man benötigt unbedingt einen PC mit einer "normalen" Linux-Installation, die man zum Erzeugen der vom Netz bootbaren fli4l-Imagedatei benötigt, und der dann auch gleich als Bootserver fungieren kann. Als Bootserver ist aber im Prinzip jedes OS zu gebrauchen, für das man einen dhcp/bootp- und tftp-Server bekommt. Diese Software Pakete gehören bei den diversen Unix-Varianten zum Standard. Für Windows muß man sie teilweise extra kaufen. Server für Windows 9x/NT gibt´s z.B. hier:
http://www.khouzam.net/dhcp/ (Shareware, 15$)
http://tftpd32.jounin.net (Freeware)
http://www.hanewin.de/homee.htm (Shareware)
Wenn wenig Ram vorhanden ist, ist zu beachten, daß für das opt-Archiv (opt.tar.gz) zusätzlich Speicher benötigt wird, weil es anders als beim Booten von Diskette oder Harddisk nicht von diesem Boot-Medium gelesen werden kann, sondern in das im Ram liegende root-Filesystem integriert werden muß. Wenn man sehr viele opt-Pakete verwendet, kann der Speicher also eventuell knapp werden.
Einschränkungen gegenüber anderen Bootmedien
Ein vom Netz bootender fli4l-Router ist im Fall eines Stromausfalls nur dann in der Lage, automatisch neu zu starten, wenn der Bootserver permanent verfügbar ist. Wer eine längere downtime des Routers im Falle eines Stromausfalls nicht tolerieren kann, sollte also von diesem Bootverfahren Abstand nehmen.
Der Ablauf im Überblick
Wir müssen...
- einen dhcp/bootp- und tftp-Server installieren
- ein vom Netz bootbares fli4l-Image erzeugen
- dem Router das Booten vom LAN beibringen
So läuft dann der Bootvorgang ab:
- Der fli4l-Router startet von einer Diskette, aus dem Boot-Rom einer Netzwerkkarte oder aus dem Bios-Chip des Mainboards den Bootcode.
- Der Bootcode sendet einen Bootp- oder Dhcp-Request ins Netz: "ich habe Ethernet-Adresse 00:00:E8:ED:D8:FE (z.B.) Ist da draussen ein Bootp(Dhcp)-Server, der eine IP-Adresse für mich hat?"
- Der korrekt konfigurierte Bootp(Dhcp)-Server auf unserem Standard-Linux oder irgendeinem anderen OS erkennt die Anfrage und schickt seine Konfiguration für den fli4l-Router an den Absender. Darin enthalten ist auch die IP-Adresse eines tftp-Servers und der Pfad des fli4l-Images auf diesem Server
- Der Router zieht das fli4l-Image per tftp von dem ihm mitgeteilten tftp-Server und startet es.
- Fli4l bootet wie gewohnt.
Wie man die Server-Software installiert
Zu diesem Thema möchte ich hier nicht viele Worte verlieren, da die man-pages der dhcp- und tftp-Server, die eigentlich Bestandteil jeder Linux-Distribution sind, das viel besser und umfassender erklären können. Vielleicht hilft aber dieses Beispiel für eine simple dhcpd.conf:
server-identifier bootserver; <- Name des Bootservers
option broadcast-address 192.168.6.255;
subnet 192.168.6.0 netmask 255.255.255.0 {
default-lease-time 2592000;
range 192.168.6.1 192.168.6.1; <- IP-Adresse des Routers
filename "/tftpboot/fli4l.img"; <- Pfad der Image-Datei
}
Der tftp-Server wird üblicherweise über den inetd gestartet, in dessen Konfiguration er dann natürlich auch aktiviert sein muß. Das kann man leicht übersehen - ebenso wie die Einträge in /etc/services:
bootps 67/tcp # BOOTP server
bootps 67/udp
tftp 69/udp
Die Konfiguration der entsprechenden Server für Windows kann ich hier nicht erläutern, weil ich damit wenig Erfahrung habe. Mit der bei Windows-Software üblichen bunten Oberfläche dürfte das aber auch nicht allzu schwierig sein. Falls jemand mit der Konfiguration dieser Tools dennoch Probleme hat, will ich aber gerne versuchen weiterzuhelfen.
Wie man das passende fli4l-Image erzeugt
Zunächst benötigt man das tool "mknbi-linux" ab Version 0.9.5 von Gero Kuhlmann, das hier erhältlich ist: http://netboot.sourceforge.net. Es sollte sich mit "./configure;make;make install" übersetzen und installieren lassen.
Verwirrenderweise ist unter http://etherboot.sourceforge.net eine andere mknbi-Version erhältlich, die auf der inzwischen veralteten original-Version 0.8 basiert, aber eine andere Syntax und eine Versionsnummer 1.x verwendet. Das Skript mknetboot.sh (s.u.) erkennt selbstständig, welche Version installiert ist, und ruft das Tool mit der jeweils passenden Syntax auf.
Wenn mknbi-linux im Suchpfad liegt, legt man das Skript mknetboot.sh ins Wurzelverzeichnis des ausgepackten fli4l-Archivs.
Am Anfang des Skripts sind einige Parameter einstellbar:
- Der Parameter IMAGEFILE für den Pfad der zu erzeugenden netzbootfähigen Imagedatei läßt sich an die jeweilige Konfiguration des Servers anpassen.
- Mit APPEND lassen sich Parameter definieren, die beim Booten des Routers an den Kernel übergeben werden, wie sie z.B. bei Verwendung einer seriellen Konsole nötig sind. Die anderen Parameter erfordern normalerweise keine Anpassung.
- Wird die Variable ROUTER mit einem hostname oder einer IP-Adresse initialisiert, so wird dieser Router nach dem Erzeugen des neuen Bootimages automatisch neu gestartet, was den "Config ändern - Bootimage erstellen - neu starten"-turnaround noch ein bißchen beschleunigt.
Dieses Skript läßt sich jetzt alternativ zu mkfloppy.sh verwenden. Funktioniert das Booten vom Netz erstmal (s.u.) läuft der Neustart des Routers nach einer Konfigurationsänderung folgendermassen ab:
<cite>./mknetboot.sh
Reset des Routers (läuft eventuell auch automatisch s.o.)
Fertig!</cite>
Vom Absetzen des mknetboot Kommandos bis zum Start des Kernels auf dem Router dauert's bei meinem System ca. 40s, ein Wert, der bei Verwendung einer Diskette kaum zu erreichen sein dürfte. Insofern ist dieses Verfahren vielleicht auch für Entwickler ganz interessant.
Wie man dem Router das Booten vom LAN beibringt
Es gibt mindestens fünf Möglichkeiten, den Router zu starten, nämlich:
- von Diskette
- aus einem Bootrom auf der Netzwerkkarte
- aus einem Flash-Rom auf der Netzwerkkarte
- mit der PXE-kompatiblen "Boot from LAN"-Funktion moderner Motherboards
- aus dem (gepatchten) BIOS des Motherboards
Es empfiehlt sich, immer zuerst mit einer Diskette zu testen, weil es wesentlich einfacher ist, ein paar kb auf eine Diskette zu schreiben als für jeden Test ein Eprom zu brennen oder das BIOS zu flashen.
Den in jedem Fall notwendigen Bootcode erhält man am einfachsten über die Website
Hier muß nur der Typ der verwendeten Ethernetkarte und für den Start von Diskette "Floppy bootable ROM Image" als Ausgabeformat eingestellt werden. Mit "Configure" lassen sich weitere Optionen auswählen, die im Allgemeinen aber nicht benötigt werden. Mit "Get ROM" holt man sich dann das typischerweise 16kB kleine Image, das man mit cat <Dateiname> >/dev/fd0 auf eine leere formatierte Diskette schreiben kann.
(Verwendet man ein opt-Paket, das die Diskette als nicht flüchtigen Speicher verwendet, benötigt man eine DOS-formatierte Diskette. In diesem Fall kommt man wahrscheinlich mit einer bootfähigen DOS-Diskette und dem "DOS .COM Executable ROM Image" weiter, das auf rom-o-matic angeboten wird. Getestet habe ich das allerdings noch nicht.)
Die eigentliche Software, die diesen Bootcode erzeugt, und für die die rom-o-matic Site nur als komfortables Frontend dient, ist das etherboot-Paket, das als Source auf http://etherboot.sourceforge.net/ verfügbar ist. In src/NIC findet man Informationen über die unterstützten Ethernetkarten, in src/Config lassen sich die Optionen einstellen, die man bei dem Web-Interface über "Configure" erreicht. Mit "make" wird das Ganze dann für alle Ethernetkarten übersetzt, mit make bin32/<Typ der Ethernetkarte>.fd0 wird das Image auf die Diskette geschrieben. Für nähere Informationen verweise ich auf die in dem Paket enthaltene Dokumentation.
Startet man den Router nun mit dieser Diskette, dann sollte eine Meldung erscheinen, daß eine Ethernetkarte vom Typ xy mit Parametern blablabla gefunden wurde und nun nach einem dhcp-Server gesucht wird. Hat man den korrekt konfiguriert, werden die IP-Adressen des Servers und des Routers und der Pfad der fli4l Imagedatei ausgegeben. Darauf folgt der Versuch, den tftp-Server zu kontaktieren. Ist auch der korrekt konfiguriert, sollten nach wenigen Sekunden die üblichen Meldungen des bootenden Linux-Kernels erscheinen. Dieser netboot-dump zeigt ein Beispiel für den typischen Ablauf eines solchen Bootvorgangs. (Für diesen und andere Beiträge zu diesem Howto Dank an Stefan Krister!) Wer sich mit einem Start von Diskette zufrieden gibt, ist damit am Ziel. Herzlichen Glückwunsch! :-)
Vielleicht möchte man aber auch lieber ganz auf die Floppy verzichten, weil Disketten ja keine besonders zuverlässigen Datenträger sind. Das geht dann wie folgt:
Start aus einem Bootrom
Man kann - ganz klassisch - ein Bootrom verwenden, für das es auf praktisch jeder Ethernetkarte einen Sockel gibt. Dafür braucht man normalerweise einen Eprom-Brenner. Es gibt aber auch Netzwerkkarten, die Flash-Roms unterstützen bzw. schon ein Flash-Bios mitbringen (z.B. von 3com, s.u.). Auf www.rom-o-matic.net ist nun als Ausgabeformat "Binary ROM Image" einzustellen. Außerdem muß man der Netzwerkkarte mitteilen, daß sie nun ein Bootrom hat. Bei sehr alten Karten geht das meist über Jumper, bei modernen Karten gibt es dafür normalerweise ein setup-Programm auf der Treiberdiskette. Gelegentlich tritt das Problem auf, daß das BIOS des Motherboards das Bootrom der Netzwerkkarte nicht aktiviert. Der Router verhält sich dann, als wäre das Bootrom gar nicht vorhanden. Zu solchen und anderen Problemen, die mit dem ROM, nicht aber beim Start von Diskette auftreten, verweise ich auf die dem Etherboot-Paket beiligende Dokumentation. Ich kann dazu leider keinen Support anbieten.
Start aus einem Flash-Rom auf der Netzwerkkarte oder mit der "Boot from LAN" Funktion des Motherboards
Es gibt verschiedene Verfahren, PCs vom Netz booten zu lassen. Etherboot ist nur eine Möglichkeit, Intels "PXE" ist eine andere, zu Etherboot inkompatible. Das heißt: das BIOS einer Netzwerkkarte oder eines Motherboards, das versucht, den PC nach dem PXE-Standard zu booten, kann mit einem für Etherboot erzeugten Image nichts anfangen. Es gibt zwei Ansätze, dieses Problem zu lösen: entweder man schreibt den Etherboot-Bootcode in das Flash-Rom der Netzwerkkarte (zum Thema "Motherboard-BIOS patchen s.u.), oder man bootet mit dem originalen PXE-Bootcode einen Etherboot-Loader, der dann das eigentliche Image lädt. Letztere Variante wird in diesem Howto ausführlich erklärt:
http://www.ltsp.org/documentation/pxe.howto.html
Tips zum Schreiben des Flash-Roms von 3com 3c90x und Intel EtherExpress Pro100 finden sich hier:
http://www.rom-o-matic.net/5.0.2/contrib/3c90xutil/
http://www.rom-o-matic.net/5.0.2/contrib/eepro100notes/
Ich habe weder das Eine noch das Andere getestet, kann hierfür also auch keinen Support anbieten. Ich erwähne diese Möglichkeit hier nur der Vollständigkeit halber.
Start aus dem BIOS des Motherboards
Schließlich kann man bei modernen Motherboards, die ein Award-Bios mit einer Option zum Booten vom LAN haben, den Teil des BIOS, der für das Booten vom LAN zuständig ist, durch den von etherboot bzw. rom-o-matic erzeugten Code austauschen. Dazu braucht man ein Tool namens cbrom.exe, das den Programmierern von Award wohl irgendwann mal ins Internet entwischt ist. Eine offizielle Download-Seite gibt es dafür nämlich nicht. Man findet mit den üblichen Suchmaschinen aber leicht eine der diversen im Internet verfügbaren Versionen. Man liest dann zunächst das Motherboard-BIOS mit den üblichen Tools (awdflash etc.) aus, läßt sich dann mit cbrom.exe die einzelnen Bestandteile anzeigen, tauscht das richtige Modul durch das "Binary ROM Image" von rom-o-matic aus und flasht das neue BIOS wieder zurück. Ich habe das selbst schon erfolgreich getestet, werde hier aber keine detaillierte Anleitung geben, weil mir die Sache zu heikel ist. Wer sein BIOS kaputtflasht und dann mit einem funktionslosen Motherboard dasteht, ist selber schuld! (Davon abgesehen bieten die alten Boards, die normalerweise für fli4l-Router verwendet werden, diese Opotion ohnehin nicht an.)
Support
Wenn jetzt noch Fragen offen sind (kann ich mir gar nicht vorstellen... ;-) wendet euch bitte an jemanden der sich damit auskennt, oder direkt an mich. Auch wenn bei euch alles problemlos läuft, wäre ich für ein kurzes Feedback dankbar, weil mich natürlich interessiert, wieviele fli4l-user die Lösung einsetzen. Danke und viel Erfolg mit mknetboot!
Christoph Peus - März 2003
