Entwicklerhandbuch/CD remastern
Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben). |
Installations-CD remastern
Das Erstellen einer eigenen angepassten debian Installations CD ist nicht so schwer wie es auf dem ersten Blick ausschaut.
Weg Nr. 1
- simple CDD &Co nehmen.
Dann kommt dabei ein schnell per script zu reproduzierenes CD-Image heraus. Wird hier nicht beschrieben.
Weg Nr. 2
Man "erntet" eine vorhandene _aktuelle_ CD (netinstall reicht) und kopiert sich seine eigenen Skripte oder noch zusätzlich benötigte debian Pakete hinzu.
- Das setzt voraus, dass man sich mit dem tool auseinandersetzt, was zwar Zeit kostet, sich aber dennoch lohnt.
- Mein Weg, der mich schnell zum Ziel geführt hat. Ist nicht debian konform, funktioniert aber trotzdem.
- Updates von debian Paketen müssen aber manuell und zeitaufwändig in die CD eingepflegt werden.
Allzu detailliert kann ich meinen Weg momentan nicht skizzieren, aber ich hoffe es reicht trotzdem.
Ich habe mir eine debian netinstall CD genommen und in einen Ordner kopiert. Dabei ist es wichtig den Ordner .disk nicht zu vergessen!
PROJEKT="/home/projekte/d-i/deb-cd/" mkdir -p $PROJEKT rsync -avz /media/cdrom0 $PROJEKT
Danach habe ich mir noch einige Ordner angelegt, in die ich von mir produzierte debs, configs und Programme abgelegt habe:
cd $PROJEKT mkdir delixs windows db mkdir pool/main/{deb_org_i386,deb_cust_i386,udeb_r3_i386} ln -s .disk disk ln -s . debian ln -s dists/lenny dists/stable
So schaut die CD nach dem Kopieren und Anlegen der Ordner/links aus:
. |-- db |-- debian -> . |-- disk -> .disk |-- dists | |-- lenny | | `-- main | | |-- binary-i386 | | `-- debian-installer | | `-- binary-i386 | `-- stable -> lenny |-- install |-- install.386 | `-- gtk |-- isolinux |-- delixs |-- pool | `-- main | |-- deb_cust_i386 | |-- deb_org_i386 | `-- udeb_r3_i386 `-- windows
Unter pool/main habe ich die Ordner selbst angelegt. Das erleichtert mir die Arbeit beim Einpflegen von neuen debian Paketen. Das war meine Entschiedung, man kann es anders machen.
Unter delixs habe ich meine preseed.cfg als auto.delixs abgelegt.
In .disk/base_include habe ich eine winzig kleine Vorauswahl von debian Paketen abgelegt (für perl wäre es hier zu früh):
$ cat base_include cfengine2 dialog delixs-debian-archive-keyring debian-backports-keyring delixs-firstrun-config whiptail mdadm udev
Die Datei .disk/info beinhaltet einen Einzeiler mit dem Hinweis was für eine CD das ist. (z.B. delixs Schulserver Version 0.1)
Jetzt müßen wir nur noch dafür sorgen, dass die preseed Datei auto.delixs auch benutzt wird. Dafür ist im Ordner isolinux die Datei isolinux.cfg anzupassen.
Hier nur ein Ausschnitt, wobei es auf die sehr lange APPEND Zeile ankommt, die hier in der Mail sicherlich umgebrochen ist:
LABEL normal32 MENU LABEL del^ixsv0.1 32bit Installation MENU INDENT 1 TEXT HELP * version: delixsv0.1 (C) 2009 (svn: #759) * Achtung: Die Festplatten werden ohne Nachfrage komplett geloescht! * http://www.delixs.de ENDTEXT KERNEL /install.386/vmlinuz APPEND auto=true priority=critical vga=normal initrd=/install.386/initrd.gz preseed/file=/cdrom/delixs/auto.delixs countrychooser/shortlist=DE console-keymaps- at/keymap=de-latin1-nodeadkeys ohci1394.blacklist=yes rtc.blacklist=yes languagechooser/language-name=German --
Der Pfadprefix /cdrom ist für den installer wichtig. Man kann hier auch den Pfad zu einem usb-stick oder einem Webserver angeben. Das ist in der d-i Info beschrieben und ist zum Testen der preseed-Datei sehr hilfreich. Andernfalls brennt man eine CD nach der anderen
Und da ich eigene debian Pakete hinzugefügt habe fehlen auch noch einige apt-ftparchive-configs zum Erzeugen eines validen Repositories auf der CD. Die hänge ich für i386 hinten an.
Ja und jetzt fehlt natürlich nur noch der Aufruf zum Brennen der CD: (einige Befehle fehlen, z.B. das Auschecken der cfengine configs und ssh-keys aus meinem SVN, das ist aber nicht wichtig)
#!/bin/bash BASE=$(/bin/pwd) DISKSRC=$BASE ISOTARGET=${BASE}/../output.iso SVNVER="rev$(svn info https://$SVNURL/svn/trunk | awk '/^Revision/ {print $2}')_$(date -I)" # Pool-Struktur bauen cd $DISKSRC mkdir -p ./dists/lenny/main/{,debian-installer}/binary-i386 cd ./dists/ [ -L stable ] || ln -fs lenny stable cd .. mkdir -p ./pool/main/{,debian-installer}/i386 cd $DISKSRC # i386 Archiv erzeugen apt-ftparchive generate apt-ftparchive-i386.conf # udeb Archiv erzeugen apt-ftparchive generate apt-ftparchive-di.conf # Releasefile erzeugen apt-ftparchive -c apt-release-i386.conf release dists/lenny/ > dists/lenny/Release # md5sums.txt im DVD-Root bauen. # Windows Software und grml-Dateien davon ausnehmen. cd $DISKSRC md5sum `find ! -name "md5sum.txt" ! -path "./isolinux/*" ! -path "./grml64/*" ! -path "./windows/*" -follow -type f` > md5sum.txt cd ../ genisoimage -l -r -J -v -V "delixs v0.1_$SVNVER" -input-charset utf-8 -no-emul-boot -boot-load-size 4 \ -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat -hide-rr-moved \ -m ".svn" -o $ISOTARGET $DISKSRC # md5 sum erzeugen: cd $(dirname $ISOTARGET) md5sum $(basename $ISOTARGET) > $(basename $ISOTARGET).md5 echo -e "\033[0;42;34m\n\ndelixsv0.1_$SVNVER ist erstellt\n\033[0;0;39m"
Damit ist die CD fertig.
Was noch fehlt ist eine Möglichkeit nach der Installation ein eigenes Skript ablaufen zu lassen, damit man sich nicht nur auf die preseed Voreinstellungen verlassen muss (was definitiv nicht reicht).
Mein in der base_include definiertes debian Paket delixs-firstrun-config macht das bei uns. Es wird beim 1. Start im runlevel 1 schon sehr früh eine dialog-basierte Reihe von Shellscripten ausführen. Dort frage ich div. schulspezifische Einstellungen ab, installiere alle von mir benötigten Pakete von CD. Danach löscht es eine Datei "unconfigured" und dieses Skript wird nie mehr ausgeführt.
Aber auch in der auto.delixs kann ich schon einige Befehle ausführen lassen:
d-i preseed/late_command string mkdir -p /target/etc/delixs ; touch /target/etc/delixs/unconfigured; echo "genrtc" >> /target/etc/modules
Gerade der Weg mit dem Paket delixs-firstrun-config ist sehr überholungsdürftig. Mit einem eigenen udeb, so wie Harry das schon vorgestellt hat, kann man die Einstellungen viel besser abfragen und am Ende übernimmt ein Script vollautomatisch die Konfiguration.
Kurzform
Wenn nur eine preseed.Datei auf die CD gepackt werden soll, dann reichen folgende Schritte:
- CD Kopieren
- Ordner delixs anlegen und preesed reinkopieren
- isolinux.cfg anpassen/erweitern
- genisoimage Befehl ausführen.
Dir { ArchiveDir "./"; CacheDir "./db/"; }; Default { Packages::Compress ". gzip"; Packages { Extensions ".udeb"; }; }; TreeDefault { Packages "$(DIST)/$(SECTION)/debian-installer/binary-$(ARCH)/Packages"; Directory "pool/$(SECTION)"; Contents "$(DIST)/Contents-udeb" }; Tree "dists/lenny" { Sections "main"; Architectures "i386"; }; BinDirectory "pool/main" { };
Dir { ArchiveDir "./"; CacheDir "./db/"; }; Default { Packages::Compress ". gzip bzip2"; Sources::Compress ". gzip bzip2"; Contents::Compress ". gzip bzip2"; Packages { Extensions ".deb"; }; }; TreeDefault { Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages"; Directory "pool/$(SECTION)"; Contents "$(DIST)/Contents-$(ARCH)" }; Tree "dists/lenny" { Sections "main"; Architectures "i386"; }; BinDirectory "pool/main" { };
APT::FTPArchive::Release::Origin "delixs"; APT::FTPArchive::Release::Label "delixs Debian DVD Repository"; APT::FTPArchive::Release::Suite "stable"; APT::FTPArchive::Release::Codename "lenny"; APT::FTPArchive::Release::Architectures "i386"; APT::FTPArchive::Release::Components "main"; APT::FTPArchive::Release::Description "delixs Debian DVD Repository";
Vielen Dank an Thorsten (DD 2008/11/08) für diese kurze Anleitung.