Über das Netz zu booten, das ist für Linux eigentlich kein Thema. Die hier präsentierte Methode
kann also nur für einige Sonderlinge von Interesse sein, denn der einzig richtige
Weg, über das
Netz zu booten, ist längst mehrfach entdeckt worden.
Da die 3,5''-Diskette mittlerweile auch schon exotisch ist, wird sie als imaginäres
oder auch reales
ursprüngliches Bootmedium benutzt. D.h. sie gibt die Größe vor. Der Inhalt kann jedoch ebenso auf einer CD
liegen. Wenn man jede Diskussion, ob das nicht ein Booten von Diskette sei, vermeiden will, dann gehört der Inhalt
also in das ROM der Netzwerkkarte.
Als Server kommt ein Web-Server (durchaus auch unter Windows) zum Einsatz. Es überrascht also kaum,
dass dessen Adresse hard coded
ist. Er muss sich (aktuell) per IP ansprechen lassen.
Zum Client sollte schon eine 100 MBit-Ethernet-Verbindung bestehen. Der Client bezieht seine IP per DHCP, sodass das Netzwerk irgendwo noch einen DHCP-Server beschäftigen muss. (Das lässt sich zwar sehr, sehr einfach (mit einer statischen IP) ändern, aber dann sind mehrere Clients deutlich problematischer und ein Gateway wird schnell zum geschlossenen Tor.)
Der Client benötigt 128 MByte RAM (das hängt natürlich hauptsächlich vom übrigen System ab) und muss von der
imaginären
Diskette booten können. Eine Platte ist nicht nötig.
Konzeptionell wird lediglich die Cloop-Datei einer KNOPPIX-CD von dieser auf den Web-Server verschoben und per httpfs wird die Cloop-Datei wieder lokal verfügbar. Bei einer KNOPPIX-3.7-CD würden demnach ca. 700 MByte auf den Server verschoben und lediglich linux24, minirt24.gz und der Bootloader verblieben beim Client.
sh-2.05b# tree -s static static |-- [ 142728] ash |-- [ 3] init -> ash |-- [ 29941] insmod |-- [ 600] modprobe `-- [ 3] sh -> ash 0 directories, 5 files
läuftbis es möglich ist, auf die Cloop-Datei zurück zu greifen. Insbesondere findet die Netzwerk-Konfiguration erst in der
Komfort-Umgebung statt. (Wäre auch nicht ganz einfach, ohne die Treiber für die Ethernet-Schnittstelle aus der Cloop-Datei das Netzwerk zu konfigurieren.) Findet KNOPPIX seine Cloop-Datei nicht, so präsentiert es die
spartanischeUmgebung von minirt24 pur, die nicht mal ls bietet. Selbst wenn httpfs keine sonstigen Abhängigkeiten hätte (fusermount), so setzt es jedenfalls ein konfiguriertes Ethernet voraus. Das verlangt nach z.B. ifconfig und route. Dass diese aber per se in der
kastriertenUmgebung laufen, ist eher unwahrscheinlich. (Man versteht unmittelbar, wie es zu der Bezeichung Booten kam.) Rechnet man ca. 1 MByte für den Kern linux24, so bleiben ca. 400 MByte für minirt24 (und 0 für den Bootloader: boot.msg, ldlinux.sys und syslinux.cfg). Dabei ist die Größe einer Floppy von ca. 1,4 MByte als (eher sportliche, denn technische) Grenze unterstellt. Das ist letztlich zu wenig, selbst wenn man die Module für das Booten von CD, USB etc. aus minirt24 entfernen wollte. Glücklicherweise reicht es jedoch aus, fuse.o, fusermount und httpfs noch auf den Server zu verschieben, sodass die ursprünglichen Boot-Methoden unberührt bleiben. (Es bleibt sogar Platz, eine weitere Ethernet-Karte zu unterstützen.)
Es erscheint zwar widersinnig, die von httpfs geforderte Netzwerk-Konfiguration nach minirt24 zu verschieben
und httpfs selbst nicht in minirt24 zu integrieren, aber so ist Booten
: Mit einem wget, das nur 426 Byte
(< 0,5 KByte) groß ist, werden die fehlenden Teile vom Server in die entpackte Ramdisk minirt24
nachgeladen.
(Die entpackte Ramdisk bietet reichlich Platz. Nebenbei bemerkt, wird sie fast vollständig geleert, wenn die Cloop-Datei die Regie übernimmt,
denn z.B. für /etc wird auch wieder Platz benötigt.)
139.4k ash* 50.3k udhcpc* 1018 ls* 763 cp* 504 ps* 502 ifconfig* 485 rm* 426 wget* 320 ping* 260 udhcpc.sh* 255 mkdir* 217 reboot* 165 chmod* 142 ln* 8 route -> ifconfig* 6 halt -> reboot* 6 poweroff -> reboot* 3 init -> ash* 3 sh -> ash*
Variantezur Grundlage genommen).
gestriped- wie es strip nie könnte.(file meldet für diese Binaries auch nur einhellig 'ERROR: Corrupted section header size'). Schließlich bieten sie i.a. nicht einmal ansatzweise die Funktionalität der gleichnamigen Linux-Programme.
wget z.B. kann nur als wget IP path/file aufgerufen werden. Dabei wird http://IP/path/file nur dann geladen, wenn der Ordner path bereits lokal existiert. Es ist also durchaus eine glückliche Fügung, dass diese Programme beim Booten gelöscht werden.
Der DHCP-Client udhcpc ist hingegen ein normales Programm, das - wie der Name andeutet - gegen uclibc (statisch) kompiliert/gelinkt ist. Es ist nicht upx-komprimiert, da es sonst nicht funktionieren würde (- nicht generell, aber in minirt24).
Für eine minirt24 von z.B. 4500 KByte muss man mit einer minirt24.gz von 2000 KByte rechnen -
es sei denn, minirt24 enthält hauptsächlich ein bestimmtes Byte in zigfacher Wiederholung. D.i. jedoch nach einigen Experimenten
nicht mehr der Fall, denn auch gelöschte Dateien hinterlassen ihre Spuren
.
Um eine Größe der minirt24.gz von etwa 50% des in minirt24 belegten Speichers zu erhalten,
muss der unbelegte Speicher also homogenisiert
werden.
dd if=/dev/zero of=trashfüllt die Ramdisk bis zum Überlaufen mit '0'. Nach einem umount ist alles geschrieben, sodass anschließend trash entfernt werden kann (und sollte).
Der Lohn der Mühe ist eine Floppy bzw. deren Äquivalent, die es erlaubt, von einem gewöhnlichen Web-Server zu booten.
Dabei ist die Arbeit auf dem Server - zumindest im LAN - eher flotter als die Arbeit von CD. Die Geschwindigkeit des LANs ist
nicht so entscheidend wie die Größe des Arbeitsspeichers des Client. Eine auf 16K reduzierte blocksize
der Cloop-Datei
wäre vielleicht zu empfehlen.
Eigentlich sollte man in linuxrc auch
mknod /dev/fuse c 10 229 chmod 666 /dev/fuseerwarten, wenn das Modul fuse.o nachgeladen werden muss. (Die asmutils haben auch dafür eine Lösung.) Es ist jedoch einfacher - wenn man minirt24 schon
unter dem Messer hat- das Device gleich in /dev zu erzeugen.