Kapitel 8. Die Debian-Paketverwaltungswerkzeuge

Inhaltsverzeichnis

8.1. Welche Programme bietet Debian zur Paketverwaltung an?
8.1.1. dpkg
8.1.2. APT
8.1.3. aptitude
8.1.4. synaptic
8.1.5. tasksel
8.1.6. Andere Paketverwaltungswerkzeuge
8.2. Angeblich ist es mit Debian möglich, ein derzeit laufendes Programm zu aktualisieren. Wie funktioniert das?
8.3. Wie kann ich feststellen, welche Pakete bereits auf einem Debian-System installiert sind?
8.4. Wie kann ich alle Dateien auflisten, die in einem installierten Paket enthalten sind?
8.5. Wie kann ich herausfinden, welches Paket eine bestimmte Datei angelegt hat?
8.6. Warum wird »foo-data« nicht entfernt, wenn ich »foo« deinstalliere? Wie stelle ich sicher, dass alte unbenutzte Bibliothekspakete restlos entfernt werden?

8.1. Welche Programme bietet Debian zur Paketverwaltung an?

Zur Verwaltung der Debian-Pakete gibt es verschiedene Programme, von grafischen oder textbasierten Oberflächen bis hin zu den elementaren Werkzeugen, die benutzt werden, um Pakete zu installieren. Alle verfügbaren Programme bauen auf den elementaren Werkzeugen auf und werden im folgenden - mit den elementaren beginnend und den komplexen schließend - vorgestellt.

Es ist wichtig zu verstehen, dass die komfortablen Paketverwaltungswerkzeuge wie aptitude oder synaptic auf apt aufbauen, welches seinerseits bei der Verwaltung der Pakete auf dpkg zurückgreift.

Sehen Sie sich Kapitel 2. Debian-Paketmanagement der Debian-Referenz an, falls Sie weitere Informationen über die Paketverwaltungswerkzeuge benötigen. Dieses Dokument ist in verschiedenen Sprachen und Formaten verfügbar, siehe den Eintrag zur Debian-Referenz auf der Übersichtsseite für DDP-Benutzerhandbücher.

8.1.1. dpkg

Dies ist das Hauptpaketverwaltungswerkzeug. dpkg kann mit vielen verschiedenen Optionen aufgerufen werden. Häufig benutzt werden:

  • Alle verfügbaren Optionen anzeigen: dpkg --help.

  • Die control-Datei (und andere Informationen) für ein Paket anzeigen: dpkg --info foo_VVV-RRR.deb.

  • Ein Paket (inklusive Entpacken und Konfiguration) in das Dateisystem auf der Festplatte installieren: dpkg --install foo_VVV-RRR.deb.

  • Ein Debian-Archiv (ohne Konfiguration) in das Dateisystem auf der Festplatte entpacken: dpkg --unpack foo_VVV-RRR.deb. Bitte beachten Sie, dass das Paket damit nicht verwendbar sein dürfte, da Programmdateien oftmals erst nach gewissen Anpassungen ordnungsgemäß zusammenspielen. Dieser Befehl entfernt jede auf der Festplatte installierte Version des Programms und führt das mit dem Paket verbundene »preinst«-Skript (siehe Abschnitt 7.6, „Was sind Debians »preinst«-, »postinst«-, »prerm«- und »postrm«-Skripte?“) aus.

  • Ein bereits ausgepacktes Paket konfigurieren: dpkg --configure foo. Neben anderen Sachen ruft diese Option das zugehörige »postinst«-Skript (siehe Abschnitt 7.6, „Was sind Debians »preinst«-, »postinst«-, »prerm«- und »postrm«-Skripte?“) des Pakets auf. Außerdem aktualisiert es die Dateien, die in der conffiles-Datei des Pakets aufgelistet sind. Beachten Sie, dass die »configure«-Option als Argument einen Paketnamen benötigt (z.B. foo), und nicht den Namen der Debian-Archivdatei (also nicht foo_VVV-RRR.deb).

  • Eine einzelne Datei namens "blurf" (oder mehrere Dateien namens »blurf*«) aus einem Debian-Archiv extrahieren: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*.

  • Ein Paket entfernen (aber nicht seine Konfigurationsdateien): dpkg --remove foo.

  • Ein Paket vollständig, inklusive der Konfigurationsdateien entfernen: dpkg --purge foo.

  • Den Installationszustand aller Pakete anzeigen, auf die der reguläre Ausdruck »foo*« zutrifft: dpkg --list 'foo*'.

8.1.2. APT

APT (für Advanced-Package-Tool) ist eine leistungsfähige Programmoberfläche zur Debian-Paketverwaltung. Darin enthalten ist das Programm apt-get. Es enthält Befehlszeilenprogramme für Suche, Verwaltung und Abfrage von Paketinformationen wie auch für Low-Level-Zugriffe auf tieferliegende Funktionalitäten der libapt-pkg-Bibliothek. Lesen Sie dazu das Benutzerhandbuch in /usr/share/doc/apt-doc/guide.html/index.html; Sie benötigen dazu das Paket apt-doc.

Seit Debian Jessie gibt es für einige häufig verwendete apt-get- und apt-cache-Befehle ein entsprechendes Äquivalent, das neue Binärprogramm apt. Das bedeutet, dass bekannte Befehle wie apt-get update, apt-get install, apt-get remove, apt-cache search oder apt-cache show jetzt auch einfach über apt aufgerufen werden können, also mit Befehlen wie apt update, apt install, apt remove, apt search oder apt show. Hier ein Überblick über die alten und neuen Befehle:

 apt-get update             ->  apt update
 apt-get upgrade            ->  apt upgrade
 apt-get dist-upgrade       ->  apt full-upgrade
 apt-get install package    ->  apt install package
 apt-get remove package     ->  apt remove package
 apt-get autoremove         ->  apt autoremove
 apt-cache search string    ->  apt search string
 apt-cache policy package   ->  apt list -a package
 apt-cache show package     ->  apt show package
 apt-cache showpkg package  ->  apt show -a package

Das Werkzeug apt vereint Funktionalitäten von apt-get und apt-cache und hat eine nette farbige Ausgabedarstellung, somit ist es für den Benutzer angenehmer zu bedienen. Zur Verwendung in Skripten oder in fortgeschrittenen Anwendungsfällen könnte apt-get trotzdem noch empfehlenswert oder nötig sein.

apt-get bietet eine einfache Beschaffung und Installation von Paketen aus verschiedenen Quellen mittels Befehlszeile. Im Gegensatz zu dpkg erwartet apt-get nicht die Debian-Archivdatei, sondern den korrekten Paketnamen als Eingabe und wird ein Paket nur installieren, wenn dies durch eine in etc/apt/sources.list aufgeführte Quelle bereitgestellt wird. apt-get ruft nach dem Download des ».deb«-Archivs[5] von den konfigurierten Quellen direkt dpkg zur Installation auf.

Einige übliche Befehle zur Nutzung von apt-get sind:

  • Die Liste der Ihrem System bekannten Pakete aktualisieren:

    apt update
    

    (Sie sollten dies regelmäßig ausführen, um Ihre Paketliste aktuell zu halten.)

  • Das Paket foo mit allen seinen Abhängigkeiten installieren:

    apt install foo
    
  • Das Paket foo von Ihrem System entfernen:

    apt remove foo
    
  • Das Paket foo inklusive aller Konfigurationsdateien von Ihrem System entfernen:

    apt purge foo
    
  • Um alle Pakete aufzulisten, für die eine neuere Version verfügbar ist, rufen Sie auf:

    apt list --upgradable
    
  • Eine Aktualisierung aller Pakete auf Ihrem System durchführen (ohne zusätzliche Pakete zu installieren oder Pakete zu entfernen):

    apt upgrade
    
  • Alle Pakete auf Ihrem System aktualisieren (inklusive der Installation von zusätzlichen Paketen oder der Entfernung von Paketen, falls nötig):

    apt full-upgrade
    

    (Der Befehl upgrade beläßt ein Paket in seiner installierten, veralteten Version, falls zur Aktualisierung aufgrund von Abhängigkeiten die Installation zusätzlicher Pakete erforderlich wäre. Der Befehl full-upgrade ist dabei weniger konservativ.)

Zum Ausführen von Befehlen, durch die Pakete verändert werden, müssen Sie als root-Benutzer angemeldet sein.

Bitte beachten Sie, dass apt-get jetzt standardmäßig auch alle Pakete installiert, die von anderen Paketen empfohlen werden (recommends-Abhängigkeit). Aufgrund seiner Robustheit wird das Konsolen-Programm apt-get zur Einrichtung und für größere System-Upgrades empfohlen.

Die apt-Werkzeugsammlung enthält auch apt-cache zum Durchsuchen der Paketliste. Im Paketverwaltungssystem können Sie mit einem einfachen Suchbegriff oder einem regulären Ausdruck oder aber durch das Durchsuchen von Abhängigkeiten Pakete finden, die spezielle Funktionen anbieten. Einige übliche Befehle für apt-cache sind:

  • Pakete finden, deren Beschreibung Wort enthält:

    apt search Wort
    
  • Detaillierte Informationen über ein Paket ausgeben:

    apt show Paketname
    
  • Alle Pakete ausgeben, von denen ein angegebenes Paket abhängt:

    apt-cache depends Paketname
    
  • Detaillierte Informationen über die verfügbaren Versionen eines Paketes und die Pakete, die von diesem Paket abhängen, ausgeben:

    apt-cache showpkg Paketname
    

Für weitere Informationen installieren Sie bitte das apt-Paket und lesen apt(8), apt-get(8) und sources.list(5), sowie installieren Sie das apt-doc-Paket und lesen /usr/share/doc/apt-doc/guide.html/index.html.

8.1.3. aptitude

aptitude ist ein auf Debian GNU/Linux-Systeme abgestelltes Frontend für die Paketverwaltung durch APT. aptitude ist ein textbasiertes Programm, das die curses-Bibliothek benutzt. Aktionen können per interaktiver Bedienoberfläche oder über die Befehlszeile gestartet werden.

aptitude kann verwendet werden, um Verwaltungsaufgaben auf schnelle und einfache Weise zu erledigen. Es erlaubt dem Benutzer, die Liste der Pakete zu durchsuchen und Aufgaben wie Installation, Aktualisierung und Entfernung von Paketen zu erledigen.

Über die Funktionen von apt-get hinaus bietet aptitude viele zusätzliche Funktionalitäten:

  • aptitude bietet einfachen Zugriff auf alle Versionen eines Pakets.

  • aptitude gibt Ihnen eine einfache Möglichkeit, die Übersicht über veraltete Software zu behalten: sie werden unter »Veraltete und selbst erstellte Pakete« aufgelistet.

  • aptitude enthält ein ziemlich mächtiges System für die ausführliche Suche nach Paketen und zur Filterung der angezeigten Treffer. Benutzer, die mutt benutzen, werden schnell damit zurechtkommen, da die Ausdruckssyntax durch mutt inspiriert war.

  • aptitude kann auch verwendet werden, um die verfügbaren, vordefinierten Programmgruppen (Tasks) zu installieren. Weitere Informationen finden Sie in Abschnitt 8.1.5, „tasksel“.

  • Im Vollbildmodus hat aptitude integrierte su-Funktionalität und kann als normaler Benutzer ausgeführt werden. Es ruft su auf (und fragt nach dem Passwort des root-Benutzers, sofern vorhanden), wenn administrative Rechte benötigt werden.

Sie können aptitude mit einer visuellen (interaktiven) Oberfläche (führen Sie einfach aptitude aus) oder direkt von der Befehlszeile starten. Die genutzte Befehlszeilensyntax ist der von apt-get sehr ähnlich. Um zum Beispiel das Paket foo zu installieren, können Sie einfach aptitude install foo ausführen.

Mit aptitude stellt Debian ein Programm für das alltägliche Paketmanagement von der Konsole aus bereit.

Weitere Informationen finden Sie auf der Handbuchseite aptitude(8) und im Paket aptitude-doc.

8.1.4. synaptic

synaptic ist ein grafisches Paketverwaltungs-Programm. Es ermöglicht Ihnen das Installieren, Aktualisieren und Entfernen von Paketen auf eine benutzerfreundliche Art und Weise. Neben all den Funktionalitäten, die aptitude bietet, erlaubt synaptic auch, die Liste der verwendeten Paketquellen zu editieren; auch können Sie alle verfügbare Dokumentation für ein Paket durchsuchen. Schauen Sie auf die Synaptic-Website, wenn Sie mehr Informationen benötigen.

8.1.5. tasksel

Rechner fallen vielfach klar umrissene Aufgaben zu, doch häufig ergibt sich die Schwierigkeit, den zu einer Aufgabe passenden Satz von Paketen zu finden. Die Debian-Entwickler haben daher Programmgruppen (Tasks) definiert, eine Sammlung verschiedener Debian-Pakete für eine spezielle Aufgabe. Diese Programmgruppen können über die Programme tasksel oder aptitude installiert werden.

Der Debian Installer wird typischerweise automatisch die Programmgruppe für ein Standardsystem installieren sowie eine Arbeitsplatzumgebung (Desktop Environment). Welche Arbeitsplatzumgebung installiert wird, hängt von dem benutzten CD-/DVD-Installationsmedium ab, normalerweise ist dies der GNOME-Desktop (Programmgruppe gnome-desktop). Außerdem werden, abhängig von den Auswahlen, die Sie während der Installation getroffen haben, eventuell noch weitere Programmgruppen automatisch installiert. Wenn Sie zum Beispiel eine andere Sprache als Englisch gewählt haben, wird auch die entsprechende Programmgruppe für diese Sprache installiert.

8.1.6. Andere Paketverwaltungswerkzeuge

8.1.6.1. dpkg-deb

Dieses Programm führt Operationen an Debian-Archivdateien (.deb) aus. Einige Anwendungsfälle sind:

  • Alle Optionen anzeigen: dpkg-deb --help.

  • Anzeigen, welche Dateien in einem Debian-Archiv enthalten sind: dpkg-deb --contents foo_VVV-RRR.deb.

  • Die Dateien, die in dem Debian-Archiv enthalten sind, in ein gewünschtes Verzeichnis entpacken: dpkg-deb --extract foo_VVV-RRR.deb tmp entpackt jede Datei in foo_VVV-RRR.deb in das Verzeichnis tmp/. Dies ist eine bequeme Methode, um die Inhalte eines Pakets in einem lokalen Verzeichnis zu prüfen, ohne das Paket in das Root-Dateisystem zu installieren.

  • Die Dateien mit den control-Informationen aus dem Paket entpacken: dpkg-deb --control foo_VVV-RRR.deb tmp.

Bitte beachten Sie, dass jedes Paket, das lediglich mit dpkg-deb --extract entpackt wird, falsch installiert ist. Stattdessen sollten Sie dpkg --install benutzen, um das Paket zu installieren.

Weitere Informationen finden Sie auf der Handbuchseite dpkg-deb(1).

8.2. Angeblich ist es mit Debian möglich, ein derzeit laufendes Programm zu aktualisieren. Wie funktioniert das?

Die Implementierung des Dateisystems im Kernel unterstützt auf Debian GNU/Linux-Systemen das Ersetzen von Dateien, auch während sie benutzt werden.

Außerdem stellen wir ein Programm namens start-stop-daemon zur Verfügung, das benutzt wird, um Daemons während des Hochfahrens oder beim Wechsel des Runlevels (z.B. vom Mehrbenutzer- in den Einbenutzer-Modus oder zum Runterfahren) zu starten oder zu stoppen. Dasselbe Programm nutzen Installationsskripte für Softwarepakete, die unter Einbindung von Hintergrundprozessen oder direkt als solche arbeiten. Diese werden durch start-stop-daemon beendet und falls nötig neu gestartet.

8.3. Wie kann ich feststellen, welche Pakete bereits auf einem Debian-System installiert sind?

Um den Status aller in einem Debian-System installierten Pakete zu sehen, führen Sie den Befehl

dpkg --list

aus. Es wird eine einzeilige Zusammenfassung für jedes Paket ausgegeben, mit einem 2-stelligen Buchstaben-Code (im Kopf erklärt), dem Paketnamen, der installierten Version und einer kurzen Beschreibung.

Um den Status jedes Paketes zu sehen, dessen Name mit »foo« beginnt, geben Sie folgenden Befehl ein:

dpkg --list 'foo*'

Wünschen Sie einen ausführlicheren Status für ein bestimmtes Paket, geben Sie dies ein:

dpkg --status Paketname

8.4. Wie kann ich alle Dateien auflisten, die in einem installierten Paket enthalten sind?

Um alle mit der Installation des Pakets foo auf das System übertragenen Dateien aufzulisten, verwenden Sie den Befehl:

dpkg --listfiles foo

Beachten Sie, dass Dateien, die von den Installationsskripten erzeugt werden, hier nicht auftauchen.

8.5. Wie kann ich herausfinden, welches Paket eine bestimmte Datei angelegt hat?

Um herauszufinden, aus welchem Paket eine bestimmte Datei stammt, führen Sie einen dieser Befehle aus:

  • dpkg --search foo

    Dies sucht nach foo in den installierten Paketen. (Dies ist momentan gleichwertig mit der Suche nach allen Dateien mit der Endung .list im Verzeichnis /var/lib/dpkg/info/ und dem Filtern der Ausgabe, so dass alle Pakete, die dies beinhalten, aufgelistet werden plus Umleitungen.)

    Eine schnellere Alternative dazu ist das dlocate-Werkzeug:

    dlocate -S foo
    
  • zgrep foo Contents-ARCH.gz

    Hiermit wird nach Dateien gesucht, die die Zeichenkette foo in ihrem vollständigen Pfadnamen enthalten. Die Dateien Contents-ARCH.gz (wobei ARCH die gewünschte Architektur darstellt) befinden sich in den Hauptpaketverzeichnissen (main, non-free, contrib) auf dem Debian-Archiv-Server (d. h. unter /debian/dists/bullseye). Eine Contents-Datei bezieht sich nur auf Pakete in den Unterverzeichnissen unterhalb des Verzeichnisses, in dem es abgelegt ist. Deshalb könnte es sein, dass Sie mehr als eine Contents-Datei durchsuchen müssen, um das Paket zu finden, das foo enthält.

    Diese Methode hat gegenüber dpkg --search den Vorteil, dass Sie damit Dateien in Paketen finden können, die momentan nicht auf Ihrem System installiert sind.

  • apt-file search foo

    Ähnlich wie bei dem Beispiel vorher sucht dies nach Dateien, welche die Zeichenfolge oder den regulären Ausdruck foo in ihrem vollständigen Pfadnamen haben. Der Unterschied zum vorherigen Beispiel ist, dass es nicht notwendig ist, die Contents-ARCH.gz-Dateien händisch herunterzuladen, da dies automatisch für alle Quellen in der /etc/apt/sources.list erledigt wird, wenn Sie apt-file update (als root) ausführen.

8.6. Warum wird »foo-data« nicht entfernt, wenn ich »foo« deinstalliere? Wie stelle ich sicher, dass alte unbenutzte Bibliothekspakete restlos entfernt werden?

Einige Software ist in Programmpakete (»foo«) und Datenpakete (»foo-data«) (oder »foo« und »foo-doc«) aufgeteilt. Dies trifft in Debian auf viele Spiele, Multimedia-Anwendungen und Wörterbücher zu und wurde eingeführt, weil einige Benutzer auf die Rohdaten zugreifen wollten, ohne das Programm zu installieren, oder weil das Programm auch ohne die Daten läuft, so dass »foo-data« optional ist.

Ähnliche Situationen tauchen auf, wenn Sie mit Bibliotheken arbeiten: normalerweise werden diese Pakete installiert, wenn Pakete Programme enthalten, die von ihnen abhängen. Wenn das Programmpaket entfernt wird, bleibt das Bibliothekspaket auf dem System. Oder: Wenn das Programmpaket nicht länger z.B. von »libdb4.2« abhängt, aber stattdessen jetzt von »libdb4.3«, kann das »libdb4.2«-Paket installiert bleiben, wenn das Programmpaket aktualisiert wird.

In diesen Fällen hängt »foo-data« nicht von »foo« ab, so dass, wenn Sie das »foo«-Paket entfernen, die meisten Paketverwaltungswerkzeuge es nicht automatisch entfernen. Dasselbe gilt für die Bibliothekspakete. Dies ist nötig, um zirkuläre Abhängigkeiten zu vermeiden. Wenn Sie jedoch apt-get (siehe Abschnitt 8.1.2, „APT“) oder aptitude (siehe Abschnitt 8.1.3, „aptitude“) als Paketverwaltungswerkzeug benutzen, werden sich diese die automatisch installierten Pakete merken und sie entfernen, wenn kein Paket mehr auf Ihrem System existiert, das diese nutzt.



[5] Beachten Sie, dass es einige (Software)-Portierungen gibt, die dies auch für andere Paketverwaltungssysteme wie den Red-Hat Package-Manager (auch als rpm bekannt) ermöglichen.