original in de: Tjabo Kloppenburg
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.
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...
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...
Ä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.
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.
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.
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
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
# 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
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)
# cd /data/mboot # ln -s toolcd/scripte/Makefile MakefileDas 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
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.
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.
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 ...
cloop.o
" enthält, und Code zum Laden dieses Kernelmoduls.
bscript.ini
"
einbinden und Knoppix so auch von unserer Multiboot-CDROM starten.
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:
# mkdir /1 # mount -t ext2 /dev/hda<n> /1 # cp -Rp /KNOPPIX /1
# chroot /1/KNOPPIX # mount -t proc /proc proc
# (ggf. mit ifconfig eine IP einstellen, wenn keine per DHCP gefunden wurde.) # (ggf. Nameserver in /etc/resolv.conf einstellen. Dazu den Link löschen.)
# apt-get install joe (Model_k 1.2 hat keinen editor) # ...
# (ggf. den Link der /etc/resolv.conf wieder herstellen) # umount /proc # exit
mkisofs
" ein
ISO-Image einer CDROM erstellen und entsprechend komprimieren. Das Tool dazu ist Teil von Knoppix.
# mkisofs -R /1/KNOPPIX | create_compressed_fs - 65536 > /1/KNOPPIX.2
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.