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 Abschnitt 4.1, „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 Abbildung 4.1, „Auszug aus dem postinst
-Skript zum Paket dpkg-www“ sehen Sie einen Ausschnitt aus
dem postinst
-Skript zu besagtem Paket.
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
diff.gz
. Dieser kann nur Textdateien enthalten.
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
(Abschnitt 1.5, „Welche UNIX-artigen Betriebssysteme verwenden das Paketformat und das APT-Paketmanagement“).
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
(Abschnitt 1.5, „Welche UNIX-artigen Betriebssysteme verwenden das Paketformat und das APT-Paketmanagement“). Ab dem
Source-Format 3.0 kann ein Quellpaket (Abschnitt 2.7.4, „Source-Pakete (dsc
und weitere Dateien)“) 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.
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
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
gzip
komprimiertes tar
-Archiv; dieses enthält die
Kontrollinformationen für die Paketverwaltung
data.tar.gz
, data.tar.xz
, data.tar.bz2
gzip
,
xz
oder bzip2
komprimiert
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]).
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
control.in
mit Hilfe des Pakets autotools.
conffiles
preinst
postinst
prerm
postrm
md5sums
shlibs
config
debconf
-Datenbank abgelegt und bspw. im
postinst
-Skript verarbeitet.
templates
debconf
während der Paketkonfiguration anzeigt (siehe dazu auch „Pakete
konfigurieren“ in Abschnitt 8.40, „Pakete konfigurieren“).
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].
Abbildung 4.2, „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.
Abbildung 4.3, „Detailinformationen zum Paket debsums (Synaptic)“ zeigt die Programmdateien zum gleichen Paket, wie es Synaptic darstellt. Sie erreichen dieses Dialogfenster über → und danach im Reiter „Installierte Dateien“. Ausführlicher besprechen wir Synaptic in Abschnitt 6.4.1, „Synaptic“.
Die spezialisierten Suchmaschinen für Pakete namens dpkg-www
und
apt-browse
listen die Paketdetails ebenfalls auf (siehe
Abbildung 4.4, „Detailinformationen zum Paket debsums in apt-browse.org
(Ausschnitt)“). Genauer besprechen wir diese unter „In
Paketen blättern mittels dpkg-www
“ in
„In Paketen blättern mittels dpkg-www
“ sowie „Suche über apt-browse.org“
in „Suche über apt-browse.org“.
Wie bereits in „Übergangs- und Metapakete“ (siehe Abschnitt 2.7.2, „Übergangspakete, Metapakete und Tasks“) 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 $