original in de: Tjabo Kloppenburg
de to en: Tjabo Kloppenburg
en to nl: Guus Snijders
Ik raakte geïnfecteerd in 1996. Slackware 3.1 :-). Ik hou van scripten in talen als Python, Perl, GAWK enzovoort. Ook ben ik geïnteresseerd in het booten van apparaten.
Na het lezen van een paar LinuxFocus artikelen en een paar
andere web pagina's, heb ik eindelijk een betrouwbare manier
gevonden voor het maken van bootable (Nederlands: opstartbare)
cdroms voor het opstarten van schone bootdisks (zonder virussen),
single-disk Linux diskettes of zelfs een aangepast Knoppix systeem.
Gebrand op een 8cm cdrom met 183mb. Past in iedere zak, en kan
behulpzaam zijn in vele situaties.
Ik ga er van uit dat je over enige basiskennis van Linux beschikt,
en dat je weet hoe je CDs moet branden. Het hebben van een brander
die ook CD-RW aan kan, kan handig zijn, daar het maken van fouten de
manier is waarop we leren... Wat je nodig hebt zijn een CD-RW, een
paar 8cm CD-Rs (of CD-RW), en een draaiend Linux systeem met een
paar honderd MB vrij.
Later, -bij het integreren van Knoppix- zouden we een snelle Internet
verbinding moeten hebben, omdat we een paar pakketten van Internet
moeten installeren. Als je weet hoe je NFS of SAMBA moet opzetten
voor een lokale Debian mirror, heb je de snelle Iternet verbinding
niet nodig. Ten slotte zou je over enige kennis van Debian moeten
beschikken (installeren en verwijderen van pakketten), of een kennis
/ IRC kanaal om vragen te stellen. En weten hoe je een loopback device
kunt gebruiken.
Het opstarten van cdrom heeft veel weg van het opstarten van
een floppy of harde schijf. Iets op de schijf wordt door de BIOS
in het geheugen gelezen en vervolgens uitgevoerd. In de begin dagen
van de cdroms, waren deze niet bedoeld om van op te starten, dus
moesten de hardware ontwikkelaars enige magie beoefenen: na het
creëren van een paar leveranciers-afhankelijke BIOS uitbreidingen
definiëerden ze uiteindelijk de "el torito" standaard.
Deze definiëert een structuur op de cdrom met een bootdisk
image, om een floppy disk in het geheugen te emuleren. Na het laden
van de disk in het geheugen, boot deze als iedere andere bootdisk.
Met deze floppy emulatie kunnen we een bootable cdrom bouwen met
een enkel image van een boot disk, 1.44MB of 2.88MB. Waarschijnlijk
heb je nog nooit zo'n floppy gezien, maar de BIOS kan er mee overweg.
Tijdens het booten vanaf cdrom hebben geen 2.88MB disk nodig - slechts
een disk image gecreëerd met het loop device en een paar tools
volstaat.
Een enkele disk is nog geen multi-boot disk. We hebben een tool
nodig om andere boot images op het filesysteem te starten.
Boot-scriptor is onze vriend. Met boot-scriptor kunnen we vanaf cdrom
starten met een loader (zonder disk emulatie, ook dat is mogelijk), en
dan kunnen we een disk image in een menu selecteren. Boot-scriptor
zorgt vervolgens voor wat magie om dit image in een floppy disk
emulatie te laden, vanwaar de image zal starten alsof het een diskette
in de floppydrive was.
Deze bootdisks kunnen images zijn van diskettes als windows bootdisks
van verschillende versies, een NT wachtwoord veranderaar, mini Linux
distributies, of een knoppix bootdisk om een middelgroot Knoppix
systeem te starten.
We hebben een directory nodig met genoeg vrije ruimte om de
directory structuur van onze cdrom te bouwen. Ik neem aan dat we
voldoende vrije ruimte hebben in "/data
". De base
directory van ons project zal dan bijvoorbeeld
"/data/mboot
" zijn. Hierin creëren we twee
directories "toolcd/
" (inhoud van de cdrom) en
"/archive
" (originele versies van de gebruikte tools,
zoals bijvoorbeeld virusscanners).
Het archief en de INI files zijn te vinden op
Boot-Scriptor (bootscriptor.org). Er bevindt zich geen
documentatie in het archief, deze is te vinden op de website.
Boot-Scriptor heeft een eigen directory "bscript/
" nodig
op de cdrom, met de loader, een optioneel grafisch bestand (zie de
docs), en een bestand genaamd "bscript.ini
".
Dit bestand definiëert het boot menu in een taal die, net als
basic, commando's als "print
", "onkey
"
(voor het indrukken van toetsen), en "memdisk
" (bootdisk
image) gebruikt.
Bekijk dit korte voorbeeld eens, en schrijf je eigen ini bestand:
print "\ac\c0e--=> my multi boot cdrom with linux <=--" print "F1 Bootdisk1" print " w warm reboot" MenuLoop: onkey f1 goto bootDisk1 onkey w reboot warm goto MenuLoop bootDisk1: memdisk \images\boot1.img
Er zijn nog veel meer commando's. Maak een lokale kopie van de boot scriptor documentatie, en plaats deze ergens in de directory structuur van de cdrom. Deze zul je nog nodig hebben bij je eerste stappen in het begrijpen van de basis commando's.
Voor een eerste test cdrom hebben we slechts een bootdisk nodig,
bijvoorbeeld een windows bootdisk. Of een Linux bootdisk,
gecreëerd met LILO. Of probeer eens een van die kleine single-disk
Linux systemen als HAL of TomsRtBt (2.88MB). Check je favoriete
zoekmachine op het web voor meer informatie.
We gebruiken "dd" om een image bestand te maken van de disk:
( insert disk ) # cd /data/mboot/toolcd # mkdir images (directory for the disk images) # dd if=/dev/fd0 of=images/boot1.img
Het programma "mkisofs" moet aangeroepen worden met de "-b" optie
om er zeker van te zijn dat de bootloader correct wordt
geïnstalleerd. Het pad van het argument "-b" is relatief ten
opzichte van de basisdirectory van de cdrom ("toolcd
"):
# cd /data/mboot # mkisofs -r -o iso.01 -b bscript/loader.bin \ -no-emul-boot -boot-load-size 4 toolcd
bscript.ini
" kunnen je verse cdrom tot de prullenbak
verbannen. Dus is het handiger om een CD-RW te gebruiken :-).cdrecord
" kent hiervor twee modi: "blank=fast
"
en "blank=all
". De fast modus is sneller :).dev
parameter van
je brander te detecteren. Type "cdrecord -scanbus
" om
alle beschikbare apparaten te zien. Als er geen device is, moet je
waarschijnlijk een device driver module als "ide-scsi
"
laden met een commando als "modprobe ide-scsi
".# cdrecord -scanbus Cdrecord 1.10 (i686-pc-linux-gnu) (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
De aanroep van "mkisofs
" bestaat uit veel karakters,
waardoor het snel kan gebeuren dat er iets wordt vergeten of
misgetypt. "cdrecord
" vereist ook correcte parameters,
het is dus een goed idee om een script of een Makefile te gebruiken,
om zeker te zijn van de juiste parameters. Hier zullen we een Makefile
gebruiken voor het "make
" commando. Installeer deze op je
systeem, als deze nog niet aanwezig is. "make" is een van de
commando's die een programmeur zou moeten kennen.
We zullen de Makefile in de cdrom directory structuur plaatsen, en
deze linken met de "mboot/
" directory. Het is een goed
idee om alles wat we nodig hebben voor nieuwe versies, op de cdrom te
plaatsen. Dit maakt het mogelijk om een nieuwe, betere cdrom te
creëren, zelfs als je de bestanden niet meer op de harde schijf
hebt, het is dus gelijk een goede backup... :-).
De Makefile kan vrij simpel zijn. Hier is een voorbeeld:
BASE = toolcd DEV = 0,0,0 SPEED = 4 VERSION = 01 ISO = iso.$(BASE).$(VERSION) OPTIONS= -b bscript/loader.bin -no-emul-boot -boot-load-size 4 blank: cdrecord -v dev=$(DEV) blank=fast blankall: cdrecord -v dev=$(DEV) blank=all iso: echo "deleting ~ files:" @find $(BASE) -name "*~" -exec rm {} \; echo "creating iso file:" @mkisofs -r -o $(ISO) $(OPTIONS) $(BASE) @echo ls -al $(ISO) burn: cdrecord -v dev=$(DEV) speed=$(SPEED) $(ISO)
/data/mboot/toolcd/scripts
" is
goed. We zullen deze symlinken in
"/data/mboot/Makefile
":
# cd /data/mboot # ln -s toolcd/scripts/Makefile Makefile
mboot/
" directory:# make blank # make iso # make burn
Je zult meer bootdisks vinden in je diskette dozen en op het
world wide web. Maar onthoud dat je nooit zeker weet wat zich
op een disk image bevindt die je download vanaf het Internet.
Ik denk dat het altijd een goed idee is om zoekmachine als Google
te gebruiken, om te zien of iemand anders problemen tegenkwam met
een bootdisk van een site. En controleer de disks met een
virusscanner.
Ik heb een paar bootdisks genomen van www.bootdisk.com. De disks zijn
engelse versies, de meeste met cdrom ondersteuning. Je kunt
een virusscanner op de cdrom gebruiken, of een bios update
uitvoeren vanaf een andere cdrom. Ik vind vooral het "drdflash"
bootdisk image aardig, welke een minimale bootdisk oplevert met
voldoende ruimte voor een bios flasher. Je kunt gewoon
"rawrite
" (dos) of "dd
" (Linux)
gebruiken om het image op een diskette te plaatsen en je hebt
een bootable diskette voor de flasher in geen tijd. Ik ben ooit
bij een LAN party geweest, en zag hoe lang de Linux gurus nodig
hadden om een bootable floppy te vinden voor een BIOS update...
:-)
Opmerking: "rawrite
" is te vinden op de meeste
gangbare Linux distributie cdroms.
Met je kleine en handige 8cm cdrom heb je een tool om overal
met een schone disk te kunnen booten. Waarom geen virus scanner
op de cd plaatsen? Ik heb gebruik gemaakt van "F-Prot" van
F-Secure. Ze bieden
zowel een Linux als een Dos versie aan om vrij te downloaden.
Het enige probleem is hoe je de virus definities op de cdrom kunt
updaten. Ik heb gehoord van 8cm CD-RWs, maar heb deze nog nooit
gezien in een winkel. Helaas. Een andere oplossing zou zijn om
een minimaal Linux systeem van onze 8cm cdrom te booten en
vervolgens nieuwe definitie files te downloaden via het Internet.
Twee van de problemen die ik tegenkwam met f-prot waren:
Als je nog niet bekend bent met Knoppix, kun je er nu een
blik op werpen! Het is een compleet, bootable Linux systeem met
2-3 GB aan software op een enkele 650MB live cdrom. Inclusief
hardware detectie en andere nuttige features. Maar het past niet
op onze mini cdrom.
Geen nood, het is mogelijk om de knoppix cdrom (of een soortgelijk
project) te 'remasteren'. Je hoeft alleen over wat basiskennis
van Debian te beschikken, en nog wat meer ruimte op je harde
schijf.
Knoppix gebruikt wat speciale magie om 2-3 GB software op een
650MB cdrom te krijgen: het bestandssysteem is gecomprimeerd in
het bestand "/KNOPPIX/KNOPPIX
", en wordt gemount
door het initiële init proces van een bootende floppy disk
(*) met een speciale "cloop
" driver module.
(* In feite is het de inhoud van een bootdisk image, gebruikt
bij het aanroepen van "mkisofs
" met de
"-b
" optie.)
Het bootdisk image dat gebruikt is om de Knoppix cdrom te
creëren, kan gevonden worden in de "/KNOPPIX
"
directory van iedere Knoppix cdrom: "boot.img
".
Hier zien we het idee weer om alle genen voor de volgende
evolutionaire stap "aan boord" te bewaren...
Ik stel voor om de Knoppix bootdisk image te mounten met het loop
device om te proberen te begrijpen hoe het boot proces van Knoppix
(of Linux) werkt. Zoek op het web naar de "bootdisk howto" voor
meer informatie. Een van de bestanden die je zult aantreffen in
de disk image, is een ".gz" gecomprimeerd bestand met een
bestandssyteem image erin. Dit is de initiële ramdisk met het
ramdisk bestandssysteem dat gebruikt wordt op de vroege momenten
van het booten.
Tijdens het booten van Knoppix gebeurt dus dit: Het "boot.img"
bestand in het iso bestand laadt de Linux kernel van de
geëmuleerde floppy disk, en laadt de ramdisk. Het linuxrc
proces laad de "cloop.o" driver module, en zoekt naar een bestand
"/KNOPPIX/KNOPPIX" op alle aangesloten apparaten met een bekend
bestandssysteem. Inderdaad, het is ook mogelijk om een
gecomprimeerde Knoppix vanaf de harde schijf te starten, maar dit
heb ik nog niet getest.
Als het apparaat met het gecomprimeerde bestandssysteem is gevonden,
wordt deze gemount, en de hardware detectie en alle andere dingen
worden gestart.
De floppy disk "boot.img" geeft niks om waar vanaf hij boot
(floppy drive, geëmuleerd), dus is het vrij simpel te
integreren met onze multi boot cdrom: kopiëer "boot.img" in
de "images/
" directory, en voeg een hotkey toe aan
"bscript.ini
".
Een originele knoppix cdrom is veel te groot voor onze handige
8cm cdrom. Denk er aan: we hebben 183 MB op een mini cdrom. We
zullen vele dingen moeten verwijderen, maar dat is teveel werk.
We kunnen ook gebruik maken van het werk van anderen. De website
Knoppix Customizations bevat verwijzingen naar een aantal
gemodificeerde Knoppix versies, sommige geminimaliseerd tot een
gecomprimeerde grootte rond de 50-60 MB. Ik besloot gebruik te
maken van "Model_k". Deze is klein, bevat geen GUI, en de
ondersteuning voor niet-engelse toetsenborden ontbreekt. Misschien
dat "Damn Small Linux" beter is...
De instructies die je hieronder kunt vinden, komen van een document
van Sunil Thomas Thonikuzhiyil, waarin het remastering proces
gedetailleerd wordt beschreven. Als je wilt weten hoe je de boot
kernel of de initiële ramdisk moet aanpassen, is dit een
aanrader. Maar meestal hebben we dat allemaal niet nodig als we
"Model_k" of een verglijkbaar systeem gebruiken voor onze mini
cdrom...
Het basis idee achter het remasteren van knoppix ligt in het
feit dat knoppix een volledig werkend Debian systeem is - als er
een beschijfbaar bestandssysteem is [een cdrom is read-only :)].
Het belangijkste deel van het remasteren is de installatie en
de-installatie van packages. Niet veel magie hier.
Om een Knoppix systeem te veranderen, moeten we eerst opstarten.
Daarna zijn de volgende stappen nodig:
# mkdir /1 # mount -t ext2 /dev/hda<n> /1 # cp -Rp /KNOPPIX /1
# chroot /1/KNOPPIX # mount -t proc /proc proc
# (gebruik ifconfig als er geen DHCP server op je netwerk aanwezig is.) # (verander de nameserver setup als er geen DHCP is. Verwijder de link "/etc/resolv.conf" en maak je eigen bestand.)
# apt-get install joe (Model_k 1.2 komt zonder editor :) ) # ...
# (als je /etc/resolv.conf veranderde, verwijder deze en voeg de link toe.) # umount /proc # exit
/KNOPPIX/KNOPPIX
" met
"cloop
". We hebben reeds kennis gemaakt met
"loop
" - deze gebruiken we om een bestand met een
bestandsysteem te mounten. - "cloop
" is een
"loop
" met (de)compressie, dus moeten we een
bestandssysteem maken met "mkisofs
", en deze comprimeren
met een speciaal Knoppix programma:
"create_compressed_fs
": # mkisofs -R /1/KNOPPIX | create_compressed_fs - 65536 > /1/KNOPPIX.2
KNOPPIX
" bestand, en kopiëer het resulterende
bestand "KNOPPIX.2
" over "KNOPPIX/KNOPPIX
"
in de cdrom directory structuur. Maak en brand dan een andere cd
en probeer je "nieuwe" knoppix variant uit. We hebben gezien dat het niet moeilijk is om een handige multi
boot cdrom te creëren met handige tools die ons helpen in
verschillende situaties. We hebben niet ieder wiel uitgevonden,
maar maakten gebruik van wielen die door anderen waren uitgevonden,
met wat toegevoegde magie.
We hebben alles wat we nodig hadden op die cdrom, dus hebben we een
backup bij de hand - en het is mogelijk om de cdrom te remasteren
met alleen de data op de cdrom.
Ik hoop dat plezier hebt beleefd aan mijn korte artikel.
Tot ziens!