AA_paket-robot_123rf-15967287_stylephotographs.jpg

© stylephotographs, 123RF

Dynamisches Duo

Apt-get und Aptitude (Teil 1)

19.03.2013 Die Paketmanager Apt-get und Aptitude gehören zum Standardrepertoire von Debian und dessen Derivaten. Welcher davon eignet sich wofür am besten?

Das Thema Paketverwaltung unter Debian bildete bereits einen Teil des Schwerpunkts von LinuxUser 06/2012. Neben der Paketklassifikation mit Debtags [1] und dem Selberbauen von Softwarepaketen mit Checkinstall rückte die Pflege des Softwarebestands mittels Apt-Pinning [2] sowie der Aptsh [3] in den Mittelpunkt. Die Basis der Verwaltung von Softwarepaketen aber bilden Dpkg und Apt.

Dpkg stellt die unterste Ebene der Paketverwaltung von Debian dar. Es ist verantwortlich für das Auspacken von DEB-Paketen und das Handhaben von aktualisierten Konfigurationsdateien. Es verhindert es außerdem, dass ein Paket unerwartet eine Datei aus einem anderen überschreibt.

Apt kümmert sich um alles, was mit Paketlisten und deren Auswertung zu tun hat – zum Beispiel das Herunterladen von Paketlisten, das automatische Auflösen von Paketabhängigkeiten oder das Herunterladen der Paketdateien. Apt besteht dazu aus mehreren Komponenten, einerseits den beiden Programmbibliotheken libapt-pkg und libapt-inst und andererseits aus diversen Kommandozeilenwerkzeugen, unter anderem Apt-get und Apt-cache.

Alle weiteren Programme wie Aptsh, Aptitude oder Synaptic setzen auf die Programmbibliotheken von Apt auf. Eine Ausnahme bildet Cupt [4], das deswegen hier auch außen vor bleibt.

Die Entwickler von Apt und Aptitude liefern sich eine Art Wettrennen, welches beider Projekte die wenigsten offenen Fehler-Reports [5] aufweist. Bei beiden Programmen hält sich das schon länger ungefähr die Waage.

Der offensichtlichste Unterschied zwischen den bisher erwähnten Werkzeugen ist zunächst rein optischer Natur. Sowohl Apt und Aptitude als auch die Aptsh nehmen Befehle über die Kommandozeile entgegen. Dabei folgt die Aptsh allerdings anderen Konzepten als Apt-get und Aptitude. Aptitude verfügt zusätzlich über eine Ncurses-basierte Benutzeroberfläche (Abbildung 1). Komplexe Aktionen steuern Sie bei Aptitude sowohl über die Textmodus-Oberfläche als auch mit Hilfe von Aufrufparametern.

Abbildung 1

Abbildung 1: Aptitudes Textmodus-Oberfläche zeigt hier eine Reihe von zur Aktualisierung vorgemerkten Paketen.

Kurze Zeit gab es auch eine GUI-Variante von Aptitude, die auf dem Gimp-Toolkit basierte. Sie erreichte jedoch nie die Qualität und Stabilität von Aptitudes Ncurses-Oberfläche – daher wird sie nicht mehr weiter gepflegt [6]. Für das Qt-Pendant Aptitude-Qt existiert zwar ebenfalls Quellcode, zur Veröffentlichung einer brauchbaren Variante hat es aber bisher nicht gereicht.

Synaptic bietet dagegen ausschließlich eine grafische Oberfläche und ist neben dem Software Center auf Ubuntu sehr beliebt.

Unterkommandos und Parameter

Im Folgenden stehen die Feinheiten zwischen Apt-get und Aptitude im Vordergrund. Sie lernen diese kennen und erfahren, wie Sie diese für sich nutzen können. Die erste Station bilden die Parameter auf der Kommandozeile.

Die Tabelle "Unterkommandos von Apt-get und Aptitude" stellt die Unterkommandos von Apt-get und Aptitude gegenüber. Viele der genannten Befehle kommen Ihnen sicherlich bekannt vor – sei es aus eigener Erfahrung oder aus dem Absolvieren eines Linux-Basis-Kurses. Sie sehen, dass etliche subtile Unterschiede bestehen, obwohl vielfach das jeweilige Unterkommando bei beiden Programmen den gleichen Namen trägt. Insbesondere gilt das für upgrade, safe-upgrade, dist-upgrade und full-upgrade, daher sind diese nochmals separat aufgeschlüsselt (siehe Kasten "Feine Unterschiede"). Weitergehende Informationen finden Sie im Aptitude-Handbuch [7] sowie in den Manpages von Apt-get [8] und Aptitude [9].

Unterkommandos von Apt-get und Aptitude

Aktion Apt-get Aptitude
Paketlisten aktualisieren update update
Pakete konservativ aktualisieren upgrade safe-upgrade
Alle Pakete aktualisieren dist-upgrade full-upgrade
Paket installieren install Paket install Paket
Paket nochmals installieren install --reinstall Paket reinstall Paket
Paket entfernen remove Paket remove Paket
Paket samt Konfigurationsdateien entfernen purge Paket purge Paket
Ungenutzte Pakete entfernen autoremove -
Paket beibehalten nicht vorhanden(1) hold Paket
Paketcache leeren (komplett) clean clean
Pakete ohne verfügbare Quellen löschen autoclean autoclean
Paketinformationen anzeigen show(2) show Paket
Warum ist ein Paket installiert?   why Paket
Warum ist ein Paket nicht installiert?   why-not Paket
Abhängigkeitsfehler zeigen check search '~b'
Paket suchen search(2) search Muster
Verfügbare Paketversionen zeigen policy(2) versions Paket
(1) per Apt-cache (auch aus dem Paket apt), (2) per dpkg-hold Paket

Feine Unterschiede

Die Unterkommandos full-upgrade und dist-upgrade unterscheiden sich (ohne Parameter) nur durch die unterschiedlichen Algorithmen zum Auflösen der Paketabhängigkeiten. Apt-get erlaubt es seit einiger Zeit sogar, diese auszutauschen [10].

Das Kommando apt-get upgrade aktualisiert alle Pakete, die aktualisiert werden können, ohne installierte Pakete zu entfernen oder nicht installierte einzurichten. Dagegen aktualisiert aptitude safe-upgrade alle Pakete, die sich aktualisieren lassen, ohne manuelle installierte zu entfernen. Die Option --no-new-installs bewirkt, dass sich aptitude safe-upgrade ähnlicher zu apt-get upgrade verhält.

Allerdings gibt es noch einen großen Unterschied zwischen apt-get upgrade/dist-upgrade und aptitude safe-/full-upgrade: Aptitudes Unterkommandos erlauben Paketnamen als zusätzliche Parameter. In diesem Fall versucht der Paketmanager, nur die angegebenen Pakete zu aktualisieren (upgrade), unter den durch das Unterkommando gegebenen Bedingungen.

Wohl gemerkt

Etwas im Verborgenen schlummert die Möglichkeit, mit Aptitude anstehende Aktionen nicht direkt auszuführen, sondern sie für später vorzumerken. Solche vorgemerkten Aktionen arbeitet die Software ab, sobald Sie zu einem späteren Zeitpunkt irgendeine andere Aktion per Aptitude anstoßen, wie etwa das Installieren, Entfernen oder Aktualisieren von Paketen.

In welcher Reihenfolge Aptitude die Vormerkungen abarbeitet, lässt sich nicht pauschal vorhersagen. Das hängt vor allem von den Abhängigkeiten der Pakete untereinander ab, die es bei den einzelnen Aktionen zu berücksichtigen gilt. Spätere Vormerkungen können frühere allerdings auch wieder revidieren.

Aptitude trägt die erhaltenen Vormerkungen in seiner eigenen Paketdatenbank ein (siehe Kasten "Aptitudes Status-Datenbank"). Pakete, die es zur Erfüllung von Abhängigkeiten vorgemerkt werden, kennzeichnet Aptitude als "automatisch installiert", angezeigt durch den Buchstaben A in der Benutzeroberfläche. Mittlerweile kann Apt ebenfalls mit dieser Markierung umgehen und setzt sie beim Installieren von Paketen via Apt-get analog. Entdeckt die Paketverwaltung bei einem Aufruf solche als automatisch installiert markierten Pakete, die aber von keinem anderen Paket benötigt werden, so weist es den Benutzer darauf hin. Aptitude hingegen lässt es in den Standard-Einstellungen gar nicht soweit kommen und entfernt die Pakete zusammen mit dem Ausführen der Aktion, die diese obsolet macht.

Aptitudes Status-Datenbank

Aptitude pflegt seine Zusatz-Informationen zu den Paketen in einer textbasierten Datenbank unter /var/lib/aptitude/pkgstates. Ein Eintrag für ein Paket besteht aus fünf Zeilen. Für das Paket debtree sieht er zum Beispiel so aus:

Package: debtree
Unseen: no
State: 1
Dselect-State: 1
Remove-Reason: 0

Dabei enthält Package enthält den Paketnamen. Unseen speichert, ob das Paket in Aptitudes Liste neuer Pakete auftaucht, weil es "noch nicht gesehen" wurde. State enthält den Paketstatus, wobei 1 für "installiert" steht, 2 für "beibehalten", 3 für "nicht installiert" und 4 für "entfernt (Konfigurationsdateien noch vorhanden)". Dselect-State zeigt an, ob Vormerkungen vorliegen. Remove-Reason schließlich speichert, falls das Paket automatisch entfernt wurde, den Grund dafür: Entweder wurde es schlicht nicht mehr gebraucht oder es traten Konflikte mit anderen Paketen auf.

Paket-Aktionen mit Aptitude nehmen Sie über die Kommandozeile oder in der interaktiven Textmodus-Oberfläche vor. In letzterer stellt praktisch jedes Markieren eines Paketes zum Installieren ([+]) oder Entfernen ([-]) ein Vormerken dar. Drücken Sie danach [G], gelangen Sie in der Standard-Konfiguration zur Vorschau der Vormerkungen. Drücken Sie nochmals [G], führt Aptitude die vorgemerkten Aktionen auch aus. Die Eingabe von [Q] beendet Aptitude, merkt sich aber die zuvor geplanten Paketaktionen für den nächsten Aufruf. Beenden Sie Aptitude dagegen mit [Strg]+[C], speichert es die Vormerkungen nicht.

Das gleiche Ergebnis erreichen Sie auf der Kommandozeile, indem Sie einem Aptitude-Aufruf die Option --schedule-only hinzufügen. Ein späteres aptitude install ohne weitere Parameter genügt dann, damit der Paketmanager alle vorgemerkten Aktionen ausführt (Listing 1).

Listing 1

# aptitude --schedule-only install htop
# aptitude --schedule-only remove tasksel
# aptitude install
The following NEW packages will be installed:
  htop
The following packages will be REMOVED:
  tasksel tasksel-data{a}
0 packages upgraded, 1 newly installed, 2 to remove and 0 not upgraded.

Oft ist es hilfreich, vor der Installation zu erfahren, welche Vormerkungen bereits getroffen wurden. Am einfachsten gelingt das, indem Sie die Simulation der Aktionen über den Schalter-s beziehungsweise --simulate aktivieren. Der vollständige Aufruf lautet dann aptitude install -s. Als Benutzer der Textmodus-Oberfläche wählen Sie zunächst das Paket mit [+] aus und drücken danach [G] für die Vorschau (Abbildung 2).

Abbildung 2

Abbildung 2: Aptitude zeigt das zur Aktualisierung ausgewählte Paket mysql-common. Mit einem Druck auf [G] lösen Sie die Aktualisierung des Pakets aus.

Um Vormerkungen wieder aufzuheben kennt Aptitude das Unterkommando keep-all, das dafür sorgt, dass der Paketmanager alle Vermerke über geplante Aktionen zurücksetzt. In der deutschsprachigen Version der Textmodus-Oberfläche heißt der entsprechende Eintrag im Aktionen-Menü Nicht abgeschlossene Aktionen abbrechen.

Möchten Sie stattdessen nur ein einziges Paket zurücksetzen, akzeptiert Aptitude das Unterkommando keep, beispielsweise aptitude --schedule-only keep tasksel. In der Textmodus-Oberfläche wählen Sie zunächst das Paket aus, und drücken dann als Pendant [Umschalt]+[.]. Um nur die letzten Vormerkungen zu löschen, drücken Sie in der Textmodus-Oberfläche [Strg]+[U] ("undo").

Bunter Mix

Besonders konfliktträchtig und in der Handhabung verwirrend kann es werden, wenn Sie Apt-get und Aptitude abwechselnd verwenden. Das führt unter Umständen zu unerwarteten Ergebnissen – etwa, wenn Sie ein Paket A mit Aptitude installieren, es mit Apt-get wieder entfernen und dann mit Aptitude ein neues Paket B einrichten.

Im ersten Schritt erfolgt das Vormerken sowie die Installation des Pakets A mittels Aptitude. In Schritt 2 entfernt Apt-get das Paket A wieder – davon bekommt Aptitude aber nichts mit und nimmt an, dass das Paket noch installiert sein muss. Im letzten Schritt installiert Aptitude dann beim Einrichten des angeforderten Pakets B das Paket A gleich noch einmal mit: Paket B haben Sie direkt im Aptitude-Aufruf angegeben, das jetzt "fehlende" Paket A kommt aus Aptitudes Liste der vorgemerkten Pakete. Für Aptitude ging es irgendwie "verloren", hat aber gemäß der Merkliste installiert zu sein und wird daher auch eingerichtet.

Andersherum passiert das aber normalerweise nicht: Aptitude entfernt nicht hinterrücks ein mit Apt-get installiertes Paket wieder, die Software trägt es lediglich als "installiert" in ihrer Liste nach. Dieses Verhalten gehört zur Gruppe von Fehlern rund um die Synchronisierung von Vormerkungen zwischen Aptitude und Dpkg/Dselect [11]. Um solche Schwierigkeiten zu vermeiden, entscheiden Sie sich am Besten für einen der beiden Paketmanager, den Sie dann ausschließlich verwenden.

Dieses Detail gewinnt insbesondere dann an Bedeutung, wenn Software in einem APT-Repository in der Installationsanleitung angibt, sie sei mittels aptitude install Paket zu installieren: Dieser Aufruf richtet potenziell nicht nur die gewünschte Software ein, sondern nimmt im Zweifelsfall auch alle bisher mittels Aptitude vorgemerkten Paket-Aktionen vor – das ist nicht immer im Sinne des Erfinders. Bei einem apt-get install Paket bestünde diese Gefahr nicht.

Ob Sie eher Apt-get oder Aptitude verwenden, hat grundsätzlich nie etwas mit der zu installierenden Software zu tun, sondern bleibt ganz Ihrer Entscheidung überlassen. Unterwerfen Sie sich nicht der persönlichen Präferenz des Autors einer Installationsbeschreibung, sondern wählen Sie stattdessen selbst ihr Lieblingswerkzeug aus.

Vorschau

Im zweiten Teil dieses Artikels erwartet Sie neben Details zu den Standardeinstellungen von Apt und Aptitude ein Überblick zur effektiven Nutzung beider Werkzeuge. Dazu gehören das Aktualisieren, Installieren und Entfernen von Paketen in einem Aufruf sowie Suchmuster und Filter zum Stöbern in den Paketlisten. 

Infos

[1] Pakete finden: Frank Hofmann, "Dschungelführer", LU 06/2012, S. 22, http://www.linux-community.de/25926

[2] Mischen von Debian-Releases: Thomas Drilling, "Festgenagelt", LU 06/2012, S. 35, http://www.linux-community.de/25909

[3] Pakete managen mit Apt-Shell: Thomas Winde, Frank Hofmann, "Zentraler Zugangspunkt", LU 06/2012, S. 30, http://www.linux-community.de/26012

[4] Cupt: https://wiki.debian.org/Cupt

[5] Posting von D. Kalnischkies: http://lists.alioth.debian.org/pipermail/aptitude-devel/2012-January/001823.html

[6] Blog-Posting "aptitude-gtk will likely vanish": http://noone.org/blog/English/Computer/Debian/aptitude-gtk%20will%20likely%20vanish.html

[7] Aptitude-Handbuch: http://media.fossclub.de/aptitude/html/en/index.html

[8] Apt im Ubuntuusers-Wiki: http://wiki.ubuntuusers.de/apt/apt-get

[9] Aptitude im Ubuntuusers-Wiki: http://wiki.ubuntuusers.de/aptitude

[10] Apt-Cudf: http://packages.debian.org/wheezy/apt-cudf

[11] Bug-Report Aptitude: http://bugs.debian.org/137771

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare