Copyright © 2002, 2003 Daniël de Kok
Inhoudsopgave
Over het praktische nut van live CD's hoef ik me waarschijnlijk niet uit te wijden. Live CD's doen uitstekend hun werk als plug & play Linux systemen voor scholen die naast hun gewoonlijke systeem ook graag Linux willen gebruiken, maar ook zijn ze geschikt voor demonstraties of om te testen of een bepaalde PC ook goed Linux draait. Daarnaast is een live CD softwarematig sloopbestendig, omdat het systeem na een reboot weer helemaal vers is.
Degene die de officieële Slackware Linux CD-ROM set heeft gekocht heeft bezit al een Slackware Live CD die bijna een complete Slackware installatie bevat. Het komt is echter vaak handiger om zelf een live CD te maken die afgestemt is op de beoogde toepassing van de CD. Zo is het bijvoorbeeld mogelijk om een CD-ROM met OpenOffice, een complete office suite, te maken. In dit document zal ik proberen de basisbeginselen van het maken van een live CD uit te leggen. Dit heeft u nodig:
Een systeem dat Slackware Linux draait.
De Slackware Installatie CD-ROM (CD1 van de Slackware CD-ROM set).
De Slackware "Ready-To-Boot Linux Disc" (CD 2 van de Slackware CD-ROM set).
Een CD schrijver en de cdrecord en mkisofs programma's.
Voldoende schijfruimte.
Als u alleen de installatie CD heeft moet u aan het initrd.img bestand van de Live CD zien te komen. Het initrd.img bestand bevat een basissysteem dat het live systeem via de initialisatiescripts opzet.
De eerste fase van het maken van een live CD is het opbouwen van een Slackware installatie die door initrd gebruikt gaat worden. Voor de rest van dit document ga ik ervanuit dat de live CD in /root/livecd opgebouwt gaat worden. De eerste stap is het maken van de directorystructuur voor de CD:
mkdir /root/livecd cd /root/livecd mkdir isolinux mkdir kernels mkdir live
In isolinux/ komen de bestanden te staan die het systeem starten (waaronder de isolinux bootloader voor CD-ROM's), in de kernels/ directory worden kernels geplaatst die beschikbaar moeten zijn op de live CD en de live/ directory wordt gebruikt voor de Linux installatie op de Live CD (live/ wordt dus eigenlijk het hart van het systeem). Nu de directory structuur is aangemaakt kunnen we beginnen met het opzetten van de Slackware installatie. Hiervoor hebben we de Slackware Install CD nodig, plaats deze in de CD-ROM speler en mount de CD als gewoonlijk. Ga vervolgens naar de slackware/a/ directory op de CD-ROM. We gaan de hele a set installeren omdat dit de basis van het systeem vormt en deze packages niet zo groot zijn. Dit kunt u doen met het volgende commando:
installpkg -root /root/livecd/live *.tgz
Installpkg zal een korte melding laten zien voor elke package en als dit proces voltooid is hebben we een basaal systeem in /root/livecd/live. Hierna kunt u naar believen packages toevoegen uit de diskset directories met het commando installpkg -root /root/livecd/live <packagenaam.tgz>". Let erop dat veel packages bepaalde libraries nodig hebben die ook meegeïnstalleerd moeten worden. Ik heb bijvoorbeeld zelf een speciale browser live CD gemaakt met de volgende extra packages:
libungif-4.1.0b1-i386-3 mozilla-1.0-i386-1 dhcpcd-1.3.22pl1-i386-3 glib-1.2.10-i386-1 tcpip-0.17-i386-13 gtk+-1.2.10-i386-2 windowmaker-0.80.0-i386-2 xfree86-4.2.0-i386-5 xfree86-fonts-100dpi-4.2.0-i386-1 xfree86-fonts-misc-4.2.0-i386-1 xfree86-fonts-scale-4.2.0-i386-1
De volgende stap is het uitvoeren van een aantal controles en het maken van kleine instellingen. Hiervoor zullen we in het nieuwe systeem gaan werken. Ga naar de /root/livecd/live/ directory en tik chroot .. Nu is de shell van het zojuist opgezette systeem gestart met de hoofddirectory van het systeem als de / directory. Dit is een goede gelegenheid om te controleren of alle nodige libraries aanwezig zijn. Dit kunt u doen door ldd /pad/naar/binary te tikken en te kijken of er ook meldingen zijn dat een bepaalde library niet gevonden kan worden. Let op! Dit werkt niet voor shell scripts.
Als u X heeft geïnstalleerd en een de virtual framebuffer van de kernel wilt gebruiken onder X voer dan "cp /etc/X11/XF86Config.fbdev /etc/X11/XF86Config" uit. Wilt u uw eigen XF86Config gebruiken dan kunt u deze straks kopieëren naar de /root/livecd/live/etc/X11/ directory als u de chroot omgeving verlaten heeft. Ook is het natuurlijk mogelijk om X te configureren na het booten van de live CD. Ook is het vestandig alvast een default windowsmanger te configurere met het xwmconfig commando.
Als alles er zo uitziet als u wilt kunt u de chroot omgeving verlaten door exit te typen.
Om het systeem gereed te maken voor het booten hebben we de Slackware "Ready-To-Boot Linux Disc" nodig. Mount de CD-ROM en kopieer alle bestanden uit de isolinux/ directory naar /root/livecd/isolinux/ en de kernel(s) die u wilt gebruiken in de /root/livecd/kernels/ directory. In dit voorbeeld gebruik ik de bare.i kernel (kernels/bare.i/bzImage op de Slackware "Ready-To-Boot Linux Disc") en noem deze bare.i (/root/livecd/kernels/bare.i).
Vervolgens moet het bestand /root/livecd/isolinux/isolinux.cfg geconfigureerd worden. Het oorspronkelijke bestand is een goed voorbeeld hoe isolinux geconfigureerd kan worden. Voor de browser live cd gebruik ik alleen de bare.i kernel, zonder een boot prompt voor het opgeven van extra parameters. Zo'n configuratie kan er als volgt uit zien:
default /kernels/bare.i initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 ramdis k_size=16384 rw root=/dev/ram SLACK_KERNEL=bare.i vga=ask prompt 0
Een parameter die interessant is is de "vga=" parameter. Hiermee kunt u opgeven welke grafische modus gebruikt moet worden. Lees Documentation/fb/vesafb.txt voor meer informatie en een overzicht van de verschillende VESA modi.
Nu het systeem en isolinux klaar staan om een aktie te komen hoeven we alleen nog een ISO image te maken en de CD te branden. Een ISO image maken gebeurt met het volgende commando in de /root/livecd/ directory:
mkisofs -o /root/livecd.iso -R -J -hide-rr-moved -v -d -N -no-emul-boot -boot-lo ad-size 32 -boot-info-table -sort isolinux/iso.sort -b isolinux/isolinux.bin -c isolinux/isolinux.boot .
Dit maakt de ISO image /root/livecd.iso aan. De "-b" parameter geeft aan welk bestand gebruikt moet worden als bootprogramma van de CD. Normaliter wordt er vaak een floppyimage gemaakt en emuleert de BIOS als een bootfloppy. Dat hoeft met isolinux niet, daarom wordt de "-no-emul-boot" parameter meegegeven.
Tenslotte moet de ISO image naar CD gebrand worden. Dit verschilt niet van het normale gebruik van CD-Record. Stel bijvoorbeeld dat de CD-Recorder een met 24 speed schrijft en SCSI device 0,0,0 is (deze waarde is te verkrijgen met behulp van cdrecord -scanbus, dan voldoet cdrecord -v speed=24 dev=0,0,0 /root/livecd.iso. Daarna kunt u uw live CD booten en kijken of alles goed is gegaan.
Een nadeel van het maken van live CD's is dat het testen soms wat omslachtig is. Ten eerste kan het erg veel CD's kosten, daarom is het verstandig te experimenteren met CD-RW's, zodat de CD weer leeggemaakt kan worden als iets nog niet goed werkt. Daarnaast kost het vrij veel tijd om aldoor weer een ISO image te maken, een CD te schrijven, te herstarten, enz. Sommige virtual machines (bijvoorbeeld VMWare) ondersteunen het booten vanaf ISO images, zo hoeft u tijdens de testfase alleen nieuwe ISO images te maken.
Als een ISO image meer dan 650 of 700 MB gaat innemen past het niet meer op een normale CD-R. Vanaf kernel 2.4.14 ondersteunt Linux transparante decompressie waardoor er soms tot 1500MB data op een CD-ROM past. Bekijk de mkisofs en mkzftree man pages voor meer informatie.
Een aantal zaken kan niet via het live systeem in de live/ directory geregeld worden, zoals het aanpassen van de opstartbestanden of andere /etc bestanden als /etc/motd omdat deze in initrd.img staan. initrd.img is een gecomprimeerde diskimage en is te decomprimeren met gunzip en te mounten via de loopback (mount -o loop <image> <mountpoint>).