HOWTO build a LiveCD from scratch
Uit Gentoo Linux Wiki
Inhoud |
[bewerken] Introductie
Deze mini-Howto zal je tonen hoe je jouw eigen LiveCD maakt. Het zal je ook toelaten om de volgende voordelen te hebben tov de Catalyst methode.
- De build bron zal intact blijven en zal niet worden gewist tussen de iteraties van de LiveCD creatie. Dit zal je toelaten om jouw desktop omgeving te onderhouden dmv sync, update, merge, en om jouw desktop omgeving geleidelijk aan te passen op dezelfde wijze als je met je vast geinstalleerd systeem doet.
- De CD zal booten met GRUB, niet met ISOLINUX (ISOLINUX blijft wel mogelijk). Dit geeft je dezelfde flexibiliteit als bij een vast geinstalleerd systeem (kernel parameters wijzigen, devices herkennen, enz...)
- Een mooi neveneffect is dat door de build bron te behouden tussen de iteraties de build tijd enorm zal verkorten.
- Als het correct gemaakt is kan het booten vanaf 32MB RAM (mijn LiveCD is 215MB en bevat karrevrachten admin toepassingen en kan booten vanaf alles wat ik me kan inbeelden)
- Info in de groene vensters zijn scripts die meermaals zullen worden gebruikt zoals build scripts. Deze moeten allicht ook ooit worden geupdated.
- NOTA: Aangezien hier niet de door Gentoo aanbevolen methode wordt gebruikt gelieve geen bug rapporten naar Gentoo te sturen tenzij je duidelijk kan bepalen dat het probleem niet te maken heeft met deze methode.
[bewerken] Vereisten
Je moet voldoende plaats hebben op je harde schijf. Dit zal afhankelijk zijn van welke paketten (meer paketten vergroten de nodige ruimte) je wil opnemen in jouw LiveCD. Gemiddeld genomen zou 4GB vrije disk ruimte moeten volstaan.
Je moet vertrouwd zijn met het installeren van Gentoo aan de hand van de stage2 tarball want dat is wat we zullen gebruiken in deze mini-Howto. Als je twijfelt raadpleeg de Gentoo Handbook.
Ik kan ook enige kennis ivm met de Gentoo werking en Linux in het algemeen aanraden. Vooral de nieuwe build scripts dingen kunnen vervelend worden als je het fout doet.
Het is mogelijk om een stage1 installatie te doen, maar omdat dit veel meer tijd inneemt dan een stage2 installatie wordt het niet aangeraden. De meeste mensen zullen toch iets doen zoals
emerge -e world
Je hebt ook app-cdr/cdrtools en sys-fs/squashfs-tools nodig om de build goed te doen.
[bewerken] De build omgeving opzetten
Onze build omgeving is gewoon een map waar we een 'chroot' mee zullen doen en Gentoo in zullen installeren (erg gelijkaardig aan de installatie vanaf een normale LiveCD). Zijn inhoud zal later de LiveCD aanmaken. Ik zal de naam 'source' ervoor gebruiken en het aanmaken onder een map genaamd livecd in mijn home map.
emerge squashfs-tools cdrtools cd ~ mkdir -p ~/livecd/source
Deze volledige howto verwacht dat je de livecd map in /root (of waar dan ook ~ naar verwijst) maakt, het build proces zal mislukken als je een andere map gebruikt. Af en toe update ik het build script, dus het beste is om dit te volgen en de mogelijkheid te hebben op up-to-date livecd te maken.
Om te starten download een stage2 tarball vanaf een van de Gentoo mirrors naar jouw home directory. Ik gebruik een i686 stage2 in deze mini-HowTo omdat dit momenteel het meest gebruikt wordt op PC's. Eenmaal gedownload, pak het uit (untar) het in source. Maak dan de noodzakelijke newroot map die zal gebruikt worden tijdens de initiele boot.
wget <<YOUR FAVORITE MIRROR>>/releases/x86/current/stages/stage2-x86-2006.0.tar.bz2 wget <<YOUR FAVORITE MIRROR>>/snapshots/portage-latest.tar.bz2 cd livecd/source tar jxvpf ~/stage2-x86-2006.0.tar.bz2 mkdir newroot
Donwload nu de recentste portage snapshot naar jouw home directory en pak het uit in jouw new build directory.
cd usr/ tar jxvf ~/portage-latest.tar.bz2
Als je tijdens de installatie paketten moet downloaden configureer dan de voor een internetverbinding noodzakelijke bestanden in livecd/source/etc. Bv resolv.conf.
Belangrijke Nota: als je deze howto volgt in een 64-bit omgeving, raadpleeg dan "32Bit Chroot Guide for Gentoo/AMD64" op [1] om te weten hoe je correct 'chroot' toepast.
De bron map is nu klaar om de Gentoo installatie te beginnen.
[bewerken] Gentoo installeren
Maak de noodzakelijke koppelpunten vooraleer je met chroot naar jouw build directory gaat en de installatie begint. Ik behoud op mijn systeem de map distfiles onder de standaard /usr/portage directory. Ik zal deze gebruiken ipv van distfiles te downloaden tijdens de installatie.
cd ~/livecd/source mkdir -p proc dev mount -o bind /proc proc mount -o bind /dev dev mount -o bind /sys sys mkdir usr/portage/distfiles mount -o bind /usr/portage/distfiles usr/portage/distfiles cp /etc/resolv.conf etc/resolv.conf
(Opmerking - DKS) In plaats van /usr/portage/distfiles te cross mounten zoals hierboven beschreven koppel /usr/portage:
mkdir usr/portage mount -o bind /usr/portage usr/portage
(Einde opmerking)
Doe nu chroot naar de bron en start de installatie. Enkele punten ivm het wijzigen van /etc/make.conf
- Wees voorzichtig met USE variabelen. Hoe meer je er gebruikt hoe groter je omgeving wordt. Het zou zelfs zo groot kunnen worden dat het niet meer op een CD past! Ik gebruik enkel kde, en trek me niets aan van van docs en java, dus voegde ik : '-gnome -gtk -java -doc' toe.
- Verzeker je ervan dat je 'livecd' aan jouw USE variabelen toevoegt.
Dit, samen met een 'cdroot' parameter die we aan de kernel doorgeven tijdens het booten, zal de init scripts ervan op de hoogte stellen dat we van een cdrom booten, zodat het geen ongeoorloofde acties doet zoals het root bestandssysteem controleren !
- Je kan ook overwegen om 'minimal' en 'userlocales' aan USE toe te voegen (en vergeet niet /etc/locales.build te editeren)
(Opmerking - DKS) Als je de USE variable 'minimal' gebruikt, moet je een uitzondering voor het perl pakket moeten toevoegen:
echo "dev-lang/perl -minimal" >> ~/livecd/source/etc/portage/package.use
Het commando hierboven is om *buiten* de chroot te gebruiken. Binnen de chroot is het doel /etc/portage/package.use. (Einde Opmerking)
Hier zijn grofweg de installatie stappen :
- cd livecd/source
- chroot . /bin/bash --login
- env-update
- source /etc/profile
- emerge -e system
- emerge -e world # Als delen van de systemen geupdate werden , zoals bv GCC, emerge het hele systeem opnieuw en verifieer http://www.gentoo.org/doc/en/gcc-upgrading.xml
- passwd # Het is een goed idee om een root paswoord in te stellen vooraleer verder te gaan !
- ln -sf /usr/share/zoneinfo/<path to time zone file> /etc/localtime
- echo "sys-fs/dmraid ~x86" >> /etc/portage/package.keywords # je zou deze lijn kunnen nodig hebben om dmraid te gebruiken zoals later vereist
- emerge memtest86+ localepurge genkernel sys-fs/fuse dmraid #<required packages>
- emerge #<required packages, as you like, e.g. logger hotplug udev>
(Opmerking - grunthus) Ik heb juist in de forums.gentoo.org ontdekt dat de hotplug's functionaliteit verwijderd is - het doet niets, bevestigd door naar het hotplug script te kijken in init.d (Einde Opmerking)
(Opmerking - Arek75) Hotplug's secondaire functionaliteit (boot-time hardware detection) werd in deze periode vervangen door een apart coldplug script. Als je dit nog niet gedaan hebt, doe dan als root :
emerge coldplug && rc-update add coldplug default
Dit zou je dezelfde functionaliteit als hotplug moeten geven (Einde Opmerking)
- rc-update add <the services required, e.g. hotplug, net.eth0, sysklogd> default <or boot, as fits>
- emerge <Recommended optional packages sys-fs/dmraid and slocate, these are used in further scripts. You might need to add them to /etc/portage/package.keywords>
- emerge mingetty # <Required for autologin>
- emerge # <optional packages, as you like, e.g. kde, mc>
Laat ons, vooraleer we de kernel en de bootloader samenvoegen, belangrijke bestanden aanpassen in /etc. Eerst, /etc/fstab
| File: /etc/fstab |
/dev/loop0 / squashfs ro,defaults 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /dev/pts devpts defaults 0 0 |
Vergeet niet om een lege regel aan het einde of het begin toe te voegen anders zal de LiveCD protesteren !
Merk op dat we de root koppelen via een loop devicemet bestandssysteem squashfs. Meer daarover later. Verander nu andere /etc bestanden zodat je ze ziet overeenkomen met (e.g. hostname, rc.conf, conf.d/*, enz...)
Het is bv een goed idee om de toetsenbord layout op tijd aan te passen : editeer /etc/conf.d/keymaps. Verander het volgende voor een Frans toetsenbord met inbegrip van € karaketer ondersteuning, :
KEYMAP="fr-latin9" SET_WINDOWKEYS="yes"
Als je netwerk ondersteuning wenst editeer /etc/conf.d/net. In dit voorbeeld wordt dhcp geconfigureerd voor eth0 :
config_eth0=( "dhcp" )
[bewerken] Kernel en initrd tijd
Nu is het tijd om de kernel bronnen te installeren en ze te configureren.
emerge gentoo-sources #voeg daarna patches toe #als je de vanilla sources gebruikt moet je de squashfs-patch toevoegen van http://squashfs.sourceforge.net cd /usr/src/linux make allmodconfig # Gebruik dit als je ALLE de kernel opties als modules wil hebben (om de meeste hardware te kunnen herkennen)
Voeg nu je gewenste kernel toe. Ik gebruik gentoo-sources(2.6). We zullen squashfsals ons root filesysteem gebruiken. Dus controleer of je kernel gepatched is met squashfs als het standaard niet inbegrepen is (standaard gentoo-sources hebben dit van tegenwoordig).
Nota: Als je geen SquashFS support in je kernel ziet kijk dan naar here of Google met "squashfs kernel patch"
Verzeker je ervan dat hetvolgende mee in de kernel gecompileerd wordt (zie onder, gebruik makend van genkernel –menuconfig
| Linux Kernel Configuratie: kernel configuration |
|
File systems ---> <*> Ext3 journalling file system support <*> Reiserfs support <*> JFS filesystem support <*> XFS filesystem support Miscellaneous filesystems ---> <*> SquashFS 2.0 - Squashed file system support CD-ROM/DVD Filesystems ---> <*> ISO 9660 CDROM file system support Pseudo filesystems ---> [*] Virtual memory file system support (former shm fs) Device Drivers ---> Block devices ---> <*> Loopback device support <*> RAM disk support (16) Default number of RAM disks (9000) Default RAM disk size (kbytes) [*] Initial RAM disk (initrd) support ATA/ATAPI/MFM/RLL support ---> <*> Include IDE/ATAPI CDROM support |
IEEE 1394 ethernet ondersteuning kan uw systeem verstoren : soms wordt een ethernet interface eerst herkend; dit is voorafgaand aan de “Classic” ethernet interface. Als je geen IEEE ethernet ondersteuning nodig hebt activeer het dan niet :
| Linux Kernel Configuratie: kernel configuration2 |
|
Device Drivers ---> IEEE 1394 (FireWire) support ---> < > Ethernet over 1394 |
Verder kan je elke passende optie toevoegen. Ik gebruik bv Magic SysRq Keys dat onmiddellijk rebooten toelaat als er geen bestandssysteem is gekoppeld (of als je een corrupt bestandssysteem hebt) :
| Linux Kernel Configuratie: kernel configuration3 |
kernel hacking -> Magic SysRq Key [*] |
I wilde zoiets als gentoo 2005.0 omdat het veel flexiebeler is, er 1000 x beter uitziet en meer systemen kan booten. Na enig onderzoek ontdekte ik dat het genkernel is die zo een initrd maakt (geloof me, de initrd van de 2005.0 CD gebruiken is niet mogelijk).
De oude kan nog steeds gebruikt worden, maar is niet aanbevolen. Ook is deze howto van nu op genkernel gebaseerd.
(Commentaar van Kimchi_sg) Als je de kernel reeds geconfigureerd EN gecompileerd hebt dan dan kan je genkernel de opdracht geven om enkel initrd te maken met volgend commando:
genkernel initrd
En dan de rest van deze sectie overslaan.
Anders als je de kernel nog niet gecompileerd hebt , doe hetvolgende : (Einde commentaar)
genkernel all --no-bootsplash --no-clean --menuconfig
Vergeet daarna niet om het bestand te copiëren/hernoemen om rekening te houden met de grub configuratie (herinner je dat zoals eerder gemeld, iso9660 geen symbolische links herkent)
Bijvoorbeeld, als je met een 2.6.15-gentoo-r1 type kernel werkt :
cp /boot/initramfs-genkernel-x86-2.6.15-gentoo-r1 /boot/initrd cp /boot/kernel-genkernel-x86-2.6.15-gentoo-r1 /boot/vmlinuz
Of laat het menuconfig deel voor wat het is als je een werkende .config hebt. Ik ontdekte dat de genkernel .config goed was, tenminste nadat ik de ondersteuning voor het bestandssysteem aangepast had.
We hebben nu een geschikte kernel en ramdisk !
