HOWTO build a LiveCD from scratch

Uit Gentoo Linux Wiki

Ga naar: navigatie, zoeken

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

  1. 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.
  2. 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 !

  1. 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 :

  1. cd livecd/source
  2. chroot . /bin/bash --login
  3. env-update
  4. source /etc/profile
  5. emerge -e system
  6. 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
  7. passwd # Het is een goed idee om een root paswoord in te stellen vooraleer verder te gaan !
  8. ln -sf /usr/share/zoneinfo/<path to time zone file> /etc/localtime
  9. echo "sys-fs/dmraid ~x86" >> /etc/portage/package.keywords # je zou deze lijn kunnen nodig hebben om dmraid te gebruiken zoals later vereist
  10. emerge memtest86+ localepurge genkernel sys-fs/fuse dmraid #<required packages>
  11. 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)

  1. rc-update add <the services required, e.g. hotplug, net.eth0, sysklogd> default <or boot, as fits>
  2. 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>
  3. emerge mingetty # <Required for autologin>
  4. 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
Notitie: ext2 bestandssysteem ondersteuning (dat we gebruiken voor onze initrd image), (het is een goed idee als het een reddings-CD is om ondersteuning voor de meeste systemen in te sluiten; dit kan handig zijn)


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 !

Afkomstig van de Nederlandstalige Gentoo Wiki, het vrije Gentoo handboek. "http://nl.gentoo-wiki.com/HOWTO_build_a_LiveCD_from_scratch"
Persoonlijke instellingen