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? 🙂
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