8cm-Multiboot-CDROM mit angepasstem Knoppix

ArticleCategory:

System Administration

AuthorImage:

[Photo of the Author]

TranslationInfo:

original in de: Tjabo Kloppenburg

AboutTheAuthor:

Infiziert wurde ich 1996. Slackware 3.1 :-). Das ist einige Zeit her, aber der Virus hat mich nicht mehr losgelassen. Scripte, GAWK, Perl, PHP, Python -- das ist meine Welt.

Abstract:

Nach der Lekt�re von Linuxfocus-Artikeln und anderen Webseiten habe ich nach einigen Versuchen schlie�lich eine Methode gefunden, um eine bootf�hige CDROM zu erstellen, die neben diversen sauberen Bootdisketten (Viren!) auch z.B. ein angepasstes Knoppix booten kann.
Als 8cm-CDROM passt die in jede Tasche, und ist dann ein praktischer Helfer in der Not...

ArticleIllustration:

[Illustration]

ArticleBody:

Voraussetzungen

Ich setze einfach mal ein paar Kenntnisse voraus. Man lernt ja auch nichts, wenn einfach alles da steht, und dann viellicht auch noch ohne Fehler... :-)
Man sollte auf jeden Fall einen CD-Brenner haben, der am besten auch CD-RWs brennen kann -- das rentiert sich sehr schnell, da sich immer mal ein kleiner Fehler einschleichen kann. Einen CD-RW Rohling sollte man nat�rlich haben, 8cm-CDRs und ein Linuxsystem mit ein paar hundert freien MBs.
Sp�ter, beim Anpassen von Knoppix (im Grunde Debian), erleichtert eine schnelle Netzanbindung einiges, da die zu installierenden Pakete ja irgendwoher kommen m�ssen.
Debian-Erfahrungen sind gut und man sollte auch schon mal ein Loopdevice in der Hand gehalten haben...

Grundlagen

�hnlich wie beim Booten von einer Diskette oder einer Festplatte wird beim Booten von einer entsprechend pr�parierten CDROM vom BIOS etwas in den Speicher geladen, und dann dort gestartet. CDROMs waren urspr�nglich nicht f�r das Booten gedacht, und so musste man sich etwas einfallen lassen.

Dazu wurde der El-Torito-Standard vereinbart, der einerseits auf der CDROM eine bestimmte Struktur vorsieht und andererseits dem BIOS die Rolle zuweist, diese spezielle Strukur von der CDROM in den Speicher zu laden, um dort ein Diskettenlaufwerk zu simulieren. Wenn dort eine Bootdiskette ist, wird diese gebootet. Ganz normal.

So k�nnten wir also schon eine CDROM erstellen, die eine einzige Diskette bootet -- und das k�nnte z.B. auch eine 2.88MB-Diskette sein. Bzw. das Image einer solchen Diskette.

Nun, eine einzelne Diskette macht noch kein Multiboot. Hier hilft Boot-Scriptor weiter, ein Bootloader, der auf der CDROM vorliegende Diskettenimages dem BIOS unterjubeln kann. Man bootet also mit Boot-Scriptor (allerdings ohne Disk-Emulation) und kann dann per Men� zwischen vielen Bootimages w�hlen, die dann mit Emulation gebootet werden.

Diese Bootimages k�nnen die verschiedensten Disketten enthalten: diverse Windoze-Versionen, NT-Passwort-Changer, oder auch eine Knoppix-Bootdisk. Dazu sp�ter mehr.

Grundger�st

Wir m�ssen irgendwo ein Verzeichnis haben, in dem wir die Verzeichnis-Struktur der CDROM aufbauen k�nnen. Ich gehe einfach einmal davon aus, dass wir in "/data" viel Platz haben. Dort legen wir f�r das Projekt ein Verzeichnis "mboot/" an und darin z.B. "toolcd/" f�r den sp�teren CDROM-Inhalt. Ein zus�tzliches Verzeichnis "mboot/archive/" kann weitere Dateien aufnehmen, wie z.B. die verwendeten Virenscanner als Originalarchiv.

Bootmen� mit Boot-Scriptor

Besorge Dir Boot-Scriptor, und auch die INI-Dateien von dem Server. Die Dokumentation des Programms befindet sich �brigens nur online auf dem Server, nicht im Archiv.

Boot-Scriptor braucht ein eigenes Verzeichnis "bscript/" auf der CDROM, darin den Loader, ggf. eine Grafik, und vor allem eine Datei "bscript.ini".
In dieser Datei kann man ein Bootmen� in einer Sprache �hnlich BASIC programmieren, wobei mittels "onkey" auf Tastendruck hin im Programm verzweigt werden kann. Nach Verzweigung wird dann z.B. per "memdisk" das Image einer Bootdiskette gebootet:

print "\ac\c0e--=> Meine MultiBoot Mini-CDROM <=--"
print "F1 Bootdisk1"
print " w warm reboot"

MenuLoop:
onkey f1 goto bootDisk1
onkey w reboot warm
goto MenuLoop

bootDisk1:
memdisk \images\boot1.img

Nat�rlich gibt es noch eine ganze Reihe weiterer Kommandos. Die findest du in der Doku, bzw. den INI-Dateien von der Boot-Scriptor Homepage.

Images von Bootdisketten erzeugen

F�r einen ersten Test reicht es aus, eine einzelne existierende Bootdiskette mit dem Unixtool "dd" einzulesen. Dazu eignet sich z.B. eine normale Windoze - Bootdiskette, oder eine mit LILO erstellte Bootdiskette:

  ( Diskette einlegen)
  # cd /data/mboot/toolcd
  # mkdir images         (f�r die Bootdisketten-Images)
  # dd if=/dev/fd0 of=images/boot1.img

ISO-File erstellen und Brennen

Das Programm "mkisofs" muss so aufgerufen werden, dass der Bootloader korrekt eingebunden wird. Der Pfad zum Bootcode ("-b") ist relativ zum Basisverzeichnis der CDROM ("toolcd/"):

# cd /data/mboot
# mkisofs -r -o iso.01 -b bscript/loader.bin \
          -no-emul-boot -boot-load-size 4 toolcd

Das erzeugte ISO-File muss nun noch auf die CDRW gebrannt werden, die wir ggf. vorher l�schen m�ssen. Daf�r gibt es bei "cdrecord" zwei Modi: "blank=fast" und "blank=all". Die "fast"-Variante ist wesentlich schneller und hat bei mir bislang jedes Mal ausgereicht.

Um das ISO-File auf das korrekte Device zu brennen, muss man mit "cdrecord -scanbus" herausfinden, welches Ger�t das richtige ist. Wird kein Ger�t angezeigt, muss man ggf. mit "modprobe ide-scsi" erst das Modul f�r den Betrieb von SCSI-Ger�ten �ber IDE nachladen.
# cdrecord -scanbus
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 J. Schilling
Linux sg driver version: 3.1.22
Using libscg version 'schily-0.5'
scsibus0:
   0,0,0     0) 'LG      ' 'CD-RW CED-8083B ' '1.05' Removable CD-ROM
   ...

# cdrecord -v dev=0,0,0 speed=32 iso.01

Wenn die CDRW nur kleinere Geschwindigkeiten vertr�gt, wird "cdrecord" automatisch diese kleine Geschwindigkeit verwenden.

Wenn die CD fertig gebrannt ist, sollte man einen Bootversuch wagen.

Makefile erstellen

Der Aufruf von "mkisofs" hat viele Zeichen, und damit auch viele Chancen f�r Vertipper. "cdrecord" will auch korrekt aufgerufen werden - es liegt also nahe, ein Bashscript oder ein Makefile zu erstellen, das die korreten Aufrufe �bernimmt. Dabei ist es eine gute Idee, das Makefile im CDROM-Verzeichnis unterzubringen, und nach drau�en zu verlinken.

�berhaupt ist es eine gute Idee, von Anfang an alles auf die CDROM mit drauf zu tun, was man f�r die Erstellung einer neuen CDROM ben�tigt. Das versetzt einen in die Lage, auch drau�en "im Feld" eine neue Version zu zaubern. Und gleichzeitig ist die CDROM ihr eigenes Backup.

Das Makefile kann relativ simpel aufgebaut sein, z.B. so:

BASE = toolcd
DEV = 0,0,0
SPEED = 4
VERSION = 01
ISO = iso.$(BASE).$(VERSION)

blank:
	cdrecord -v dev=$(DEV) blank=fast

blankall:
	cdrecord -v dev=$(DEV) blank=all

iso:
	echo "L�sche ~ files:"
	@find $(BASE) -name "*~" -exec rm {} \;
	echo "Erzeuge ISO file:"
	@mkisofs -r -o $(ISO) -b bscript/loader.bin -no-emul-boot -boot-load-size 4 $(BASE)
	@echo
	ls -al $(ISO)

burn:
	cdrecord -v dev=$(DEV) speed=$(SPEED) $(ISO)

Die Einr�ckungen sind TAB-Zeichen.

Das Makefile kann z.B. in "/data/mboot/toolcd/scripte" liegen, und nach "/data/mboot/Makefile" verlinkt werden:
# cd /data/mboot
# ln -s toolcd/scripte/Makefile Makefile
Das Erstellen einer neuen CDROM nach einer Ver�nderung im CD-Verzeichnis ist dann eine Sache weniger simpler Kommandos im "mboot/" - Verzeichnis:
# make blank
# make iso
# make burn

Das ist dann schon ein Hauch von Rapid-Application-Development...

Weitere Bootdisketten

Weitere Bootdisketten findet man einerseits in seinen eigenen Diskettenboxen und andererseits z.B. im Internet. Nat�rlich wei� man im Grunde nie ganz genau, was auf so einer Bootdisk aus dem Internet wirklich drauf ist. Ggf. lohnt es sich, eine Suchmaschine nach der Url einer Bootdisk-Sammlung zu befragen, um zu sehen, ob es da mal Probleme gab.

Eine Quelle, von der ich ein paar Bootdisks ausprobiert habe, ist www.bootdisk.com. Die Disketten dort sind englische Versionen, zumeist mit CDROM-Support. Praktisch ist auch die "drdflash"-Diskette, eine minimale Bootdiskette. Falls man mal "im Feld" eine Bootdiskette f�r einen Flasher braucht, kopiert man das Diskettenimage einfach mit Rawrite.exe (DOS) oder dd (Linux) auf eine Diskette. Dann noch den Flasher drauf kopieren, und schon kann man sein BIOS flashen...

Rawrite.exe findet man z.B. auf der ersten CDROM der meisten Linuxdistributionen.

Andere sinnvolle Inhalte

Wenn man mit der CDROM eine M�glichkeit in der Hand hat, sauber zu booten, liegt der Gedanke nahe, einen Virenscanner mit auf die CDROM zu packen. Ich verwende daf�r "F-Prot" von F-Secure. Von dem Programm gibt es eine Linux- sowie DOSversionen, die man frei herunterladen kann.

Dabei ist es etwas l�stig, dass man f�r Updates der Virendefinitionen eine neue CDROM brennen muss. Allerdings soll es neuerdings 8cm-CDRWs geben, die man dann einfach neu beschreiben w�rde. Alternativ k�nnte man -- ein entsprechend ausger�stetes Linux auf der CDROM und die entsprechende Infrastruktur vorausgesetzt -- die Updates auch �bers Internet holen. Solch ein Linux -- Knoppix in einer abgespeckten Version -- kommt also n�chstes auf unsere CDROM.

Knoppix integrieren

Wer Knoppix noch nicht kennt, sollte es sich dringend anschauen: Ein von CDROM bootendes, umfangreiches Linux - Desktopsystem. Mit Hardwareerkennung. Und vielen andern tollen Dingen.

Allerdings passt Knoppix nicht auf eine 8cm-CDROM... Praktischer Weise kann man Knoppix jedoch relativ einfach an eigene Bed�rfnisse anpassen, ein paar spezielle Debiankenntnisse vorausgesetzt.

Knoppix verwendet einen speziellen Trick, um 2-3 GB Software auf einer 650MB-CDROM unterzubringen: Das komplette Filesystem liegt als komprimierte Datei vor, die beim Booten �ber einen speziellen Treiber ("cloop.o", "compressed loop device") gemountet wird. Das findet statt in der Datei "boot.img" im Knoppixverzeichnis, bzw. dem Bereich der Knoppix - Bootcdrom, die mit einem Kommando wie

# mkisofs ... -b knoppix/boot.img ...

erstellt wurde.

Es lohnt sich absolut, die Diskette �ber ein Loopdevice zu mounten, und den Inhalt zu untersuchen. Unter anderem findet man dort eine Initial Ramdisk (initrd), die besagtes "cloop.o" enth�lt, und Code zum Laden dieses Kernelmoduls.

Beim Booten wird das in die CDROM "geimpfte" boot.img vom BIOS in ein emuliertes Diskettenlaufwerk geladen, wo die "Diskette" dann bootet. Dabei wird der Kernel von der Diskette geladen und diesem die Initial Ramdisk �bergeben. Der Initprozess l�dt u.a. das cloop-Modul und durchsucht die angeschlossenen Ger�te nach einer Datei "/KNOPPIX/KNOPPIX". Wird ein passendes Ger�t gefunden, dann wird versucht, die KNOPPIX-Datei per "cloop" ins Filesystem einzuh�ngen.

Da es der Diskette in "boot.img" egal ist, ob es von einer echten Floppy oder einer emulierten Floppy startet, k�nnen wir es recht einfach in die "bscript.ini" einbinden und Knoppix so auch von unserer Multiboot-CDROM starten.

Knoppix anpassen

Knoppix mit seinen 650MB ist viel zu gro� f�r unsere handliche 8cm-CDROM. Da ich keine Lust hatte, von Hand eine komplette Knoppix auf ein vertretbares Minimum zu vekleinern, habe ich von der Arbeit anderer profitiert: Die Webseite Knoppix Customizations h�lt eine ganze Reihe von modifizierten Knoppix-Versionen bereit, wobei ich mich f�r "Model_k" entschieden habe. "Model_k" ist sch�n klein (rund 50MB), allerdings fehlt ein GUI und Support f�r andere Tastaturbelegungen als Englisch.
"Damn Small Linux" ist sicher eine gute Alternative.

Die Anleitung, die ich hier gebe, ist eine Ultrakurz-Version der Anleitung von Sunil Thomas Thonikuzhiyil, die ausf�hrlich auf Englisch auf das Remastern von Knoppix eingeht.

Der eigentliche Witz beim Remastern von Knoppix liegt darin, dass Knoppix ein komplettes Linux mit funktionierender Paketverwaltung ist -- ein schreibbares Filesystem vorausgesetzt.

Wir booten nun das von uns auserkorene Basis-Knoppix, egal ob von einer eigenen CDROM oder unserer Toolcd, gehen dann so vor:

Das neue komprimierte Filesystem wird dann in das CD-Verzeichnis nach "/KNOPPIX/KNOPPIX" kopiert, wo es dann beim Booten von der Knoppix - Bootdiskette "gefunden" wird.

Boote nun Knoppix und dann...:

Datenbereich mounten und Filesystem kopieren:
# mkdir /1
# mount -t ext2 /dev/hda<n> /1
# cp -Rp /KNOPPIX /1

Ins kopierte, unkomprimierte System wechseln:
# chroot /1/KNOPPIX
# mount -t proc /proc proc

Netzwerk konfigurieren:
# (ggf. mit ifconfig eine IP einstellen, wenn keine per DHCP gefunden wurde.)
# (ggf. Nameserver in /etc/resolv.conf einstellen. Dazu den Link l�schen.)

Pakete (de)-installieren:
# apt-get install joe   (Model_k 1.2 hat keinen editor)
# ...

Wenn das System fertig konfiguriert ist, muss man es sauber verlassen:
# (ggf. den Link der /etc/resolv.conf wieder herstellen)
# umount /proc
# exit


Wir hatten gesehen, dass die Datei "/KNOPPIX/KNOPPIX" �ber "cloop" gemountet wird. Vom "loop"-Device her wissen wir, dass damit das Image eines Filesystems gemountet werden kann. Bei Knoppix wird das Image zus�tzlich komprimiert -- wir m�ssen nun also lediglich mit "mkisofs" ein ISO-Image einer CDROM erstellen und entsprechend komprimieren. Das Tool dazu ist Teil von Knoppix.

Knoppix enth�lt also auch alles, was man braucht, um ein neues Knoppix zu erstellen.

# mkisofs -R /1/KNOPPIX | create_compressed_fs - 65536  > /1/KNOPPIX.2

Und nun m�ssen wir nur noch die neue komprimierte KNOPPIX-Datei auf unsere Mini-CDROM (erst die CD-RW) jonglieren, und ausprobieren...

Fazit

Wie wir gesehen haben, ist es relativ einfach, selbst eine bootf�hige CDROM zu erstellen. Dazu noch eine mit sinnvollem Inhalt. Wir haben dabei nicht jedes Rad neu erfunden, sondern konnten von der Arbeit anderer profitieren.

Ich denke, es ist �berhaupt eine gute Idee, die eigenen Sachen so auszustatten, dass wiederum jemand anders davon profitieren kann.

Und wie gesagt, wenn die CDROM ihr eigenes Backup ist, profitieren auch wir selbst davon.