fli4l und Netzboot

Mini-Howto: Wie man fli4l vom Netz bootet

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.

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 gibt es ihn hier:  (Freeware)

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. Nutzt man dieses Verfahren nur zur Installation, spielt dieser Aspekt natürlich keine Rolle.

Der Ablauf im Ãœberblick

    Wir müssen...

  1. einen dhcp/bootp- und tftp-Server installieren
  2. ein vom Netz bootbares fli4l-Image erzeugen
  3. dem Router das Booten vom LAN beibringen


    So läuft dann der Bootvorgang ab:

  1. Der fli4l-Router startet von einer Diskette, aus dem Boot-Rom einer Netzwerkkarte oder aus dem Bios-Chip des Mainboards den Bootcode.
  2. 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?"
  3. 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 eines Images auf diesem Server
  4. Der Router zieht das Image per tftp von dem ihm mitgeteilten tftp-Server und startet es.
  5. Ist das Image ein bootbares fli4l-Image, bootet es wie gewohnt. Ist es jedoch ein PXE-Booloader, lädt dieser im nächsten Schritt die benötigten Dateien per tftp vom Server und bootet dann fli4l. Wie die nachzuladenden Datein bestimmt werden, hängt vom PXE-Bootloader ab.
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 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

Wie man das passende fli4l-Image für ein Booten via tftp erzeugt

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.

Wie man das passende fli4l-Image für ein Booten via PXE erzeugt

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).

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

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:

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  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:

 

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.

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