An dieser Stelle gibt es eine kleine Anleitung, wie man am Schnellsten eine eigene Wunsch-Ubuntu-CD erstellt. Diese Anleitung stellt eine Quasi-Übersetzung der Artikels LiveCDCustomization dar. Ich habe sie nur an ein paar Stellen angepasst und gestrafft bzw. mich auf das Wesentliche beschränkt.
Bitte lest die Anleitung wenigstens einmal komplett durch, bevor ihr euch an das Anpassen einer CD macht. Da man sehr viele Aufgaben als Superuser durchführen muss, können Tippfehler fatal enden.
Grundlegende Vorbereitungen
Als Erstes muss man die ISO-Datei der gewünschten Variante herunterladen.
Diese Anleitung funktioniert nur mit der Live-CD und nicht mit der Alternate-CD
Danach muss man zwei Pakete installieren, welche für das Erstellen der CD zwingend notwendig sind :
sudo apt-get install squashfs-tools genisoimage
“genisoimage” sollte im Normalfall schon installiert sein. Zusätzlich benötigt man 3-5GB freien Festplattenplatz und mindestens 512MB RAM.
Jetzt geht es ans Eingemachte. Zuerst muss man ein Arbeitsverzeichnis erstellen :
mkdir -p ~/live-cd/extract-cd
Ich habe in meinem Beispiel das Homeverzeichnis (“~”) als Grundlage für das Arbeitsverzeichnis gewählt. Wer nicht genügend Platz in diesem Verzeichnis hat und/oder ein anderes Verzeichnis benutzen will, muss den Pfad entsprechend anpassen.
Als Nächstes wechselt man ins angelegte Arbeitsverzeichnis :
cd live-cd
Danach muss man die Live-CD in ein Verzeichnis mounten (Den Dateinamen sollte man entsprechend anpassen) :
sudo mount -o loop Pfad_zur_ISO_Datei/ubuntu-10.04-desktop-i386.iso /mnt
Als Nächstes wird der Inhalt der eingebundenen ISO-Datei per “rsync” in das Verzeichnis “extract-cd” gespiegelt. Dabei wird die Datei “filesystem.squashfs” ausgelassen, da diese am Ende eh neu generiert wird. Zusätzlich werden dann noch alle Dateien des neuen Verzeichnisses als Beschreibbar markiert, da es später ansonsten Probleme gibt :
rsync --exclude=/casper/* -a /mnt/ extract-cd
chmod -R +w extract-cd
Von jetzt an muss jeder Befehl als “root” bzw. Superuser ausgeführt werden. Man sollte dementsprechend aufpassen auf welches Verzeichnis man zugreift bzw. aus welchem Verzeichnis man eine Datei löscht.
Jetzt wird das eigentliche Live-CD-Dateisystem entpackt (Das dauert einige Minuten) :
sudo unsquashfs /mnt/casper/filesystem.squashfs
sudo mv squashfs-root edit
(Ist nicht unbedingt notwendig, verkürzt aber die Tipparbeit bei den restlichen Anpassungen)
Alle Dateien der Live-CD sind jetzt auf der Festplatte.
“chroot”-Umgebung vorbereiten
Die folgenden Befehle dienen dazu eine funktionierende “chroot”-Umgebung einzurichten. Sind diese Vorbereitungen abgeschlossen, kann man mit dem Live-CD-System wie mit einer normalen Installation arbeiten.
Zuerst wird die Datei für die Nameserver-Konfiguration vom Hauptsystem in das Live-CD-System kopiert :
sudo cp /etc/resolv.conf edit/etc/
Dies ermöglicht die DNS-Namensauflösung innerhalb der späteren “chroot”-Umgebung. Je nach System, muss man noch zusätzlich die “hosts”-Datei kopieren :
sudo cp /etc/hosts edit/etc/
Jetzt wird noch das dev-Verzeichnis in die “chroot”-Umgebung eingebunden :
sudo mount --bind /dev/ edit/dev
Die “chroot”-Umgebung ist jetzt fast vorbereitet. Alle weiteren, noch notwendigen Konfigurationschritte werden ab jetzt in dieser Umgebung durchgeführt.
Zuerst wechselt man in die “chroot”-Umgebung :
sudo chroot edit
Falls man nicht von vorneherein als Superuser unterwegs war (was auf keinen Fall zu empfehlen ist!), erkennt man jetzt die “chroot”-Umgebung an einem vorangestellten “root” in der Pfadangabe der Konsole.
Jetzt kommen die restlichen Vorbereitung dran. Diese werden, da man jetzt ein Superuser ist, ohne vorangestelltes “sudo
” ausgeführt :
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
alias ls="ls --color -F"
Die “chroot”-Umgebung ist jetzt im Prinzip fertiggestellt. Es müssen jetzt nur noch drei kleine Schritte durchgeführt werden, damit es keine Probleme bei der Installation bzw. Deinstallation von Paketen gibt :
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
Die letzten drei Befehle sorgen dafür, das die “chroot”-Umgebung keine Möglichkeit hat laufende Dienste zu verändern bzw. auf den System-DBUS-Dienst zuzugreifen.
Ab jetzt kann man das System nach Belieben verändern. In meinen Fall führe ich zuerst per “aptitude” ein Update aller Pakete durch, binde meine PPAs ein und entferne ein paar Pakete (z.B. “example-content”) um die Größe des (später) komprimierten Dateisystem unter ca. 670MB zu halten. Wer will, kann auch einfach Synaptic starten (Befehl “synaptic”) und alle Paketinstallationen, Deinstallationen und Updates grafisch durchführen.
Weitere Anpassungen (z.B. Ändern des Hintergrundbildes, Abschalten des Autologins, usw.) sind nicht Teil dieser Anleitung. Wer mehr zu diesen Änderungen erfahren möchte, sollte sich den am Anfang genannten englischen Artikel durchlesen.
Beim Aktualisieren des Systems gibt zwei Dinge zu beachten :
- Man sollte unbedingt alle alten Kernelversionen deinstallieren und nur die neueste Version installiert lassen. Ansonsten bekommt man später die ISO-Datei niemals kleiner als 700MB ohne massiv andere Pakete zu deinstallieren.
- Wenn ein Grub2-Update angeboten wird, sollte dessen weitere Konfiguration ablehnen.
Hat man alle Veränderungen durchgeführt, muss man alle vorher getätigten Eingriffe in die “chroot”-Umgebung wieder rückgängig machen bzw. das Dateisystem aufräumen (Paketdateien löschen, temporäre Dateien entfernen, usw.) :
Vor dem Aufräumen und dem Verlassen der “chroot”-Umgebung sollte man sich nochmals vergewissern, dass im Verzeichnis “/boot” nur noch ein Kernel vorkommt. Falls nicht, sollte man dringend die alten Kernelversionen deinstallieren und erst dann die weiteren Schritte durchführen.
aptitude clean
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
umount /proc
umount /sys
umount /dev/pts
Jetzt kann man die “chroot-Umgebung” wieder verlassen und die restlichen Aufräumarbeiten erledigen :
exit
sudo rm -rf edit/tmp/* edit/root/.bash_history edit/etc/resolv.conf edit/etc/hosts edit/var/lib/dbus/machine-id
sudo umount edit/dev
Falls es beim “unmounten” eines Verzeichnisses (passiert häufiger beim “/dev”-Verzeichnis) Probleme gibt, sollte man den Befehl “umount” mit den Parametern "-lf"
(“lazy” und “force”) aufrufen.
Denkt bitte daran, ein “exit”-Befehl verlässt die “chroot”-Umgebung. Um gravierende Fehler zu vermeiden sollte man sich immer merken, das man innerhalb der “chroot”-Umgebung kein “sudo” benötigt, außerhalb (also auf dem normalen System) jedoch immer. Auf keinen Fall sollte man direkt (z.B. per “sudo -s”) in den Superuser-Modus wechseln, da man ansonsten sehr leicht übersehen kann ob man sich überhaupt noch in der “chroot”-Umgebung befindet.
Neuere Kernelversion in die Live-CD einbauen
Damit die Live-CD auch mit einer neueren Kernelversion starten kann, muss man diesen vom eigentlichen Live-CD-Dateisystem ins das Verzeichnis “casper” des Live-CD-Dateisystems kopieren und die Initial-RAM-Disk mit LZMA rekomprimieren :
zcat edit/boot/initrd.img-2.6.32-24-generic | lzma -c -9 > extract-cd/casper/initrd.lz
cp edit/boot/vmlinuz-2.6.32-24-generic extract-cd/casper/vmlinuz
Wenn man die Original-CD benutzt, muss man die Kernel-Datei direkt von der CD holen, da im Verzeichnis “edit/boot” die Datei “vmlinuz” nicht vorkommt :
cp /mnt/casper/vmlinuz extract-cd/casper
Analog verfährt man, wenn man z.B. einen der Mainline-Kernel oder einen Eigenbau-Kernel in die Live-CD einbinden möchte. Man muss nur die Versionsnummern anpassen, der Rest ist identisch.
SquashFS-Dateisystem erstellen
Nachdem diese Schritte ausgeführt wurden, geht es an das Erstellen des Live-CD-Dateisystems. Der komplette Verzeichnisbaum unter “edit” wird dabei in eine einzelne Datei gepackt (Die Kerneldateien werden dabei ausgelassen) :
sudo mksquashfs edit extract-cd/casper/filesystem.squashfs -wildcards -e boot/vmlinuz-* boot/initrd.img-*
Dieser Vorgang kann, je nach Rechner, bis zu einer halben Stunde dauern. Geht am Besten einen Kaffee trinken.
Nachdem dieser Vorgang abgeschlossen ist, sollte man zuerst die Gesamtgröße des Ordners “extract-cd” überprüfen. Dieser sollte immer unter 700MB bzw. 734003200 Bytes liegen. Ansonsten kann es nämlich zu Problemen beim Brennen der CD kommen. Wer vorhat die ISO-Datei auf eine DVD zu brennen oder diese nur per USB-Stick zu nutzen, braucht auf die Größenbeschränkung natürlich nicht zu achten.
Liegt die Größe über den genannten 700MB, muss man nochmals eine “chroot”-Umgebung erstellen (Einfach die Anleitung ab “chroot”-Umgebung vorbereiten nochmals abarbeiten) und zusätzliche Programme aus der Installation entfernen. Leider gibt es keine Möglichkeit die Größe des erstellten SquashFS-Dateisystems im Voraus zu bestimmen, da die Größe des erstellten SquashFS-Dateisystems davon abhängt, wie stark sich der Inhalt des Live-CD-Dateisystems komprimieren lässt.
Man sollte, nachdem das Erstellen das SquashFS-Datei abgeschlossen ist, diese nochmals per “unsquashfs” entpacken. Mir ist es in den letzten Tagen schon zweimal passiert, das die Datei nicht korrekt komprimiert wurde und einige Dateien darin defekt waren. Da ich mir nicht 100% sicher bin ob es daran lag, dass ich die Anpassungen unter VirtualBox durchgeführt habe, habe ich mir einfach angewöhnt die SquashFS-Datei durch das nochmalige Entpacken auf ihre Korrektheit zu überprüfen (Leider scheint es kein “fsck.squashfs” zu geben). Sollte alles korrekt sein, löscht man danach einfach das erstellte Verzeichnis “squashfs-root” wieder.
ISO-Datei erstellen
Hat man die Größe des Ordners unter 700MB gedrückt, kommen nun die letzten Schritte vor dem Erstellen der eigentlichen ISO-Datei :
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop
sudo du -sx --block-size=1 edit | cut -f1 > extract-cd/casper/filesystem.size
sudo chmod a-x+rw extract-cd/casper/filesystem.squashfs
Die obigen Befehle legen einige Dateien an, welche der Ubuntu-Installer benötigt um den Inhalt des Live-CD-Dateisystems sauber in eine echte Installation überführen zu können. Der “chmod”-Befehl dient nur dazu das man als normaler Benutzer überhaupt auf die angelegte SquashFS-Datei zugreifen kann.
Als letztes ist das eigentliche Erstellen der ISO-Datei dran :
cd extract-cd
genisoimage -D -r -V "Ubuntu 10.04" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-10.04-desktop-i386-custom.iso .
Die einzigen Parameter, welche man ändern sollte, sind der Name der CD (Parameter “-V”) und den Dateinamen der ISO-Datei.
Ist das Erstellen der ISO-Datei erfolgreich, ist man am Ende angekommen. Nun kann man die erstellte ISO-Datei in einen beliebigen Ordner verschieben und den Ordner “live-cd” von der Festplatte löschen. Bevor man dies tut, sollte man die erstellte ISO-Datei einem Testlauf unterziehen. Am Einfachsten geht das per USB-Stick oder, um keine CD-Rohlinge zu verschwenden, per wiederbeschreibbarer CD. Funktioniert die ISO-Datei ordnungsgemäß und wie gewünscht, kann man dann wirklich den Ordner “live-cd” löschen.
Am Ende muss man dann nur noch die ganz am Anfang gemountete ISO-Datei wieder aushängen :
Ist dieser Schritt abgeschlossen, kann man die eingebundene ISO-Datei wieder entfernen :
sudo umount /mnt
Edit 31.05.2010 :
- Kleinere Änderungen eingefügt. Dank an dakira für die Hinweise.
- Fehler korrigiert. Nochmals Dank an dakira für den Hinweis.
Edit 02.06.2010 (*seufz*) :
- Fehlende Befehle zum Erstellen der Manifest-Dateien eingefügt. Diese Befehle werden direkt vor dem Erstellen der ISO-Datei ausgeführt.
- Kopieren der Kerneldatei eingebaut. Ist beim Überarbeiten der Befehlsreihe verloren gegangen.
- Fehlendes “sudo” vor mksquashfs eingefügt.
- rsync-Befehl überarbeitet. Da am Ende der Inhalt des Verzeichnisses “casper” eh neu erstellt wird, braucht man daraus auch keine Dateien rauskopieren.
- Datei -und Verzeichnisrechte angepasst damit “genisoimage” und andere Befehle auch ohne “sudo” funktionieren.
- Rechtschreib -und Grammatikfehler korrigiert.
Edit 16.07.2010 :
- Hinweis auf den “umount”-Fehler eingefügt. Dank an Lirex für den Tipp mit den Parametern.
Edit 18.08.2010 :
- Dateinamen der initrd-Datei angepasst (Anpassung an Ubuntu 10.04.1).
- Hinweis zu Kernel-Datei eingebaut und “umount”-Befehl ans Ende der Anleitung verschoben.