= Linux von CD auf Gibraltar-Basis =

Eine Ganze Weile haben wir versucht. GibraltarLinux
(http://www.gibraltar.at) als Basis zu nehmen, um ein Linux-System
auf eine CD zu bringen. Unter dem Strich haben wir festgestellt,
dass die Debian-Pakete, die der Gibraltar-Entwickler zur Verfügung
stellt, meist sehr buggy waren und wir nie richtig zum Erfolg
kamen. Immer, wenn wir etliche Fehler beseitigt hatten, kam eine
neue Version, die wieder mit ganz neuen Problemen aufwartete. Mir
scheint, daß es nicht viele Anwender gibt (keine?), die wirklich
die Debian-Pakete benutzen, um auf deren Basis ein eigenes System
zu erzeugen. Trotzdem haben wir unsere Ergebnisse hier abgelegt:


== So haben wir's gemacht: ==

In der Debian Woody Distribution gibt es ein Paket mkinitrd-cd. Das
enthält
Skripte aus GibraltarLinux für das erstellen eines Disketten-Image,
das
dann später auch für eine bootfähige CD nach dem El Torito Standard
gebraucht wird.

Am besten holt man sich statt des Woody-Paketes die aktuellen
Pakete des Gibraltar-EEntwicklers. Diese findet man z.B. unter
ftp://gd.tuwien.ac.at/opsys/linux/gibraltar/source . Dort sind als
Grundausstattung die Pakete mkinitrd-cd (Erstellung einer
Bootdiskette) und gibraltar-bootcd (Änderungen an Debian, um es als
Gibraltar-CD laufen zu lassen) interessant.

Zunächst bauen wir einen Kernel. Die Woody-Skripte unterstützen zur
Zeit nur die
Version 2.2.x, aber das geht mit den aktuellen Paketen. Also das
Paket mit Kernel-Quellen laden, auspacken, mit make menuconfig
konfigurieren. Mit make-kpkg (aus dem Debian Paket: kernel-package)
läßt
sich der Kernel kompilieren und gleich in ein .deb
Kernel-Image-Paket
einpacken. Diese .deb Datei kann man mit dpkg-deb -x <deb>
<directory> in ein temporäres Verzeichnis entpacken.

Dann wird ein File-System erstellt, dass dann als Init-Ramdisk von
der 
Diskette geladen wird: Dazu dient das Skript
mkinitrd-cd, dem das Verzeichnis mit den Kernel-Moduln aus
Parameter
mitgegeben wird. Im woody-Skript haben wir Anpassungen vorgenommen,
die bei den aktuellen Paketen nicht nötig sein sollten:
Das Programm busybox kompilieren wir nicht mehr in diesem Skript,
sondern
wir kopieren unsere lokale Busybox (Debian Paket busybox). Weitere
Anpassungen sind für die geänderte Struktur des Verzeichnis
/lib/modules/
im Kernel 2.4.x notwendig.

Ein weiteres Problem im Woody-Paket gab es mit dem Skript linuxrc,
das in die initrd
aufgenommen wird: Unsere Debian ash kann die local-Anweisungen in
diesem
Skript nicht verarbeiten. Also: Alle local-Variablendeklarationen
an den
Anfang der jeweiligen Skript-Funktion stellen, dann geht es!

Jetzt kann die initrd mit 

  mkinitrd-cd /meintmp/lib/modules/2.../ meineinitrd.gz

erstellt werden.

Mit 

  mkbootimg /meintmp/boot/vmlinuz.. meineinitrd.gz
meinbootimage.img

kann dann das Disketten-Image erzeugt werden.

Zum Testen mit

  dd if=meinbootimage.img of=/dev/fd0

eine Boot-Diskette erzeugen.

=== Erzeugen eines ISO=9660-Image mit: ===

   mkisofs -R -b boot/boot.img -c boot/boot.catalog -o
/root/bootcd.iso .
     -R: Lange Namen nach Rockridge-Standard
     -b: Disketten-Image fuer Boot-Diskette im Image-Filesystem
     -c: nach El Torito notwendiger Boot-Catalog (wird von mkisofs
erzeugt)
     -o: Dateiname fuer das erzeuge ISO-Image
     . : das Filesystem, das auf die CD soll

=== Brennen des Image auf die CD mit: ===

   cdrecord dev=0,0,0 /root/bootcd.iso