Gentoo Live-CD
Voraussetzungen auf dem Host
Bevor man mit der ganzen Prozedur beginnt müssen auf dem Host folgende Vorrausetzungen erfüllt sein.
Software:
- app-cdr/cdrtools
- sys-fs/squashfs-tools
Kernel Konfiguration: Template:Box Kernel
Arbeitsverzeichnis vorbereiten
Da nun alle Vorrausetzungen erfüllt sind beginnen wir damit ein Verzeichnis anzulegen mit dem wir arbeiten. In meinem Tutorial habe ich dafür Template:Filename gewählt.
# cd /root
# mkdir -p /root/livecd/source
Jetzt laden wir ein aktuelles stage2 Archiv und ein Portage Snapshot herunter. In meinem Beispiel ein i686 Archiv, da meine LiveCD auf möglichst vielen Architekturen laufen soll. Denkbar wäre natürlich auch eine x86_64 CD oder gar PPC (nicht getestet!).
# wget ftp://ftp.uni-erlangen.de/pub/mirrors/gentoo/releases/x86/current/stages/stage3-i686-2006.1.tar.bz2
Jetzt muss das ganze natürlich noch an die richtige Stelle entpackt werden.
# cd /root/livecd/source
# tar xjvpf /root/stage3-i686-2006.1.tar.bz2
Anschließend wechseln wir in das Arbeitsverzeichnis und mounten die benötigten Resourcen.
Resourcen mounten
# cd /root/livecd/source
# mkdir proc (falls noch nicht vorhanden)
# mkdir dev (falls noch nicht vorhanden)
# mount -o bind /proc proc
# mount -o bind /dev dev
# mkdir -p usr/portage
# chown portage:portage usr/portage
# mount -o bind /usr/portage usr/portage
# cp /etc/resolv.conf etc/resolv.conf
Chrooten
Nun chrooten wir in unsere Entwicklungsumgebung und beginnen mit der Gentoo Installation, die im Grunde genauso wie eine ganz normale Stage2 Installation abläuft. Im folgenden trotzdem nochmal Schritt für Schritt erläutert.
# cd /root/livecd/source
# chroot . /bin/bash --login
# env-update
# source /etc/profile
Grundinstallation
Jetzt passen wir die Template:Filename an unser Zielsystem an auf dem die LiveCD dann laufen soll. Wie oben schon erwähnt wähle ich hier i686 um die CD möglichst generisch zu halten. Template:Box File
# emerge portage --oneshot
Damit wir einen optimalen Code erhalten aktualisieren wir auch den GCC und setzen den neuen GCC dann natürlich auch aktiv.
# emerge gcc --oneshot
# gcc-config -l
# gcc-config <Nummer>
Damit wir den Overhead möglichst gering halten, entfernen wir auch sämtliche nicht benötigte Sprachen der glibc.
# nano -w /etc/locale.gen
# locale-gen
Jetzt können wir das ganze System auf den aktuellen Stand bringen und es anschließend neu kompilieren lassen. Falls man kein # emerge -e system bzw # emerge -e world machen möchte sollte man zumindest die glibc neu emergen.
# emerge -uD world
# emerge -e world
# emerge glibc --oneshot (optional; nicht nötig wenn zuvor # emerge -e world ausgeführt wurde)
Nun wird die Systemzeit gesetzt und die Mountpunkte bzw. Optionen in der Template:Filename angepasst. Optional werden dmraid und slocate installiert.
# cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
# emerge dmraid slocate (optional)
# nano -w /etc/fstab
Im folgenden wird erklärt wie der Kernel zu konfigurieren ist und was sonst noch notwendig ist um einen Kernel für den LiveCD-Betrieb zu erhalten, außerdem konfigurieren wir hier den grub Bootloader und installieren gensplash für ein bisschen Eye-Candy.
# emerge gentoo-sources
# cd /usr/src/linux
# make menuconfig
# make && make modules_install
# emerge grub
Damit wir nicht durcheinander kommen löschen wir die Dateien Template:Filename und Template:Filename und legen anschließend eine neue Template:Filename an.
# rm /boot/grub/menu.lst
# rm /boot/grub/grub.conf
# nano -w /boot/grub/menu.lst
# emerge genkernel
# genkernel all --no-bootsplash --no-clean --menuconfig Kernel konfigurieren.
bzw:
# genkernel all --unionfs-dev --no-clean --menuconfig
Wenn das Kernel Konfigurationsmenü erscheint sollte man noch überprüfen ob denn auch wirklich alle oben genannten Kerneloptionen aktiviert bzw. fest in den Kernel kompiliert sind. Anschließend Menuconfig beenden, die Konfiguration speichern lassen und warten bis der Kernel installiert ist.
Damit die init-Skripte beim Booten nicht meckern müssen wir die livecd-tools installieren, welchen wir beim Boot den Kernelparameter mit Hilfe der Grub Zeile 'cdboot' übergeben.
# emerge livecd-tools
Damit Geräte, welche beim Anschalten des Rechners schon eingsteckt sind, erkannt werden sollte coldplug installiert und zum Boot-Runlevel hinzugefügt werden werden.
# emerge coldplug (deprecated?)
# rc-update add coldplug boot (deprecated?)
Anschließend konfigurieren wir noch unser System
# nano -w /etc/conf.d/clock UTC -> local
# nano -w /etc/conf.d/keymaps us -> de-latin1
# cp /etc/conf.d/net.example /etc/conf.d/net
config_eth0=( "dhcp" ) dhcp_eth0="nodns nontp nonis"
# rc-update add net.eth0 default eth0 zum Defaul-Runlevel hinzufügen
# nano -w /etc/hosts Hostnamen eintragen
# nano -w /etc/conf.d/hostname Hostnamen setzen
# emerge syslog-ng Syslogger installieren
# rc-update add syslog-ng default zum Default-Runlevel hinzufügen
# emerge dhcpcd DHCP-Client installieren
# emerge xfsprogs XFS-Dateisystemtools installieren
# emerge reiserfsprogs ReiserFS-Dateisystemtools installieren
# emerge jfsutils JFS-Dateisystemtools installieren
Jetzt verlassen wir die Chroot-Umgebung, erstellen unsere Build-Skripte und starten den Vorgang um eine LiveCD zu erzeugen.
# exit
# umount /root/livecd/source/proc /root/livecd/source/dev /root/livecd/source/usr/portage
Backup der Basisinstallation
Optional können wir nun natürlich noch ein Backup des ganzen anlegen damit, falls doch einmal etwas schief gehen sollte man nicht nocheinmal die ganze Installation durchkauen muss.
# cd /root
# tar -cvjf livecd-backup.tar.bz2 livecd/
Build-Skripte erstellen und LiveCD erzeugen
# cd /root/livecd
# touch build
# chmod +x build
# nano -w /root/livecd/build
# cd /root/livecd/source
# touch before-build
# chmod +x before-build
# nano -w /root/livecd/source/before-build
Build Prozess starten
# cd /root/livecd
# ./build
Anschließend ein
# cd / && ls -la
ausführen um zu prüfen ob man auch wirklich in der Chroot-Umgebung ist
# ./before-build
Wenn man wieder den Commandprompt hat
# exit
eingeben und warten bis das Build-Skript fertig ist.
Mit einem weiteren
# exit
kann man die Build-Umgebung verlassen und das ISO letztendlich brennen.
Nachträgliche Modifikationen & erneutes Build
Da wir ja ein komplettes System haben ist es sehr einfach jederzeit neue Pakete hinzuzufügen und das System aktuell zu halten. Dafür gibt es auch ein praktisches Skript.
# cd /root/livecd
# touch work
# chmod +x work
# nano -w /root/livecd/work
# ./work
Dann noch
# env-update && source /etc/profile
ausführen um die Umgebungsvariablen zu übernehmen und schon kann man weiter basteln.
Wenn man fertig ist reicht ein einfaches
# logout
und wiederum ein
# env-update && source /etc/profile
Anschließend wie in Punkt 8 "Build Prozess starten" verfahren.
Addons
# gensync kde-live
# emerge alsa-utils
# rc-update add alsasound boot
# emerge kdebase-meta
- UnionFS:
I use genkernel and unionfs together, and so I have the unionfs overlay over the whole livecd (what I want). Use genkernel with "--unionfs-dev"; change the build script to produce a "livecd.unionfs" instead of "livecd.squashfs" and give grub (in menu.list) the "unionfs" option
Temp
- Qemu
[ebuild N ] app-text/texi2html-1.76 372 kB
[ebuild N ] app-emulation/qemu-softmmu-0.7.2 (-kqemu) +sdl 1,310 kB
[ebuild N ] app-emulation/qemu-user-0.7.2 0 kB
[ebuild N ] app-emulation/qemu-0.7.2 0 kB
qemu -m 128 -cdrom /temp/knoppix-custom.iso -boot d -user-net
- Mountskript
Mit Bootsplash
Zur Erklärung:
- 'kernel-genkernel-x86-2.6.13-gentoo-r4' trägt den Namen des installierten Kernels
- 'initramfs-genkernel-x86-2.6.13-gentoo-r4' trägt den Namen des installierten Kernelinitramfs
- 'vga=791 splash=silent,theme:livecd-2005.1 CONSOLE=/dev/tty1 quiet' übergibt dem Kernel die nötigen Informationen um das Bootsplash richtig anzuzeigen
Es folgt die Konfiguration des Genkernels mit Bootsplash Unterstützung.
# emerge genkernel
# emerge splash-themes-livecd Splash-Themes Paket
# genkernel all --gensplash Ausführen und mit Strg+C abbrechen um einen Standard Genkernel zu erhalten.
# genkernel all --gensplash=livecd-2005.1 --no-clean --menuconfig Theme und Kernel konfigurieren.
Eine Übersicht über die verfügbaren Bootsplash Themes erhält man mit
# ls -la /etc/splash
Zur Zeit noch nicht möglich, genkernel mit UnionFS: # genkernel all --gensplash=livecd-2005.1 --unionfs-dev --no-clean --menuconfig
Offene Fragen
# emerge klibc (eventuell bei jedem Kernelupdate nötig?) Teil des Bootsplash Pakets
Probleme
- livecd-tools lassen sich nicht emergen
- UnionFS Genkernel Support kaputt, wird auch nicht mehr maintained (eventuell Kernel patchen?)
Quellen
http://forums.gentoo.org/viewtopic.php?t=244837 http://gentoo-wiki.com/HOWTO_build_a_LiveCD_from_scratch http://www.knoppix.net/wiki/Knoppix_Remastering_Howto#Test_CD_Image_Without_Burning_a_CD http://forums.gentoo.org/viewtopic-t-244837-postdays-0-postorder-asc-start-150.html http://www.linux-user.de/ausgabe/2005/10/093-zubefehl/ http://www.gentoo.org/doc/en/genkernel.xml