Wie in der Einführung zum Buch bereits genannt, besteht Debian aus einer
riesigen Menge einzelner Pakete. Dabei werden größere, komplexe
Funktionalitäten in kleine, separate Bausteine zerlegt. Diese Bausteine
sind als einzelne deb
-Pakete verfügbar, die häufig einander bedingen.
In der Paketbeschreibung jedes deb
-Pakets ist der Bezug zu den anderen
Paketen hinterlegt — die Paketabhängigkeiten. Wie diese konkret
formuliert werden, lesen Sie unter „Debian-Paketformat im Detail“ in
Kapitel 4, Debian-Paketformat im Detail nach.
Vor der Veränderung des Paketbestands – d.h. dem Hinzufügen, Entfernen
und Aktualisieren eines oder mehrerer Pakete – prüfen APT und
aptitude
, ob diese Paketabhängigkeiten nach den Änderungen des Bestand
auf ihrem System weiterhin erfüllt sind. Die Abhängigkeiten müssen
erfüllt sein, damit Ihr Linuxsystem weiterhin zuverlässig funktioniert
und dieses für Sie benutzbar bleibt.
Sind die Abhängigkeiten jedoch nicht erfüllt, weigern sich APT und
aptitude
zunächst, Software einzuspielen. Sie zeigen Ihnen an, welche
Pakete und Einzelschritte erforderlich sind, die zur Wiedererlangung
eines sauberen Paketbestands durchzuführen sind. Nur mit etwas Nachdruck
können Sie den Zustand auf eigene Verantwortung hin übergehen — mehr
dazu erfahren Sie in „Paketoperationen erzwingen“ in
Abschnitt 8.45, „Paketoperationen erzwingen“.
Hier sehen Sie, von welchen weiteren Paketen ein Paket abhängt. Zu
dieser Information gelangen Sie mit mehreren Werkzeugen. Dazu zählen
dpkg-deb
, apt-cache
mit den beiden Unterkommandos show
und
depends
, aptitude
mit speziellen Suchoptionen, apt-rdepends
sowie
grep-aptavail
und grep-status
aus dem Paket dctrl-tools
[Debian-Paket-dctrl-tools]. Als weitere Information benötigen die
genannten Programme noch den Namen des Pakets, zu dem es die
Paketabhängigkeiten ausgeben sollen. Die nachfolgenden Ausgaben
illustrieren die Wirkung anhand des Pakets xpdf.
apt-cache
und aptitude
bei der Suche nach AbhängigkeitenHier ist die Bedeutung der Unterkommandos bzw. Schalter zwischen den
beiden Werkzeugen genau entgegengesetzt. Während apt-cache depends
alle Abhängigkeiten eines gegebenen Pakets heraussucht, „denkt“
aptitude search ?depends(…)
andersherum und durchsucht die
Abhängigkeiten aller Pakete nach einem Muster, sucht also nach
Abhängigkeiten auf ein Paket bzw. einer Zeichenkette oder einem
regulären Ausdruck.
Daher entspricht apt-cache depends
dem Aufruf aptitude search '~R'
bzw. aptitude search ?reverse-depends(…)
sowie apt-cache rdepends
dem Aufruf aptitude search '~D'
bzw. aptitude search ?depends(…)
.
Das Kommando dpkg-deb
ist Bestandteil des essentiellen Pakets dpkg
[Debian-Paket-dpkg]. Über den Schalter -f
(Langform --field
) und
der Angabe des Feldnamens liest es die Paketinformationen und gibt
anschließend den Inhalt des spezifizierten Feldes aus. Das ist identisch
zum Aufruf von dpkg -f
(Langform dpkg --field
).
Beachten Sie bitte beim Aufruf die etwas unintuitiven Abfolge der
Parameter — erst den Schalter, danach den Dateinamen der deb
-Datei
und am Ende der Feldname. Für diese Information muss das entsprechende
Paket nicht auf ihrem System installiert sein, sondern nur als Datei in
einem Verzeichnis liegen und erreichbar sein.
Ausgabe der Abhängigkeiten mittels dpkg-deb
.
$ dpkg-deb -f xpdf_3.03-17+b1_amd64.deb Depends libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2), libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6 $
Variante 1 verfolgt einen typischen UNIX-Ansatz — es kombiniert die
beiden Werkzeuge apt-cache
und grep
miteinander. Dazu filtert es die
Ausgabe der vollständigen Paketinformationen, wie es apt-cache
mit dem
Unterkommando show
liefert. Über eine Pipe und mittels grep
filtert
es danach die Zeile mit den Abhängigkeiten heraus, die mit dem
Schlüsselwort Depends
beginnt. Für diese Information muss das
entsprechende Paket nicht auf ihrem System installiert sein, sondern nur
in der Paketdatenbank als Paket gelistet sein.
Suche mittels grep
in der Ausgabe von apt-cache
.
$ apt-cache show xpdf | grep Depends Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2), libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6 $
Variante 2 verwendet das spezifische Unterkommando depends
.
apt-cache
gibt jedes benötigte Debianpaket in einer einzelnen Zeile in
alphabetisch aufsteigender Reihenfolge und ohne die Versionsnummer aus.
Für diese Information muss das entsprechende Paket nicht auf ihrem
System installiert sein, aber in der Paketdatenbank gelistet sein.
Detaillierte Ausgabe der Paketabhängigkeiten.
$ apt-cache depends xpdf xpdf Hängt ab von: libc6 Hängt ab von: libgcc1 Hängt ab von: libpoppler46 Hängt ab von: libstdc++6 Hängt ab von: libx11-6 Hängt ab von: libxm4 Hängt ab von: libxt6 Empfiehlt: poppler-utils poppler-utils:i386 Empfiehlt: poppler-data Empfiehlt: gsfonts-x11 Empfiehlt: cups-bsd cups-bsd:i386 Kollidiert mit: <xpdf-common> Kollidiert mit: <xpdf-common:i386> Kollidiert mit: <xpdf-reader> Kollidiert mit: <xpdf-reader:i386> Ersetzt: <xpdf-common> Ersetzt: <xpdf-common:i386> Ersetzt: <xpdf-reader> Ersetzt: <xpdf-reader:i386> Kollidiert mit: xpdf:i386 $
Ohne weitere Optionen enthält die Ausgabe alle Abhängigkeiten, Empfehlungen und Konflikte zu dem Paket. Mit den folgenden Optionen spezifizieren Sie die Ausgabe noch genauer.
-i
(Langform --important
)
Depends
der
Paketinformationen.
Beschränkung auf die wichtigen Abhängigkeiten mittels -i
.
$ apt-cache depends -i xpdf xpdf Hängt ab von: libc6 Hängt ab von: libgcc1 Hängt ab von: libpoppler46 Hängt ab von: libstdc++6 Hängt ab von: libx11-6 Hängt ab von: libxm4 Hängt ab von: libxt6 $
--no-pre-depends
--no-depends
--no-recommends
--no-suggests
--no-conflicts
--no-breaks
--no-replaces
--no-enhances
--installed
--recurse
depends
und rdepends
rekursiv aus, so dass
alle erwähnten Pakete einmal ausgegeben werden. Diese Liste kann sehr
lang sein.
Die nachfolgende Ausgabe grenzt die Auflistung auf die Pakete ein, die
lediglich als Vorschlag oder Empfehlung hinterlegt sind. Im Aufruf
nutzen Sie dafür die Option --no-depends
.
Ausgabe der vorgeschlagenen und empfohlenen Pakete zu xpdf.
$ apt-cache depends xpdf --no-depends xpdf Empfiehlt: poppler-utils poppler-utils:i386 Empfiehlt: poppler-data Empfiehlt: gsfonts-x11 Empfiehlt: cups-bsd cups-bsd:i386 Kollidiert mit: <xpdf-common> Kollidiert mit: <xpdf-common:i386> Kollidiert mit: <xpdf-reader> Kollidiert mit: <xpdf-reader:i386> Ersetzt: <xpdf-common> Ersetzt: <xpdf-common:i386> Ersetzt: <xpdf-reader> Ersetzt: <xpdf-reader:i386> Kollidiert mit: xpdf:i386 $
Deutlicher wird apt-rdepends
aus dem gleichnamigen Paket. Es löst die
Abhängigkeiten noch weitaus stärker auf. Nachfolgende Darstellung zeigt
daher nur einen Ausschnitt. Für diese Information muss das entsprechende
Paket nicht auf ihrem System installiert sein, aber in der
Paketdatenbank gelistet sein.
Ausgabe der Paketabhängigkeiten mit apt-rdepends
(Ausschnitt).
$ apt-rdepends xpdf | more xpdf Depends: libc6 (>= 2.4) Depends: libgcc1 (>= 1:4.1.1) Depends: libpoppler46 (>= 0.26.2) Depends: libstdc++6 (>= 4.1.1) Depends: libx11-6 Depends: libxm4 (>= 2.3.4) Depends: libxt6 libc6 Depends: libgcc1 libgcc1 Depends: gcc-4.9-base (= 4.9.2-10) ... $
Das Ergebnis von apt-rdepends
wird vielleicht leichter verständlich,
wenn Sie die Paketabhängigkeiten graphisch darstellen. Bei der
Veranschaulichung hilft Ihnen das Programm dotty
aus dem Paket
graphviz [Graphviz]. Für das Paket tcpdump sieht der Aufruf wie
folgt aus.
Erzeugung der Abhängigkeiten als dot
-Datei.
$ apt-rdepends -d tcpdump | dot > tcpdump.dot Reading package lists... Done Building dependency tree Reading state information... Done $
Das Ergebnis der von apt-rdepends
zu dot
weitergeleiteten und in der
Datei tcpdump.dot
abgespeicherten Relationsmenge zeigen Sie
mit dem Programm dotty
an (siehe Abbildung 8.6, „Darstellung der umgekehrten Paketabhängigkeiten mit dotty
“).
Aufruf von dotty
.
$ dotty tcpdump.dot $
aptitude
versteht eine Reihe von speziellen Suchmustern. Eines davon
ist ~Rmuster
als Abkürzung für die Langform
?reverse-depends(
Paketname)
, welches Sie mit dem Unterkommando
search
kombinieren. muster bezeichnet hier den Namen oder das
Textfragment eines Pakets. Für diese Information muss das entsprechende
Paket nicht auf ihrem System installiert sein, aber in der
Paketdatenbank gelistet sein.
Mit dem nachfolgenden Aufruf erhalten Sie alle Pakete, die xpdf
benötigt. Es entspricht dem Aufruf apt-cache depends -i xpdf
. Die
Ausgabe beinhaltet nur die notwendigen Abhängigkeiten ohne weitere
Empfehlungen. Analog zur Ausgabe von dpkg
umfaßt die verwendete
Darstellungsform den Installationsstatus, den Namen und die
Kurzbeschreibung des Pakets (siehe dazu „Liste der installierten Pakete
anzeigen und deuten“ in
Abschnitt 8.5, „Liste der installierten Pakete anzeigen und deuten“).
Anzeige der Paketabhängigkeiten mit aptitude
.
$ aptitude search '~Rxpdf' i libc6 - GNU C-Bibliothek: Dynamische Bibliotheken i libgcc1 - GCC Support-Bibliothek i A libpoppler46 - Bibliothek zur PDF-Darstellung i libstdc++6 - GNU-Implementierung der Standard-C++-Bibli i A libx11-6 - Clientseitige X11-Bibliothek i A libxm4 - Motif - X/Motif shared library i A libxt6 - X11-Bibliothek mit wesentlichen Werkzeugen $
Die beiden Werkzeuge grep-aptavail
und grep-status
aus dem Paket
dctrl-tools [Debian-Paket-dctrl-tools] filtern die gewünschten
Felder aus der Paketbeschreibung heraus. Während grep-status
eher die
Sichtweise von dpkg
benutzt und sich nur auf die (jemals)
installierten Pakete in der aktuellen Architektur bezieht, entspricht
grep-aptavail
eher aptitude
und durchsucht alle lokalen Paketlisten.
Benutzen Sie bspw. mehrere Archtekturen (Multiarch), erhalten Sie einen
Suchtreffer pro Paketliste der Architektur.
Für diese Information muss das entsprechende Paket nicht auf ihrem System installiert sein, aber in der Paketdatenbank gelistet sein.
Im nachfolgenden Aufruf kommen -F Package
zum Abgleich des Musters mit
dem Paketnamen und -s Depends
zur Ausgabe des Feldes für die
Paketabhängigkeiten zum Einsatz.
Ausgabe der Paketabhängigkeiten mit grep-status
.
$ grep-status -F Package -s Depends xpdf Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2), libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6 $
Eine kürzere Schreibweise erlaubt der Schalter -P
, welcher dem
Schalter -F Package
entspricht. Nachfolgende Ausgabe zeigt
grep-aptavail
mit den Feldern für die Paketabhängigkeit (Depends
),
den Paketnamen (Package
) und die Architektur (Architecture
).
Ausgabe der Paketabhängigkeiten mit grep-aptavail
.
$ grep-aptavail -P -s Package,Depends,Architecture xpdf Package: xpdf Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2), libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6 Architecture: amd64 Package: xpdf Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2), libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6 Architecture: i386 $
Diese Aktivität übersetzen Sie mit der Frage „Welche anderen Pakete
benötigen Paket x?“, auch genannt Rückwärtsabhängigkeit. Zur
Beantwortung der Frage helfen Ihnen einerseits wiederum apt-cache
mit
dem Unterkommando depends
, andererseits das Kommando apt-rdepends
aus dem gleichnamigen Paket apt-rdepends [Debian-Paket-apt-rdepends]
und auch aptitude
selbst weiter.
apt-cache
und aptitude
bei der Suche nach AbhängigkeitenHier ist die Bedeutung der Unterkommandos bzw. Schalter zwischen den
beiden Werkzeugen genau entgegengesetzt. Während apt-cache depends
alle Abhängigkeiten eines gegebenen Pakets heraussucht, „denkt“
aptitude search ?depends(…)
andersherum und durchsucht die
Abhängigkeiten aller Pakete nach einem Muster, sucht also nach
Abhängigkeiten auf ein Paket bzw. einer Zeichenkette oder einem
regulären Ausdruck.
Daher entspricht apt-cache depends
dem Aufruf aptitude search '~R'
bzw. aptitude search ?reverse-depends(…)
sowie apt-cache rdepends
dem Aufruf aptitude search '~D'
bzw. aptitude search ?depends(…)
.
Über das Unterkommando rdepends
zeigt apt-cache
alle Pakete an.
Pakete, die von weiteren Paketen abhängen, sind in der Ausgabe von
apt-cache
mit einem senkrechten Strich („Pipe“) gekennzeichnet.
Für diese Information muss das entsprechende Paket nicht auf ihrem
System installiert sein, aber in der Paketdatenbank gelistet sein.
Ausgabe der umgekehrten Paketabhängigkeiten mit apt-cache
für das Paket xpdf.
$ apt-cache rdepends xpdf xpdf Reverse Depends: |xmds-doc xfe wiipdf |vim-latexsuite python-scapy |ruby-tioga |python-tables-doc |page-crunch |octave-doc |muttprint-manual mozplugger mlpost libmlpost-ocaml-dev |mc |libjgoodies-forms-java-doc |libinventor1 |gprolog-doc |geomview libfontconfig1 eficas |auctex $
apt-rdepends
löst die Abhängigkeiten der Pakete zueinander noch
weitaus stärker auf. Für diese Information muss das entsprechende Paket
nicht auf ihrem System installiert sein, aber in der Paketdatenbank
gelistet sein.
Ausgabe der umgekehrten Paketabhängigkeiten mit apt-rdepends
.
$ apt-rdepends -r xpdf Reading package lists... Done Building dependency tree Reading state information... Done xpdf Reverse Depends: eficas (6.4.0-1-1.1) Reverse Depends: muttprint-manual (0.73-5.1) Reverse Depends: wiipdf (1.4-2) eficas muttprint-manual wiipdf $
Mit einer Reihe von speziellen Suchmustern zum Unterkommando search
unterstützt Sie aptitude
bei der Recherche in der
Paketdatenbank. Eines davon ist ~D
muster und dessen Langform
?depends(
muster)
. Sie suchen in den
Abhängigkeiten[28] aller
Pakete nach dem regulrären Ausdruck muster. Dabei findet es nicht nur
vollständige Paketnamen sondern auch Bestandteile von Paketnamen. Für
diese Information muss das entsprechende Paket nicht auf ihrem System
installiert sein, aber in der Paketdatenbank vorhanden sein.
Um beispielsweise alle Pakete zu erhalten, die eine Abhängigkeit auf ein
Paket mit der Zeichenkette xpdf im Paketnamen haben, nutzen Sie das
Kommando aptitude search '~Dxpdf'
. Das Ergebnis ist eine mehrspaltige
Auflistung der Pakete mit deren Installationsstatus, Paketnamen und
Kurzbeschreibung (siehe dazu „Liste der installierten Pakete anzeigen
und deuten“ in Abschnitt 8.5, „Liste der installierten Pakete anzeigen und deuten“).
Auflistung aller Pakete, deren Abhängigkeiten die Zeichenkette xpdf
beinhalten, mit aptitude
.
$ aptitude search '~Dxpdf' p eficas - Graphical editor for Code Aster command files p impressive - Werkzeug zur Präsentation von PDF-Dateien mit p muttprint-manual - Handbuch für muttprint p page-crunch - PDF and PS manipulation for printing needs p wiipdf - Präsentiert eine PDF-Datei mittels Wiimote $
Diese Liste beinhaltet auch das Paket impressive, welches eine Abhängigkeit auf poppler-utils, mupdf-tools und xpdf-utils hat. Will man nur Abhängigkeiten auf das Paket xpdf, so muß man Anfangs- und End-Anker verwenden:
Auflistung aller Pakete, die eine harte Abhängigkeit auf das Paket xpdf beinhalten, mit aptitude
.
$ aptitude search '~D^xpdf$' p eficas - Graphical editor for Code Aster command files p muttprint-manual - Handbuch für muttprint p wiipdf - Präsentiert eine PDF-Datei mittels Wiimote $
APT liefert über das Werkzeug apt-get
und dessen Unterkommando check
ein kleines Diagnosewerkzeug mit. Es aktualisiert den
Paketzwischenspeicher (siehe Kapitel 7, Paketcache) und prüft, ob auf Ihrem
Linuxsystem beschädigte Abhängigkeiten vorliegen. Das beinhaltet alle
installierten Pakete sowie die bereits entpackten, aber noch nicht
konfigurierten Pakete [Debian-Anwenderhandbuch-apt-optionen].
Prüfung auf beschädigte Abhängigkeiten mit apt-get check
.
# apt-get check Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig #
Das Werkzeug apt-cache
zeigt Ihnen eine Zusammenfassung aller
unerfüllten Abhängigkeiten im Paketzwischenspeicher (siehe
Kapitel 7, Paketcache). Dazu bietet es das Unterkommando unmet
, welches Sie
auch noch um einen Paketnamen bzw. eine Liste davon ergänzen können. Die
dargestellte Liste zeigt die Funktionalität zum Paket wireshark und
beinhaltet auch die nicht installierten Vorschläge der Pakete.
Auflistung aller unerfüllten Abhängigkeiten für Pakete, die mit wireshark beginnen.
$ apt-cache unmet wireshark* Paket wireshark Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: ethereal (< 1.0.0-3) Paket libwireshark2 Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: wireshark-common (< 1.4.0~rc2-1) Paket libwireshark-data Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: wireshark-common (< 1.4.0~rc2-1) Paket wireshark-common Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: ethereal-common (< 1.0.0-3) Paket libwireshark-dev Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: wireshark-dev (< 1.4.0~rc2-1) Paket wireshark-dev Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: ethereal-dev (< 1.0.0-3) frank@efho-mobil:~$ apt-cache unmet wireshark Paket wireshark Version 1.8.2-5wheezy10 hat eine unerfüllte Abhängigkeit: Ersetzt: ethereal (< 1.0.0-3) $
[28] Engl. Dependencies; ohne weitere
Angaben wird in den Abhängigkeiten des Feldes Depends
gesucht.