// Datei: ./konzepte/software-in-paketen-organisieren/zusammenspiel-von-dpkg-und-apt.adoc

// Baustelle: Fertig
// Axel: Fertig

[[zusammenspiel-von-dpkg-und-apt]]

=== Zusammenspiel von dpkg und APT ===

Wie bisher gezeigt wurde, bauen `dpkg`, APT und Freunde aufeinander
auf. Dabei gibt es eine Reihe von Bibliotheken und weiteren Programmen,
die zur Nutzung dieser Werkzeuge ebenfalls notwendig sind.

// Stichworte für den Index
(((Bibliothek, libapt-pkg)))
(((Debianpaket, coreutils)))
(((Debianpaket, gnupg)))
(((Debianpaket, debian-archive-keyring)))
(((Debianpaket, xz-utils)))
(((libapt-pkg)))
(((Paketvalidierung, debian-archive-keyring)))
(((Paketvalidierung, gnupg)))
APT hängt vor allem von der aus dem APT-Quellcode gebauten Bibliothek
'libapt-pkg', von 'gnupg' und 'debian-archive-keyring' ab. 'libapt-pkg'
stellt eine Schnittstelle für den Zugriff auf die Debianpakete bereit
(siehe ``APT und Bibliotheken'' in <<apt-und-bibliotheken>>). Die beiden
anderen Pakete werden hingegen für die Validierung von digitalen
Signaturen benötigt (siehe ``Bezogenes Paket verifizieren'' in
<<bezogenes-paket-verifizieren>>).

// Stichworte für den Index
(((Paketmarkierungen, essentiell)))
`dpkg` ist ein sog. _essentielles_ Paket (siehe
<<paket-prioritaet-und-essentielle-pakete>>), hat also eher wenig
Abhängigkeiten. Die meisten davon sind selbst _essentielle_ Pakete und
müssen daher nicht namentlich als Abhängigkeit in den Metadaten des
Pakets aufgeführt werden. Deshalb tauchen sie nur unter bestimmten
Umständen explizit in den Abhängigkeitslisten auf, z.B. wenn bestimmte
Einschränkungen bzgl. der Version bestehen.

// Stichworte für den Index
(((aptitude, Bedienoberfläche)))
(((aptitude, ncurses)))
(((Ncurses)))
Bei `aptitude` und den meisten anderen Frontends ist dies anders, denn
diese sind alle um eine ganze Spur komplexer. Bei `aptitude` kommt z.B.
noch die Benutzeroberfläche auf der Basis von Ncurses <<Ncurses>> hinzu.
<<fig.apt-dot>>, <<fig.dpkg-dot>> und <<fig.aptitude-dot>> zeigen die
minimalen Paketabhängigkeiten für APT, `dpkg` und `aptitude` in
graphischer Form.

.Paketabhängigkeiten von APT
image::konzepte/software-in-paketen-organisieren/apt.png[id="fig.apt-dot", width="50%"]

.Paketabhängigkeiten von `dpkg`
image::konzepte/software-in-paketen-organisieren/dpkg.png[id="fig.dpkg-dot", width="50%"]

.Paketabhängigkeiten von `aptitude` und APT
image::konzepte/software-in-paketen-organisieren/aptitude+apt.png[id="fig.aptitude-dot", width="50%"]

// Stichworte für den Index
(((debtree)))
(((Debianpaket, debtree)))
(((dot)))
(((Graphviz)))
Die Grafiken in den drei obigen Abbildungen erzeugen Sie mit Hilfe der
beiden Programme `debtree` <<Debian-Paket-debtree>> (siehe
<<debtree-Projektseite>>) und `dot` <<Graphviz>>. Ersteres berechnet
über die Metadaten in den Paketlisten die Abhängigkeiten zu anderen
Paketen und erzeugt daraus eine entsprechende Beschreibung des
Abhängigkeitsgraphen in der Sprache 'dot'.

.Erzeugung der Abhängigkeitsgraphen zu `dpkg` mittels `debtree`
----
$ debtree dpkg
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen... Fertig
digraph "dpkg" {
        rankdir=LR;
        node [shape=box];
        "dpkg" -> "libbz2-1.0" [color=purple,style=bold];
        "dpkg" -> "liblzma5" [color=purple,style=bold,label="(>= 5.1.1alpha+20120614)"];
        "dpkg" -> "libselinux1" [color=purple,style=bold,label="(>= 2.3)"];
        "libselinux1" -> "libpcre3" [color=blue,label="(>= 8.10)"];
        "dpkg" -> "tar" [color=purple,style=bold,label="(>= 1.23)"];
        "tar" -> "libacl1" [color=purple,style=bold,label="(>= 2.2.51-8)"];
        "libacl1" -> "libattr1" [color=blue,label="(>= 1:2.4.46-8)"];
        "libacl1" -> "libacl1-kerberos4kth" [color=red];
        "tar" -> "libselinux1" [color=purple,style=bold,label="(>= 1.32)"];
        "dpkg" [style="setlinewidth(2)"]
        "libacl1-kerberos4kth" [style=filled,fillcolor=oldlace];
}
I: The following dependencies have been excluded from the graph (skipped):
I: libc6 multiarch-support zlib1g
// Excluded dependencies:
// libc6 multiarch-support zlib1g
// total size of all shown packages: 11501568
// download size of all shown packages: 4358750
$
----

Das zweite Kommando `dot` wandelt diese Beschreibung über den Schalter
`-T`'Ausgabeformat' in eine hübsche Grafik um. Als Ausgabeformat
unterstützt `dot` derzeit bspw. PostScript, Structured Vector Graphics
(SVG), GIF, PNG und FIG (für die Verwendung in `xfig`). Beachten Sie
bitte, dass `dot` im Aufruf zwischen dem Schalter und dem von Ihnen
gewählten Ausgabeformat kein Leerzeichen erlaubt.

Für `dpkg` erhalten Sie die Abbildung im Bildformat _Portable Network
Graphics_ (PNG) mit dem nachfolgend gezeigten Aufruf auf der
Kommandozeile. Dabei wird die Ausgabe des `debtree`-Kommandos nicht auf
dem Terminal sichtbar, sondern wird mit dem Pipe-Operator `|` direkt an
das Programm `dot` weitergegeben, welches es als Eingabe verarbeitet.
Die Ausgabe von `dot` – die erzeugte Bilddatei – wird danach mit dem
Umleitungsoperator `>` in die Datei `dpkg.png` im aktuellen Verzeichnis
umgeleitet.

.Erzeugung der Abhängigkeitsgraphen und Speicherung als Rastergrafik
----
$ debtree dpkg | dot -Tpng > dpkg.png
$
----

// Datei (Ende): ./konzepte/software-in-paketen-organisieren/zusammenspiel-von-dpkg-und-apt.adoc
