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

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

###########################
/livecd
/sys
/usr/src
###########################

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/

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.

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

config bsd swap generic

und ersetze die Zeile

maxusers 32

durch

option		RAMDISK_HOOKS 
option		MINIROOTSIZE=3800 
maxusers	32
config		bsd root on cd0a

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

strip ${.OBJDIR}/boot
strip -R .comment ${.OBJDIR}/boot

durch

strip -s -R .comment -K cngetc ${.OBJDIR}/boot

und danach die Zeilen

strip bsd.strip
strip -R .comment bsd.strip

durch

strip -s -R .comment -K cngetc bsd.strip

Installieren des ''crunch''-Paketes

# cd /usr/src/distrib/crunch && make && make install

Erzeugen des neuen Kernels

# cd /usr/src/distrib/i386/ramdisk_cd && make

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

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:

/dev/cd0a / cd9660 ro,noatime 0 0

Anpassen von /livecd/backups/etc/fstab

Sie sollte folgende Zeilen enthalten:

/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

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

fsck -p

und

mount /usr >/dev/null 2>&1
mount /var >/dev/null 2>&1

und

# /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

Nun füge man vor der Zeile

# pick up option configuration

das folgende ein:

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

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

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

Installieren von ''cdrtools''

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/cdrtools-xxx.tgz

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


Eigene Werkzeuge