= DebianDog remastern
:author: Axel Pemmann
:Date:     23.01.2016
:Revision: 0.7
:homepage:  http://pemmann.de/doc/lpi1/
:numbered:
:toc:
:imagesdir: img

**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 am besten so herunterladen lässt:

----
cd
mkdir DebianDog
cd DebianDog
wget http://kazzascorner.com.au/saintless/DebianDog/DebianDog-Jessie/DebianDog-Jessie-jwm_icewm-2015-09-02-PAE.iso
----

== 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:

=> https://wiki.ubuntuusers.de/KVM/


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 ~/DebianDog/DebianDog-Jessie-jwm_icewm-2015-09-02-PAE.iso -vga std &
----

== 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. Vor allem aber aktivieren wir erst einmal mit 'setxkbmap' deutsches Tastaturlayout:

----
setxkbmap de
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/*
----



== Livesystem remastern

Wenn die gewünschten Änderungen vorgenommen wurden, müssen wir folgende Schritte durchführen, die als nächstes detailliert beschrieben werden:

 . Ein neues Squash-Dateisystemimage erzeugen
 . Das Image auf das Hostsystem kopieren
 . Auf dem Host ein bootfähiges ISO erzeugen

=== 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:


image::01.jpg[caption="Bild 1: ", title="Startmenüeintrag suchen, Einstellungen", alt="Startmenüeintrag suchen, Einstellungen"]


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

image::02.jpg[caption="Bild 2: ", title="Modul bauen", alt="Modul bauen"]

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

image::03.jpg[caption="Bild 3: ", title="Aufräumen, um Platz zu schaffen", alt="Aufräumen, um Platz zu schaffen"]


=== 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.

=== 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 &
----



== 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:

 . Installation von 'clamav' auch auf dem Host-System, wobei die Virensignaturen automatisch mit Hilfe von 'freshclam' aktualisiert werden.
 . 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
----
