Entwicklerhandbuch/CD remastern

Aus Delixs
Zur Navigation springen Zur Suche springen

Diese Seite ist momentan eine Baustelle im Zustand: 1

Wird bearbeitet von: ThorstenStrusch
Hilfe zum Bearbeitungsstatus: Hilfe:Status eines Artikels


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. Diese Möglichkeit wird im Kapitel: Simple-CDD 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.

  1. Das setzt voraus, dass man sich mit dem tool auseinandersetzt, was zwar Zeit kostet, sich aber dennoch lohnt.
  2. Mein Weg, der mich schnell zum Ziel geführt hat. Ist nicht debian konform, funktioniert aber trotzdem.
  3. 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:

  1. CD Kopieren
  2. Ordner delixs anlegen und preesed reinkopieren
  3. isolinux.cfg anpassen/erweitern
  4. 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";



zurück | Hauptseite

Thorsten Strusch 2008