HowTo: dhcp.leases auf Diskette trotz HD-Boot

Achtung! Diese Anleitung bezieht sich auf fli4l V2.0.x.
Hinweise zu fli4l V2.1.x finden sich am Ende dieses Dokuments

Szenario und Problembeschreibung

Ist der fli4l mithilfe OPT_HD mit Typ A auf Festplatte installiert, wird die Festplatte lediglich als überdimensionale Diskette verwendet. Außer bei Installation auf eine lautlose CompactFlash-Karte ist es wohl in nahezu jedem Fall wünschenswert, daß die Festplatte nach einstellbarer Zeit der Inaktivität in den Sleep-Mode geht, d.h. den Motor abschaltet und so keinen Lärm mehr verursacht und nebenbei auch nur noch einen Bruchteil an Strom verbraucht.

Soll der fli4l aber mithilfe OPT_DHCP auch den DHCP-Server für's Intranet darstellen (z. B. für temporär angeschlossene PCs, Knoppix-Clients oder wechselnde VMWare-VMs), führt der dhcpd eine Leases-"Datenbank" unter /boot/dhcpd.leases. /boot entpricht dem Bootmedium - in diesem Fall also der vfat-Partition /dev/hda1 der Festplatte.

Dummerweise "weckt" jeder DHCP-Request die Festplatte unweigerlich auf, dhcpd schreibt wenige KB - und die Platte legt sich nach der eingestellten Zeit wieder schlafen.
Dieses Spin-Up und Spin-Down dürfte aber speziell den betagten Festplatten (wie sie üblicherweise in fli4l-Routern anzutreffen sind) auf die Dauer nicht besonders gut bekommen.

Idee dazu:

Der fli4l soll meinetwegen von Festplatte booten, aber die dhcpd.leases könnte weitaus besser statt auf der Festplatte auf einer Diskette gespeichert werden (wie im fli4-Diskettenbetrieb - falls OPT_DHCP noch mit auf die Diskette gepaßt hat :-) ).

Der Floppymotor ist auf staendiges Anlaufen ausgelegt, und die Zeit zum Schreiben der wenigen KB ist zu vernachlaessigen - ebenso das Geraeusch bis zum automatischen Spin-Down nach wenigen Sekunden.

Problem 1:
HD-Boot trotz eingelegter Diskette

Hier beißt sich die Katze in den Schwanz: Wenn der Kasten doch von Platte booten soll, stört eine eingelegte Diskette ungemein. Wie kriegen wir den Router also dazu, statt von der Diskette von Festplatte zu booten?

Naive Lösung: Per BIOS nicht von Floppy booten lassen

Man deaktiviert also im BIOS des Router-PCs die Floppy als Bootmedium. Dagegen sprechen drei Argumente:

  1. Kann das ggf. sehr betagte BIOS das überhaupt?

  2. Hat der Router Grafikkarte, Monitor und Tastatur? - Also meiner nicht.;-)
    Ergo ist die simple BIOS-Umstellung mit einem Haufen Schrauberei verbunden, die man sich besser sparen sollte - streng nach dem Motto: "Never change a running system."

  3. Macht man das tatsächlich so, d.h. kramt man Monitor und Tastatur (und ggf. Grafikkarte) hervor, versperrt man sich damit jeden weiteren Notfall-Diskettenboot.
    Es soll ja mitunter in den besten Familien vorkommen, daß man eine fli4l-Festplatteninstallation via Update übers Netz totinstalliert und dann auch die Recovery-Option versagt (weil ggf. nicht installiert).

Bessere Lösung: Diskette mit VGA-COPY formatieren

Das multifunktionale Kopier- und Formatierprogramm "VGA-COPY/386" von Thomas Mönkemeier (mit dem man auch die für den fli4l-Diskettenbetrieb so nützlichen 1.6 MB DMF-Disketten formatieren kann) schreibt bei frisch formatierten Disketten einen speziellen Bootsektor:

Das heißt: Das Diskettenlaufwerk kann bootfähig belassen werden, die VGA-COPY-formatierte Diskette kann beim Rechnerstart im Laufwerk liegen bleiben - und nach wenigen Sekunden Verzögerung wird trotzdem von Festplatte gestartet.

Wichtig: Natürlich kann die frischformatierte Diskette, die später die dhcpd.leases aufnehmen soll, nicht dieselbe sein, mit der die Basis-HD-Installation durchgeführt wird, die ja naturgemäß nicht von Festplatte sondern fli4l von Diskette booten soll.

VGA-COPY/386 ist in der aktuellen Version 6.25 Freeware und kann unter von Thomas Mönkemeiers Homepage gratis heruntergeladen werden.

Alternative Lösung: lilo

Wem das Rumgehuddele mit DOS-Bootdiskette und VGA-COPY zu doof ist, weil der Arbeitsplatz-PC unter einem "ausgewachsenen" Linux läuft, kann selbstverständlich auch ganz anders ganz vorgehen:
Mithilfe von lilo läßt sich eine beliebige Diskette (in diesem Falle unbedingt vorher mit mkdosfs als vfat formatieren) dazu bewegen, den Bootvorgang auf Festplatte fortzusetzen.

Achtung, ungetestet: Kern der Sache dürften folgende Einträge in der lilo.conf sein:

Der Trick ist, nach einem kurzen Timeout ohne jeglichen Benutzereingriff zum Master-Bootsektor der Festplatte auf hda zu verzweigen. Sollte das nicht klappen - na, dann halt /dev/hda1 und noch table=/dev/hda dabeipacken, damit direkt fli4l gebootet wird.

Problem 2:
Automatisches Mounten der Diskette

So weit, so gut: Jetzt muß die Diskette noch unter fli4l verfügbar gemacht werden, d.h. sie muß beim Systemstart mit gemountet werden.

Am einfachsten geht das über das in der eh installierten OPT_HD-Package vorhandene OPT_MOUNT. Kern sind folgende Zeilen in hd.txt:

[Anm.: Wer bereits Mounts eingetragen hat, erhöht entsprechend MOUNT_N und verwendet MOUNT_x_... statt MOUNT_1_... wie in der OPT_HD-Dokumentation beschrieben.]

Wichtig: Nachdem die Diskette später die dhcpd.leases aufnehmen soll, muß sie selbstverständlich ReadWrite gemountet werden. Abgesehen davon kontrolliert man besser 2x, daß der Schreibschutzschieber tatsächlich geschlossen ist und die Diskette somit physikalisch beschreibbar ist. :-)

Zusatzbemerkung: Die Diskette ist übrigens mit derselben Begründung vfat und nicht minix, wie die fli4l-Bootpartition bei Typ A vfat und nicht e2fs ist: DOS-Filesysteme (ohne aktive Schreibprozesse und ungesicherte Daten) kann man mehr oder problemlos "mit dem Powerschalter" herunterfahren.

Problem 3:
Verlagern der dhcpd.leases auf Diskette

Nachdem die eingelegte Diskette nach dem HD-Boot nun ReadWrite unter /floppy erreichbar ist, muß der dhcpd noch dazu bewegt werden, seine Datenbank nicht unter /boot/dhcpd.leases sondern unter /floppy/dhcpd.leases abzulegen.

Das gelingt durch Patchen der Datei opt/etc/rc.d/rc200.dhcp auf dem fli4l-Installationsrechner (also dem, der per imonc die Router-Updates über das Intranet einspielt).

Dort findet sich, ziemlich am Ende der Datei:

Daraus wird:

Das heißt, 3x möchte /boot durch /floppy ersetzt werden.

[Anm.: Die Abfrage am Anfang der Datei if [ "$MOUNT_BOOT" != "rw" ] ist natürlich ziemlich hirnrissig, weil das keinerlei Aussage darüber trifft, ob /floppy nun ReadWrite oder ReadOnly oder ueberhaupt gemountet ist, oder ggf. sogar versehentlich trotz ReadWrite-Mount schreibgeschuetzt ist.]

FERTIG!

Das war's auch schon! Per imonc das opt.tgz und rc.cfg neu erstellen lassen, auf den Router uebertragen, wie oben beschrieben formatierte Diskette einlegen -

Boot's, tut's!

Sinnvollerweise kopiert man noch mit

die bestehende dhcpd.leases um, bevor sich die Platte ein fuer alle Mal schlafen legt. Am besten noch mal neu starten, damit der dhcpd die Datenbank "adoptiert".

Viel Spaß beim Nachvollziehen!

Klicken Sie hier, um die Seite auszudrucken.