2.15. Lokale Paketmarkierungen

Ein installiertes Debianpaket kann zusätzliche, lokale Markierungen besitzen. Diese beeinflussen z.B. dessen Aktualisierung oder — wenn kein anderes Paket mehr von ihm abhängt — veranlassen oder verhindern auch seine automatische Deinstallation.

2.15.1. Paketmarkierungen, die von verschiedenen Programmen genutzt werden

Diese Markierungen werden teilweise bereits automatisch von APT und aptitude gesetzt, wenn es Pakete installiert, entfernt oder aktualisiert. Als Systembetreuer können Sie jederzeit eingreifen und die Markierungen eigenhändig setzen und entfernen.

Die folgenden Paketmarkierungen sind in Benutzung:

automatisch installiert (automatic)
das Paket wurde automatisch installiert, i.d.R. als Abhängigkeit eines anderen Pakets (siehe „Paketabhängigkeiten anzeigen“ in Abschnitt 8.19, „Paketabhängigkeiten anzeigen“). Diese Markierung veranlasst, dass dieses Paket wieder entfernt wird, wenn keine weiteren, installierten Pakete mehr von diesem abhängen.
manuell installiert (manual)
das Paket wurde manuell, d.h. explizit installiert. Diese Markierung verhindert, dass dieses Paket automatisch mit entfernt wird, wenn kein weiteres Paket mehr von ihm abhängt (siehe „Umgang mit Waisen“ in Abschnitt 8.44, „Umgang mit Waisen“).
halten (hold)
das Paket wird in der vorliegenden, installierten Version auf dem System gehalten und nicht aktualisiert (upgrade) oder deinstalliert (siehe „Pakete aktualisieren“ in Abschnitt 8.41, „Pakete aktualisieren“ und „Pakete deinstallieren“ in Abschnitt 8.43, „Pakete deinstallieren“).

Die Markierung manuell installiert entspricht defacto dem Nicht-Vorhandensein der Markierung automatisch installiert. Ein Paket hat jeweils immer genau eine der beiden Markierungen manuell installiert oder automatisch installiert.

Die vorgenannten Paketmarkierungen werden von dpkg (nur hold), APT und aptitude ausgewertet. Die Unterscheidung automatisch/manuell installiert wird dazu in der Datei /var/lib/apt/extended_states gespeichert, die hold-Markierungen in /var/lib/dpkg/status[7]

Informationen zu jedem Paket in der Datei /var/lib/apt/extended_states (Ausschnitt). 

...

Package: gnome-menus
Auto-Installed: 0
Architecture: i386

Package: libfont-afm-perl
Auto-Installed: 1
Architecture: i386

Package: libhtml-parser-perl
Auto-Installed: 1
Architecture: i386

...

Ein Paket "auf hold" in der Datei /var/lib/dpkg/status (Ausschnitt). 

...

Package: awesome
Status: hold ok installed
Priority: optional
Section: x11
Installed-Size: ...
...

2.15.2. Aptitude-spezifische Paketmarkierungen

aptitude speichert weitere Informationen zu den Paketen eigenständig in der Datei /var/lib/aptitude/pkgstates. Dazu gehören:

Verbotene Versionen (forbid-version/ForbidVer)
Von Ihnen als lokaler Administrator nicht erwünschte Version, die nicht installiert wird, auf die nicht aktualisiert wird bzw. die beim Aktualisieren übersprungen wird.
Neue Pakete (New Packages/Unseen)
aptitude pflegt eine Liste mit neuen Paketen, die in den Paketlisten der abonnierten APT-Repositories aufgetaucht sind. Diese Markierung können Sie mit dem Aufruf aptitude forget-new zurücksetzen.
Entfernungsgrund (Remove-Reason)
aptitude zeigt an, warum ein Paket entfernt wird: wegen nicht (mehr) erfüllter Abhängigkeiten, wegen Konflikten mit anderen Paketen, oder weil es nicht mehr gebraucht wird (sprich: kein Paket mehr davon abhängt). Wird solch eine Paketentfernung nur vorgemerkt, so speichert aptitude bis zur Entfernung auch den Grund für diese.
Benutzerspezifische Markierungen (User Tags)
Sie als Benutzer dürfen für Pakete mit dem Unterkommando add-user-tag eigene Markierungen setzen. Nach diesen suchen Sie im Paketbestand mit dem Muster ?user-tag(Muster). Muster bezeichnet hier einen Regulären Ausdruck, mit dem Sie die Markierung spezifizieren.

aptitude-spezifische Zusatzinformationen zu Paketen (Ausschnitt). 

...

Package: python3-pkg-resources
Architecture: amd64
Unseen: no
State: 1
Dselect-State: 1
Remove-Reason: 0
ForbidVer: 18.8-1
User-Tags: broken-by-807773

...

Diese benutzerspezifischen Markierungen werden auch in der Textoberfläche (text-based user interface, kurz TUI) von aptitude angezeigt, jedoch können Sie diese dort nicht ändern.

2.15.3. Lesen und Anzeigen einer Markierung mit aptitude

Sichtbar werden alle Markierungen zu einem Paket, wenn Sie die Details dazu erfragen – entweder direkt über die Kommandozeile oder in der Textoberfläche zu aptitude. Wir verdeutlichen Ihnen das hier anhand des installierten und gehaltenen Pakets python-pkg-resources.

Auf der Kommandozeile rufen Sie hierfür aptitude mit dem Unterkommando show gefolgt vom Paketnamen auf. In den Zeilen 2 und 3 der nachfolgenden Ausgabe erfahren Sie einerseits, dass das Paket python-pkg-resources automatisch installiert wurde und die Version 18.8-1 nicht lokal eingespielt werden darf. Darüberhinaus wurde eine manuelle Markierung vergeben (broken-by-807773), die kennzeichnet, dass das Paket defekt ist (broken). Die Ziffernfolge referenziert die Nummer des Bugs im Debian Bug Tracking System (BTS) und ermöglicht Ihnen, nachzulesen, warum der Eintrag da ist.

Darstellung der Markierungen zum Paket python-pkg-resources mittels aptitude

$ aptitude show python-pkg-resources
Paket: python-pkg-resources
Zustand: Installiert
Verbotene Version: 18.8-1
Automatisch installiert: ja
Version: 18.7-1
…
Benutzermarkierungen: broken-by-807773

...
$

In der Textoberfläche von aptitude bekommt jeder Eintrag in der Paketliste zusätzliche Buchstaben. Dabei stehen die Buchstaben h für hold und A für automatic (siehe Abbildung 2.12, „Ausgabe der Paketmarkierungen in der Textoberfläche von aptitude).

Abbildung 2.12. Ausgabe der Paketmarkierungen in der Textoberfläche von aptitude

konzepte/software-in-paketen-organisieren/aptitude-hold.png

aptitude kann ebenfalls nach allen Paketen fahnden, die automatisch installiert wurden und somit das Flag automatic tragen. Es kennt dazu das spezielle Muster ?automatic (Kurzform ~M) zum Unterkommando search. Ausführlicher besprechen wir das in „Automatisch installierte Pakete mit aptitude anzeigen“ in Abschnitt 8.10.2, „aptitude benutzen“.

2.15.4. Lesen und Anzeigen einer Markierung mit apt-mark

Das Werkzeug apt-mark ist spezialisiert auf die Paketmarkierungen und kann Ihnen die Pakete ausgeben, bei denen nur ein bestimmtes Paketflag gesetzt ist. Es kennt dazu die folgenden sechs Unterkommandos

showauto
alle automatisch installierten Pakete
showmanual
alle manuell installierten Pakete
showinstall
alle Pakete, die zur Installation vorgemerkt sind
showhold
alle Pakete, deren Zustand beibehalten wird
showremove
alle Pakete, die zur Entfernung vorgemerkt sind
showpurge
alle Pakete, die zur Entfernung inklusive der Konfiguration vorgemerkt sind

Nachfolgend sehen Sie beispielhaft nur das Ergebnis des Aufrufs für die manuell installierten Pakete. Auf automatisch installierte Pakete gehen wir genauer in Abschnitt 8.10, „Automatisch installierte Pakete anzeigen“ ein. Dem Umgang mit dem Unterkommando showhold für die Verwendung des hold-Flags in der Praxis ist der Abschnitt „Ausgewählte Pakete nicht aktualisieren“ in Kapitel 16, Ausgewählte Pakete nicht aktualisieren gewidmet.

Auflistung aller manuell installierten Pakete mittels apt-mark

# apt-mark showmanual
abiword
acpi
acpi-support
acpi-support-base
...
#

apt-mark erlaubt keine Eingrenzung, welche Pakete überprüft werden. Es validiert stets den gesamten Paketbestand.

2.15.5. Setzen und Entfernen einer Markierung mit apt-mark

Die Markierungen automatic und manual werden von den Programmen zur Paketverwaltung eigenständig gesetzt, wenn Sie Pakete installieren. Grundlage sind die ausgewerteten Paketabhängigkeiten. Trotzdem können Sie stets eigenhändig eingreifen, sofern dazu Ihrerseits Bedarf besteht. apt-mark kennt dafür diese sechs Schalter:

auto
automatisch installiert
install
Paket wird installiert
manual
Paket wird manuell installiert
hold
Paket wird beibehalten
purge
Paket inklusive Konfiguration löschen
remove
Paket löschen

Damit setzen Sie die entsprechende Markierung für ein angegebenes Paket explizit. Dazu erwartet apt-mark als Parameter ein einzelnes Paket oder eine Paketliste. Die nachfolgende Ausgabe zeigt das Setzen der Markierung manual für das Paket wireshark.

Setzen der Paketmarkierungen manual für das Paket wireshark

# apt-mark manual wireshark
wireshark wurde als manuell installiert festgelegt.
#

Für das Halten eines Pakets existieren die Unterkommandos hold und unhold. Welchen konkreten Nutzen das haben kann, erfahren Sie unter „Ausgewählte Pakete nicht aktualisieren“ in Kapitel 16, Ausgewählte Pakete nicht aktualisieren.

Liste der Pakete eingrenzen, deren Markierung geändert wird

Um nur eine Auswahl an Paketen zu markieren, erlaubt apt-mark eine Paketliste in Form einer Datei, die Sie beim Aufruf mit übergeben:

apt-mark -f=paketliste manual

Die Datei ist eine Textdatei, in der pro Zeile ein Paketname steht. Mit obigem Aufruf werden alle Pakete auf „manuell installiert“ gesetzt, die in der übermittelten Paketliste angegeben sind.

2.15.6. Was passiert, wenn Paketmarkierungen geändert werden?

Durch das Setzen von Paketmarkierungen verändert sich die Art und Weise, wie die Paketabhängigkeiten bewertet werden. dpkg, apt, apt-get und aptitude respektieren die von Ihnen gesetzten Markierungen. apt, apt-get und aptitude empfehlen Ihnen bei einer Änderung des Paketbestands beispielsweise andere Pakete als sonst, um die Paketabhängigkeiten nicht zu verletzen. Oder sie schlagen vor, bestimmte Pakete zu entfernen, da sie neu als nicht mehr gebraucht angesehen werden.

Setzen oder Entfernen Sie bewusst das hold-Flag und legen somit eine Version explizit fest, nehmen Sie Einfluss auf den Zustand Ihres Systems. Wobei Ihnen das von Nutzen sein kann, erklären wir unter „Ausgewählte Pakete nicht aktualisieren“ (Kapitel 16, Ausgewählte Pakete nicht aktualisieren) ausführlicher.

2.15.7. Setzen und Entfernen einer Markierung mit aptitude

Alternativ zu apt-mark bietet sich auch aptitude an. Dort heißen die Unterkommandos etwas anders, ebenso agiert aptitude vielleicht ungewohnt. In der Standardeinstellung will es Pakete entfernen, die mangels geänderter Abhängigkeiten nicht mehr benötigt werden. Im u.g. Beispiel gibt es z.B. Pakete, die eine Abhängigkeit auf das Paket wireshark haben, aber keine, die eine Abhängigkeit auf zshdb haben. Entsprechend will aptitude es auch direkt entfernen.

Setzen von Paketmarkierungen mit aptitude

# aptitude markauto wireshark zshdb
Die folgenden Pakete werden ENTFERNT:
  zshdb{u}
0 Pakete aktualisiert, 0 zusätzlich installiert, 1 werden entfernt und 26 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 451 kB frei werden.
Möchten Sie fortsetzen? [Y/n/?] n
Abbruch.
#

Möchten Sie eine Markierung wieder aufheben, kennt aptitude den Schalter unmarkauto. Das nachfolgende Beispiel demonstriert das Vorgehen.

Aufheben von Paketmarkierungen mit aptitude

# aptitude unmarkauto wireshark zshdb
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 26 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 0 B zusätzlich belegt sein.
#

Dabei fällt auf, das aptitude im Gegensatz zu apt-mark nicht angibt, dass sich eine Markierung geändert oder nicht geändert hat. Stattdessen informiert es Sie darüber, dass es keine Pakete entfernt oder aktualisiert. Kurioserweise aktualisiert es (in der Standardeinstellung) nicht automatisch die Pakete, bei denen die hold-Markierung entfernt wurde:

Setzen eines Paketes auf hold mit aptitude

# aptitude search '~U'
i A awesome                         - Hochkonfigurierbarer Fenstermanager für X
# aptitude hold awesome
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 26 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 0 B zusätzlich belegt sein.
# aptitude search '~U'
ihA awesome                         - Hochkonfigurierbarer Fenstermanager für X
# aptitude unhold awesome
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 26 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 0 B zusätzlich belegt sein.
# aptitude search '~U'
i A awesome                         - Hochkonfigurierbarer Fenstermanager für X
#



[7] In früheren Debian-Veröffentlichungen wurden die hold-Markierungen von aptitude und dpkg getrennt gespeichert und apt-get wusste nichts von der hold-Markierung. Auch wurde die automatisch installiert-Markierung zuerst von aptitude eingeführt und dementsprechend anfangs nur in /var/lib/aptitude/pkgstates gespeichert.