Entwicklerhandbuch/CD remastern: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: __NOTOC__ {{Uberarbeiten}} == Installations-CD remastern == Das Erstellen einer eigenen angepassten debian Installations CD ist nicht so schwer wie es auf dem ersten...)
 
(Lenny stable)
Zeile 37: Zeile 37:
   ln -s .disk disk
   ln -s .disk disk
   ln -s . debian
   ln -s . debian
   ln -s dists/etch dists/stable
   ln -s dists/lenny dists/stable


So schaut die CD nach dem Kopieren und Anlegen der Ordner/links aus:
So schaut die CD nach dem Kopieren und Anlegen der Ordner/links aus:
Zeile 47: Zeile 47:
|-- disk -> .disk
|-- disk -> .disk
|-- dists
|-- dists
|  |-- etch
|  |-- lenny
|  |  `-- main
|  |  `-- main
|  |      |-- binary-i386
|  |      |-- binary-i386
|  |      `-- debian-installer
|  |      `-- debian-installer
|  |          `-- binary-i386
|  |          `-- binary-i386
|  `-- stable -> etch
|  `-- stable -> lenny
|-- install
|-- install
|-- install.386
|-- install.386
Zeile 120: Zeile 120:
   # Pool-Struktur bauen
   # Pool-Struktur bauen
   cd $DISKSRC
   cd $DISKSRC
   mkdir -p  ./dists/etch/main/{,debian-installer}/binary-i386
   mkdir -p  ./dists/lenny/main/{,debian-installer}/binary-i386
   cd ./dists/
   cd ./dists/
   [ -L stable ] || ln -fs etch stable
   [ -L stable ] || ln -fs lenny stable
   cd ..
   cd ..
   mkdir -p ./pool/main/{,debian-installer}/i386
   mkdir -p ./pool/main/{,debian-installer}/i386
Zeile 131: Zeile 131:
   apt-ftparchive generate apt-ftparchive-di.conf
   apt-ftparchive generate apt-ftparchive-di.conf
   # Releasefile erzeugen
   # Releasefile erzeugen
   apt-ftparchive -c apt-release-i386.conf release dists/etch/ >  
   apt-ftparchive -c apt-release-i386.conf release dists/lenny/ >  
   dists/etch/Release
   dists/lenny/Release
   # md5sums.txt im DVD-Root bauen.
   # md5sums.txt im DVD-Root bauen.
   # Windows Software und grml-Dateien davon ausnehmen.
   # Windows Software und grml-Dateien davon ausnehmen.
Zeile 163: Zeile 163:




@Hans-Dietrich:
==== Kurzform ====
wenn du nur deine preseed.Datei auf die CD packen willst, dann reichen
folgende Schritte:
1. CD Kopieren
2. Ordner delixs anlegen und preesed reinkopieren
3. isolinux.cfg anpassen/erweitern
4. genisoimage Befehl ausführen.


Ich hoffe das hilft ein wenig
Wenn nur eine preseed.Datei auf die CD gepackt werden soll, dann reichen folgende Schritte:
Thorsten


------------------------------------------------------------------------
# CD Kopieren
# Ordner delixs anlegen und preesed reinkopieren
# isolinux.cfg anpassen/erweitern
# genisoimage Befehl ausführen.
 
 
----
 
<pre>


Dir {
Dir {
Zeile 199: Zeile 200:




Tree "dists/etch"
Tree "dists/lenny"
{
{
   Sections "main";
   Sections "main";
Zeile 208: Zeile 209:
BinDirectory "pool/main" {
BinDirectory "pool/main" {
};
};
</pre>




------------------------------------------------------------------------
----


<pre>
Dir {
Dir {
   ArchiveDir "./";
   ArchiveDir "./";
Zeile 235: Zeile 238:




Tree "dists/etch"
Tree "dists/lenny"
{
{
   Sections "main";
   Sections "main";
Zeile 244: Zeile 247:
BinDirectory "pool/main" {
BinDirectory "pool/main" {
};
};
</pre>




------------------------------------------------------------------------
----


APT::FTPArchive::Release::Origin "KSaN";
<pre>
APT::FTPArchive::Release::Label "KSaN Debian DVD Repository";
APT::FTPArchive::Release::Origin "delixs";
APT::FTPArchive::Release::Label "delixs Debian DVD Repository";
APT::FTPArchive::Release::Suite "stable";
APT::FTPArchive::Release::Suite "stable";
APT::FTPArchive::Release::Codename "etch";
APT::FTPArchive::Release::Codename "lenny";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Description "KSaN Debian DVD Repository";
APT::FTPArchive::Release::Description "delixs Debian DVD Repository";
</pre>
 
Vielen Dank an Thorsten (DD 2008/11/08) für diese kurze Anleitung.




----
----
<div align="right">[[Entwicklerhandbuch/Entwicklerrichtlinien|zurück]] | [[Hauptseite]]</div>
<div align="right">[[Entwicklerhandbuch/Entwicklerrichtlinien|zurück]] | [[Hauptseite]]</div>

Version vom 4. Mai 2009, 18:48 Uhr

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

  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";

Vielen Dank an Thorsten (DD 2008/11/08) für diese kurze Anleitung.



zurück | Hauptseite