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.
Zugleich kann man dieses Howto verwenden, um eine Installation auf einem Rechner durchzuführen, dessen einzige (oder einfachste) Möglichkeit das Booten über Netz ist.
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 gibt es ihn hier: (Freeware)
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. Nutzt man dieses Verfahren nur zur Installation, spielt dieser Aspekt natürlich keine Rolle.
Wir müssen...
So läuft dann der Bootvorgang ab:
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 für ein Booten via tftp (entnommen aus ):
option domain-name "example.com"; option domain-name-servers ns1.example.com; option subnet-mask 255.255.255.0; default-lease-time 600; max-lease-time 7200; server-name "servername"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.253; option routers 192.168.1.1; } host clientname { # ip des tft servers next-server 192.168.1.3; # zu ladende Datei filename "/tftpboot/tftpboot.img"; hardware ethernet 01:23:45:67:89:AB; fixed-address 192.168.1.90; } |
Für PXE sieht die Konfiguration leicht anders aus, wie im folgenden Bespiel gezeigt wird:
option domain-name "example.com"; default-lease-time 600; max-lease-time 7200; allow booting; allow bootp; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.253; option broadcast-address 192.168.1.255; option routers 192.168.1.1; option domain-name-servers 192.168.1.3; } group { next-server 192.168.1.3; host tftpclient { hardware ethernet 00:10:DC:27:6C:15; filename "pxelinux.0"; } } |
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.
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 weiterzuhelf
Zunächst benötigt man das tool "mknbi-linux" ab Version 0.9.5 von Gero Kuhlmann. Die meisten Distributionen bringen es als fertiges Paket mit (mknbi auf Debian z.B.). Muß man es selbst bauen, findet man die Quellen hier:. Es sollte sich mit "./configure;make;make install" übersetzen und installieren lassen.
Dann setzt man in <config>/base.txt einfach den BOOT_TYPE auf netboot und ruft mkfli4l.sh auf. Es nimmt standartmäßig /tftpboot als tftp-Verzeichnis an und fli4l.tftp als Name des zu generierenden Images. Beides kann man auf der Kommandozeile modifizieren, z.B. wie folgt: sh mkfli4l.sh --tftpbootpath /var/lib/tftpboot --tftpbootimage fli4l.img.
Hier werden keine zusätzlichen Tools benötigt, ein Setzen des Boot-Types auf pxeboot reicht. Ein Aufruf von mkfli4l.sh oder seines Windows-Pendants generiert dann zwei Images, kernel und rootfs.img. Das sind die beiden vom PXE-Bootloader nachzuladenden Dateien. Beim Aufruf kann wieder die Lokation des tftp-Verzeichnisses angegeben werden und zusätzlich noch ein Unterverzeichnis innerhalb des tftp-Verzeichnisses (--pxesubdir).
Es gibt mindestens fünf Möglichkeiten, den Router zu starten, nämlich:
Hat man eine PXE-fähige Motherboard/Netzkartenkombination ist dieser Weg am einfachsten. Eine Beschreibung zur Konfiguration von PXE findet sich hier (eine kurze deutsche Erläuterung folgt hier demnächst):
Ansonsten empfiehlt es 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 den meisten Fällen 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 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 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:
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 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.
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:
Tips zum Schreiben des Flash-Roms von 3com 3c90x und Intel EtherExpress Pro100 finden sich hier:
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.
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.)
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