Paketverwaltung und der Befehl dpkg in GNU/Linux

Immer wieder kommt es vor: man muss sich mit der Paketverwaltung auseinandersetzen. Unter Ubuntu z.B. steht einem hier das grafische Software-Center zur Verfügung. Vor- und Nachteile eines solchen Tools sind aber nicht Gegenstand dieses Artikels. Vielmehr möchte ich heute auf Möglichkeiten der Paketverwaltung via Kommandozeile (Terminal) eingehen. Und dazu betrachten wir das Programm dpkg etwas näher.

Den aktuellen Paketstatus anzeigen

Zwei Kommandos können benutzt werden, um den aktuellen Status eines Paketes anzuzeigen:

  • dpkg
  • dpkg-query

Nehmen wir also nun einmal an, dass wir in unserem System das Paket nano installiert haben.

Aktueller Status mit dpkg

dpkg --list

kann nun verwendet werden, um den Status in Erfahrung zu bringen.

sytho@7740G:~$ dpkg --list nano
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                              Version               Architektur           Beschreibung
+++-=================================-=====================-=====================-========================================================================
ii  nano                              2.2.6-3               amd64                 small, friendly text editor inspired by Pico

Wir sehen also, dass der aktuelle Status des Pakets nano „ii“ lautet. Wenn wir nun auch noch wissen, wie wir diesen Status richtig interpretieren, dann können wir sichergehen, dass das Paket nano richtig installiert ist.

Sehen wir uns also mal ein Paket an, welches mit -remove entfernt wurde. Die Konfigurationsfiles sind also immer noch im System vorhanden.

sytho@7740G:~$ dpkg --list mugshot
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                              Version               Architektur           Beschreibung
+++-=================================-=====================-=====================-========================================================================
rc  mugshot                           0.2.5-1               all                   lightweight user-configuration application

Status rc, das Paket wurde entfernt, die Konfigurationsdateien sind aber immer noch vorhanden.

Aktueller Status mit dpkg-query

Wollen wir noch etwas detailliertere Information über den Status eines Paketes erhalten, verwenden wir dpkg-query.

sytho@7740G:~$ dpkg-query -s nano
Package: nano
Status: install ok installed
Priority: important
Section: editors
Installed-Size: 1667
Maintainer: Jordi Mallach <jordi@debian.org>
Architecture: amd64
Version: 2.2.6-3
Replaces: pico
Provides: editor
Depends: dpkg (>= 1.15.4) | install-info, libc6 (>= 2.14), libncursesw5 (>= 5.6+20070908), libtinfo5
Suggests: spell
Breaks: alpine-pico (<= 2.00+dfsg-5)
Conflicts: pico
Conffiles:
 /etc/nanorc fc57b93c907fefbccf12317d40b4a204
Description: small, friendly text editor inspired by Pico
 GNU nano is an easy-to-use text editor originally designed as a replacement
 for Pico, the ncurses-based editor from the non-free mailer package Pine
 (itself now available under the Apache License as Alpine).
 .
 However, nano also implements many features missing in pico, including:
  - feature toggles;
  - interactive search and replace (with regular expression support);
  - go to line (and column) command;
  - auto-indentation and color syntax-highlighting;
  - filename tab-completion and support for multiple buffers;
  - full internationalization support.
Homepage: http://www.nano-editor.org/

Unser Hauptaugenmerk gilt der Zeile

Status: install ok installed

Das Paket nano ist also unmissverständlich installiert. Es folgt ein Beispiel mit dem Status „rc“

sytho@7740G:~$ dpkg-query -s mugshot
Package: mugshot
Status: deinstall ok config-files
Priority: optional
Section: python
Installed-Size: 797
Maintainer: Python Applications Packaging Team <python-apps-team@lists.alioth.debian.org>
Architecture: all
Version: 0.2.5-1
Config-Version: 0.2.5-1
Depends: gir1.2-gdkpixbuf-2.0, gir1.2-glib-2.0, gir1.2-gst-plugins-base-1.0, gir1.2-gstreamer-1.0, gir1.2-gtk-3.0, gstreamer1.0-tools, python3-cairo, python3-dbus, python3-pexpect, dconf-gsettings-backend | gsettings-backend, python3:any (>= 3.3.2-2~), python3
Suggests: gstreamer1.0-plugins-good
Description: lightweight user-configuration application
 Mugshot is a lightweight user configuration utility that allows you to
 easily update personal user details. This includes:
  - Linux profile image: ~/.face
  - User details stored in /etc/passwd (used by finger)
  - Pidgin buddy icon
  - LibreOffice user details
Homepage: https://launchpad.net/mugshot

Wir betrachten die Zeile

Status: deinstall ok config-files

Das Paket wurde entfernt, die Konfigurationsdateien sind aber nach wie vor im System vorhanden. Wie wird also der Paketstatus interpretiert?

Paketstatus von dpkg –list interpretieren

dpkg (Debian Package Manager) ist der Paketmanager für alle auf Debian basierenden Linux-Distributionen (unter anderem also auch für Ubuntu und dessen Flavours). dpkg kann verwendet werden, um Pakete in einem Debian-basierten System zu installieren. Zudem kann dpkg verwendet werden, um mehr über den Status von Paketen zu erfahren:

  • installierte Pakete
  • entfernte Pakete
  • Konfigurationsdateien sind noch im System vorhanden
  • Zum Entfernen vorgemerkt

Dazu nochmals ein kleines Beispiel von dpkg –list:

sytho@7740G:~$ dpkg --list
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                              Version               Architektur           Beschreibung
+++-=================================-=====================-=====================-========================================================================
...
rc  mugshot                           0.2.5-1               all                   lightweight user-configuration application
ii  nano                              2.2.6-3               amd64                 small, friendly text editor inspired by Pico
...

Die erste Spalte bezeichnet den Status eines Paketes. Was bedeutet aber dieser Status? Der Status eines Paketes ist durch drei Buchstaben gekennzeichnet xxx.

Der erste Buchstabe bezeichnet den gewünschten Zustand. Beispielsweise wenn ein Paket zum Enternen vorgemerkt wurde.

  • u: Unknown (Zustand unbekannt)
  • i: Install (zum Installieren vorgemerkt)
  • r: Remove (zum Entfernen vorgemerkt)
  • p: Purge (zum vollständigen Löschen vorgemerkt)
  • h: Behalten (hold)

Der zweite Buchstabe bezeichnet den aktuellen Zustand.

  • n: Not- Das Paket ist nicht installiert
  • i: Inst – Das Paket ist erfolgreich installiert
  • c: Cfg-files – Die Konfigurationsdateien sind noch vorhanden
  • u: Unpacked- Das Paket ist nicht gepackt
  • f: Failed-cfg- Die Konfigurationsdateien konnten nicht entfernt werden
  • h: Half-inst- Das Paket ist nur teilweise installiert
  • W: trig-aWait
  • t: Trig-pend

Der dritte Buchstabe bezeichnet den Error-Status.

  • R: Reinst-required Das Paket muss neu installiert werden

Nun sollte also klar sein, was ii oder rc bedeuten. Wie wir gesehen haben, ist dpkg also ein durchaus nützliches Kommandozeilenwerkzeug für den Umgang mit Paketen. Man kann damit Pakete installieren, entfernen oder aber den Status abfragen. Und wie im Beispiel bereits gezeigt, kommt man früher oder später auch mit dem rc-Zustand in Berührung.

Kurzgefasst bedeutet rc:

  • r: Das Paket wurde zum Entfernen vorgemerkt
  • c: Die Konfigurationsdateien sind im System noch vorhanden

Das Paket wurde also nicht vollständig entfernt, weil eben die Konfig-Files immer noch auf der Platte herumschwirren. Wie man nun solche Pakete vollständig entfernt, zeige ich Euch jetzt.

Pakete mit dem Zustand rc mit dpkg aufspüren und entfernen

Spüren wir also zuerst einmal alle Pakete mit dem Status rc auf:

sytho@7740G:~$ dpkg --list |grep "^rc"
rc  mugshot                               0.2.5-1                             all          lightweight user-configuration application

In meinem aktuellen Beispiel habe ich halt lediglich das Paket mugshot, welches nicht vollständig entfernt worden ist. Auf einem laufenden System können das aber durchaus mehrere Pakete sein, die sich nun in dieser Liste tummeln.

Nun benötigen wir aber nur die Paketnamen:

sytho@7740G:~$ dpkg --list |grep "^rc" | cut -d " " -f 3
mugshot

Der Befehl entfernt nun das rc und alle weiteren, nicht benötigten Details und gibt uns lediglich den Paketnamen der mit rc markierten Pakete zurück. Mit dem folgenden Befehl lassen entfernen wir alle diese Pakete vollständig:

sytho@7740G:~$ dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
 [sudo] password for sytho:
 (Lese Datenbank ... 97281 Dateien und Verzeichnisse sind derzeit installiert.)
 Entfernen von mugshot (0.2.5-1) ...
 Löschen der Konfigurationsdateien von mugshot (0.2.5-1) ...

Interessant ist hier auch die Kombination von xargs mit dpkg –purge.

Fazit

Für die Paketverwaltung würde ich dem Leser sonst noch Synaptic ans Herz legen, welcher dank der grafischen Oberfläche auch ziemlich intuitiv zu bedienen ist. Allerdings ziehe ich – je länger ich nun mit Linux arbeite – immer mehr den Weg über das Terminal vor. Man kann halt noch um einiges detaillierter festlegen, was, wie, wann und wo geschehen soll. Und zudem lernt man ja gern noch was dazu. Immer nur „klickibunti“ ist doch langweilig. Oder? 🙂

Ein Kommentar zu „Paketverwaltung und der Befehl dpkg in GNU/Linux

  1. dpkg: man nur kurz erwähnen, dass „dpkg“ zur Installation von „*.deb“-Paketen genutzt wird, jedoch dessen Abhängigkeiten nicht auflöst.

    apt-get: somit sollte man z.B. „apt-get“ verwenden, wenn man ein bestimmtes Paket aus dem Ubuntu-Repo installieren möchte, so dass man sich um dessen Abhängigkeiten nicht so viele Gedanken machen muss. Intern verwendet „apt-get“ wiederum „dpkg“ zur Installation der Pakete.

    aptitude: muss man jedoch selber Abhängigkeiten auflösen, weil man z.B. weitere Paket-Quellen hinzugefügt hat („/etc/apt/source.list“) oder man möchte wie im Blog-Beitrag beschriebene Informationen zu den Paketen erfahren, sollte man die Kommandozeilen-Gui für „apt-get“ mit dem Namen „aptitude“ verwenden

    PS: habe hier vor einigen Jahren *hust* ein paar Tastenbefehle für „aptitude“ beschrieben, ggf. hilft das ja noch jemandem weiter -> http://suckup.de/linux/ubuntu/aptitude-dpkg/

    Mfg Lars

    Gefällt 1 Person

Hinterlasse einen Kommentar