Advanced Packaging Tool

Aus Foxwiki

Advanced Packaging Tool

APT ist ein Paketmanagement-System, das im Bereich des Betriebssystems Debian GNU/Linux entstanden ist.

Mittels APT ist es sehr einfach, Programmpakete zu suchen, zu installieren oder auch das ganze System auf den neuesten Stand zu bringen.

Advanced Packaging Tool
Betriebssystem GNU/Linux
Kategorie Paketverwaltung
Lizenz GPL (Freie Software)
packages.qa.debian.org/a/apt.html

Das Advanced Packaging Tool (APT) ist ein Paketverwaltungssystem, das im Bereich des Betriebssystems Debian GNU/Linux entstanden ist und dpkg zur eigentlichen Paketverwaltung benutzt. Ziel ist es, eine einfache Möglichkeit zur Suche, Installation und Aktualisierung von Programmpaketen zur Verfügung zu stellen.

APT besteht aus einer Programmbibliothek und mehreren diese Bibliothek nutzenden Kommandozeilen-Programmen, von denen apt-get und apt-cache zentral sind. Seit Debian 3.1 wird die Benutzung von aptitude als konsolenbasierendes Paketverwaltungssystem empfohlen.

APT steht auch in OpenSolaris zur Verfügung (es wurde in die Distribution Nexenta OS aufgenommen) und wurde auch auf Mac OS X portiert, wo es im Rahmen des Fink-Projektes zur Installation von Debian-Softwarepaketen genutzt wird.

Basierend auf der Idee von APT wurde Win-Get erschaffen, welches eine ähnliche Paketverwaltung für MS Windows zur Verfügung stellt.

Interna

In der Datei /etc/apt/sources.list stehen die sogenannten Repositories, also Quellen für Pakete. Dies können entweder CDs oder DVDs, Verzeichnisse auf der Festplatte oder, öfter, Verzeichnisse auf HTTP- oder FTP-Servern sein. Befindet sich das gesuchte Paket auf einem Server (oder einem lokalen Datenträger), so wird dieses automatisch heruntergeladen und installiert.

Die Pakete liegen im Debian-Paketformat (.deb) vor, in dem auch die jeweiligen Abhängigkeiten der Programmpakete untereinander abgelegt sind. So werden automatisch für ein Programm auch eventuell erforderliche Programmbibliotheken mit heruntergeladen und installiert.

APT setzt auf dpkg auf. APT beschäftigt sich in erster Linie mit der Beschaffung von Paketen, dem Vergleich von verfügbaren Versionen der Pakete und der Verwaltung von Paket-Archiven.

Frontends

Außer der oben erwähnten Kommandozeilenschnittstelle gibt es weitere Frontends für die Paketverwaltung, die APT verwenden. Aptitude bietet eine zeichenorientierte Benutzerschnittstelle. Synaptic ist ein GUI-Frontend für die Desktop-Umgebung.

Unter KDE stehen außerdem die Programme Adept oder KPackageKit zur Verfügung. Letzteres unterstützt neben APT zusätzlich weitere Systeme wie RPM. Mit der auf der Abstraktionsschicht QApt aufbauenden Muon Package Management Suite sind daneben auch weitere GUI-Frontends in der Entwicklung.

Smart Package Manager kann ebenfalls auf Repositories zugreifen, die für APT erstellt wurden. Er nutzt dabei aber nicht APT, sondern eigene Routinen.

Mit Fink und Cydia stehen Frontends für Mac OS X und dessen Derivate zur Verfügung.

APT-RPM

Obwohl ursprünglich für Debian-Programmpakete geschrieben, wurde APT später auch auf RPM-Systeme portiert.

Gustavo Niemeyer führte die Portierung für die Linux-Distribution Conectiva durch und pflegte diese geraume Zeit als Maintainer. Inzwischen arbeitet er aber hauptsächlich an seinem neuen Projekt Smart Package Manager, und APT-RPM wird von anderen Entwicklern gepflegt und weiterentwickelt.

Apt-cacher und apt-proxy

Wer mehrere Rechner mit einer APT-basierten Paketverwaltung im Netz hat, kann sein Netz und die Server, die die Pakete zur Verfügung stellen, erheblich entlasten, indem er eines dieser Programme einsetzt.

Im Gegensatz zu weniger spezifischen Proxyservern wie etwa Squid, die nur die in den Übertragungsprotokollen enthaltenen Informationen verwenden können, kennen und verwerten diese Proxies die Paket-Struktur und sichern die Aktualität ihrer gespeicherten Daten entsprechend. Apt-cacher kann so eingestellt werden, dass er sich in regelmäßigen Abständen automatisch aktualisiert.

apt-get

apt-get

apt-Kommandos

APT/Kommandos

Paketquellen

APT/Paketquellen

Apt-Pinning

Apt-Pinning nennt man eine Technik, bei der in der sources.list verschiedene Paketquellen bevorzugt werden. So kann man bei einer LTS-Version bleiben, aber gezielt Pakete von einer neueren Version oder einer inoffiziellen Quelle ziehen.

Es lässt sich auch ein Paket in einer bestimmten Version festhalten oder dessen Installieren oder Deinstallieren verhindern. Dies wird hier als Beispiel dargestellt.

Das Pinning geschieht in der Datei /etc/apt/preferences, die in einem Editor mit Root-Rechten angelegt bzw. bearbeitet werden muss. Im weiteren Verlauf folgen Beispiele. Ab Ubuntu 10.04 müssen im Ordner /etc/apt/preferences.d/ Dateien angelegt werden.

Diese können beliebige Namen haben und beliebig viele Regeln enthalten. Sie muss die Dateiendung .pref oder keine Endung haben, precise.pin würde z.B. ignoriert werden.

Hinweis:

Das Folgende ist lediglich ein Beispiel, wie Pinning verwendet werden kann. Die konkreten Gewichtungen sind auf keinen Fall als Empfehlung zu verstehen.

Die Beispieldatei /etc/apt/sources.list soll hier als Beispiel wie folgt aussehen:

## Offizielle Quellen

deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse ## Inoffizielle Quelle deb http://peters-ubuntupakete.example.org/ubuntu/ precise main restricted universe multiverse

Pinning per release

Package: *

Pin: release v=10.04, l=Ubuntu Pin-Priority: 1000

Von nun an haben alle Pakete aus Quellen mit der Version 10.04 und dem Distributionsnamen (Label) Ubuntu den Vorzug, selbst wenn es in anderen Quellen neuere Pakete gibt.

Ein Pin: release a=lucid hätte nicht gereicht, da es ja auch Paketquellen von Ubuntu 10.04 gibt, die lucid-security, lucid-updates etc. heißen.

Erst wenn es die Pakete dort nicht gibt, werden diese (soweit verfügbar) aus anderen Quellen installiert. Die verschiedenen Parameter für "Pin: release" werden im Abschnitt Parameter für Pinning per release erläutert.

Pinning per origin

Package: *

Pin: origin peters-ubuntupakete.example.org Pin-Priority: 300

Dieser Fall setzt die Priorität einer bestimmten Internetadresse ("origin", Ursprung). Die genaue Bedeutung der "Pin-Priority" werden im Abschnitt Werte für Pin-Priority erläutert.

Pinning per version

Package: hello

Pin: version 2.1.1* Pin-Priority: 1000

Dieses Beispiel verhindert das Installieren einer neueren Version als 2.1.1 des Paketes hello, aber auch die unbeabsichtigte „automatische“ Deinstallation aufgrund von Konflikten.

Hinweis

In der /etc/apt/preferences definiert eine Leerzeile einen neuen Abschnitt für einen weiteren Eintrag. Leerzeilen zwischen Package, Pin und Pin-Priority sind nicht erlaubt!

Gezieltes Umgehen mit apt-get

Im Terminal kann man mit apt-get die Prioritäten aber auch gezielt umgehen. Folgender Aufruf z.B. zieht mplayer aus dem precise-Paketbereich (= Ubuntu 12.04). Dabei werden Abhängigkeiten nach der Priorität erfüllt.

apt-get -t precise install mplayer-custom

Pinning per release

Folgende Parameter können für das Pinnen mittels release verwendet werden:* a (archive) - Der Name eines Repositories, z.B. precise oder precise-backports

  • c (components) - Der Bereich eines Repositories, z.B. universe
  • v (version) - Version des Repositories bzw. der Veröffentlichung, z.B. 12.04 für precise
  • o (origin) - Die Erzeuger des Repositories z.B. Ubuntu oder LP-PPA-eclipse-team. Nicht zu Verwechseln mit origin als Quelle (Domainname).
  • l (label) - Name der Distribution, z.B. Ubuntu

Die genauen Werte können mittels apt-cache policy nachgeschlagen werden. Hier ein Ausschnitt aus der Ausgabe dieses Kommandos.

25 http://packages.medibuntu.org precise/free Packages
release v=12.04,o=Medibuntu,a=precise,l=Medibuntu,c=free
origin packages.medibuntu.org
500 http://de.archive.ubuntu.com precise/main Packages
release v=12.04,o=Ubuntu,a=precise,l=Ubuntu,c=main
origin de.archive.ubuntu.com
50 http://ppa.launchpad.net precise/main Packages
release v=12.04,o=LP-PPA-eclipse-team,a=precise,l=Ubuntu,c=main
origin ppa.launchpad.net

Die Werte aus den release-Zeilen können ganz oder teilweise zum Pinning übernommen werden.

Pin-Priority

Die Werte für "Pin-Priority" in der Datei /etc/apt/preferences müssen positive oder negative ganze Zahlen sein. Sie werden wie folgt interpretiert:* größer 999: Version wird in jedem Fall installiert, auch wenn das einen Downgrade des Paketes nach sich zieht

  • von 990 bis 999: Version wird installiert, auch wenn sie nicht zum Release gehört, es sei denn ein aktuelleres Pakete ist bereits installiert
  • von 500 bis 989 : Version wird installiert, es sei denn, es gibt eine Version, die zum Release gehört oder eine aktuellere Version ist bereits installiert
  • von 100 bis 499: Version wird installiert, es sei denn, es gibt eine aktuellere die nicht zum Release gehört oder die bereits installierte Version ist aktueller
  • von 1 bis 99: Version wird nur dann installiert, wenn es keine bereits installierte gibt
  • negativer Wert: Version wird nicht installiert

Das Paket mit der höchsten Punktzahl wird bevorzugt.

Beispiele

proposed-Quellen downgraden

Mit Pinnings gibt es eine vergleichsweise einfache Möglichkeit ungewollte Upgrades auf Pakete aus den proposed-Quellen rückgängig zu machen, sprich auf die herkömmlichen und idR. gut getesteten Pakete bzgl. Installationsroutine und -Integration downzugraden.

Zuerst deaktiviert man die proposed-Quellen und aktualisiert die Paketindexdateien. Dann fügt man folgenden Eintrag der /etc/apt/preferences hinzu (ggfs. Datei neu anlegen):

Package: *

Pin: release a=ARCHIV* Pin-Priority: 1001

Dabei ist ARCHIV durch den Codenamen der jeweiligen Ubuntuversion zu ersetzen. Der Stern * sollte nach dem Codenamen gesetzt werden, damit auch Pakete aus den -updates und -security-Quellen berücksichtigt werden. Codenamen sind: hardy, lucid, oneiric, precise, quantal, ...

Anschließend sollte das Upgrade bzw. Downgrade der Pakete durchgeführt werden:

sudo apt-get dist-upgrade

Nachdem die Paketversionen korrigiert wurden, sollte der Pinning-Eintrag wieder entfernt werden, damit in Zukunft ein Upgrade auf ein neues Ubunturelease ohne Probleme möglich ist.

Hinweis

Bis einschließlich Ubuntu 10.04 kann kein Globbing beim Archivnamen verwendet werden (Schreibweise mit Stern *). Stattdessen müssen alle Archive ausgeschrieben werden:

Package: *

Pin: release a=ARCHIV Pin-Priority: 1001

Package: * Pin: release a=ARCHIV-updates Pin-Priority: 1001

Package: * Pin: release a=ARCHIV-security Pin-Priority: 1001

Package: * Pin: release a=ARCHIV-backports Pin-Priority: 1001

Einzelne Pakete aus früherer / späterer Ubuntu-Version installieren

Mitunter möchte man eine aktuellere Version eines Pakets aus der nächsten Ubuntu-Version nutzen, ist aber nicht bereit, ein komplettes Upgrade zu machen.

Oder aber man hat ein Upgrade hinter sich, die neue Version eines Programms macht jedoch Probleme und man würde lieber für dieses eine Paket zur früheren Version zurückkehren.

Die Methode mit Apt-Pinning entspricht im Prinzip dem manuellen Herunterladen und Installieren der entsprechenden Pakete von http://packages.ubuntu.com, ist aber deutlich bequemer, besonders wenn verschiedene Abhängigkeiten ebenfalls up- bzw. downgegraded werden sollen.

Achtung!

Die Verwendung von Paketen aus anderen Ubuntu-Versionen kann im Einzelfall eine pragmatisch Lösung sein, in der Regel ist aber davon abzuraten.

Besonders bei einer hohen Zahl an Abhängigkeiten sind Probleme vorprogrammiert.

Konkretes Beispiel: Das Paket subversion (siehe Svn) liegt für Ubuntu 12.04 ("precise") in der Version 1.6.17 und für Ubuntu 12.10 ("quantal") in der Version 1.7.5 vor.

Nach einem Upgrade auf Ubuntu 12.10 möchte man zur Version 1.6 des Pakets zurückkehren. Dazu fügt man den Paketquellen folgende Zeile hinzu:

deb http://archive.ubuntu.com/ubuntu precise main

Nun wird in der Pinningsdatei /etc/apt/preferences folgender Inhalt ergänzt (bzw. die Datei neu angelegt):

Package: subversion

Pin: version 1.6* Pin-Priority: 1001

Package: * Pin: release v=12.04, l=Ubuntu Pin-Priority: -1

Nun kann nach Aktualisieren der Paketlisten mit "apt-get update" subversion aus den Ubuntu 12.04 Quellen installiert werden .

Wurde es bereits installiert, wird es mit "apt-get dist-upgrade" automatisch gedowngradet.

Unter Umständen müssen je nach Komplexität der Abhängigkeiten noch weitere Pinning-Einträge hinzugefügt werden.

apt-cache

apt-cache führt keine Änderungen am System aus. Es dient allein der Anzeige und Manipulation der Daten im Paketcache bzw. der Paket-Metadaten.

Der Paketcache ist die interne Datenbank, in der Informationen zu allen verfügbaren Paketen gespeichert werden.

Kommandos

Ein apt-cache Befehl besteht aus den Optionen, dem Kommando und eventuell der Angabe eines Paketnamens. Generell kann man apt-cache als normaler Benutzer ausführen , vereinzelte Optionen können Root-Rechte erfordern.

apt-cache [Option(en)] Kommando [Paket]

Kommandos zu apt-cache
add Fügt eine Datei mit Paketindizes dem Paketcache hinzu.
gencaches Baut den Paketcache auf.
showpkg Zeigt die Meta-Informationen an.
stats Zeigt Statistiken zum Paketcache an.
showsrc Zeigt Informationen zum Quelltext eines Pakets an.
dump Zeigt eine Liste aller laut Paketcache verfügbaren Pakete an.
dumpavail Zeigt eine ausführliche Liste aller laut Paketcache verfügbaren Pakete an.
unmet Zeigt eine Liste aller nicht erfüllten Abhängigkeiten an.
show Zeigt die Paketinformationen zu einem oder mehreren Paketen an.
search Durchsucht die Paketinformationen nach einem oder mehreren Suchbegriffen.
depends Zeigt eine Liste der Abhängigkeiten der Pakete.
rdepends Zeigt eine Liste der Pakete, die vom eingegebenen Paket abhängen.
pkgnames Zeigt eine Liste von Paketnamen, die mit dem Suchbegriff anfangen.
dotty Erstellt einen Graphen der Abhängigkeiten des Pakets, der mit dotty verarbeitet werden kann.
xvcg Erstellt einen Graphen der Abhängigkeiten des Pakets, der mit xvcg verarbeitet werden kann.
policy Zeigt die Prioritäten der Quellen oder eines Pakets an.
madison Zeigt die verfügbaren Versionen eines Pakets in den verschiedenen Quellen an.

apt-cache add

add fügt einen in einer Datei gespeicherten Paketindex dem Paketcache hinzu. add fehlt in der deutschen Übersetzung der Manpage.

apt-cache add DATEI

apt-cache gencaches

gencache baut den Paketcache sowie die Liste der installierten Programme neu auf und prüft auf fehlende Abhängigkeiten.

Diese Aktion wird nach dem Download der Quellen durch apt-get update angestoßen. Der selbe Vorgang wird von apt-get check angestoßen. Erfordert Rootrechte.

sudo apt-cache gencaches

apt-cache showpkg

showpkg zeigt detaillierte Informationen zu einem Paket an. Sie bestehen aus den verschiedenen verfügbaren Versionen in allen Quellen sowie den eigentlichen Paketinformationen inklusive der Abhängigkeiten.

showpkg benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache showpkg PAKET1 [PAKET2]

apt-cache stats

stats zeigt eine ausführliche Übersicht der Statistiken zum Paketcache an, unter anderem die Anzahl der gelisteten Pakete und die Größe im Dateisystem. Es sind keine weiteren Optionen erforderlich.

apt-cache stats

apt-cache showsrc

showsrc zeigt detaillierte Informationen zum verfügbaren Quelltext eines Pakets an.

Diese bestehen aus den Prüfsummen der Quelltextarchive und den Abhängigkeiten, die zum Kompilieren des Quelltexts benötigt werden. showsrc benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache showsrc PAKET1 [PAKET2]

apt-cache dump

dump zeigt eine Liste aller verfügbaren Pakete im Paketcache an, inklusive der Abhängigkeiten und weiteren Informationen zum Paketcache. Diese Informationen werden nur im Fehlerfall benötigt.

apt-cache dump

apt-cache dumpavail

dumpavail zeigt eine Liste aller verfügbaren Pakete im Paketcache, der Programmversionen und der zugehörigen Paketbeschreibungen an.

apt-cache dumpavail

apt-cache unmet

unmet zeigt eine Liste der nicht erfüllten Abhängigkeiten an. Diese Liste beinhaltet auch die nicht installierten Vorschläge der Pakete. unmet kann mit und ohne Angabe von Paketnamen aufgerufen werden.

Wird unmet ohne Paketnamen aufgerufen, werden die Informationen für alle installierten Paket(e) ausgegeben.

Gibt man bestimmte Paketnamen an, müssen diese durch Leerzeichen getrennt angegeben werden.

apt-cache unmet apt-cache unmet PAKET1 [PAKET2]

apt-cache show

show zeigt detaillierte Informationen zu einem oder mehreren Paketen an.

Diese Informationen beinhalten eine Liste der Abhängigkeiten, eine Beschreibung und die angebotene Version. show benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden.

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache show PAKET1 [PAKET2]

apt-cache search

search durchsucht den Paketcache in den Namen und Beschreibungsfeldern nach dem Suchbegriff und gibt die entsprechenden Paketnamen aus.

Der Suchbegriff kann auch ein Regulärer Ausdruck sein. Werden mehrere Suchbegriffe angegeben, werden ausschließlich Pakete angeben, in deren Beschreibung alle Begriffe gefunden wurden.

apt-cache search SUCHBEGRIFF

apt-cache depends

depends gibt eine Liste der Pakete an, von denen das genannte Paket abhängt. depends benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache depends PAKET1 [PAKET2]

apt-cache rdepends

rdepends gibt eine Liste der Pakete an, die vom genannten Paket abhängen, die Reverse Depends (Rückwärtsabhängigkeiten).

rdepends benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden.

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache rdepends PAKET1 [PAKET2]

apt-cache pkgnames

pkgnames gibt zu einem Suchbegriff eine Liste von Paketen aus, deren Namen mit dem Suchbegriff anfangen. Der Suchbegriff darf kein Regulärer Ausdruck sein.

Wird pkgnames ohne Suchbegriff aufgerufen, gibt es alle verfügbaren Pakete inklusive der Metapakete aus.

apt-cache pkgnames SUCHBEGRIFF

apt-cache dotty

dotty erstellt aus den Abhängigkeiten der genannten Pakete eine Vorlage, die mit dot zu einem Graph weiterverarbeitet werden kann.

Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. dotty benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden.

apt-cache dotty PAKET1 [PAKET2]

Auswertung von dotty

Zur Umwandlung der Ausgabe wird dot aus dem Paket Graphviz - Graph Visualization Software genutzt:

sudo apt-get install graphviz

Dotty kann keine größeren Zusammenhänge darstellen. Um die Berechnung in Grenzen zu halten, hilft folgende APT-Einstellung:

APT::Cache::GivenOnly "true";

in der APT-Konfiguration.

Die Option kann aber auch direkt beim Aufruf übergeben werden.

apt-cache xvcg

xvcg erstellt aus den Abhängigkeiten der genannten Pakete eine Vorlage, die mit xvcg zu einem Graph weiterverarbeitet werden kann.

Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. xvcg benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden. Die Weiterverarbeitung benötigt die VCG Tools.

apt-cache xvcg PAKET1 [PAKET2]

apt-cache policy

policy zeigt ohne Angabe eines Paketnamens eine Übersicht der Prioritäten der einzelnen Paketquellen an, mit Angabe von Paketnamen eine Übersicht der verfügbaren Versionen und der Prioritäten ihrer Quellen.

Mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache policy

oder

apt-cache policy PAKET1 [PAKET2]

apt-cache madison

madison zeigt eine tabellarische Übersicht, der in den Paketquellen verfügbaren Versionen eines Programms, an. madison benötigt die Angabe mindestens eines Paketnamens, mehrere Paketnamen müssen durch Leerzeichen voneinander getrennt angegeben werden.

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache madison PAKET1 [PAKET2]

Optionen

Kommandozeilenoptionen zu apt-cache
Lange Option Kürzel Beschreibung
--pkg-cache -p Angabe der Datei, in der der Paketcache gespeichert wird.
--src-cache -s Angabe der Datei, in der der Paketcache beim Herunterladen zwischengespeichert wird.
--quiet -q Ausgabe erzeugen, die weiterverarbeitet werden kann, z.B. Unterdrückung des Fortschrittsbalkens. -qq unterdrückt mehr Meldungen als -q.
--important -i Nur Abhängigkeiten und deren Abhängigkeiten in unmet und depends anzeigen.
--no-pre-depends --no-depends --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances Beeinflussen die Ausgabe von depends und rdepends
--full -f Ausgabe der kompletten Paketeinträge bei der Suche.
--all-versions -a Ausgabe aller verfügbaren Versionen (Kandidaten) bei der Suche nach einem Paket.
--no-all-versions Ausgabe der neuesten verfügbaren Version (Kandidat) bei der Suche nach einem Paket.
--generate -g Cache wird bei jedem Aufruf regeneriert. (Standard)
--no-generate Cache wird ohne automatische Regeneration benutzt.
--names-only -n Beschränkt die Suche auf die Paketnamen. Standard: Suche in Paketnamen und -beschreibung.
--all-names Zwingt pkgnames, auch virtuelle Pakete und fehlende Abhängigkeiten auszugeben.
--recurse Ermöglicht depends und rdepends eine rekursive Ausgabe, so dass alle Abhängigkeiten in einer Ausgabe erscheinen.
--installed Beschränkt die Ausgabe von depends und rdepends auf installierte Pakete.
--help -h Gibt einen kurzen Hilfetext aus und beendet das Programm.
--version -v Gibt die Version aus und beendet das Programm.
--config-file -c Ermöglicht die Angabe einer alternativen Konfigurationsdatei, die von der Standardkonfiguration abweicht.
--option -o Ermöglicht die Angabe einzelner abweichender Optionen bei Benutzung der Standardkonfiguration.

Beispiele

Bezug zu einem Paket

Steht ein Paket im Bezug zu einem anderen Paket, wird dies im Beschreibungstext erwähnt.

apt-cache -f search PROGRAMM

sucht nach Programm in allen Paketnamen und -beschreibungen und gibt anschließend die kompletten Informationen aus.

Erweiterungspakete

Durch konsequente Namensgebung Programm-Erweiterung können verfügbare Erweiterungen mit pkgnames gefunden werden:

apt-cache pkgnames PROGRAMM

gibt alle Paketnamen aus, die mit Programm anfangen, somit auch die verfügbaren Erweiterungen.

Ausgabe der Abhängigkeiten eines Pakets

apt-cache depends PAKET

Ausgabe der Paketstruktur mit dotty

Im Beispiel wird das Paket xterm untersucht und der Graph als PNG ausgegeben.

apt-cache -o APT::Cache::GivenOnly=true dotty xterm | dot -Tpng > beispiel.png

Die Ausgabe von apt-cache wird mit einer Umleitung an das Graphviz-Werkzeug dot übergeben, um eine Grafik (hier im PNG-Format, andere Formate sind möglich, siehe Manpage von dot) zu erzeugen.

Oder auch mit rekursiven Abhängigkeiten:

export PACKAGE=xterm && apt-cache -o APT::Cache::GivenOnly=true dotty $PACKAGE `apt-cache depends $PACKAGE --installed| grep "Hängt ab von:" | cut -d " " -f6` | dot -Tpng > beispiel.png

apt-file

apt-file ist ein Kommandozeilenwerkzeug, mit dem man alle Pakete nach einer Datei durchsuchen und die Dateien in einem Paket auflisten kann.

Grundlage sind die offiziellen Paketlisten, die dazu lokal gespeichert werden.

Installation

Das Programm ist nicht in der Standardinstallation enthalten und kann mit dem Paket

sudo apt-get install apt-file

zum System hinzugefügt werden.

Bedienung

Nach der Installation müssen zunächst die Paketinhalte neu synchronisiert werden. Dies geschieht mit

apt-file update

Sollen die Inhalte für alle Benutzer geladen werden, muss der Befehl als Administrator ausgeführt werden.

apt-file wird im Terminal ausgeführt . Die Grundsyntax sieht folgendermaßen aus:

apt-file OPTION BEFEHL

Kommandos

BEFEHL Bedeutung
update Synchronisiert die Paketinhalte mit den Quellen. Empfohlen nach Änderung an den Paketquellen.
search SUCHMUSTER Sucht in allen bekannten Paketen nach SUCHMUSTER. Sucht nur nach Dateinamen, nicht nach Verzeichnissen.
list SUCHMUSTER Listet die Dateien aller Pakete auf, die auf SUCHMUSTER passen.
purge Löscht den Cache

Optionen

Option Bedeutung
-s DATEI Andere sources.list-Datei nutzen
-c CACHE-VERZEICHNIS Anderes Verzeichnis als Cache nutzen
-a ARCHITEKTUR Spezifische Architektur benutzen
-l Nur Paketnamen anzeigen
-x SUCHMUSTER als regulären Ausdruck interpretieren
-v Mehr Informationen anzeigen
-y Nur simulieren
-h Hilfe anzeigen

Beispiele

  • Auflistung aller Dateien, die zu elinks gehören:
    apt-file list elinks
  • Suche nach der Datei /usr/include/c++/4.6/vector:
    apt-file search /usr/include/c++/4.6/vector

apt-key

apt-key kennt verschiedene Kommandos , die exakt die Aktion angeben, welche mit dem Schlüsselbund ausgeführt wird.

Kommandos zu apt-key
add Hinzufügen eines neuen Schlüssels.
del Löschen eines Schlüssels.
export Export eines Schlüssels.
exportall Export aller bekannten Schlüssel.
list Ausgabe der bekannten Schlüssel.
finger Ausgabe der Fingerabdrücke der bekannten Schlüssel.
adv Angabe von erweiterten gpg-Optionen.
update Neuladen des Hauptschlüssels der aktuellen Version und Löschen abgelaufener Schlüssel.

Kommandos

apt-key add

add fügt dem Schlüsselbund einen neuen Schlüssel hinzu.

Dieser kann entweder in einer Datei gespeichert sein oder aus dem stdin - einer Weiterleitung der Ausgabe eines vorherigen Befehls - kommen, was dann durch ein - angezeigt wird.

sudo apt-key add DATEI

oder

sudo apt-key add -

apt-key del

del löscht einen vorhanden Schlüssel aus dem Schlüsselbund. Der zu löschende Schlüssel muss mit seiner ID angegeben werden.

sudo apt-key del ID

apt-key export

export gibt einen Schlüssel, der durch seine ID bezeichnet wird, auf stdout zur Weiterverabeitung aus.

apt-key export ID

apt-key exportall

exportall gibt alle derzeit bekannten Schlüssel auf stdout aus.

apt-key exportall

apt-key list

list zeigt alle im Schlüsselbund vorhandenen Schlüssel mit Namen und ID an. Optional kann ein spezieller Schlüssel mit der ID ID angezeigt werden.

apt-key list ID

apt-key finger

finger zeigt den Fingerabdruck aller derzeit bekannten Schlüssel auf stdout an.

apt-key finger

apt-key adv

adv erlaubt die Angabe spezieller Parameter für das im Hintergrund arbeitende GnuPG (gpg). Alle aus gpg bekannten Parameter können angegeben werden. adv benötigt die Angabe der zu verarbeitenden SchlüsselID

sudo apt-key adv gpg-option ID

apt-key update

update lädt die Signaturschlüssel für die zum jeweiligen Release gehörenden Hauptrepositories neu und löscht abgelaufene Schlüssel aus dem Schlüsselbund.

sudo apt-key update

Optionen

apt-key kennt nur einen Konsolenschalter: --keyring, mit dem ein alternativer Schlüsselbund zur Bearbeitung übergeben werden kann.

Beispiele

add mit wget

Schlüssel zu Fremdquellen werden manchmal mit der Fremdquelle zusammen auf dem Webserver des Projekts veröffentlicht.

Dann kann man den Schlüssel mit wget herunterladen und sofort an die Schlüsselverwaltung übergeben.

Im Beispiel wird der Schlüssel für die Paketquelle des Browsers Opera heruntergeladen:

wget -O - http://deb.opera.com/archive.key | sudo apt-key add -

adv im Einsatz

Nutzt man adv, kann man alle Optionen, die GnuPG im Hintergrund benutzt, selbst angeben statt Standardwerte zu benutzen.

sudo apt-key adv --keyserver PGP_KEY_SERVER --recv-keys ID

lädt den Schlüssel ID vom angegeben Server herunter.

Tipps

Paketlisten

Übersicht der installierten Pakete

Reine Informationsliste erzeugen

Um eine Liste zu erstellen, die alle installierten Pakete und deren Beschreibungen enthält, führt man den Befehl

COLUMNS=200 dpkg-query -l > packages_list.list

aus. Die Paketliste befindet sich danach in der Datei packages_list.list.

Hinweis

Diese Liste ist rein informativ und lässt sich nicht (d.h. nur schwer) zum Wiederherstellen nach einer Neuinstallation verwenden!

Paketliste zur Wiederherstellung erzeugen

Um z.B. einen zweiten Ubunturechner mit der gleichen Paketkonfiguration zu erstellen oder bei einer Neuinstallation des Systems schnell alle zuvor installierten Pakete zu übernehmen, kann man mit dem Befehl

dpkg --get-selections | awk '!/deinstall|purge|hold/ {print $1}' > packages.list

eine Liste packages.list zur Wiederherstellung der Pakete erzeugen.

Außerdem empfiehlt es sich, den erweiterten Paketstatus (automatisch oder manuell installiert) zu sichern (Dateien package-states-auto und package-states-manual):

apt-mark showauto > package-states-auto apt-mark showmanual > package-states-manual

Möchte man diese Liste zur Installation in einer Ubuntu-Neuinstallation verwenden, ist außerdem ein Sichern bzw. Kopieren der Paketquellen, sowie das Exportieren der vertrauenswürdigen Signierungsschlüssel nötig, damit auch Pakete aus nachträglich hinzugefügten Quellen ohne Probleme installiert werden können.

Der folgende Befehl sichert diese Informationen in die Datei sources.list.sav:

find /etc/apt/sources.list* -type f -name '*.list' -exec bash -c 'echo -e "\n## $1 ";grep "^[[:space:]]*[^#[:space:]]" ${1}' _ {} \; > sources.list.save

Das Ergebnis enthält eine kommentierte Liste aller eingetragenen Paketquellen.

Folgender Befehl kopiert den Schlüsselbund aller manuell hinzugefügten vertrauenswürdigen Schlüssel in die Datei trusted-keys.gpg:

sudo cp /etc/apt/trusted.gpg trusted-keys.gpg

Extra installierte Schlüsselbunde unter /etc/apt/trusted.gpg.d werden dabei nicht gesichert, sollten aber über die jeweiligen Pakete nachinstalliert werden.

Installation von Paketen aus einer Liste

Nachdem die sources.list synchronisiert wurde, sollten die Paketlisten aktualisiert werden. Ein zuvor gesicherter Schlüsselbund sollte ebenfalls vorher importiert werden:

sudo apt-key add trusted-keys.gpg # Schlüsselbund importieren sudo apt-get update

Um alle auf der Liste gespeicherten Pakete zu installieren, gibt man folgenden Befehl ein:

xargs -a "packages.list" sudo apt-get install

Wurden die erweiterten Paketstatus gesichert, können die Statuslisten für das neue System eingelesen werden:

xargs -a "package-states-auto" sudo apt-mark auto xargs -a "package-states-manual" sudo apt-mark manual

Der zweite Befehl kann auch ausgelassen werden, da die über die Paketliste nachinstallierten Pakete automatisch als "manuell installiert" gekennzeichnet wurden.

URL-Liste zu installierender Pakete

Die Option --print-uris von apt-get liefert eine URL für alle zu installierenden Pakete.

Dies kann man auf einem Rechner mit schlechter Internetanbindung zur Erzeugung einer Liste benutzen, um diese Pakete dann auf einem anderen Rechner herunterzuladen. Der Befehl

sudo apt-get -q -y --print-uris install PAKETNAME | grep ^\' | awk '{print $1}' | tr -d "'" > wget.list

schreibt die Adressen in eine Liste wget.list. Der Inhalt dieser kann dann mittels wget

wget -i wget.list

heruntergeladen werden. Wget steht auch für die Windows-Plattform zur Verfügung , so dass man die Liste auch auf einem Windows-Rechner herunterladen kann.

Anschließend können die so heruntergeladenen Pakete über die Synaptic-Paketverwaltung oder mit dpkg installiert werden.

Verlaufslisten

Eine Liste der in der letzten Zeit installierten Pakete kann durch Auswerten der dpkg-Log-Dateien mit grep ausgegeben werden:

grep 'install ' /var/log/dpkg.log

Diese Log-Dateien werden regelmäßig durch logrotate archiviert (/var/log/dpkg.log.NUMMER.gz). Liegt die Änderung also schon weiter zurück, können diese Dateien durchsucht werden.

Man braucht die mit gzip komprimierten Dateien nicht erst zu entpacken, sondern benutzt einfach zgrep:

zgrep 'install ' /var/log/dpkg.log.NUMMER.gz

Alternativ kann mit find eine Liste, der in den letzten drei Tagen installierten Pakete, angezeigt werden:

find /var/lib/dpkg/info -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' | sort

apt-history

Eine andere Möglichkeit ist die Erstellung eines eigenen Befehls apt-history.

Dieser beruht auf den Log-Dateien /var/log/dpkg.log und /var/log/dpkg.log.1. Dazu wird die Datei ~/.bashrc editiert und folgendes am Ende angefügt:

function apt-history(){
case "$1" in
install)
cat /var/log/{dpkg.log,dpkg.log.1} | grep 'install '
;;
upgrade|remove)
cat /var/log/{dpkg.log,dpkg.log.1} | grep $1
;;
rollback)
cat /var/log/{dpkg.log,dpkg.log.1} | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/{dpkg.log,dpkg.log.1}
;;
esac

}

Anschließend neu einloggen (oder ein neues Terminalfenster öffnen), damit der Befehl verfügbar ist. Mittels

apt-history upgrade

lassen sich nun beispielsweise die zuletzt aktualisierten Pakete inkl. Datum und Uhrzeit ermitteln. Andere Möglichkeiten sind install, remove oder rollback.

Konfigurationsdateien entfernen

Deinstalliert man Pakete nur mit dem remove-Befehl, werden nich die Konfigurationsdateien unter /etc entfernt.

Um dies manuell für alle nicht vollständig deinstallierten Pakete nachzuholen, kann folgender Befehl genutzt werden:

dpkg -l | grep '^rc ' | cut -d" " -f3 | xargs dpkg --purge

Sonstiges

Anzahl zu aktualisierender Pakete beim Anmelden an der Konsole falsch

Durch einen Bug im "Update-Notifier" wird manchmal die Meldung über zur Verfügung stehende Aktualisierungen in der Konsole und beim SSH-Login nicht auf den neuesten Stand gebracht.

Das behebt folgender Ablauf:

sudo mv /etc/motd.tail /etc/motd.tail.backup sudo touch /etc/motd.tail sudo /usr/lib/update-notifier/update-motd-updates-available --force

Dabei wird zuerst die aktuelle Datei nach motd.tail.backup umbenannt, dann eine neue leere Datei motd.tail erstellt und anschließend der Update-Notifier zur Korrektur der Angabe gezwungen.

dpkg

dpkg (Debian Package) dient zum Installieren einzelner .deb-Pakete. Es stellt die Funktionen zur Verfügung (Backend), die von den Programmen apt-get und aptitude benutzt werden.

Optionen

Für die meisten Operationen sind Rootrechte nötig.

Normale Optionen

dpkg erfordert die Angabe der Option, was die auszuführende Operation angibt, sowie abhängig von der Option die Angabe eines Paketnamens oder des Pfades zu einem .deb-Paket.

Kommandozeilenoptionen zu dpkg
Kürzel Lange Option Beschreibung
-i --install Installiert das als Argument übergebene .deb-Paket (Dateiname oder mit Option -R Ordnername).
--configure Versucht die Installation von noch nicht fertig konfigurierten Paketen zu beenden. Entweder können die Paketnamen als Argumente übergeben werden oder es wird die Option -a bzw. --pending angegeben, um alle noch zu konfigurierenden Pakete zu verarbeiten.Soll ein bereits korrekt installiertes Paket erneut konfiguriert werden, muss dpkg-reconfigure genutzt werden.
-r --remove Entfernt das als Argument übergebene genannte Paket. Wichtig: Der Name des Pakets, nicht der Dateiname muss angegeben werden. Eventuell vom Programm angelegt Konfigurationsdateien bleiben erhalten.
-l --list Ruft dpkg-query auf und gibt eine Liste mit Status, Version und einer Kurzbeschreibung des Pakets aus. Statt des Namens kann auch ein regulärer Ausdruck angegeben werden. Wird kein Argument übergeben, werden alle Paketstatus aufgelistet. Diese Option ist auch für unprivilegierte Nutzer verfügbar.
-P --purge Entfernt das genannte Paket inklusive der Konfigurationsdateien.
-R --recursive Statt eines Pfades zu einer .deb kann mit -R auch ein Verzeichnis angegeben werden, die gewählte Operation wird dann auf alle Pakete im Verzeichnis angewandt.
-L --listfiles Ruft dpkg-query auf und gibt eine Liste der im Paket enthaltenen Dateien aus.
-S --search Ruft dpkg-query auf, um auszugeben in welchen Paketen sich Dateien befinden, die zum angegeben Suchmuster passen.

Eine vollständige Liste der Optionen findet sich in der dpkg(1) Manpage im Abschnitt ACTIONS bzw. AKTIONEN.

force Optionen

Achtung!

Diese Optionen können die Paketverwaltung und das System irreparabel beschädigen. Deswegen sollten diese Optionen nur mit äußerster Vorsicht und ausreichendem Verständnis angewandt werden.

In Ausnahmefällen kann es nötig sein, die Fehler zu übergehen, die dpkg zum Anhalten zwingen. Force-Optionen lassen sich mit den gewöhnlichen Optionen kombinieren, wo es sinnvoll ist.

Kommandozeilenoptionen mit force
Lange Option Beschreibung
--force-help Gibt eine Liste der force-Optionen mit einer Kurzbeschreibung aus.
--force-depends Ändert Abhängigkeitsfehler zu Warnungen. Ein Paket kann so trotz fehlender Abhängigkeiten installiert werden. apt-get -f wird eventuell zur Korrektur benötigt.
--force-architecture Erlaubt die Installation eines Pakets, das nicht zur Architektur passt. Nützlich, um reine 32-Bit-Pakete auf einem 64-Bit-System zu installieren. Allerdings ist meist die Multiarch-Integration des Paketes fehlerhaft und die für das Paket Verantwortlichen sollten darüber informiert werden.
--force-remove-reinstreq Erlaubt das Entfernen eines Pakets, dessen Reinstallation nötig ist. Teile des Paketes können nach dem Entfernen auf dem System verbleiben.

Eine vollständige Liste der force-Optionen findet sich in der dpkg(1) Manpage im Abschnitt OPTIONS bzw. OPTIONEN.

Hilfsprogramme

dpkg-query

dpkg-query erlaubt Zugriff auf die Paketverwaltungsdatenbank, also auf Metainformationen (Paketstatus, Kontrollfelder, ...).

Die Abfrage von Informationen über Paketdateien wird stattdessen über dpkg-deb geregelt. Einige Optionen können auch direkt mit dem dpkg-Befehl angesteuert werden.

dpkg-query OPTION PAKET/SUCHMUSTER

Kommandozeilenoptionen zu dpkg-query
Kürzel Lange Option Beschreibung
-l --list Gibt eine Liste der zum Suchmuster passenden Pakete und deren Informationen aus.
-S --search Gibt aus, in welchen Paketen sich Dateien befinden, die zum angegeben Suchmuster (z.B. Pfad) passen.
-L --listfiles Gibt die im Paket enthaltenen Dateien aus. Das Paket wird über den Paketnamen als Argument übergeben und muss installiert (oder nicht vollständig entfernt) sein.

Eine vollständige Liste der Optionen findet sich in der dpkg-query(1) Manpage im Abschnitt COMMANDS bzw. BEFEHLE.

Paketstatus

Zusätzlich zur Kurzbeschreibung des Pakets gibt --list/-l eine Statusangabe zum jeweiligen Paket aus. Diese besteht aus 3 Stellen: # Gewünschter Paketstatus

    • u für unbekannt
    • i für installieren
    • h für halten
    • r für entfernen (Konfigurationsdateien behalten)
    • p für vollständig (inkl. Konfigurationsdateien) entfernen
  1. Aktueller Paketstatus
    • n für nicht installiert
    • c für Konfigurationsdateien verbleibend
    • H für nicht vollständig installiert (nicht alle Dateien konnten installiert werden)
    • U für entpackt (vor dem eigentlichen Installieren)
    • F für nicht vollständig konfiguriert (Fehler in Konfigurationsskripten)
    • W für Trigger-Verarbeitung (durch anderes Paket) wird erwartet (Trigger sind z.B. das Aktualisieren des Manpageindexes oder das Aktualisieren der durch .desktop Dateien bereitgestellten MIME-Typen, also Vorgänge, die für mehrere Pakete interessant sind. Anstatt diese Vorgänge nach der Installation jedes einzelnen Paketes auszuführen, wird der Vorgang erst am Ende der Installation aller Pakete ausgeführt.)
    • t für Trigger-Verabeitung steht bevor
    • i für installiert
  1. Fehler (Leerzeichen für keine Fehler)
    • R für Reinstallation erforderlich

So bezeichnet ii ein vollständig installiertes Paket, rc ein entferntes Paket von dem noch Konfigurationsdateien vorliegen und un ein nicht (mehr) installiertes Paket.

Eine vollständige Liste der Statusangaben findet sich in der dpkg-query(1) Manpage im Abschnitt PACKAGE STATES bzw. PAKETZUSTÄNDE.

dpkg-deb

dpkg-deb stellt grundlegende Möglichkeiten zum Packen und Entpacken, sowie die Abfrage von Metainformationen (enthaltene Dateien, Kontrollfelder, ...) von .deb-Paketen bereit.

Einige Optionen können auch direkt mit dem dpkg-Befehl angesteuert werden.

dpkg-deb OPTION VERZEICHNIS/PAKET

Kommandozeilenoptionen zu dpkg-deb
Kürzel Lange Option Beschreibung
-I --info Zeigt Informationen des als Argument übergenenen .deb-Paketen an. Als optionales zweites Argument kann der Name einer (vorhandenen) Kontrolldatei übergeben werden, deren Inhalt dann in der Standardausgabe angezeigt wird.
-b --build Erstellt ein .deb-Paket aus einem angegebenen Verzeichnis.
-c --contents Zeigt den Inhalt eines .deb-Pakets an.
-x --extract Entpackt das angegebene .deb-Paket in das angegebene Zielverzeichnis.

Eine vollständige Liste der Optionen findet sich in der dpkg-deb(1) Manpage im Abschnitt COMMANDS bzw. BEFEHLE.

dpkg-divert

Mit dpkg-divert können Umleitungen eingerichtet werden, sodass z.B. Dateien, die von einem Paket bereitgestellt werden, beim Paketupgrade nicht verändert werden.

So kann man nicht nur lokale Änderungen (ohne Verlust) vornehmen, sondern auch Pakete, die Dateien an exakt der selben Stelle installieren, trotzdem parallel installieren (vorausgesetzt die Pakete sind nicht explizit als gegenseitiger Konflikt markiert).

dpkg-divert (OPTION) BEFEHL DATEI/MUSTER

Kommandozeilenoptionen zu dpkg-divert
Befehl Beschreibung
--add Fügt eine Umleitung für die als Argument übergebene Datei hinzu. Die Angabe von --add als Kommando ist optional. Wenn kein Kommando angegeben wurde, wird immer dieses Kommando gewählt.
--remove Entfernt die Umleitung für die als Argument übergebene Datei. Wenn bei der Umleitung umbenannt wurde, muss trotzdem die ursprüngliche Name übergeben werden.
--list Listet alle aktuell eingerichteten Umleitungen, die auf das als Argument übergebene Suchmuster passen, auf. Ohne Argument werden alle Umleitungen aufgelistet.
Option Beschreibung
--local Richtet die Umleitung so ein, dass die Datei durch kein Paketupgrade und durch keine Paketinstallation verändert wird.
--package Das als Argument übergebene Paket ist als einziges Paket nicht von der Umleitung betroffen.
--rename Beim Einrichten (bzw. Entfernen) wird die Datei umbenannt. Standardmäßig wird die Endung .distrib hinzugefügt (bzw. entfernt). Existierende Dateien werden nicht überschrieben, eher bricht die Umbenennung ab.
--test Es werden keine Änderungen vorgenommen.

Eine vollständige Liste der Befehle und Optionen findet sich in der dpkg-divert(8) Manpage im Abschnitt COMMANDS und OPTIONS bzw. BEFEHLE und OPTIONEN.

Beispiele

Installation

sudo dpkg -i /PFAD/ZUM/PAKET/PAKET.deb

Installiert das PAKET im genannten Pfad.

Entfernen

sudo dpkg -r vim

Entfernt das Paket vim.

sudo dpkg -r vim*

Entfernt alle Pakete, deren Name mit vim beginnt.

Anzeige

dpkg -l vim*

Gibt die Informationen zum allen Paketen aus, deren Name mit vim beginnt. Oft macht es Sinn die Ausgaben z.B. mit grep nach den Paketstatus zu filtern.

Konfiguration beenden

sudo dpkg --configure -a

Führt alle noch ausstehenden Konfigurationsskripte aus und kann so einen abgebrochenen Installationsvorgang fortsetzen.

Konfiguration erneut durchführen

sudo dpkg-reconfigure locales

Führt die debconf Konfigurationsskripte des Pakets locales erneut aus (und generiert damit die Sprachpakete neu).

Umleitung einrichten

sudo dpkg-divert --local --rename /usr/bin/apt-build

Die Datei /usr/bin/apt-build wird für alle Pakete ohne Ausnahme auf die Datei /usr/bin/apt-build.distrib umgeleitet. Beim Erstellen der Umleitung wird die Datei direkt umbenannt.

Umleitung entfernen

sudo dpkg-divert --rename --remove /usr/bin/apt-build

Die im vorherigen Beispiel angelegte Umleitung wird wieder entfernt. Das --rename stellt sicher, dass die Datei wieder zurückumbenannt wird.

Vergisst man dies, kann man die Datei einfach manuell z.B. mit mv umbenennen.

aptitude

aptitude ist eine Erweiterung der Paketverwaltung APT (Advanced Packaging Tool) welche auf allen Debian-basierten Systemen, und damit auch Ubuntu, zum Einsatz kommt. Es handelt sich, wie bei apt-get, um eine reine Konsolenanwendung, bietet aber eine grafische Oberfläche auf ncurses Basis.

Im Gegensatz zu apt-get führt aptitude über Änderungen der installierten Pakete „genauer“ Buch, so dass nicht mehr benötigte Pakete automatisch erkannt und deinstalliert werden. Die Installationsgeschichte wird in ein Log geschrieben, wodurch später angezeigt werden kann, wann oder warum ein Paket installiert wurde.

Bei Ubuntu gehört aptitude bis zur Version 10.10 zur Standardinstallation, wurde aber aus platztechnischen Gründen von der Installations-CD genommen. In der Server-Variante ist aptitude nach wie vor installiert.

Achtung!

aptitude hat bis zur Version 0.6.8.1 Probleme mit der Multiarch-Unterstützung (siehe 831768) (dies betrifft in erster Linie 64-bit-Systeme) und ist bis dahin auf Multiarch-Systemen (ab 11.04, z.B. 64-Bit) unter Umständen nicht sinnvoll einsetzbar.

Für Ubuntu 12.04 wurde die Unterstützung zurückportiert und ist in den precise-updates-Quellen verfügbar. Diese sollten deswegen unbedingt aktiviert werden. Bei späteren Ubuntu-Versionen ist das Problem wegen einer neueren aptitude-Version nicht mehr relevant.

Installation

aptitude kann über das Paket

sudo apt-get install aptitude

installiert werden.

Des Weiteren kann man noch das (englische) Handbuch zu aptitude installieren. Dies ist über das Paket

sudo apt-get install aptitude-doc-en

verfügbar.

Bedienung

Wie oben bereits erwähnt, kann man aptitude entweder über die Kommandozeile oder die grafische Oberfläche in der Konsole bedienen. Wie bei der Paketverwaltung üblich, werden Root-Rechte für Schreibvorgänge, wie Paketinstallationen zwingend benötigt. Die allgemeine Syntax lautet:

sudo aptitude BEFEHL PAKET

Ruft man das Programm ohne Befehl und Paket auf, erscheint automatisch die grafische Version.

Die grafische Version startet zwar auch ohne Root-Rechte, allerdings kann man dann nur suchen bzw. die Liste der installierten Pakete anschauen; man kann aber keine Pakete entfernen, installieren etc. .

Grafische Oberfläche

Datei:Grafik64.png

Die Pakete werden vorsortiert und hierarchisch in Form einer aufklappbaren Ordnerstruktur dargestellt.

In der grafischen Oberfläche werden die Pakete je nach „Zustand“ verschiedenfarbig dargestellt:* schwarz : Paket wird nicht verändert

  • rot : Paket ist kaputt oder kann nicht installiert werden
  • blau : Paket wird aktualisiert
  • weiß : Paketversion bleibt erhalten, kann aber aktualisiert werden
  • grün : Paket wird installiert
  • magenta : Paket wird gelöscht

aptitude kann komplett über die Tastatur gesteuert werden. Alle Funktionen sind aber auch über die entsprechenden Pull-Down Menüs erreichbar, zu denen man mittels Strg + T gelangt. Im Folgenden sind einige Tasten erklärt:

Übersicht Tasten
Taste Funktion
↓ + ↑ Auswahlbalken bewegen
Verzeichnis auf- und zuklappen
/ Suchen
N Weitersuchen
L Suchen, alle Pakete, auf die das Suchkriterium nicht zutrifft werden aber ausgeblendet
I Paketinformationen anzeigen
D Abhängigkeiten anzeigen
U Paketquellen updaten
⇧ + U alle verfügbaren Updates installieren
+ Paket zur Installation vormerken
- Paket zum Löschen vormerken
= Paketversion halten
G Start der Installation/Deinstallation
? Hilfe anzeigen, d.h. alle verfügbaren Tasten und deren Funktion
⇧ + Q aptitude beenden

Die Suche von aptitude kennt auch weiterführende Suchfunktionen wie Verknüpfungen, Suche in der Beschreibung etc. . Dazu ein paar Beispiele:* ?name(linux) - sucht nach allen Paketen, die Linux im Namen haben

  • ?description(python) - sucht nach allen Paketen, die Python in der Beschreibung haben
  • ?and(?name(linux),?description(python) - sucht nach allen Paketen, die Linux im Namen und Python in der Beschreibung haben
  • ?installed - sucht nach allen installierten Paketen
  • ?installed(?not(?automatic)) - sucht nach allen installierten Paketen ohne markauto Tag

Eine komplette Übersicht bietet das aptitude-Handbuch.

Konsole

Ruft man aptitude mit einer Option bzw. Paketnamen auf, so wird die Aktion ohne Start der grafischen Oberfläche direkt ausgeführt. Die allgemeine Syntax lautet

sudo aptitude BEFEHL OPTION PAKETNAME(N)

Wichtig ist, dass der Befehl vor dem/den Paketnamen steht. Eine Option ist in vielen Fällen nicht notwendig. Wird mehr als ein Paketname angegeben, wird die entsprechende Aktion auf alle genannten Pakete angewendet.

Im Folgenden sind einige gängige Befehle aufgeführt. Teilweise sind diese identisch mit denen von apt-get und haben i.d.R. auch den gleichen Effekt.

Übersicht Befehle Kommandozeile
Befehl Funktion
install installiert das Paket, die Abhängigkeiten werden direkt mit aufgelöst
remove löscht das Paket, die Konfigurationsdateien bleiben aber erhalten
purge löscht das Paket inklusive aller Konfigurationsdateien
hold erzwingt, dass das Paket in der aktuell installierten Version gehalten wird, d.h. es werden keine Updates dafür installiert
forbid-version verbietet die Installation einer bestimmten Paketversion, diese muss hinter dem Paketnamen mittels = angehängt werden, also z.B. xserver-xorg=1.7.7+2~broken-4
safe-upgrade Es wird ein Update der Pakete durchgeführt, die aktualisiert werden können, ohne dass andere Pakete hinzugefügt oder entfernt werden müssen. Dies ist der „normale“ Befehl, um innerhalb eines Releases ein Update durchzuführen.
full-upgrade aktualisiert alle Pakete, installiert neue und entfernt ggf. nicht mehr benötigte; dies ist der Befehl für ein Upgrade zwischen zwei Ubuntu-Versionen (entspricht bei apt-get dem dist-upgrade)
show zeigt Informationen zum Paket an
why zeigt an, welche Pakete von diesem abhängen
why-not zeigt an, warum ein Paket nicht installiert werden kann, also welche Konflikte existieren
clean leert den Paketcache, kann u.U. sehr viel Festplattenplatz frei machen
autoclean leert den Paketcache für alle Pakete aus den eingetragenen Quellen, kann u.U. sehr viel Festplattenplatz frei machen
build-dep installiert die nötigen Quellpakete um das spezifizierte Paket kompilieren zu können (verfügbar seit Ubuntu 8.10)

Eine Option, die hier für install erwähnt werden soll, ist -R. Dadurch werden nur die direkten Abhängigkeiten mit installiert und nicht auch die Empfehlung, was unter Ubuntu per Voreinstellung passiert, aber Global über den Schlüssel APT::Install-Recommends bestimmt werden kann.

Pakete suchen

Pakete können mit dem folgenden Befehl gesucht werden:

aptitude search SUCHBEGRIFF1 SUCHBEGRIFF2 ...

Wird bei einem Installationsbefehl ein nicht existierender Paketname angegeben, werden Alternativen aufgelistet. Die Eingabe von Paketnamen lässt sich außerdem durch Aktivierung der Shell-Autovervollständigung wesentlich erleichtern.

Es kann auch nach bestimmten Eigenschaften gesucht werden. Alle Suchmöglichkeiten werden in /usr/share/doc/aptitude/README gelistet. So sucht

aptitude search ~Ddepends:gtk~dscanner'!~dvirus'

zum Beispiel nach Paketen, die von gtk abhängen und in deren Beschreibung „scanner“, aber nicht „virus“ vorkommt. Es können also auch Reguläre Ausdrücke zur Suche genutzt werden.

Defekte Pakete reparieren

Wenn ein Paket, das nicht zur separaten Installation gedacht ist, eigentlich weitere Pakete benötigt oder in anderer Weise nicht in die bestehende Installation passt, werden bei der nächsten Verwendung „kaputte Pakete“ gemeldet. Diese muss man reparieren lassen. Der Befehl

sudo aptitude -f install

führt entweder zur Installation weiterer Pakete oder zur Entfernung des installierten Pakets. aptitude macht dabei Vorschläge zur Lösung des Problems, die man akzeptieren oder ablehnen kann.

Falls die defekten Pakete bekannt sind, kann auch folgender Befehl das Problem lösen:

sudo aptitude -f install PAKETNAME1 PAKETNAME2

Wobei PAKETNAME1 bzw. PAKETNAME2 usw. durch die Namen der bekannten defekten Pakete ersetzt wird.

Achtung!

Auch wenn aptitude eine gewisse Intelligenz besitzt, so ist die erste vorgeschlagene Lösung nicht immer die beste. D.h. man sollte die Vorschläge immer sorgsam lesen und dann entscheiden, ob diese sinnvoll sind oder nicht!

Paketverwaltung unbrauchbar

Sollte die Paketverwaltung nach einem upgrade bzw. dist-upgrade unbrauchbar werden, so kann einer der folgenden Befehle helfen:

Nach einem Update der bestehenden Installation:

sudo aptitude safe-upgrade -f

Nach einem Versions-Upgrade auf eine neue Ubuntu-Version:

sudo aptitude full-upgrade -f

Nach beiden Befehlen sollte auf jeden Fall noch

sudo dpkg --configure -a

aufgerufen werden.

Konfigurationsdaten nachträglich löschen

sudo aptitude purge '~c'

löscht die Konfigurationsdaten von bereits deinstallierten Paketen.

Tags vergeben

Tags sind zusätzliche Eigenschaften für lokal installierte Pakete. Zum Kompilieren eines Programms werden beispielsweise viele „-dev“-Pakete benötigt. Viele sind anschließend als manuell installiert markiert, werden aber nach erfolgreicher Kompilierung nicht mehr benötigt, allerdings auch nicht automatisch wieder entfernt. Wenn man den Installationszeitraum noch weiß, kann der Blick ins Log helfen, aber das ist nicht sehr praktisch.

Vergibt man aber schon bei der Installation beispielsweise das Tag „<programmname>kompilierung“ an die betreffenden Pakete, so sieht man auch im Nachhinein leicht, warum ein bestimmtes Paket installiert wurde, und kann gegebenenfalls alle Pakete mit dem Tag entfernen.

Beispiel:

sudo aptitude install --add-user-tag freeorionkompilierung graphviz-dev libalut-dev libboost1.35-dev libdevil-dev liblog4cpp5-dev libsdl-mixer1.2-dev libsdl1.2-dev python2.5-dev sudo aptitude remove '?user-tag(freeorionkompilierung)'

Paketzustand speichern

Will man den Zustand aller installierten Pakete, der Caches, der Paketlisten und APT-, sowie aptitude-Einstellungen zu einem Zeitpunkt speichern oder wiederherstellen, kann man dazu den Mechanismus, der eigentlich für reproduzierbare Bugreports gedacht ist, nutzen:* Backup anlegen:

sudo aptitude-create-state-bundle DATEINAME * Backup direkt ins System einspielen:

sudo tar xvf DATEINAME -C /

Überflüssige Pakete

aptitude entfernt nicht benötigte Pakete automatisch. Wenn aber nicht nur aptitude zur Paketinstallation verwendet wurde, helfen die Pakete debfoster und deborphan , deren Gebrauch im Debian Anwenderhandbuch beschrieben ist. Das Paket deborphan enthält eine Benutzerschnittstelle (orphaner), die die Bedienung vereinfacht.

Automatische Sicherheitsupdates

Hier empfiehlt es sich, mit einem Editor folgende neue Textdatei anzulegen:

#!/bin/sh

date >> /var/log/aptitude-security-updates aptitude update >> /var/log/aptitude-security-updates aptitude safe-upgrade -y -t $(lsb_release --short --codename)-security >> /var/log/aptitude-security-updates

und diese unter dem Namen aptitude-security-updates im Verzeichnis /etc/cron.daily abzuspeichern. Danach muss man die Ausführrechte mit

chmod 775 aptitude-security-updates

im Terminal setzen. Zukünftig wird dadurch täglich automatisch auf Sicherheitsupdates überprüft und - falls vorhanden - diese ohne Nachfrage installiert. Protokolliert wird dies in der Datei /var/log/aptitude-security-updates.

Ein ausgeklügelter Mechanismus wird von unattended-upgrades bereitgestellt.

Problembehebung

Durch fehlerhafte oder unpassende Paketquellen, durch die Installation mangelhaft erstellter Pakete oder durch Abstürze bei aktiver Verwendung kann es zu Problemen mit der Paketverwaltung kommen.

Das Schaubild verdeutlicht, dass die Fehler an unterschiedlichen Stellen und in verschiedenen Programmen auftreten können.

Abhängigkeiten

verhindern die Installation eines Pakets

Die folgenden Pakete besitzen unerfüllte Abhängigkeiten: kdelibs3-devel: Hängt ab von: libxslt-devel aber es wird nicht installiert werden Hängt ab von: libxml2-devel aber es wird nicht installiert werden

Gefährlicher ist es, wenn die Installation zwar möglich ist, aber nur um den Preis der Deinstallation zahlreicher anderer Komponenten, die man möglicherweise benötigt.

Wenn gewarnt wird, dass Pakete deinstalliert werden, ohne dass man damit gerechnet hat, sollte man die Aktion im Zweifelsfall abbrechen.

Dieses Problem tritt vor allem dann auf, wenn man Paketquellen verwendet, die nicht für Ubuntu geeignet sind.

Lösung

Nur speziell für Ubuntu ausgewiesene Paketquellen verwenden (siehe auch Fremdquellen).

Konfiguration zurücksetzen

Wurde an den systemweiten Konfigurationsdateien Änderungen vorgenommen, die zu Fehlern führen, ist aber eine funktionierende Form nicht mehr rekonstruierbar, so kann mit folgendem Befehl das Paket reinstalliert werden, sodass alle Paketdateien inkl. der Konfigurationsdateien durch den Standard ersetzt werden:

sudo apt-get -o dpkg::options::="--force-confnew" -o dpkg::options::="--force-confmiss" --reinstall install PAKET

Zurücksetzen von proposed-Aktualisierungen

Wurden versehentlicherweise Pakete aus den proposed-Quellen installiert, können nach dem unter Apt-Pinning beschriebenen Verfahren die Pakete wieder auf eine stabile Version gedowngradet (herabgesetzt) werden.

Defekte Pakete

Die folgenden Pakete besitzen unerfüllte Abhängigkeiten:

z600cups: Hängt ab von: cups (>= 1:1.1.15-10) aber 1.1.20-103 ist installiert

E: Unerfüllte Abhängigkeiten. Versuche -f zu benutzen.

Dieses Problem tritt dann auf, wenn man ein Paket "von Hand" installiert hat, ohne dessen Abhängigkeiten zu erfüllen.

Lösung

Im Terminal ist der vorgeschlagene Konsolenbefehl einzugeben :

sudo apt-get -f install

Installation wurde unterbrochen

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

Wenn während der Installation von Paketen die Stromzufuhr des Rechners unterbrochen wird, kann das auch für die Paketverwaltung Folgen haben.

Fand der Ausfall während des Downloads und somit vor der eigentlichen Installation statt, kann der Installationsvorgang wiederholt werden, sodass dieser automatisch an passender Stelle fortgesetzt wird.

Wenn aber bereits Dateien eines Pakets installiert wurden, ohne dass die Installation oder Konfiguration zu Ende geführt wurde, gibt es eine entsprechende Fehlermeldung.

Lösung

Wie in der Meldung angegeben ist im Terminal der entsprechende Befehl auszuführen:

sudo dpkg --configure -a

Fehle bei Installation

dpkg: Fehler beim Bearbeiten von gettext (--configure):

Unterprozess post-installation script gab den Fehlerwert 1 zurück

dpkg: Fehler beim Bearbeiten von magicolor2530dl (--remove):

Unterprozess post-removal script gab den Fehlerwert 2 zurück

Bei der Abarbeitung von postinst/preinst- bzw. postrm/prerm-Maintainer Skripten kommt es zu Fehlern.

Lösung

Eine nicht ganz saubere Lösung ist es, diese entsprechenden Skripte umzubenennen. Diese Scripte befinden sich in /var/lib/dpkg/info/.

Achtung!

Nur die zum entsprechenden Paket gehörigen Skripte umbenennen.

Besser (aber schwieriger) ist es, beim entsprechende Skript zu überprüfen, welche Bedingung nicht stimmt und es deswegen zu der Fehlermeldung kommt.

Probleme mit Paketquellen

Ungültige Signatur von Paketquellen

W: GPG-Fehler: http://de.archive.ubuntu.com maverick Release: Die folgenden Signaturen waren ungültig: BADSIG 40976EAF237D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> W: Fehlschlag beim Holen von http://extras.ubuntu.com/ubuntu/dists/maverick/Release

Dieses Problem kann nach einer Systemaktualisierung auftreten.

Lösung

sudo rm /var/lib/apt/lists/* -rf sudo mkdir /var/lib/apt/lists/partial # Für Versionen bis Ubuntu 10.04 Lucid Lynx sudo apt-get update

Den Speicherbereich für Statusinformationen jeder in der sources.list angegebenen Paketquelle zurücksetzen und neu laden.

Fehler beim Einlesen der Paketliste

E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/archive.canonical.com_ubuntu_dists_natty_partner_i18n_Translation-de E: Die Paketliste oder die Statusdatei konnte nicht eingelesen oder geöffnet werden. Failed to exec method /usr/lib/apt/methods/ E: Method has died unexpectedly! E: Unterprozess hat Fehlercode zurückgegeben (100) E: Methode /usr/lib/apt/methods/ ist nicht korrekt gestartet

Diese Probleme können nach einer Systemaktualisierung auftreten.

Lösung

Es ist der selbe Lösungsansatz wie bei Ungültige Signatur von Paketquellen anzuwenden.

Öffentlicher Schlüssel von extras.ubuntu.com fehlt

W: GPG-Fehler: http://extras.ubuntu.com oneiric Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 16126D3A3E5C1192

Dieses Problem kann nach einer Systemaktualisierung auftreten.

Lösung

Kann der Schlüssel nicht mit apt/apt-key importiert werden, hilft eine Neuinstallation des Pakets ubuntu-extras-keyring:

sudo apt-get --reinstall install ubuntu-extras-keyring

Aktualisieren schlägt mit GPG-Fehler fehl

W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 632D16BB0C7135A6

Ggf. funktioniert das Aktualisieren eines aufgenommenen PPAs nicht reibungslos, weil der Schlüssel trotz ordnungsgemäßen Vorgehens nicht installiert wurde (insbesondere unter Ubuntu 11.10 vermehrt beobachtet).

Lösung

Diese Meldung besagt, dass der Authentifizierungsschlüssel nicht importiert wurde. Gelöst werden kann das Problem in diesem Beispiel mit dem Befehl

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 632D16BB0C715DA6

Die Schlüsselnummer muss natürlich entsprechend der Fehlermeldung angepasst werden, siehe ggf. auch auf launchpad.net .

Fehler beim Reaktivieren

gelöschter PPAs

Falls beim Wiederaktivieren eines zuvor deaktivierten oder gelöschten PPAs Probleme beim Importieren des Signierungsschlüssels auftreten, muss dieser zuerst komplett aus den APT-Schlüsseldatenbanken entfernt werden.

Um den Name (ID) des richtigen Schlüssels zu erfahren, kann man direkt in der Datenbank nachschauen:

sudo apt-key list --keyring /etc/apt/trusted.gpg sudo apt-key list --keyring /etc/apt/trusted.gpg~

Ein Ausschnitt könnte folgendermaßen aussehen:

[...]

pub 1024R/12DE56F8 2011-01-01 uid Launchpad PPA for Ubuntu User

pub 1024R/5753AA42 2010-11-23 uid Launchpad PPA for Edubuntu Developers

[...]

Soll nun der Schlüssel des PPAs von "Ubuntu User" entfernt werden, werden die folgenden zwei Befehle ausgeführt:

sudo apt-key --keyring /etc/apt/trusted.gpg del 12DE56F8 sudo apt-key --keyring /etc/apt/trusted.gpg~ del 12DE56F8

Abschließend muss noch der Speicherbereich für Statusinformationen nach Paketverwaltung/Problembehebung zurückgesetzt werden.

Hinweis

Das Entferen eines PPAs mit ppa-purge reicht nicht aus, da die Schlüssel nicht entfernt werden, sondern lediglich die Quelle deaktiviert wird (und das Paket auf die nächstniedrigere Version zurückgesetzt wird).

Fehler mit Berechtigungen

dpkg: Fehler beim Bearbeiten von /var/cache/apt/archives/linux-image-3.0.0-12-generic_3.0.0-12.20_i386.deb (--unpack):

Fehler beim Setzen des Eigentümers von »./boot/vmlinuz-3.0.0-12-generic«: Die Operation ist nicht erlaubt

dpkg-deb: Fehler: Unterprozess einfügen wurde durch Signal (Datenübergabe unterbrochen (broken pipe)) getötet Examining /etc/kernel/postrm.d . run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.0.0-12-generic /boot/vmlinuz-3.0.0-12-generic run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.0.0-12-generic /boot/vmlinuz-3.0.0-12-generic Fehler traten auf beim Bearbeiten von:

/var/cache/apt/archives/linux-image-3.0.0-12-generic_3.0.0-12.20_i386.deb

E: Sub-process /usr/bin/dpkg returned an error code (1)

Dieser Fehler tritt auf, wenn Systemverzeichnisse sich nicht auf einem Linux-Dateisystem befinden.

Lösung

Systemordner über fstab in Dateisystem mit ausreichender Rechteverwaltung einbinden. U.U. muss eine entsprechende Partition erst angelegt werden: Manuelle Partitionierung

Probleme mit Lockdateien

2: Datei oder Verzeichnis nicht gefunden

E: Lockdatei /var/lib/apt/lists/lock konnte nicht geöffnet werden - open (2: Datei oder Verzeichnis nicht gefunden) E: Das Listenverzeichnis kann nicht gesperrt werden E: Lockdatei /var/cache/apt/archives/lock konnte nicht geöffnet werden - open (2: No such file or directory) E: Das Downloadverzeichnis konnte nicht gesperrt werden.

Lösung

Die Lockdatei und das zugrunde liegende Verzeichnis manuell anlegen. Für das erste Beispiel also:

sudo mkdir -p /var/cache/apt/archives sudo touch /var/cache/apt/archives/lock

11: Ressource ist zur Zeit nicht verfügbar

E: Konnte Sperre /var/cache/apt/archives/lock nicht bekommen - open (11: Die Ressource ist zur Zeit nicht verfügbar) E: Das Verzeichnis /var/cache/apt/archives/ kann nicht gesperrt werden

oder

E: Konnte Sperre /var/lib/dpkg/lock nicht bekommen - open (11: Die Ressource ist zur Zeit nicht verfügbar) E: Das Verzeichnis /var/lib/dpkg/ kann nicht gesperrt werden

Lösung

Arbeitet bereits ein anderes Programm zur Paketverwaltung im Hintergrund? Dies kontrolliert man zuerst mit

sudo lsof /var/cache/apt/archives/lock

um dann gegebenenfalls mit ps herauszufinden, welcher Prozess die Paketverwaltung blockiert. Warten auf das Terminieren des Prozesses löst das Problem meist.

Sollte der Prozess hängen, kann er mit kill zum Beenden gezwungen werden. Sollte der Lock danach immer noch nicht freigegeben sein, kann man als letzte Möglichkeit den Lock mit Rootrechten löschen.

Nach dem Löschen muss die Lockdatei erneut angelegt werden, zum Beispiel mit

sudo touch /var/cache/apt/archives/lock

13: Keine Berechtigung

E: Lockdatei /var/lib/apt/lists/lock konnte nicht geöffnet werden - open (13: Keine Berechtigung)

Lösung

Man sollte das eingegebene Kommando nochmal mit Rootrechten ausführen.

Archivverzeichnis fehlt

E: Archivverzeichnis /var/cache/apt/archives/partial fehlt.

Lösung

Bis Ubuntu 10.04 wird ein fehlendes Verzeichnis für Statusinformationen während der Aktualisierung der Paketindexdateien nicht automatisch angelegt. Durch Neuanlegen des Verzeichnisses wird das Problem behoben:

sudo mkdir -p /var/lib/apt/lists/partial

Fehler in /var/lib/dpkg/available

Vorkonfiguration der Pakete ... dpkg: Fehler: Parsen der Datei »/var/lib/dpkg/available«, nahe Zeile 0:

nach Feldname »../../../../share/pyshared/UpdateManager/check-meta-release.py« muss ein Doppelpunkt folgen

E: Sub-process /usr/bin/dpkg returned an error code (2)

Durch Verletzen der Policy von Versionsbezeichnung von Maintainern, kann es zu Meldungen bezüglich fehlender oder nicht erlaubter Zeichen kommen.

Lösung

Durch Entfernen der Datei /var/lib/dpkg/available wird das Problem behoben:

sudo dpkg --clear-avail

Soll die Datei aus den verfügbaren Paketversionen aus den Paketquellen neu generiert werden, wird folgender Befehl verwendet:

sudo dselect update

Fehlerhafte Paketquellen

Zu Hostnamen gehört keine Adresse

W: Fehlschlag beim Holen von http://archieve.ubuntu.com/dists/oneiric-security/restricted/i18n/Translation-de Beim Auflösen von »archieve.ubuntu.com:http« ist etwas Schlimmes passiert (-5 - Zu diesem Hostnamen gehört keine Adresse)

Bei fehlerhaft eingetragenen oder nicht mehr vorhandenen Paketquellen bzw. fehlerhaften Netzwerkeinstellungen kann es zu dieser Fehlermeldung kommen.

Lösung

Manuell die Paketquellen in der Datei /etc/apt/sources.list korrigieren. Dabei auf Rechtschreibfehler und nicht mehr vorhandene Paketquellen achten. Sollten diese Angaben korrekt sein, muss der Netzwerkzugang auf statische bzw. dynamische IP-Zuweisung untersucht werden.

Hinweis

Bei neueren Ubuntu-Versionen sollten auch Einträge im Ordner /etc/apt/sources.list.d/ überprüft werden.

Paketverwaltung unbrauchbar

Segfault

Es kann vorkommen, dass die Paketverwaltung aufgrund einer Beschädigung des Zwischenspeichers zum Speichern von "verfügbaren" Informationen nicht mehr funktioniert und z.B. ein

sudo apt-get check

mit folgender Fehlermeldung abbricht:

Segmentation faulty Tree

Lösung

Dieser Missstand kann durch das Löschen der beiden Zwischenspeicherdateien /var/cache/apt/pkgcache.bin und /var/cache/apt/srcpkgcache.bin mit Root-Rechten behoben werden.

Dateilisten-Datei

beschädigt

Extrahiere Vorlagen aus Paketen: 100% Vorkonfiguration der Pakete ... (Lese Datenbank ... 55%dpkg: nicht behebbarer fataler Fehler, Abbruch:

Abschließender Zeilenvorschub fehlt in Dateilisten-Datei des Paketes »pulseaudio-module-bluetooth«

E: Sub-process /usr/bin/dpkg returned an error code (2)

Nach einem Festplatten- oder Speicherfehler, bzw. wenn der Paket-Entpackprozess unterbrochen wurde, kann die entsprechende Datei unter /var/lib/dpkg/info/PAKET.list beschädigt sein.

Lösung

Mit folgendem Vorgehen wird die entsprechend beschädigte Datei unter /var/lib/dpkg/info/PAKET.list neu generiert.

Dazu wird zuerst das entsprechende Paket heruntergeladen (sollte sich das Paket noch im Cache unter /var/cache/apt/archives/ befinden, kann dieser Schritt übersprungen werden):

sudo apt-get --download-only --reinstall install PAKET

Abschließend wird die Dateilisten-Datei generiert und am entsprechenden Ort mit dem an 4 Stellen anzupassenden Befehl gespeichert (anzupassen sind zweimal PAKET und einmal jeweils VERSION und ARCHITEKTUR):

dpkg -c /var/cache/apt/archives/PAKET_VERSION_ARCHITEKTUR.deb | awk '{if ($6 == "./") { print "/."; } else if (substr($6, length($6), 1) == "/") {print substr($6, 2, length($6) - 2); } else { print substr($6, 2, length($6) - 1);}}' | sudo tee /var/lib/dpkg/info/PAKET.list

Achtung!

Die Umleitung in die Datei /var/lib/dpkg/info/PAKET.list muss korrekt angepasst werden, da bei falscher Bezeichnung die Paketverwaltung weiter beschädigt werden könnte, indem andere Dateilistendateien überschrieben werden.

Alle Pakete neu installieren

Sind sehr viele Pakete in schlechtem Zustand, lohnt es sich eventuell, alle installierten Programme neu aus den Quellen herunterzuladen und zu installieren:

dpkg --get-selections | grep "\binstall" | awk '{print $1}' > /tmp/dpkg.log

sucht alle installierten Pakete und speichert diese in der Datei /tmp/dpkg.log.

sudo xargs -n1 apt-get --reinstall install -y < /tmp/dpkg.log

nimmt einen Eintrag aus /tmp/dpkg.log und installiert diese Pakete erneut.

Probelme mit status-Datei

In der Datei /var/lib/dpkg/status werden alle wichtigen Informationen für dpkg gespeichert. Ist diese Datei beschädigt, ist die Paketverwaltung unbrauchbar.

Helfen auch die Backupdateien im gleichen Verzeichnis /var/lib/dpkg/ nicht weiter, kann die Datei mithilfe Informationen aus /var/lib/dpkg/available und Infodateien aus /var/lib/dpkg/info/ rekonstruiert werden.

Die Qualität der Rekonstruktion hängt entscheidend von der Aktualität von /var/lib/dpkg/available ab. Diese Datei sollte zuerst (mit apt-get) erneuert werden.

Anschließend kann folgendes Perl-Skript z.B. als dpkg-rebuild gespeichert werden:

#!/usr/bin/perl -w

# Rebuild the Debian '/var/lib/dpkg/status' file from information in # '/var/lib/dpkg/available' and '/var/lib/dpkg/info/*.(list|conffiles)'. # This is useful if your 'status' file got corrupted if the system crashed # during package maintenance, for example. # # Copyright 2002 by Patrick Reynolds (reynolds .at. cs duke edu) # 2012 by Dominique Lasserre (lasserre.d at gmail com) # Distributed under the terms of the GNU General Public License (GPL). # # Usage: # dpkg-rebuild # It takes no arguments and generates output in /tmp/status. # Move /tmp/status to /var/lib/dpkg if it looks acceptable. # With multiarch support! # # Limitations: # 1) Packages that are no longer available will not show up in the # rebuilt 'status' file. This means installed-but-obsolete packages # can't be managed after a rebuild. # Only packages listed in /var/lib/dpkg/available are processed. So update # it before dpkg-rebuild operation. # # 2) The 'Conffiles:' keys in the 'status' file doesn't have checksums. # It is not possible to detect if config file was modified or not, so do # not generate checksums at all. # If a package has config files but not listed in .conffiles they aren't # tracked (and probably package state is guessed false). # 'Config-Version' will not created because it is impossible to detect from # which version config files are from. # Configuration files may not be completely removed when you purge # packages, and package upgrades may clobber existing configuration # files without asking. # # 3) Packages in transitional or error states will be misreported.

use strict; use warnings;

my $available = "/var/lib/dpkg/available"; my $status = "/tmp/status"; my $info_dir = "/var/lib/dpkg/info"; my %installed;

# Multiarch supported architectures. my @archs; open(ARCHS, "dpkg --print-architecture |") || die "no native architecture\n"; while (<ARCHS>) {

chomp;
push(@archs, $_);

} close(ARCHS); open(ARCHS, "dpkg --print-foreign-architectures |"); while (<ARCHS>) {

chomp;
push(@archs, $_);

} close(ARCHS);

# Fill %installed with status information of installed packages. # installed{package} => { # "status" => 1, (installed with files -> installed) # "status" => 2, (installed without files -> deinstalled) # ## not implemented: # ## "status" => 3, (installed with files but no md5sums file -> purged) # "conffiles" => array of conffiles # } foreach (<$info_dir/*.list>) {

my $package = $_ if (s#.*/([^/]+)\.list$#$1#);
my $pkgfile_st = "$info_dir/$package";
$installed{$package}{"status"} = 2;
open(LISTFILE, "<$pkgfile_st.list") || die "no $pkgfile_st.list\n";
while (<LISTFILE>) {
chomp;
$installed{$package}{"status"} = 1;
last;
}
if (-e "$pkgfile_st.conffiles") {
open(CONFFILE, "<$pkgfile_st.conffiles") || die "no $pkgfile_st.conffiles\n";
my @files;
while (<CONFFILE>) {
chomp;
push(@files, $_);
}
$installed{$package}{conffiles} = \@files if @files;
}

}

# 0=between, 1=essential-searching 2=copying-installed, 3=copying-not-installed my $state = 0; my $package; my @conffiles = undef; open(AVAILABLE, "<$available") || die "no $available\n"; open(STATUS, ">$status") || die "no $status\n"; while (<AVAILABLE>) {

chomp;
my $line = $_;
if ($state == 0) {
if (/^Package: (\S+)$/) {
$package = $1;
unless ($installed{$1}) {
foreach (@archs) {
$package = "$1:$_" if ($installed{"$1:$_"});
}
}
if ($installed{$package}) {
print STATUS "$line\n";
$state = 1;
}
else {
$state = 3;
}
}
else {
die "Expected 'Package:' at $.\n";
}
}
elsif ($state == 1) {
my $ess_pkg = 1 if ($line =~ m/^Essential: /);
print STATUS "$_\n" if $ess;
$state = 2;
if ($installed{$package}{"status"} == 1) {
print STATUS "Status: install ok installed\n";
}
elsif ($installed{$package}{"status"} == 2) {
print STATUS "Status: deinstall ok config-files\n";
}
elsif ($installed{$package}{"status"} == 3) {
print STATUS "Status: purge ok config-files\n";
}
if ($installed{$package}{"conffiles"}) {
@conffiles = @{$installed{$package}{"conffiles"}};
}
else {
@conffiles = undef;
}
delete $installed{$package};
print STATUS "$_\n" unless $ess_pkg;
}
elsif ($state == 2) {
if ($line eq "") {
print STATUS "\n";
$state = 0;
}
elsif (/^Description: / && $conffiles[0]) {
print STATUS "Conffiles:\n";
print STATUS " $_\n" foreach (@conffiles);
print STATUS "$line\n";
}
elsif (!/^Filename: / && !/^Size: / && !/^MD5sum: /) {
print STATUS "$line\n";
}
}
elsif ($state == 3){
$state = 0 if ($line eq "");
}

}

printf "Installed packages not found in $available:\n"; foreach (sort keys %installed) {

print " $_\n";

}

Nun wird das Skript ausgeführt:

perl dpkg-rebuild

Anschließend wurde bei Erfolg in /tmp/status eine Rekonstruktion erstellt. Diese sollte mit den Backupdateien abgeglichen werden und kann anschließend verwendet werden. Je nach Aktualität der available-Datei wurde eine mehr oder weniger gute Rekonstruktion erstellt. Diese kann allerdings niemals ein externes Backup ersetzen.

debconf

Manche Pakete sind mit dem debconf-Konfigurationssystem ausgestattet. Dadurch wird eine Intervention des Benutzers möglich, sodass diesem bestimmte Elemente wie z.B. Fragen oder Hinweise aus s.g. "Vorlagen" (eng. "templates") präsentiert werden, worauf der Benutzer bestimmte Entscheidungsmöglichkeiten hat.

Dadurch kann z.B. direkt die standardmäßige Sprache festgelegt werden, ohne dass der Benutzer diese Änderung selbst in den Konfigurationsdateien vornehmen muss.

Dieses Konfigurationssystem ist nicht auf einzelne Pakete beschränkt, sondern es können auch paketüberfreifende Konfigurationseinstellungen (anhand s.g. "shared templates") vorgenommen werden. Somit kann z.B. der aktuelle Displaymanager von einem anderen Loginmanager als Standard abgelöst werden.

Debconf wird dabei über die Maintainerskripte preinst (vor der eigentlichen Installation) und postinst (nach der Installation) bzw. postrm (zum abschließenden Entfernen der Datenbankeinträge nach Deinstallation des Paketes) aufgerufen.

Anhand der durch den Benutzer oder durch die Standardwerte gegebenen Rückgabewerte werden mit diesen Skripten bestimmte Einstellungen am System vorgenommen.

Nachdem ein Benutzer die erste Programminstallation eines mit debconf ausgestatteten Paketes durchgeführt und somit eine gewisse Konfiguration vorgenommen hat, kann das Paket mit dem Befehl dpkg-reconfigure "neu konfiguriert" bzw. "rekonfiguriert" werden.

Das heißt, dass nun eine Benutzerinteraktion wie bei der Erstinstallation stattfindet.

Vorlagen und die Ergebnisse der Elemente werden in die debconf-Datenbanken unter /var/cache/debconf gespeichert.

Ergebnisse und der Status (gesehen oder nicht) von Vorlagen, werden in die Datenbank config.dat geschrieben, die Vorlagen selbst sind unter templates.dat zu finden.

In Ausnahmefällen wird ein Passwort abgefragt, welches dann nur unter Schutz der Rootrechte in passwords.dat gesichert wird.

Konfigurierbaren Pakete anzeigen

Eine Liste der unter debconf registrierten "Besitzer von Konfigurationsdateien" (welche idR. den Paketnamen entsprechen) erhält man im Terminal mit:

debconf-show --listowners

Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Besitzern durchsucht werden, sind Rootrechte vonnöten .

Konfiguration abfragen

Die Einträge in der debconf-Datenbank lassen sich mit folgendem Befehl abfragen:

debconf-show PAKET

Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Einstellungen durchsucht werden, sind Rootrechte vonnöten .

Paket neu konfigurieren

Die Elemente wie Fragen oder Hinweise werden nach ihrer Priorität gefiltert. Die automatische Filterung hängt in erster Linie von der in der Vorlage festgelegten Priorität ab.

Aber auch die von der Paketverwaltung abhängige Schnittstellenoberfläche oder der Status "bereits gesehen" (s.g. "seen") spielen eine Rolle.

Mit der Option --priority können mit dpkg-reconfigure die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden:

Anzeigefilter manuell vorgeben
Option + Parameter Beschreibung
--priority=low Alle Elemente wie Fragen oder Hinweise werden dem Benutzer vorgelegt.
--priority=medium Normale Elemente, die allgemein vernünftige Vorgaben haben, werden gezeigt.
--priority=high Elemente, die keine allgemein vernünftigen Vorgaben haben, werden gezeigt.
--priority=critical Fast alles wird auf die Vorgabewerte gesetzt, nur Elemente (idR. Fragen), die ohne Intervention des Benutzers die Systemintegrität stören könnten, werden gezeigt.

Der folgende Befehl konfiguriert zum Beispiel das Paket ssh neu, wobei alle durch das Paket bereitgestellte Vorlagen durchgearbeitet werden:

sudo dpkg-reconfigure --priority=low ssh

Analog gibt es den Befehl dpkg-preconfigure, mit welchem die debconf-Vorlagen, welche vor einer Paketinstallation durchzuführen waren, abgearbeitet werden.

Hinweis

Standardmäßig wird bei dpkg-reconfigure und dpkg-preconfigure (unabhängig von der systemweiten debconf-Priorität) die Priorität "low" verwendet.

Schnittstellenoberflächen

debconf kann auf mehrere Wege mit dem Benutzer kommunizieren. Es werden folgende Schnittstellenoberflächen (s.g. "frontends") unterstützt, wobei diese unterschiedlich funktional sind.

Schnittstellenoberflächen
Typ Beschreibung Funktionalität
Dialog konsolenbasierte Vollbilddarstellung mit dialog vollständige Interaktion möglich
Readline traditionelle, einfache Textschnittstelle um Momentanwert zu sehen, muss libterm-readline-gnu-perl installiert sein
Gnome in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden vollständige Interaktion möglich
Kde in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden vollständige Interaktion möglich
Editor Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor vollständige Interaktion möglich
Web Konfiguration über Browser, standardmäßig: http://localhost:8001/ vollständige Interaktion möglich
Nicht-interaktiv Es findet keine Interaktion statt (nicht empfohlen!). keine Interaktion möglich

Je nach benutztem Paketverwaltungsprogramm wird automatisch eine Schnittstellenoberfläche davon ausgewählt. Man kann den Standard aber durch Rekonfigurieren des Paketes debconf festsetzen.

Gezielte Konfiguration

Die Datenbank kann nach folgendem Muster (am Beispiel einer einfachen Auswahl) direkt geändert werden. "BESITZER" ist dabei meist der entsprechende Paketname.

echo "set BESITZER/VORLAGE WERT" | sudo debconf-communicate

Hinweis

Es wird ausschließlich der Datenbankeintrag geändert. Eine Änderung an Konfigurationsdateien wird nicht vorgenommen (dies ist den Maintainerskripten preinst, postinst, ... vorbehalten).

Deswegen ist ein solches Eingreifen nur in Ausnahmefällen sinnvoll.

Durch manuelles Ausführen der entsprechenden Maintainerskripte unter /var/cache/dpkg/info kann aber dpkg-preconfigure und analog dpkg-reconfigure "nachgestellt" werden.

Wie dieser Befehl sinnvoll einsetzbar ist, zeigt folgendes sehr spezielles Beispiel an dem Paket ttf-mscorefonts-installer:

Nach einem "Abwürgen" der Schnittstellenoberfläche mit der Frage ob die EULA akzeptiert werden soll, ist die debconf-Datenbank nicht konsistent.

Nun kann die EULA nachträglich akzeptiert werden, sodass das Paket ohne Fehler reinstalliert werden kann:

echo "set msttcorefonts/accepted-mscorefonts-eula true" | sudo debconf-communicate

Grafische Konfiguration

configure-debian

configure-debian ist ein konsolenbasiertes Rekonfigurationsprogramm, welches die Besitzer von Paketen, in ihren Bereich (s.g. "Section") eingeordnet, darstellt.

sudo apt-get install configure-debian

gkdebconf

gkdebconf ist ein grafisches Rekonfigurationsprogramm, welches ebenfalls die Pakete in die Unterbereiche einteilt, aber auch alle auf einmal darstellen kann. Das Programm besitzt darüber hinaus die Fähigkeit, die Schnittstellenoberfläche frei zu wählen.

sudo apt-get install gkdebconf

Dateien und Paketen

Der folgende Befehl in einem Terminal zeigt an, zu welchem Paket eine Datei gehört:

dpkg -S DATEINAME

Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit dpkg-reconfigure neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht.