Debian

Debian-Paketabhängigkeiten

Debian-Paketabhängigkeiten
Für Linux-Distributionen wie Debian GNU/Linux existieren mehr als 60.000 verschiedene Softwarepakete. Alle haben eine bestimmte Rolle. In diesem Artikel erklären wir, wie die Paketverwaltung diese riesige Anzahl von Softwarepaketen während einer Installation, eines Updates oder einer Entfernung zuverlässig verwaltet, um Ihr System funktionsfähig und absolut stabil zu halten.

Für Debian GNU/Linux bezieht sich dies auf die Tools apt, apt-get, aptitude, apt-cache, apt-depends, apt-rdepends, dpkg-deb und apt-mark.

Verfügbarkeit von Softwarepaketen

Wie bereits oben erwähnt, besteht eine Linux-Distribution aus tonnenweise verschiedenen Softwarepaketen. Heutzutage ist Software recht komplex und deshalb ist es üblich, Software in mehrere einzelne Pakete aufzuteilen. Diese Pakete können nach Funktionalität oder Rolle kategorisiert werden, z. B. Binärpakete, Bibliotheken, Dokumentation, Anwendungsbeispiele sowie sprachspezifische Sammlungen und stellen nur einen ausgewählten Teil der Software bereit. Dafür gibt es keine feste Regel und die Aufteilung erfolgt entweder durch das Entwicklerteam eines Tools oder den Paketbetreuer, der sich um das Softwarepaket für Ihre Linux-Distribution kümmert. Abbildung 1 listet mit aptitude die Pakete auf, die die Übersetzungen für die verschiedenen Sprachen für den Webbrowser Mozilla Firefox enthalten.

Abbildung 1: Eignung-Firefox.png

Diese Arbeitsweise macht es möglich, dass jedes Paket von einem anderen Entwickler oder als ganzes Team gepflegt werden kann. Darüber hinaus ermöglicht die Aufteilung in einzelne Komponenten auch anderen Softwarepaketen die Nutzung für eigene Zwecke. Eine erforderliche Funktionalität kann angewendet werden und muss nicht neu erfunden werden.

Paketorganisation

Die Paketverwaltungstools der Debian GNU/Linux-Distribution sorgen ständig dafür, dass die Abhängigkeiten der installierten Pakete vollständig erfüllt werden. Dies ist insbesondere dann der Fall, wenn ein Softwarepaket auf oder von Ihrem System installiert, aktualisiert oder gelöscht werden soll. Fehlende Pakete werden dem System hinzugefügt oder installierte Pakete werden aus dem System entfernt, falls sie nicht mehr benötigt werden. Abbildung 2 zeigt dies für das Entfernen des Pakets 'mc-data' mit 'apt-get'. Das Paket 'mc-data' empfiehlt, auch das Paket 'mc' automatisch zu entfernen, da eine Installation ohne 'mc-data' keinen Sinn mehr macht.

Abbildung 2: apt-get-remove-mc.png

Paketmarken und Flaggen

Die Paketverwaltungstools respektieren bei ihrer Arbeit die gesetzten Paket-Flags und -Marken. Sie werden entweder automatisch oder manuell vom Systemadministrator festgelegt. Insbesondere bezieht sich dieses Verhalten auf das Flag 'essentielles Paket', das für Pakete gesetzt wird, die nicht entfernt werden sollen. Bevor Sie dies tun, wird eine klare Warnung ausgegeben (siehe Abbildung 3).

Abbildung 3: apt-get-remove.png

Auch die drei Markierungen 'automatisch', 'manuell' und 'halten' werden berücksichtigt. Sie markieren ein Paket als automatisch installiert, manuell installiert oder müssen nicht aktualisiert werden (halten Sie die aktuelle Version). Ein Softwarepaket ist entweder als 'automatisch' oder 'manuell' gekennzeichnet, aber nicht beides.

Unter anderem behandelt der Befehl 'apt-mark' die Markierungen und Flags mit den folgenden Unterbefehlen:

Um alle manuell installierten Pakete aufzulisten, geben Sie diesen Befehl ein:

$ apt-mark Ausstellungshandbuch
Abiwort
abs-guide
ack-grep
acl
akpi

$

Um eine Paketversion zu halten, verwenden Sie den Unterbefehl 'hold'. Das folgende Beispiel zeigt dies für das Paket 'mc'.

# apt-mark halten mc
mc auf Halten gesetzt
#

Der Unterbefehl 'showhold' listet die angehaltenen Pakete auf (in unserem Fall ist es nur das Paket 'mc'):

# apt-mark showhold
mc
#

Mit einer alternativen Methode namens 'apt pinning' werden Pakete nach Prioritäten klassifiziert. Apt wendet sie an, um zu entscheiden, wie mit diesem Softwarepaket und den im Software-Repository verfügbaren Versionen umgegangen werden soll.

Paketbeschreibung

Mit einer alternativen Methode namens 'apt pinning' werden Pakete nach Prioritäten klassifiziert. Apt wendet sie an, um zu entscheiden, wie mit diesem Softwarepaket und den im Software-Repository verfügbaren Versionen umzugehen ist.

Jedes Softwarepaket kommt mit einer eigenen Paketbeschreibung, die standardisiert ist. Diese Beschreibung gibt unter anderem explizit an, von welchen weiteren Paketen sie abhängig ist. Distributionsspezifische Tools extrahieren diese Informationen aus der Paketbeschreibung und berechnen und visualisieren dann die Abhängigkeiten für Sie. Das nächste Beispiel verwendet den Befehl 'apt-cache show', um die Paketbeschreibung des Pakets 'poppler-utils' anzuzeigen (siehe Abbildung 4).

Abbildung 4: Paketbeschreibung-poppler-utils.png

Die Paketbeschreibung enthält einen Abschnitt namens 'Abhängig'. In diesem Abschnitt werden die anderen Softwarepakete sowie die Versionsnummer aufgelistet, von denen das aktuelle Paket abhängt. In Abbildung 4 ist dieser Abschnitt rot umrahmt und zeigt, dass 'poppler-utils' von den Paketen 'libpoppler64', 'libc6', 'libcairo2', 'libfreetype6', 'liblcms2-2', 'libstdc++6' und 'zlib1g'.

Zeigen Sie die Paketabhängigkeiten an

Das Lesen der Paketbeschreibung ist der schwierige Weg, um die Paketabhängigkeiten herauszufinden. Als nächstes zeigen wir Ihnen, wie Sie dies vereinfachen können.

Es gibt mehrere Möglichkeiten, die Paketabhängigkeiten auf der Befehlszeile anzuzeigen. Für ein Deb-Paket als lokale Datei verwenden Sie den Befehl 'dpkg-deb' mit zwei Parametern - dem Dateinamen des Pakets und dem Schlüsselwort 'Depends'. Das folgende Beispiel demonstriert dies für das Paket 'skypeforlinux-64 .deb':

$ dpkg-deb -f Downloads/skypeforlinux-64.deb Hängt davon ab
gconf-service, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.17),
libcairo2 (>= 1.2.4), libcups2 (>= 1.4.0), libexpat1 (>= 2.0.1),
libfreetype6 (>= 2.4.2), libgcc1 (>= 1:4.1.1), libgconf-2-4 (>= 3.2.5),
libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk2.0-0 (>= 2.24.0),
libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.13.4-2~), libpango-1.0-0 (>= 1.14.0),
libpangocairo-1.0-0 (>= 1.14.0), libsecret-1-0 (>= 0.7), libv4l-0 (>= 0.5.0),
libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3,
libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (>= 2.11.0), libdbus-1-3 (>= 1.6.18),
libstdc++6 (>= 4.8.1)
$

Um dasselbe für ein installiertes Paket zu tun, verwenden Sie 'apt-cache'. Das erste Beispiel kombiniert den Unterbefehl 'show' gefolgt vom Namen des Pakets. Die Ausgabe wird an den 'grep'-Befehl gesendet, der die Zeile 'Depends' filtert:

$ apt-cache anzeigen xpdf | grep Hängt davon ab
Abhängig von: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2),
libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6
$

Der Befehl 'grep-status -F package -s Depends xpdf' gibt die gleichen Informationen zurück.

Genauer gesagt verwendet das zweite Beispiel wieder 'apt-cache', jedoch mit dem Unterbefehl 'depends'. Auf den Unterbefehl folgt der Name des Pakets:

$ apt-cache hängt von xpdf ab
xpdf
Abhängig von: libc6
Hängt davon ab: libgcc1
Hängt davon ab: libpoppler46
Abhängig von: libstdc++6
Abhängig von: libx11-6
Hängt davon ab: libxm4
Hängt davon ab: libxt6
Empfehlt: poppler-utils
poppler-utils: i386
Empfehlt: poppler-data
Empfehlt: gsfonts-x11
Empfehlt: cups-bsd
Tassen-bsd: i386
Kollision mit:
Kollision mit:
Kollision mit:
Kollision mit:
Ersetzt:
Ersetzt:
Ersetzt:
Ersetzt:
Kollision mit: xpdf:i386
$

Die obige Liste ist ziemlich lang und kann mit dem Schalter '-i' (kurz für '-wichtig') gekürzt werden:

$ apt-cache hängt ab -i xpdf
xpdf
Abhängig von: libc6
Hängt davon ab: libgcc1
Hängt davon ab: libpoppler46
Abhängig von: libstdc++6
Abhängig von: libx11-6
Hängt davon ab: libxm4
Hängt davon ab: libxt6
$

Der Befehl 'apt-rdepends' macht dasselbe, jedoch mit Versionsinformationen, wenn in der Beschreibung angegeben:

$ apt-rabhängig xpdf
Paketlisten lesen… Fertig
Abhängigkeitsbaum erstellen
Statusinformationen werden gelesen… Fertig
xpdf
Abhängig von: libc6 (>= 2.4)
Abhängig von: libgcc1 (>= 1:4.1.1)
Abhängig von: libpoppler46 (>= 0.26.2)
Abhängig von: libstdc++6 (>= 4.1.1)
Abhängig von: libx11-6
Abhängig von: libxm4 (>= 2.3.4)
Hängt davon ab: libxt6
libc6
Hängt davon ab: libgcc1

$

Der Befehl 'aptitude' funktioniert auch mit Schaltern. Für Abhängigkeiten verwenden Sie den Schalter '~R' gefolgt vom Namen des Pakets. Abbildung 5 zeigt dies für das Paket 'xpdf'. Der Buchstabe 'A' in der zweiten Spalte der Ausgabe von 'aptitude' kennzeichnet das Paket als automatisch installiert.

Abbildung 5: eignungsabhängig.png

Paketabhängigkeiten können etwas knifflig sein. Es kann hilfreich sein, Paketabhängigkeiten grafisch darzustellen. Verwenden Sie den Befehl 'debtree' gefolgt vom Namen des Pakets, um eine grafische Darstellung der Paketabhängigkeiten zu erstellen. Das Tool 'dot' aus dem Graphviz-Paket wandelt die Beschreibung wie folgt in ein Bild um:

$ Schuldenbaum xpdf | Punkt -Tpng > Grafik.png

In Abbildung 6 sehen Sie das erstellte PNG-Bild, das das Abhängigkeitsdiagramm enthält.

Abbildung 6: Punkt.png

Zeigen Sie die umgekehrten Abhängigkeiten an

Bisher haben wir angezeigt, dass wir die Frage beantwortet haben, welche Pakete für ein Paket benötigt werden. Es gibt auch umgekehrt - sogenannte umgekehrte Abhängigkeiten. Die nächsten Beispiele behandeln das Paket sowie die davon abhängigen Pakete. Beispiel Nummer eins verwendet 'apt-cache' mit dem Unterbefehl 'rdepends' wie folgt:

$ apt-cache hängt von xpdf ab
xpdf
Umgekehrt hängt davon ab:
|octave-doc
xpdf:i386
libfontconfig1:i386
|xmds-doc
xfe
wiipdf
|vim-latexsuite
python-scapy
|rubin-tioga
|python-tabellen-doc
|page-crunch
|octave-doc
|muttprint-Anleitung
mozplugger
mlpost
libmlpost-ocaml-dev

$

Pakete, die von anderen Paketen abhängen, sind mit einem Pipe-Symbol gekennzeichnet. Diese Pakete müssen nicht auf Ihrem System installiert werden, sondern müssen in der Paketdatenbank aufgeführt sein.

Das nächste Beispiel verwendet 'aptitude', um die Pakete aufzulisten, die einen harten Verweis auf das Paket 'xpdf' haben (siehe Abbildung 7).

Abbildung 7: Eignungssuche.png

Überprüfen Sie die Installation auf fehlende Pakete

'Apt-get' bietet den Unterbefehl 'check', mit dem die Installation validiert werden kann. Wenn Sie die folgende Ausgabe sehen, fehlen keine Pakete:

# apt-get check
Paketlisten lesen… Fertig
Abhängigkeitsbaum erstellen
Statusinformationen werden gelesen… Fertig
#

Fazit

Das Auffinden von Paketabhängigkeiten funktioniert gut mit den richtigen Tools. Die richtige Verwendung hilft Ihnen zu verstehen, warum Pakete installiert sind und welche möglicherweise fehlen might.

Links und Referenzen

So ändern Sie die Maus- und Touchpad-Einstellungen mit Xinput in Linux
Die meisten Linux-Distributionen werden standardmäßig mit der Bibliothek „libinput“ ausgeliefert, um Eingabeereignisse auf einem System zu verarbeiten...
Weisen Sie Ihre Maustasten mit der X-Mouse Button Control für verschiedene Software unterschiedlich zu
Vielleicht benötigen Sie ein Tool, mit dem sich die Steuerung Ihrer Maus bei jeder von Ihnen verwendeten Anwendung ändern kann. In diesem Fall können ...
Microsoft Sculpt Touch Wireless-Maus Bewertung
Ich habe vor kurzem gelesen, dass Microsoft Sculpt Touch kabellose Maus und beschloss, sie zu kaufen. Nachdem ich es eine Weile benutzt hatte, beschlo...