Live-CD Erstellen (OpenBSD)

Betrifft OS:
OpenBSD

VERSION=3.8 ARCH=i386

Als erstes benötigt man eine Maschine mit einem lauffähigen OpenBSD-System. Wenn man diese Maschine neu aufsetzt, sollte man das Erstellen einer zusätzlichen Partition für die später auf der CD enthaltenen Daten in Erwägung ziehen.

Zuerst sollte das System auf den neuesten Stand gebracht werden. Zu diesem Zweck wird der Source-Tree aktualisiert, ein neuer Kernel erstellt und das System neu übersetzt werden. Wie man das macht kannst du im Artikel Updaten von OpenBSD nachlesen.

Erstellen eines CD-Daten-Verzeichnisses

Wenn wir nicht schon beim aufsetzen des Rechners eine eigene CD-Daten-Partition vorgesehen haben, legen wir uns jetzt ein Arbeitsverzeichnis an.

# mkdir /livecd

Jetzt kopieren wir das gesamte Dateisystem (mit diversen Ausnahmen) in diesen Ordner hinein. Dabei hat sich das schöne Tool rsync bestens bewährt. Dieses muss allerdings erst installiert werden.

# pkg_add -v ftp:ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/rsync-xxx.tgz</xterm>

Die xxx stehen für die aktuelle rsync-Version. Diese kann man ermitteln, indem man erst einmal manuell auf dem FTP-Server nachsieht wie das aktuelle Paket gerade heisst.

Nachdem rsync jetzt zur Verfügung steht, erzeugen wir uns eine Datei, in der alle Dateien und Verzeichnisse aufgelistet sind, die wir nicht kopieren wollen.

Beispiel: Datei copydirs.exclude.rc
<file>
###########################
/livecd
/sys
/usr/src
###########################
</file>

Jetzt können wir den Kopiervorgang starten:

# rsync --exclude-from=copydirs.exclude.rc --delete --links -rpogDtW /* /livecd/
Nun legen wir unterhalb von /livecd ein Verzeichnis „backups“ an und darunter Verzeichnisse für diejenigen Daten, die nach dem Booten der CD in die dynamisch angelegten RAM-Dateisysteme kopiert werden.
# mkdir -p /livecd/backups/{var,etc,dev}
Dorthinein kopieren wir den Inhalt der Verzeichnisse /etc, /var und aus dem '/dev'-Verzeichnis die Datei MAKEDEV.
# rsync --delete --links -rpogDtW /etc/* /livecd/backups/etc/
# rsync --delete --links -rpogDtW /var/* /livecd/backups/var/
# rsync -pogDtW /dev/MAKEDEV /livecd/backups/dev/
<note>Erläuterung: Ein Live-CD-System hat das Problem, dass es auf verschiedene Verzeichnisse schreibenden Zugriff benötigt. Da wir in unserem Beispiel komplett ohne Festplatte auskommen wollen, organisieren wir das System so, dass während des Bootvorganges im RAM des Rechners Bereiche reserviert werden, in denen Dateisysteme erzeugt werden, die dann beschreibbar sind. Es handelt sich in unserem Fall um die Verzeichnisse /var,/etc,/dev,/tmp,/home und /root. Dabei können /tmp,/home und /root nach der Erzeugung leer bleiben. /var,/etc und /dev jedoch müssen vor dem Anlaufen des Systems mit gewissen Daten gefüllt werden. Dieses „Skelett“ speichern wir in den Verzeichnissen unterhalb von /livecd/backups. </note> ===== Erzeugen eines speziellen Kernels ===== ==== Anpassen der Kernelkonfiguration ====
# cd /usr/src/sys/arch/i386/conf
# mv RAMDISK_CD RAMDISK_CD.orig
# cp GENERIC RAMDISK_CD
Kommentiere nun in der Datei RAMDISK_CD die folgende Zeile aus <file>config bsd swap generic</file> und ersetze die Zeile <file>maxusers 32</file> durch <file> option RAMDISK_HOOKS option MINIROOTSIZE=3800 maxusers 32 config bsd root on cd0a </file> ==== Anpassen des Makefiles ==== # cp /usr/src/distrib/i386/common/Makefile.inc /usr/src/distrib/i386/common/Makefile.inc.orig Ersetze nun in /usr/src/distrib/i386/common/Makefile.inc die folgenden Zeilen <file> strip ${.OBJDIR}/boot strip -R .comment ${.OBJDIR}/boot </file> durch <file>strip -s -R .comment -K cngetc ${.OBJDIR}/boot</file> und danach die Zeilen <file> strip bsd.strip strip -R .comment bsd.strip </file> durch <file>strip -s -R .comment -K cngetc bsd.strip</file> ===== Installieren des crunch-Paketes =====
# cd /usr/src/distrib/crunch && make && make install
===== Erzeugen des neuen Kernels =====
# cd /usr/src/distrib/i386/ramdisk_cd && make
<note> Sollte sich make mit cannot find -lstubs beenden, so ist dies ein Hinweis darauf, dass die libstubs nicht existieren. Das kann man beheben: # cd /usr/src/distrib/special/libstubs # make Danach bitte das maken des Kernels wiederholen, also: # cd /usr/src/distrib/i386/ramdisk_cd && make </note> Wenn das geklappt hat:
# cp obj/bsd /livecd/
# cp obj/cdrom38.fs /livecd/
===== Anpassen von /livecd/etc/fstab ===== Die Datei enthält nur eine einzige Zeile: <file>/dev/cd0a / cd9660 ro,noatime 0 0</file> ===== Anpassen von /livecd/backups/etc/fstab ===== Sie sollte folgende Zeilen enthalten: <file> /dev/cd0a / cd9660 ro,noatime 0 0 swap /dev mfs rw,noatime,-s=12000 0 0 swap /tmp mfs rw,noatime,-s=262144 0 0 swap /var mfs rw,noatime,-s=262144 0 0 swap /root mfs rw,noatime,-s=262144 0 0 swap /home mfs rw,noatime,-s=262144 0 0 swap /etc mfs rw,noatime,-s=131072 0 0 </file> Die Zahlenwerte definieren die Grösse der anzulegenden RAM-Drives, und zwar in 512er-Blöcken. (262144 bedeutet demnach 128MBytes.) Die Volumes wachsen während der Systemlaufzeit entsprechend ihrem Inhalt bis zu der hier angegebenen Maximalgrösse. Man sollte die Grenzwerte also tunlichst der Grösse des vorhandenen Arbeitsspeichers anpassen. ===== Anpassen von /livecd/etc/rc ===== Man entferne die Zeilen <file>fsck -p</file> und <file> mount /usr >/dev/null 2>&1 mount /var >/dev/null 2>&1 </file> und <file> # /var/crash should be a directory or a symbolic link # to the crash directory if core dumps are to be saved. if [ -d /var/crash ]; then savecore ${savecore_flags} /var/crash fi </file> Nun füge man vor der Zeile <file># pick up option configuration</file> das folgende ein: <file> echo 'mounting mfs' mount_mfs -s 262144 swap /var mount_mfs -s 131072 swap /etc mount_mfs -s 12000 swap /dev mount_mfs -s 262144 swap /tmp mount_mfs -s 262144 swap /home mount_mfs -s 262144 swap /root sleep 2 cp -pR /backups/var/* /var cp -pR /backups/etc/* /etc cp -pR /backups/dev/* /dev cd /dev && sh MAKEDEV all </file> Auch hier ist auf die Grösse der Volumes zu achten. Sie sollten sich auf jeden Fall mit den Einstellungen in /livecd/backups/etc/fstab decken. ===== Anpassen von /livecd/backups/etc/rc ===== Sie gleicht /livecd/etc/rc, enthält aber nicht die dort eingefügten Zeilen <file> echo 'mounting mfs' mount_mfs -s 262144 swap /var mount_mfs -s 131072 swap /etc mount_mfs -s 12000 swap /dev mount_mfs -s 262144 swap /tmp mount_mfs -s 262144 swap /home mount_mfs -s 262144 swap /root sleep 2 cp -pR /backups/var/* /var cp -pR /backups/etc/* /etc cp -pR /backups/dev/* /dev cd /dev && sh MAKEDEV all </file> ===== Installieren von cdrtools =====
# pkg_add -v ftp:ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/cdrtools-xxx.tgz
</xterm>

Die xxx stehen auch hier für die aktuelle Versionsnummer.


===== Erzeugen des ISO-Images =====

# cd /livecd
# mkisofs -b cdrom38.fs -c boot.catalog -R -v -o /tmp/livecd.iso /livecd
Verwandle das Resultat mit Hilfe eines Brenn-Programms deiner Wahl in eine CD. ===== Quelle ===== Das alles habe ich mir natürlich nicht selbst ausgedacht: http://www.onlamp.com/pub/a/bsd/2005/07/14/openbsd_live.html ===== Verweise ===== * Noch schneller geht es, wenn man Glück hat und die Version von OliveBSD läuft. * BSD Live-CDs