dpkg - Installierte Pakete verwalten
Wenn man Softwarepakete mittels aptitude oder einem anderen Tool installiert, kommt im Hintergrund das Programm dpkg zum Einsatz. Wenn man das Tool aber direkt aufruft, stehen einem auch interessante Funtionen zur Verfügung. Ein paar stelle ich in diesem Artikel vor. Weitere Infos findest du in der Dokumentation zu dpkg.
Zustände eines Pakets
Ein software-Paket kann einen der folgenden Zustände haben:
- installiert (installed)
- Das Paket ist entpackt und korrekt konfiguriert.
- halb-installiert (half-installed)
- Die Installation eines Paketes wurde begonnen, aber aus irgendeinem Grund nicht abgeschlossen.
- nicht-installiert (not-installed)
- Das Paket ist auf dem System nicht installiert.
- entpackt (unpacked)
- Das Paket ist entpackt, aber nicht konfiguriert.
- halb-konfiguriert (half-configured)
- Das Paket ist entpackt und die Konfiguration wurde begonnen, aber aus irgendeinem Grund nicht abgeschlossen.
- Config-Dateien (config-files)
- Nur die Konfigurationsdateien existieren auf dem System.
Paketauswahl-Status
Die folgenden Stati betreffen die Paketauswahl:
- installiere (install)
- Das Paket ist zur Installation ausgewählt.
- deinstalliere (deinstall)
- Das Paket ist zur Deinstallation ausgewählt. Das bedeutet, dass die Konfigurationsdateien nicht entfernt werden sollen.
- säubern (purge)
- Das Paket ist zur vollständigen Deinstallation ausgewählt. Die Konfigurationsdateien sollen auch entfernt werden.
Unvollständig installierte Pakete ermitteln
Nicht immer verläuft die Installation oder Deinstallation eines Paketes erfolgreich. Mit der folgenden Anweisung sucht man auf dem System nach nur teilweise Installierten Paketen:
dpkg -C
Statt der Option -C kann auch --audit verwendet werden.
Stati aller installierten Pakete ausgeben und setzen
Die folgende Anweisung erstellt eine Liste aller installierten Pakete und deren Stati. Statt die Liste auf der Standardausgabe auszugeben, wird sie im Beipsiel in die Datei packages.txt geschrieben:
dpkg --get-selections "*" > packages.txt
Mit der Option --set-selections kann man die Paketstati einlesen lassen. Um die Liste der Pakete aus der Datei packages.txt zu lesen, wäre folgende Anweisung erforderlich:
dpkg --set-selections < packages.txt
Inhalt eines Paketes ausgeben
Wenn man ein Paket in Form einer .deb-Datei vorliegen hat, kann man sich mit der Option -c die enthaltenen Dateien und Verzeichnisse ausgeben lassen. Die Ausgabe kann dann z. B. so aussehen:
simon@etch:/var/cache/apt/archives$ dpkg -c pwgen_2.05-1_i386.deb
drwxr-xr-x root/root 0 2006-01-16 05:28 ./
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/share/
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/share/man/
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/share/man/man1/
-rw-r--r-- root/root 1940 2006-01-16 05:28 ./usr/share/man/man1/pwgen.1.gz
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/share/doc/
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/share/doc/pwgen/
-rw-r--r-- root/root 3219 2006-01-16 05:19 ./usr/share/doc/pwgen/changelog.Debian.gz
-rw-r--r-- root/root 262 2005-06-14 20:36 ./usr/share/doc/pwgen/copyright
-rw-r--r-- root/root 1698 2006-01-16 05:19 ./usr/share/doc/pwgen/changelog.gz
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/sbin/
drwxr-xr-x root/root 0 2006-01-16 05:28 ./usr/bin/
-rwxr-xr-x root/root 17040 2006-01-16 05:28 ./usr/bin/pwgen
Liste der Installierten Pakete ausgeben
Ruft man dpkg mit der Option -l auf, werden Informationen über alle auf dem System installierten Pakete ausgegeben. Gibt man ein Suchmuster an, werden auf das Muster passende Pakete ausgegeben. Dies passiert unabhängig davon, ob die Pakete auf dem System installiert sind oder nicht. Hier ein Beispiel:
simon@etch:~$ dpkg -l apache*
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Säubern/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/Fehlgeschl. Konf./Halb install.
|/ Fehler?=(kein)/Halten/R=Neuinst notw/X=beide (Status, Fehler: GROSS=schlecht)
||/ Name Version Beschreibung
+++-======================-==============-============================================
un apache <keine> (keine Beschreibung vorhanden)
ii apache-common 1.3.34-4.1 support files for all Apache webservers
un apache-perl <keine> (keine Beschreibung vorhanden)
un apache-ssl <keine> (keine Beschreibung vorhanden)
un apache-utils <keine> (keine Beschreibung vorhanden)
ii apache2 2.2.3-4 Next generation, scalable, extendable web se
un apache2-common <keine> (keine Beschreibung vorhanden)
un apache2-modules <keine> (keine Beschreibung vorhanden)
un apache2-mpm-event <keine> (keine Beschreibung vorhanden)
un apache2-mpm-itk <keine> (keine Beschreibung vorhanden)
un apache2-mpm-perchild <keine> (keine Beschreibung vorhanden)
ii apache2-mpm-prefork 2.2.3-4 Traditional model for Apache HTTPD 2.1
un apache2-mpm-threadpool <keine> (keine Beschreibung vorhanden)
pn apache2-mpm-worker <keine> (keine Beschreibung vorhanden)
ii apache2-utils 2.2.3-4 utility programs for webservers
ii apache2.2-common 2.2.3-4 Next generation, scalable, extendable web se
Wie man der Ausgabe entnehmen kann, sind nicht alle möglichen Pakete installiert. Das Paket apache2-mpm-worker war einmal installiert, besitzt aber jetzt den Status säubern (purge).
Welche Dateien sind aus einem Paket tatsächlich installiert?
Wenn man wissen möchte, welche Dateien aus einem Paket auf dem System installiert wurden, stehen die Optionen -L und --listfiles zur Verfügung. Im folgenden Beispiel wird geprüft, welche Dateien aus dem Paket pwgen installiert wurden:
simon@etch:~$ dpkg -L pwgen
/.
/usr
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/pwgen.1.gz
/usr/share/doc
/usr/share/doc/pwgen
/usr/share/doc/pwgen/changelog.Debian.gz
/usr/share/doc/pwgen/copyright
/usr/share/doc/pwgen/changelog.gz
/usr/sbin
/usr/bin
/usr/bin/pwgen
Aus welchem Paket kommt eine Datei?
Wenn man wissen möchte, durch welches Paket eine bestimmte Datei auf dem System installiert wurde, hilft eine der Optionen -S oder --search weiter:
simon@etch:~$ dpkg -S /usr/sbin/ab
apache2-utils: /usr/sbin/ab
Datum der Veröffentlichung: Donnerstag, 09.08.2007