6.2. Für die Kommandozeile

6.2.1. dpkg

dpkg ist das Debian-Programm für grundlegende Paketoperationen und bildet in Bezug auf Funktionsumfang und Handhabung das Äquivalent zu rpm auf RedHat-basierten Linuxsystemen. Es kürzt den Namen Debian GNU/Linux package manager ab. Im Anhang unter ``Kommandos zur Paketverwaltung im Vergleich`` (siehe Kapitel 48, Kommandos zur Paketverwaltung im Vergleich) stellen wir die verschiedenen Schalter zu den beiden Kommandos dpkg und rpm gegenüber.

dpkg agiert nur mit Paketen, die schon auf ihrem Linuxsystem lokal vorliegen — entweder als deb-Datei in einem Verzeichnis oder als bereits installiertes Paket. dpkg kann keine Pakete von einem Paketmirror beziehen.

Sie erreichen dpkg ausschließlich über die Kommandozeile und starten es mit diversen Schaltern und Optionen. Die wichtigsten Parameter für den Gebrauch im Alltag sind[17]:

Mit dpkg zeigen Sie die installierten Pakete und deren Zustand an, suchen nach Paketinhalten und konfigurieren im Bedarfsfall ein Paket nach.

Für alle anderen Aktionen sind hingegen die Werkzeuge apt-get (Abschnitt 6.2.2, „APT“), apt-cache, aptitude (Abschnitt 6.3.2, „aptitude) und apt-file oder die Benutzeroberflächen via Ncurses oder GTK besser geeignet (siehe Abschnitt 6.3, „ncurses-basierte Programme“ und Abschnitt 6.4, „GUI zur Paketverwaltung“). Diese fassen viele Einzelschritte von dpkg zusammen und vereinfachen Ihnen die Wartung ihres Systems erheblich.

6.2.2. APT

Überblick

APT ist das Debian-Programm für etwas komplexere Paketoperationen und steht als Abkürzung für Advanced Packaging Tool. Sie finden es im Paket apt [Debian-Paket-apt], welches zur Standardinstallation Ihres Debian-Systems gehört.

APT ist für den Alltagseinsatz konzipiert. Es eignet sich sowohl für Recherchezwecke (Abfrage von Status- und Zustandsinformationen), als auch für die Installation und Aktualisierung einzelner Pakete sowie gesamter Paketstrukturen (Veröffentlichungen).

Im Gegensatz zu aptitude (siehe Abschnitt 6.3.2, „aptitude) ist es deutlich weniger anspruchsvoll. Das betrifft die Anforderungen an die Hardware und insbesondere den benötigten Speicher für die Ausführung. APT hat zudem eine deutlich höhere Ausführungsgeschwindigkeit als aptitude.

APT ist sehr mächtig und kann mit Paketen umgehen, die sich entweder bereits lokal auf Ihrem System befinden, oder noch auf einem Paketmirror vorliegen. Es kombiniert i.d.R. mehrere Einzelaktionen von dpkg. Es greift dabei aber nicht direkt auf dpkg zurück, sondern kapselt dafür die Aufrufe mit Hilfe der Bibliothek libapt-pkg (siehe dazu „APT und Bibliotheken“ unter Kapitel 5, APT und Bibliotheken).

Komponenten und Funktionen

APT umfasst ausschließlich Programme für die Kommandozeile. Dazu zählen apt-cache, apt-cdrom (siehe Abschnitt 3.8, „Physische Installationsmedien mit apt-cdrom einbinden“), apt-config zur Konfiguration von APT (siehe Kapitel 10, APT und aptitude auf die eigenen Bedürfnisse anpassen), apt-get, apt-key (siehe Abschnitt 3.12, „Paketquelle auf Echtheit überprüfen“) und apt-mark (siehe Abschnitt 8.4.6, „Anfragen mit apt-mark). Jedes der genannten Programme verfügt über umfangreiche Unterkommandos, die Sie wiederum mit diversen Optionen und Schaltern kombinieren können. Die gebräuchlichsten Aktionen für den Alltag sind:

Nachfolgend geben wir Ihnen eine Übersicht zu allen Unterkommandos, die die einzelnen APT-Werkzeuge bereithalten. Neben dem jeweiligen Unterkommando finden Sie den Verweis auf den entsprechenden Abschnitt im Buch, in dem wir auf dieses genauer eingehen.

apt-cache

apt-cache bietet die folgenden Unterkommandos:

depends
Paketabhängigkeiten anzeigen (siehe Abschnitt 8.17, „Paketabhängigkeiten anzeigen“)
dotty
einen Abhängigkeitsgraphen im dot-Format für die benannten Pakete erzeugen (siehe das Beispiel in Abschnitt 2.5, „Zusammenspiel von dpkg und APT“)
dump
eine kurze Programminformation von jedem Paket im Paketcache anzeigen
dumpavail
die Liste der verfügbaren Pakete anzeigen
gencaches
den Paketzwischenspeicher von APT erzeugen
madison
verfügbare Versionen eines Pakets anzeigen (siehe Abschnitt 8.18, „Aus welchem Repo kommen die Pakete“ und Abschnitt 8.18.2, „Verfügbare Paketversionen mit apt-cache madison ermitteln“)
pkgnames
die Namen aller Pakete auflisten, die APT kennt (siehe Abschnitt 8.3, „Bekannte Paketnamen auflisten“)
policy
die Quellen und deren Prioritäten auflisten (siehe Abschnitt 8.18, „Aus welchem Repo kommen die Pakete“)
rdepends
umgekehrte Paketabhängigkeiten anzeigen (siehe Abschnitt 8.17, „Paketabhängigkeiten anzeigen“)
search
Paket über den Namen finden (siehe Abschnitt 8.19, „Pakete über den Namen finden“)
show
Paketinformationen ausgeben und Paketstatus erfragen (siehe Abschnitt 8.4, „Paketstatus erfragen“)
showsrc
Informationen zum Sourcepaket anzeigen (siehe Abschnitt 8.34, „Sourcepakete anzeigen“)
showpkg
Informationen über das Paket anzeigen (siehe Abschnitt 8.4, „Paketstatus erfragen“)
stats
Statistik zum Paketcache ausgeben (siehe Abschnitt 7.2, „Paketcache-Status“)
unmet
eine Zusammenfassung aller unerfüllten Abhängigkeiten im Paketcache ausgeben (siehe „Paketstatus erfragen“ in Abschnitt 8.4, „Paketstatus erfragen“)
xvcg
einen Abhängigkeitsgraphen für xvcg für die benannten Pakete erzeugen

apt-get

apt-get gehört mit Sicherheit zur Menge der gebräuchlichsten Kommandos der APT-Familie und verfügt über die folgenden Unterkommandos:

autoclean
Paketcache aufräumen (siehe Abschnitt 7.3, „Paketcache aufräumen“)
autoremove
Paketwaisen löschen (siehe Abschnitt 8.42, „Umgang mit Waisen“)
build-dep
Abhängigkeiten eines Sourcepakets erfüllen (findet Verwendung beim Erstellen von Paketen)
check
Paketcache auf beschädigte Paketabhängigkeiten prüfen (siehe Abschnitt 8.17, „Paketabhängigkeiten anzeigen“)
clean
Paketcache aufräumen (siehe Abschnitt 7.3, „Paketcache aufräumen“)
dist-upgrade
Distribution aktualisieren (siehe Abschnitt 8.45, „Distribution aktualisieren (update und upgrade)“)
download
Paketdatei nur herunterladen (siehe Abschnitt 8.31, „Paketdatei nur herunterladen“)
dselect-upgrade
Aktualisierung der Pakete über dselect
install
Paket installieren (siehe Abschnitt 8.36, „Pakete installieren“)
purge
Paket inklusive Konfigurationsdateien des Pakets entfernen (siehe Abschnitt 8.41, „Pakete deinstallieren“)
remove
Paket deinstallieren (siehe Abschnitt 8.41, „Pakete deinstallieren“)
source
Beziehen der Sourcepakete (siehe Abschnitt 8.33, „Sourcepakete beziehen“)
update
Paketliste aktualisieren (siehe Abschnitt 3.13, „Liste der verfügbaren Pakete aktualisieren“)
upgrade
Pakete auf eine neue Version aktualisieren (siehe Abschnitt 8.39, „Pakete aktualisieren“)

apt-key und apt-mark

Für apt-key sind die Unterkommandos add, adv, del, export, exportall, finger, list, net-update und update zulässig. Diese besprechen wir ausführlich unter „Paketquelle auf Echtheit überprüfen“ in Abschnitt 3.12, „Paketquelle auf Echtheit überprüfen“.

Die Unterkommandos von apt-mark lauten auto, manual, showauto und showmanual. Dazu gehen wir unter „Paketstatus erfragen“ in Abschnitt 8.4, „Paketstatus erfragen“ detailliert ein.

Weiterentwicklung von APT

Dieser Prozess geht stetig voran. Seit mehreren Jahren gibt es Bestrebungen, APT grundlegend zu erneuern bzw. dessen verteilte Funktionalität unter einer einzigen Benutzeroberfläche zusammenzufassen. Unter dem Namen APT2 [apt2] existiert zwar ein Prototyp mit neuer API, jedoch gab es dort nach unserer Recherche seit 2011 keine weitere Entwicklung mehr.

Eine weniger tiefgreifende, aber dennoch erfrischende Modernisierung gibt es seit APT Version 1.0. Von da an enthält das Paket apt das zusätzliche, gleichnamige Kommandozeilenprogramm apt. Dieser Programmname wurde bis dato von einem Java-Programm zur Annotationsverarbeitung (Annotation Processing Tool) belegt [Java-Apt]. Es wird seit Java 7 als veraltet deklariert und ist seit Java 8 nicht mehr Bestandteil von Java.

Somit wurde der Weg für ein neues Programm frei, ohne große Verwirrung zu stiften. apt vereint die gängigsten Unterkommandos von apt-get und apt-cache in einem kürzeren Befehl und mit moderneren Standardeinstellungen wie z.B. einem Fortschrittsbalken und farbiger Ausgabe auf dem Terminal (siehe [Vogt-Apt-1.0]). Neben den bekannten Unterkommandos list, search, show, update, install und upgrade kennt es auch die neuen Aktionen full-upgrade als Ersatz für dist-upgrade und edit-sources zur direkten Veränderung der Datei /etc/apt/sources.list (siehe Abschnitt 8.39, „Pakete aktualisieren“ und Abschnitt 3.3, „/etc/apt/sources.list verstehen“). Darüber hinaus verfügt es ab APT Version 1.1 über die Fähigkeit, lokal vorliegende deb-Pakete zu installieren und dabei die dazugehörigen Paketabhängigkeiten mit zu berücksichtigen.[18]

In LinuxMint gibt es dagegen schon länger einen Befehl apt [LinuxMint-apt], welcher allerdings ein in Python geschriebener Wrapper um apt-get, apt-cache und neuerdings auch apt ist. Dieser befindet sich in /usr/local/bin/ und hat weitere LinuxMint-spezifische Features, wie z.B. das automatische Aufrufen der eigentlichen Befehle via sudo wo notwendig.

Ebenfalls in produktivem Zustand und teilweise intensiver Benutzung befinden sich die Werkzeuge cupt, aptitude und SmartPM. Während sich und cupt nur auf die Kommandozeile beschränken, bieten Ihnen aptitude zusätzlich eine textbasierte bzw. SmartPM eine graphische Benutzeroberfläche. Auf diese Werkzeuge gehen wir nachfolgend genauer ein (siehe, Abschnitt 6.2.5, „Cupt“, Abschnitt 6.3.2, „aptitude und Abschnitt 6.4.3, „Smart Package Management (SmartPM)“).

aptsh war ebenfalls lange Zeit produktiv nutzbar, ist mittlerweile verwaist [aptsh-verwaist-Bug-Report-831493] und wird deswegen nur noch vom Debian QA-Team gepflegt, soweit das nötig ist. Es kann Ihnen daher passieren, dass es in neueren Debian- und Ubuntu-Veröffentlichungen nicht enthalten ist, da es nicht mehr weiterentwickelt wird (siehe auch Abschnitt 6.2.3, „Die aptsh).

6.2.3. Die aptsh

Bei der aptsh handelt es sich um eine Shell für die Paketverwaltung. Die Grundlage dafür bildet die Bibliothek libapt-pkg (siehe „apt und Bibliotheken“ in Kapitel 5, APT und Bibliotheken). Als Inspirationsquelle für die Shellkommandos dienen die Unterkommandos von APT und aptitude, die hiermit in einem Werkzeug zusammengefasst wurden, somit die Handhabung erleichtern und den Tippaufwand deutlich verringern.

Vom Umfang her kombiniert die aptsh eine Vielzahl der Unterkommandos von apt-get, apt-cache und aptitude. Einerseits agiert es als Shell, andererseits kann es die Aufrufe mit den Optionen über die Kommandozeile direkt verarbeiten. Zu den üblichen Kommandos zählen bspw. install, remove, purge, search, update und upgrade. Weiterhin sind auch zur Paketsuche ls und rls verfügbar, ebenso depends und rdepends für die Anzeige der Paketabhängigkeiten (siehe Abbildung 6.1, „aptsh mit der Ausgabe der umgekehrten Paketabhängigkeiten mit rdepends) sowie changelog, show, showpkg, showsrc und whatis für Informationen zu einem Paket.

Abbildung 6.1. aptsh mit der Ausgabe der umgekehrten Paketabhängigkeiten mit rdepends

werkzeuge/werkzeuge-zur-paketverwaltung-ueberblick/fuer-die-kommandozeile/aptsh-rdepends.png

2012 probierten Thomas Winde und Frank Hofmann die aptsh aus und waren von dem Werkzeug in kürzester Zeit hellauf begeistert. Dazu entstand zunächst ein Beitrag im Magazin Linux User [Hofmann-Winde-Aptsh-LinuxUser], der die kleine Entdeckungsreise mit dem Programm beschreibt. Erst später erschienen andere Möglichkeiten wie wajig [Debian-Paket-wajig] und cupt [Debian-Paket-cupt] auf unserem Radar, welche wir dann für das vorliegende Buch genauer inspizierten (siehe nachfolgende Abschnitte).

Hintergrund für die Recherche nach Alternativen zur aptsh war der Fakt, dass das Projekt seit Debian 6 Squeeze leider verwaist ist [aptsh-verwaist-Bug-Report-831493]. Alle später veröffentlichten Pakete sind lediglich Non-Maintainer-Uploads (NMU) oder QA-Uploads und damit ohne kontinuierliche Betreuung.

Zudem kommt hinzu, dass das Projekt seit dem Auf-und-Ab von berliOS [berliOS] unter wechselnden Adressen auffindbar war. Die Projektseite [aptsh-Projekt] finden Sie mittlerweile nur noch in der "Wayback-Machine" des Web-Archives. Da das Projekt BackupTheBerlios u.a. die aptsh-Subversion-Versionsgeschichte auf GitHub importiert hat [aptsh-BackupTheBerlios-Git-Repository], erleichert eine zukünftige Weiterentwicklung.

6.2.4. wajig

Das in der Programmiersprache Python geschriebene Programm wajig [Debian-Paket-wajig] ist vorrangig ein Wrapper um dpkg (Abschnitt 6.2.1, „dpkg) und APT (Abschnitt 6.2.2, „APT“). Es zählt zur gleichen Kategorie wie die aptsh (siehe Abschnitt 6.2.3, „Die aptsh), beinhaltet aber auch Elemente von cupt (Abschnitt 6.2.5, „Cupt“) und aptitude (Abschnitt 6.3.2, „aptitude) auf der Kommandozeile [19]

wajig zielt darauf ab, alle im Alltag erforderlichen Aktionen zur Paketverwaltung in einem einzigen Werkzeug für die Kommandozeile zusammenzufassen. Daher haben sich die wajig-Entwickler das Ziel gesetzt, die APT-Bibliotheken (siehe Kapitel 5, APT und Bibliotheken) vollständig auszureizen und nach Möglichkeit auch alle Optionen, die dpkg und APT bieten, im Programm zu integrieren. Gleichzeitig stehen auch Funktionen bereit, die von den separaten Werkzeugen wie bspw. apt-cdrom (Abschnitt 3.8, „Physische Installationsmedien mit apt-cdrom einbinden“) oder alien (siehe Abschnitt 22.2, „Fremdformate mit alien hinzufügen“) entlehnt wurden.

Sie bedienen wajig ausschließlich über die Tastatur. Möglich sind zwei Modi — mit dem gewünschten Unterkommando beim Aufruf, oder ohne. Bei ersterem erfolgt die Ausgabe direkt im Terminal, bei letzterem öffnet sich dann zunächst die wajig-Shell und wartet auf Ihre Eingabe. In dieser können Sie dann alle Unterkommandos zur Paketverwaltung benutzen. Dazu zählen bspw. install zur Paketinstallation, detail zur Darstellung der Paketinformationen, listfiles zu Auflistung des Paketinhalts und remove zum Entfernen eines Pakets. Mittels find-file erstöbern Sie eine gewünschte Datei in den bereits installierten Paketen, wohingegen Ihnen list-orphans die Paketwaisen (siehe Abschnitt 8.42, „Umgang mit Waisen“) anzeigt.

Als Besonderheit ist einerseits die Anbindung an apt-get.org [apt-get.org] zu nennen, um darüber den Paketmirror nach Bedarf auszuwählen. Ebenso ist die Umwandlung und Installation von .rpm-Paketen mittels rpm2deb und rpminstall sowie die ausführliche, integrierte Hilfe hervorzuheben.

Suche nach der Datei sources.list mit Hilfe von wajig

$ wajig find-file sources.list
apt: /usr/share/man/es/man5/sources.list.5.gz
apt: /usr/share/man/ja/man5/sources.list.5.gz
apt: /usr/share/man/pt/man5/sources.list.5.gz
debtags: /etc/debtags/sources.list
apt: /usr/share/man/fr/man5/sources.list.5.gz
apt: /usr/share/doc/apt/examples/sources.list
debtags: /etc/debtags/sources.list.d
apt: /usr/share/man/de/man5/sources.list.5.gz
debtags: /etc/debtags/sources.list.d/source-example
apt: /usr/share/man/pl/man5/sources.list.5.gz
apt: /etc/apt/sources.list.d
apt: /usr/share/man/man5/sources.list.5.gz
$

Abbildung 6.2. wajig mit der Ausgabe des Kommandos listfiles

werkzeuge/werkzeuge-zur-paketverwaltung-ueberblick/fuer-die-kommandozeile/wajig-listfiles.png

Weitere Informationen zum Programm finden Sie auf der Webseite des Projekts [wajig-Webseite]. Um die Feinheiten der Kommandos zwischen dpkg, APT und wajig besser vergleichen zu können, hilft ein Blick in das Wiki von xtronics [xtronics-Wiki].

6.2.5. Cupt

Cupt beschreibt sich selbst als High-level Package Manager und integriert Kommandos unter einem Dach, die Sie von den Werkzeugen dpkg und APT her kennen. Dafür nutzt es auf der Serverseite die gleiche Infrastruktur wie APT. Die Clientseite wurde hingegen komplett neu entwickelt. Sie rufen das in der Programmiersprache C++ entwickelte Werkzeug über das gleichnamige Kommando cupt auf.

Wie bereits oben angerissen, vereinigt Cupt zwar Kommandos aus dpkg und APT, jedoch bislang noch nicht alle davon. Offen ist bspw. der Support für multiarch (Abschnitt 1.2.3, „Multiarch: Mehrere Architekturen gleichzeitig auf einem System“). Gleichzeitig bietet es auch weitere Features, die APT noch fehlen (siehe [Debian-Wiki-cupt]), bspw. Debdelta [Debdelta] und die Synchronisation anhand der Version des Sourcepakets. Ebenso kennt es ein Kommando satisfy, um auf der Kommandozeile angegebene Paketbedingungen zu erfüllen, z.B. cupt satisfy ``kmail (>= 4:4.2), wget (>= 1.10.0)''.

Cupt kann problemlos parallel zu APT verwendet werden, ist jedoch gemäß seinem Autor noch nicht sehr weit verbreitet und auch entsprechend wenig durch Benutzer in der Praxis getestet [Cupt-Tutorial]. Wir gehen im Buch nicht weiter darauf ein.



[17] Weitere Optionen zu dpkg entnehmen Sie bitte der Manpage zum Programm

[18] Diese Eigenschaft stammt vom Programm gdebi (siehe Abschnitt 6.4.6, „GDebi“), welches ebenfalls vom APT-Entwickler Michael Vogt gepflegt wird.

[19] Bis einschließlich Debian 6 Squeeze bestand zudem eine graphische Variante namens gjig, die mittlerweile obsolet und in keiner unterstützten Debian- oder Ubuntu-Veröffentlichung mehr verfügbar ist.