Freitag, 1. Januar 2010

Eigene Ubuntu 8.04.3 Desktop Live CDs erstellen

Vor ein paar Tagen habe ich eine Modern Perl Ubuntu 8.04.3 LTS Live DVD erstellt und zum Download bei SourceForge eingestellt.

Das Erstellen von LiveCDs auf der Basis von Ubuntu ist gut dokumentiert (LiveCDCustomization - How to Customise the Ubuntu Desktop CD) und eigentlich nicht besonders schwierig.

Hier meine Arbeitsschritte auf einem Ubuntu 8.04.3 Desktop System zur Erzeugung eines angepassten Ubuntu 8.04.3 Desktop System. Für andere Varianten wie Server-CD oder Alternate-CD oder andere Versionen funktioniert die hier aufgezeigte Vorgehensweise nicht. Weiterhin gehe ich hier nicht auf das Erstellen eines angepassten Kernels ein.

squashfs-tools und genisoimage installieren


$ sudo apt-get update
$ sudo apt-get install squashfs-tools genisoimage


Arbeitsverzeichnisse erstellen


$ sudo mkdir /opt/customize
$ cd /opt/customize
$ sudo mkdir /opt/customize/mnt
$ sudo mkdir /opt/customize/extract-cd


Anschließend ein Ubuntu 8.04 Desktop ISO-Image downloaden und im Verzeichnis /opt/customize ablegen und das ISO-Image mounten


$ sudo mount -o loop /opt/customize/ubuntu-8.04.3-desktop-i386.iso /opt/customize/mnt


den Inhalt der CD extrahieren,


$ sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd


und das gepackte Datei-System entpacken.


$ sudo unsquashfs mnt/casper/filesystem.squashfs
$ sudo mv squashfs-root edit


Im Verzeichnis edit befindet sich nun der Inhalt des ISO-Images und kann nach einem chroot bearbeitet werden.

Gerätedateien des Hosts an die chroot-Umgebung weiterreichen.


sudo mount --bind /dev/ edit/dev


Auch innerhalb der chroot-Umgebung soll eine Netzwerkverbindung möglich sein. Daher werden die Netzwerkeinstellungen des Hosts in das zu editierende System kopiert.


$ sudo cp /etc/resolv.conf edit/etc/
$ sudo cp /etc/hosts edit/etc/


Damit graphische Programme innerhalb der chroot-Umgebung laufen können, muss der entsprechende Socket weitergeleitet werden:


$ sudo mkdir -p edit/tmp/.X11-unix
$ sudo mount --bind /tmp/.X11-unix edit/tmp/.X11-unix
$ xhost +local:


Nach einem chroot in das edit Verzeichnis


$ sudo chroot edit


muss noch die Umgebung eingestellt,


# export HOME=/root
# export LC_ALL=C
# export DISPLAY=:0


einige Systemverzeichnisse von Hand eingehängt,


# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devpts none /dev/pts


und eine eindeutige ID vergeben werden.


# dbus-uuidgen > /var/lib/dbus/machine-id


Jetzt kann das System nach eigenen Vorstellungen angepasst werden:


# apt-get update
# dpkg-query -W --showformat='${Package}\n' | sort | less
# apt-get purge Package-Name
# apt-get install Package-Name
# apt-get install build-essential


Sobald alle Änderungen vorgenommen wurden, müssen noch Aufräumarbeiten innerhalb der chroot-Umgebung


# apt-get clean
# apt-get autoremove

# rm /var/lib/dbus/machine-id

# rm /etc/hosts
# rm /etc/resolv.conf

# rm -f /tmp/*
# rm /root/.viminfo

# export HISTSIZE=0
# rm /root/.bash_history

# umount /proc
# umount /sys
# umount /dev/pts
# exit


und außerhalb der chroot-Umgebung durchgeführt werden.


$ sudo umount edit/dev
$ sudo umount edit/tmp/.X11-unix
$ sudo rm -rf edit/tmp/.X11-unix


Nach der Erstellung des Manifests


$ chmod +w extract-cd/casper/filesystem.manifest
$ sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
$ sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop


wird das Dateisystem komprimiert,


$ sudo rm extract-cd/casper/filesystem.squashfs
$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs -nolzma


MD5-Prüfsummen erneut kalkuliert


$ cd extract-cd
$ sudo rm md5sum.txt
$ sudo find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.tx


und das neue ISO-Image erzeugt.


$ sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-8.04.3-desktop-i386-custom.iso .


That's it.

Keine Kommentare: