Aufbau und Format

Generell: 2 Ebenen

Debianpakete beinhalten stets zwei Komponenten – Daten und Metainformationen. Die Daten sind die tatsächlichen Inhalte des Pakets, d.h. entweder der Quellcode oder die übersetzten Programmdateien, die bei der Installation auf Ihr System kopiert werden.

Die Metainformationen sind zusätzliche Informationen zu einem Paket, die dieses näher beschreiben. Dazu zählen erstens die Relationen zu anderen Paketen. Diese legen die Voraussetzungen fest, nach denen das Paket überhaupt übersetzt (gebaut'') und später auf Ihrem Linux-System installiert werden kann. Insbesondere zählen dazu die Abhängigkeiten und Konflikte zu anderen Paketen. Diese Relationen beschreiben wir ausführlich unter Konzepte und Ideen dahinter'' in [konzepte-und-ideen-dahinter].

Zweitens gehören die sogenannten Maintainer-Skripte namens preinst, postinst, prerm und postrm dazu. Die beiden Skripte preinst und postinst regeln alle Aktivitäten vor und nach der Installation, prerm und postrm hingegen vor und nach der Entfernung des Pakets von Ihrem System. Diese vier Skripte sind üblicherweise distributionsspezifische Shellskripte, die der Maintainer des jeweiligen Pakets pflegt.

Für das Paket 'dpkg-www' [Debian-Paket-dpkg-www] beinhaltet das bspw. das Starten des Webservers nach der Installation des Pakets, das Anhalten (vorher) und Neustarten (nachher) im Zuge einer Aktualisierung des Pakets und das Anhalten des Dienstes, bevor das Paket vom System wieder entfernt wird. In Auszug aus dem postinst-Skript zum Paket 'dpkg-www' sehen Sie einen Ausschnitt aus dem postinst-Skript zu besagtem Paket.

postinst.png
Figure 1. Auszug aus dem postinst-Skript zum Paket 'dpkg-www'

Source-Pakete

Ein Source-Paket beinhaltet einerseits den Quellcode der Software und andererseits die Anweisungen, nach denen aus dem Quellcode der Software eines oder mehrere Binärpakete entstehen [Krafft-Debian-System]. Dazu besteht es aus mindestens 2, meistens jedoch 3 und ggf. auch noch weiteren Dateien:

.dsc

Meta-Datei, die alle anderen Dateien mitsamt deren Hashsummen auflistet und ggf. signiert. Über die Hashsummen sind gleichzeitig alle anderen Dateien ebenfalls abgesichert.

Debian-spezifische Daten
  • Bei Source-Format 1.0 ist es ein komprimierter Patch — erkennbar an der Erweiterung diff.gz. Dieser kann nur Textdateien enthalten.

  • Bei Source-Format 3.0 ist es ein komprimiertes tar-Archiv — heutzutage meist mit debian.tar.xz benannt. Zulässig sind die Komprimierungsverfahren gzip, bzip2, lzma und xz. lzma wurde von Debian GNU/Linux allerdings nie unterstützt, wohl aber von anderen deb-basierten Distributionen ([welche-unix-artigen-betriebssysteme-verwenden-das]).

  • Software, die nur im Debian-Paketformat vertrieben wird, verfügt weder über den komprimierten Patch noch das o.g. Archiv. In diesem Fall wird von sogenannten 'nativen' Paketen gesprochen.

Upstream-Quellcode

Der Originalquellcode der paketierten Software. Es wird versucht, diesen soweit wie möglich unverändert zu lassen. Es muss sich jedoch dabei um ein tar-Archiv handeln. Andere Container-Formate wie z.B. zip werden nicht unterstützt. Offerieren die Entwickler der Software den Quellcode z.B. nur als zip- oder rar-Archiv, so muss der Quellcode zunächst in ein tar-Archiv umgepackt werden. Der Dateiname des tar-Archivs endet dabei in orig.tar.endung, wobei das Suffix endung vom Komprimierungsformat abhängt. Erlaubt sind ebenfalls wieder gzip, bzip2, lzma und xz. lzma wird vom Debian-Archiv nicht unterstützt, aber von anderen deb-basierten Distributionen ([welche-unix-artigen-betriebssysteme-verwenden-das]). Ab dem Source-Format 3.0 kann ein Quellpaket ([sourcepakete]) mehr als ein tar-Archiv mit Upstream-Quellcode beinhalten. Diese haben dann die Endung orig-komponente.tar.endung, wobei komponente nur alphanumerische Zeichen und Bindestriche beinhalten darf.

Als Paketformate existieren die Versionen 1.0, 2.0 (wurde offiziell nie unterstützt) und 3.0 [Debian-DebSrc3.0]. Letzteres existiert in den zwei Varianten 'quilt' (benannt als 3.0 (quilt)'') und 'native' (benannt als 3.0 (native)'') und hat sich seit dessen Einführung mit Debian 6 'Squeeze' im Jahr 2011 mittlerweile etabliert. Dabei umfassen die Namen der Varianten für Version 3.0 jeweils auch die Leerzeichen und die beiden Klammern.

Binärpakete

Komponenten

Ein Debian-Binärpaket ist ein BSD-ar-Archiv, welches weitere, komprimierte tar-Archive beinhaltet. Nachfolgendes Beispiel zeigt das für das Paket 'autotools-dev'.

Auspacken von Paketen mit ar
$ ar t autotools-dev_20100122.1_all.deb
debian-binary
control.tar.gz
data.tar.gz
$

Dabei stehen die einzelnen Komponenten eines Pakets für:

debian-binary

Kennzeichnung für ein Debian-Paket. debian-binary ist eine Textdatei, welche lediglich die Versionsnummer des verwendeten Binär-Paketformats enthält. Nachfolgender Auszug zeigt die Versionsnummer für das Paket 'mplayer':

$ ar t mplayer_2%3a1.0~rc4.dfsg1+svn34540-1+b2_i386.deb
debian-binary
control.tar.gz
data.tar.gz
$ ar x mplayer_2%3a1.0~rc4.dfsg1+svn34540-1+b2_i386.deb debian-binary
$ cat debian-binary
2.0
$
control.tar.gz

mit gzip komprimiertes tar-Archiv; dieses enthält die Kontrollinformationen für die Paketverwaltung

data.tar.gz, data.tar.xz, data.tar.bz2

eigentliche Dateien des Pakets plus Speicherort, jeweils mit gzip, xz oder bzip2 komprimiert

Benennung

Ein Debian-Binärpaket ist eine Datei mit der Erweiterung deb oder udeb im Dateinamen. Ersteres beinhaltet ausführbare Dateien, Daten, Dokumentation, Konfigurationsdateien und Copyright-Informationen [Krafft-Debian-System]. Bei udeb-Dateien handelt es sich hingegen um einen Sonderfall. Es ist ein Paket mit reduziertem Paketinhalt, welches speziell für den Debian-Installer gedacht ist (siehe [Debian-udeb]).

Steuerdateien und Skripte

Wie bereits oben angesprochen, beinhaltet jedes Debianpaket auch sogenannte 'Control-Files' (nach [Krafft-Debian-System144]). Diese Steuerdateien werden in der Komponente control.tar.gz aufbewahrt und bestehen aus diesen Dateien:

control

Das ist eine Steuerdatei und diese muss immer vorhanden sein. Sie beinhaltet die Metainformationen für die Paketverwaltung, bspw. zur Prüfung der Paketabhängigkeiten vor der Installation. Diese Steuerdatei kann beim Bauen des Pakets generiert worden sein, z.B. aus der Datei control.in mit Hilfe des Pakets 'autotools'.

conffiles

Das ist eine Liste mit Konfigurationsdateien zum Paket. Erfolgt eine Paketaktualisierung, werden die Dateien, die in dieser Liste aufgeführt sind, auf dem System beibehalten und nicht durch die Daten aus dem neuen Paket überschrieben. Damit bleiben bereits bestehende lokale Änderungen erhalten, bspw. von spezifisch angepassten Konfigurationsdateien. Diese Liste wird meist automatisiert generiert.

preinst

Skriptdatei mit paketspezifischen Anweisungen. Diese Anweisungen werden 'vor' der Installation oder Aktualisierung des Pakets (Upgrade) mit bestimmten Parametern aufgerufen.

postinst

Skriptdatei mit paketspezifischen Anweisungen. Diese Anweisungen werden 'nach' der Installation oder Aktualisierung (Upgrade) sowie zur Konfiguration des Pakets mit bestimmten Parametern aufgerufen.

prerm

Skriptdatei mit paketspezifischen Anweisungen. Diese Anweisungen werden mit bestimmten Parametern aufgerufen, 'bevor' das Paket entfernt wird.

postrm

Skriptdatei mit paketspezifischen Anweisungen. Diese Anweisungen werden mit bestimmten Parametern aufgerufen, 'nachdem' das Paket entfernt wurde.

md5sums

MD5-Summen der Dateien, welche im Paket enthalten sind. Damit wird sichergestellt, dass beispielsweise keine Übertragungsfehler (Bitfehler) oder Änderungen zwischen dem Paketmirror und ihrem lokalen System erfolgt sind (siehe auch ``Bezogenes Paket verifizieren'' in [bezogenes-paket-verifizieren]).

shlibs

Diese Datei listet Bibliotheken und 'Shared Object Name' (kurz 'SONAME') auf, welches das Paket gemeinsam mit dem Paketnamen zur Verfügung stellt.

config

Skriptdatei. Diese erfragt vom Benutzer Konfigurationsparameter, welche für das Paket zur Einrichtung benötigt werden. Die Anworten werden direkt in der debconf-Datenbank abgelegt und bspw. im postinst-Skript verarbeitet.

templates

Diese Datei enthält Texte zu den Fragen und Hinweisen, die debconf während der Paketkonfiguration anzeigt (siehe dazu auch ``Pakete konfigurieren'' in [pakete-konfigurieren]).

Daten im Paket

Die eigentlichen Dateien zu einem Paket liegen in der 'Datenkomponente'. Damit dpkg die zu installierenden Programme und Daten aus dem Binärpaket auch an die richtige Position in der Dateisystemhierarchie ihres Systems kopieren kann, spiegelt der Inhalt dieser Komponente die entsprechende Verzeichnisstruktur auf dem Zielsystem vollständig wieder.

Diese Struktur, die zu installierenden Dateien sowie deren Typ und Größe zeigen Sie mit dem Kommando dpkg-deb -c 'Paketdatei' an. Das nachfolgende Beispiel anhand des Pakets 'vnstat' zeigt, dass darin sowohl Programme (ausführbare Dateien in /usr/bin und /usr/sbin) als auch Dokumentation (in /usr/share/doc und /usr/share/man), Konfigurationsdateien (in /etc) und ein Verzeichnis für variable Daten (unterhalb von /var/lib) enthalten sind:

Inhalt des Pakets 'vnstat' mit dpkg-deb anzeigen
$ dpkg-deb -c vnstat_1.10-1_i386.deb
drwxr-xr-x root/root         0 2010-04-20 20:38 ./
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/bin/
-rwxr-xr-x root/root    106424 2010-04-20 20:38 ./usr/bin/vnstat
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/sbin/
-rwxr-xr-x root/root     56184 2010-04-20 20:38 ./usr/sbin/vnstatd
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/doc/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/doc/vnstat/
-rw-r--r-- root/root      1604 2010-04-20 18:38 ./usr/share/doc/vnstat/changelog.Debian.gz
-rw-r--r-- root/root      2101 2010-01-02 01:32 ./usr/share/doc/vnstat/README
-rw-r--r-- root/root      3050 2010-01-02 02:36 ./usr/share/doc/vnstat/changelog.gz
-rw-r--r-- root/root      1501 2010-04-20 18:18 ./usr/share/doc/vnstat/copyright
-rw-r--r-- root/root      2077 2010-01-02 01:33 ./usr/share/doc/vnstat/FAQ.gz
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/man/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/man/man1/
-rw-r--r-- root/root      2558 2010-04-20 20:38 ./usr/share/man/man1/vnstatd.1.gz
-rw-r--r-- root/root      4085 2010-04-20 20:38 ./usr/share/man/man1/vnstat.1.gz
drwxr-xr-x root/root         0 2010-04-20 20:38 ./usr/share/man/man5/
-rw-r--r-- root/root      2488 2010-04-20 20:38 ./usr/share/man/man5/vnstat.conf.5.gz
drwxr-xr-x root/root         0 2010-04-20 20:38 ./etc/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./etc/init.d/
-rwxr-xr-x root/root      1466 2010-04-20 17:52 ./etc/init.d/vnstat
-rw-r--r-- root/root      2889 2010-04-20 20:38 ./etc/vnstat.conf
drwxr-xr-x root/root         0 2010-04-20 20:38 ./var/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./var/lib/
drwxr-xr-x root/root         0 2010-04-20 20:38 ./var/lib/vnstat/
$

Wünschen Sie stattdessen eine graphische oder webbasierte Darstellung des Paketinhalts, stehen Ihnen als Alternativen die Werkzeuge deb-gview, Synaptic, dpkg-www und apt-browse zur Verfügung. Im Detail agiert hier jedes der genannten Programme anders.

deb-gview und Synaptic erlauben Ihnen nur den Zugriff auf ihr lokales System. Während deb-gview dabei den Inhalt von deb-Dateien ausliest, beschränkt sich Synaptic auf bereits installierte Debianpakete. dpkg-www hingegen inspiziert bereits installierte Debianpakete sowohl auf ihrem lokalen System, als auch auf einem anderen Rechner. apt-browse greift stattdessen ausschließlich auf seinen eigenen Datenbestand auf dem Webserver zurück und wertet die Informationen aus den Paketen aus.

deb-gview finden Sie im gleichnamigen Paket [Debian-Paket-deb-gview]. Detailinformationen zum Paket 'debsums' (deb-gview) zeigt die Bedienoberfläche beispielhaft anhand des Pakets 'debsums' [Debian-Paket-debsums]. Die dreispaltige Aufteilung beinhaltet die Daten- und Steuerdateien, die darin enthaltenen Programmdateien und Metadaten zum Paket.

deb gview.png
Figure 2. Detailinformationen zum Paket 'debsums' (deb-gview)

Detailinformationen zum Paket 'debsums' (Synaptic) zeigt die Programmdateien zum gleichen Paket, wie es Synaptic darstellt. Sie erreichen dieses Dialogfenster über menu:Paket[Eigenschaften] und danach im Reiter ``Installierte Dateien''. Ausführlicher besprechen wir Synaptic in [gui-synaptic].

synaptic paketinhalt.png
Figure 3. Detailinformationen zum Paket 'debsums' (Synaptic)

Die spezialisierten Suchmaschinen für Pakete namens dpkg-www und apt-browse listen die Paketdetails ebenfalls auf (siehe Detailinformationen zum Paket 'debsums' in apt-browse.org (Ausschnitt)). Genauer besprechen wir diese unter In Paketen blättern mittels `dpkg-www’' in [webbasierte-programme-dpkg-www] sowie Suche über apt-browse.org'' in [paketsuche-mit-apt-browse].

apt browse paketinhalt.png
Figure 4. Detailinformationen zum Paket 'debsums' in apt-browse.org (Ausschnitt)

Übergangs- und Metapakete

Wie bereits in ``Übergangs- und Metapakete'' (siehe [uebergangs-und-metapakete]) deutlich wurde, handelt es sich hierbei um Binärpakete, die eine spezielle Charakteristik haben: sie haben meist außer der Dokumentation keine weiteren Inhalte. Der eigentliche Inhalt sowie Sinn und Zweck liegen in der Beschreibung der Abhängigkeiten der Pakete.

Übergangspakete werden auch 'Dummypakete' oder 'Transitionspakete' genannt. Deren Aufgabe ist es, Paketumbenennungen bei der Aktualisierung auf eine neue Veröffentlichung sauber zu handhaben und in diesem Zusammenhang auftretende Abhängigkeitskonflikte zu verhindern. Metapakete erleichtern dagegen nur die Installation einer Gruppe von zusammenhängenden Paketen.

Ein Paket dieser Art beinhaltet meist nur zwei Dateien unterhalb von /usr/share/doc — die Informationen zum Copyright und die bisherigen Änderungen. Letzteres liegt in der Datei changelog.Debian.gz. Beide Dateien können aus Gründen der Platzersparnis durch einen symbolischen Link auf eine der Abhängigkeiten ersetzt werden, falls diese aus dem gleichen Sourcepaket gebaut wurden.

Darüberhinaus können die Pakete einen Wrapper oder einen symbolischen Link zur Wahrung der Rückwärtskompatibilität beinhalten. Beispielsweise umfasst das Paket 'ash' nur eine Abhängigkeit auf das Paket 'dash' und einen symbolischen Verweis (Symlink) von /bin/ash zu /bin/dash:

Symbolischer Verweis auf eine andere Komponente am Beispiel der 'ash'
$ ls -la /bin/ash
lrwxrwxrwx 1 root root 4 Mär  1  2012 /bin/ash -> dash
$

results matching ""

    No results matching ""