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 ~Dmuster 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.