Zielstellung ist das Anpassen einer Linux-Live-Distribution auf eigene Bedürfnisse (Remastern eines bootfähigen ISOs). Dabei eignet sich DebianDog besonders gut. Es handelt sich um ein sehr gut vorkonfiguriertes Live-Debian nach Puppy-Art, das sich hier herunterladen lässt:

1. Livesystem booten

Zuerst einmal müssen wir das Live-Linux an den Start bringen. Das kann mit VirtualBox oder einer anderen Virtualisierungslösung wie kvm geschehen. Zur Installation dieser nativen Linux-Lösung siehe hier:

Der Maschine sollte man etwas mehr RAM (hier 2300 MB) zuweisen, weil sonst für das Remastern (Erstellung einer squashfs-Datei) schnell der Speicherplatz ausgeht.

Mit der folgenden Kommandozeilen kann ein einfacher Benutzer die virtuelle Maschine booten:

kvm -m 2300 -smp 2 -boot d -cdrom ~/Downloads/DebianDog-Jessie-jwm_icewm-2015-09-02-PAE.iso -vga std &

2. Livesystem anpassen

Nunmehr befinden wir uns im virtuellen Gastsystem und können in einem Terminalfenster die gewünschte Software nachinstallieren. Sinnvoll ist auch hinsichtlich des später zu übertragenden squashfs-Images, das Paket openssh-client mit zu installieren:

apt-get update
apt-get install openssh-client ...

Eigene Skripte kann man unter /opt/bin platzieren, die Einbindung für einen möglichen Autostart geschieht mittels der Datei /etc/rc.local.

Wer sich z.B. eine Antiviren-Live-CD mit Bordmitteln bauen möchte, kann sich gleich noch die Antivirensoftware clamav installieren. Da wir aber die Virensignaturen am besten über den Host aktualisieren wollen (siehe unten), wird der Updatemechanismus in diesem Gast via freshclam deaktiviert und alle bereits heruntergeladenen Dateien gelöscht:

apt-get install clamav
systemctl stop clamav-freshclam
systemctl disable clamav-freshclam
rm /var/lib/clamav/*

3. Livesystem remastern

Wenn die gewünschten Änderungen vorgenommen wurden, müssen wir als nächstes

  1. Ein neues Squash-Dateisystemimage erzeugen,

  2. das Image auf das Hostsystem kopieren

  3. und dort am Schluss ein bootfähiges ISO erzeugen.

3.1. Squash-Dateisystemimage erzeugen

Im Startmenü findet sich unter System der Eintrag RemasterDog, der einen kleinen Assistenten startet. Viele Einstellungen sind nicht vorzunehmen:

  • Ordner auswählen, wo das Image gespeichert werden soll (/tmp)

  • Einen Namen eingeben, der für das Build-Verzeichnis unter /tmp verwendet wird (master)

  • Einen Namen für das neu zu bauende Dateisystemimage angeben (01.squashfs)

So sieht dieser erste Dialog aus, in dem alle Einstellungen vorgenommen werden müssen:

Startmenüeintrag suchen, Einstellungen
Bild 1: Startmenüeintrag suchen, Einstellungen

Dann müssen nur noch entsprechende Bestätigungen gegeben werden, zuerst muss natürlich das Image gebaut werden (CreateModule):

Modul bauen
Bild 2: Modul bauen

Schließlich bestätigen wir nur noch, dass das temporäre build-Verzeichnis gelöscht werden kann:

Aufräumen, um Platz zu schaffen
Bild 3: Aufräumen, um Platz zu schaffen

3.2. Image auf das Hostsystem kopieren

Da wir ja zuvor das Paket openssh-client installiert hatten und auf unserem Debian-Host sowieso der ssh-Daemon läuft, gelingt es nun leicht, das generierte Image auf den Host zu kopieren.

Bei Verwendung der oben gezeigten Möglichkeit, das Gastsystem mit kvm zu booten, hat der Host die IP-Adresse 10.0.2.2 (via internes DHCP/NAT). Auf diese Maschine kopieren wir nun das Image, wobei es im Heimatverzeichnis des Benutzers tux landet:

scp /tmp/01.squashfs tux@10.0.2.2:

Damit sind die Arbeiten im Gastsystem abgeschlossen. Wir können ihn aber gern weiterlaufen lassen, falls wir nämlich mit dem Endergebnis nicht zufrieden sind und einen weiteren Versuch starten wollen, müssen die Software-Pakete, die ja nur im RAM liegen, nicht erneut heruntergeladen und installiert werden.

3.3. Bootfähiges ISO erzeugen

Jetzt geht es auf dem Host-System weiter. Dort finden wir nun unsere Image-Datei: /home/tux/01.squashfs

Beim ersten Mal muss das ISO gemountet und der CD-Inhalt in einem Buildverzeichnis tmp bereitgestellt werden:

mount /home/tux/Downloads/DebianDog-Jessie-jwm_icewm-2015-09-02-PAE.iso /mnt/
cp -a /mnt/* /home/tux/DebianDogRemaster/tmp/

Nun verschieben wir das vorhin erstellte, remasterte Image 01.squashfs und benennen es gleichzeitig um, wobei die Zieldatei praktischerweise überschrieben wird:

root@wks01:# cd /home/tux/DebianDogRemaster
root@wks01:/home/tux/DebianDogRemaster# mv /home/tux/01.squashfs tmp/live/01-filesystem.squashfs
root@wks01:/home/tux/DebianDogRemaster#

Jetzt brauchen wir nur noch ein kleines Skript, das uns hilft, aus all dem ein bootfähiges ISO zu bauen (Das Paket genisoimage muss vorher installiert werden: apt-get install genisoimage):

#!/bin/sh
#
# Auf Anregung von
# http://openwritings.net/content/public/excerpt/create-custom-debiandog-iso
#
# Die Option '-f' kann entfallen, wenn keine Symlinks im Verzeichnis 'rootcopy' benutzt werden

genisoimage -f -r -V "live-modules-slimjet" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o $PWD/debianDog.iso  $PWD/tmp/
root@wks01:/home/tux/DebianDogRemaster# ./geniso
I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
  5.93% done, estimate finish Thu Dec 10 17:08:16 2015
 11.87% done, estimate finish Thu Dec 10 17:08:16 2015
 17.78% done, estimate finish Thu Dec 10 17:08:16 2015
 23.72% done, estimate finish Thu Dec 10 17:08:16 2015
 29.64% done, estimate finish Thu Dec 10 17:08:16 2015
 35.57% done, estimate finish Thu Dec 10 17:08:16 2015
 41.49% done, estimate finish Thu Dec 10 17:08:16 2015
 47.43% done, estimate finish Thu Dec 10 17:08:16 2015
 53.34% done, estimate finish Thu Dec 10 17:08:17 2015
 59.28% done, estimate finish Thu Dec 10 17:08:17 2015
 65.20% done, estimate finish Thu Dec 10 17:08:17 2015
 71.13% done, estimate finish Thu Dec 10 17:08:17 2015
 77.06% done, estimate finish Thu Dec 10 17:08:17 2015
 82.98% done, estimate finish Thu Dec 10 17:08:17 2015
 88.90% done, estimate finish Thu Dec 10 17:08:17 2015
 94.83% done, estimate finish Thu Dec 10 17:08:17 2015
Total translation table size: 2048
Total rockridge attributes bytes: 2704
Total directory bytes: 12288
Path table size(bytes): 98
Max brk space used 23000
84365 extents written (164 MB)
root@wks01:/home/tux/DebianDogRemaster#

Später kann mit dem modifizierten System testweise gebootet werden:

kvm -m 1024 -smp 4 -boot d -cdrom myDebianDog.iso -vga std &

4. Vermeidung neuen Remasterns wegen einzelner Dateien

Dank der Porteus-Art zu booten, gibt es ein Verzeichnis rootcopy (tmp/live/rootcopy/), dessen Inhalt während des Bootvorganges in die Wurzel (/) des Live-Systems kopiert wird.

Soll aber kein persistent-Stick verwendet werden, muss der Booteintrag sysvinit Porteus Always Fresh in der Datei tmp/isolinux/live.cfg bearbeitet werden: norootcopy ist zu entfernen. Dann diesen Eintrag manuell ausgewählen oder Standardbooteintrag ändern.

Bereitsstellen von Dokumentation:

cd /home/tux/DebianDogRemaster
mkdir -p tmp/live/rootcopy/root/

vi tmp/live/rootcopy/root/LIESMICH.txt

Wer wie oben erwähnt die Antivirensoftware clamav im Gastsystem installiert hat, müsste ja jedesmal DebianDog remastern, um die aktuellsten Virensignaturen zu integrieren. Es geht aber dank des rootcopy-Verzeichnisses viel einfacher, indem wir die aktuellen Signaturen auf dem Host vorhalten und beim Erzeugen des bootfähiges ISOs automatisch einbinden.

Dies erledigen wir in zwei Schritten:

  1. Installation von clamav auch auf dem Host-System, wobei die Virensignaturen automatisch mit Hilfe von freshclam aktualisiert werden.

  2. Erzeugen von symbolischen Links in der rootcopy-Verzeichnisstruktur, die auf die Virensignaturen unter /var/lib/clamav zeigen.

apt-get install clamav

cd /home/tux/DebianDogRemaster
mkdir -p tmp/live/rootcopy/var/lib/clamav/

cd tmp/live/rootcopy/var/lib/clamav/
ln -s /var/lib/clamav/bytecode.cvd
ln -s /var/lib/clamav/daily.cvd
ln -s /var/lib/clamav/main.cvd
ln -s /var/lib/clamav/mirrors.dat