Advanced Packaging Tool
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-Kommandos
APT/Kommandos Diese Seite gibt einen Überblick über weitere Befehle aus dem APT-Komplex, sowie apt-file.
Weitere APT-Befehle | |
apt-mark | Markiert Pakete als automatisch/manuell installiert. |
apt-extracttemplates | Extrahiert debconf-Dateien aus Paketen. |
apt-ftparchive | Generiert Paketindex für Paketquellen. |
apt-cdrom | Verwaltung von Paketquellen auf CD-ROM. |
apt-sortpkgs | Sortiert Paketindexdateien nach Paketname. |
apt-config | Zeigt die APT-Konfiguration an. |
apt-file | Dateisuche in Paketen auf einem (entfernten) Paketserver. |
Kommandos
apt-mark
Mit apt-mark kann der erweiterte Paketstatus, wie z.B. "automatisch"- oder "manuell installiert", erfragt und gesetzt werden.
sudo apt-mark [OPTION(EN)] KOMMANDO [PAKET(E)]
Kommandos von apt-mark | |
auto PAKET(E) | Setzt den erweiterten Paketstatus für PAKET(E) auf "automatisch installiert". |
manual PAKET(E) | Setzt den erweiterten Paketstatus für PAKET(E) auf "manuell installiert". |
hold PAKET(E) | Setzt den Paketstatus für PAKET(E) auf "festgesetzt". Dies ist äquivalent zu dem dpkg-Kommando "echo "PAKET hold" | dpkg --set-selections". |
unhold PAKET(E) | Setzt den Paketstatus für PAKET(E) von "festgesetzt" zurück (idR. auf "installiert"). Dies ist äquivalent zu dem dpkg-Kommando "echo "PAKET install" | dpkg --set-selections" (der Status install kann abweichen). |
showauto [PAKET(E)] | Ohne Parameter werden alle als "automatisch installiert" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "automatisch installiert" markierten Pakete ausgegeben. |
showmanual [PAKET(E)] | Ohne Parameter werden alle als "manuell installiert" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "manuell installiert" markierten Pakete ausgegeben. |
showhold [PAKET(E)] | Ohne Parameter werden alle als "festgesetzt" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "festgesetzt" markierten Pakete ausgegeben. |
Optionen zu apt-mark
Kommandozeilenoptionen zu apt-mark | ||
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
--file=DATEI | -f=DATEI | Liest/Speichert die Informationen in DATEI, statt dem Standardwert Dir::State. |
apt-extracttemplates
apt-extracttemplates extrahiert aus einem im .deb-Format vorliegenden Installationspaket die Maintainerskripte sowie debconf-relevanten Informationen wie Templates und speichert diese in einem temporären Verzeichnis.
apt-extracttemplates [OPTION(EN)] DATEI.deb
Es kennt die folgenden Kommandozeilenoptionen:
Kommandozeilenoptionen zu apt-extracttemplates | ||
--tempdir | -t | Speichert die extrahierten Skripte und Templates in einem anderen temporären Verzeichnis als im Standardwert APT::ExtractTemplates::TempDir angegeben. |
--configfile | -c | Gibt alternative Konfigurationsdatei an. |
--option | -o | Überschreibt einzelne Werte der Standardkonfiguration für diesen Durchlauf. |
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
apt-ftparchive
apt-ftparchive erstellt die Indexdateien (Indizes), die zum Betreiben einer Paketquelle nötig sind.
sudo apt-ftparchive [OPTION(EN)] KOMMANDO PFAD
Kommandos von apt-ftparchive | |
packages | Erstellt eine, für eine Paketquelle benötigte, Paketdatei für einen Verzeichnisbaum (mit Paketen). |
sources | Erstellt eine, für eine Quelltextpaketquelle benötigte, Quelltextpaketdatei für einen Verzeichnisbaum (mit Quelltextpaketen). |
contents | Erstellt ein Inhaltsverzeichnis der Pakete. Diese kann dann z.B. mit apt-file durchsucht werden. |
release | Erstellt eine, für eine (Quelltext)Paketquelle benötigte, Releasedatei für einen Verzeichnisbaum (mit Paket- und Quelltextpaketdateien). |
generate | Automatisierung des Indexierungsprozesses. |
clean | Aufräumen der Datenbank. |
apt-ftparchive packages
packages sucht im angegebenen PFAD nach .deb-Dateien (installierbare Pakete) und erstellt einen Index aus ihnen. Der erstellte Index wird auf der Standardausgabe zur Weiterverarbeitung ausgegeben, zum Beispiel um eine gepackte Fassung zu erstellen.
sudo apt-ftparchive [OPTION(EN)] packages PFAD
apt-ftparchive sources
sources sucht im angegebenen PFAD nach .dsc-Dateien (Quelltextpaketkontrolldateien) und erstellt einen Index aus ihnen. Der erstellte Index wird auf der Standardausgabe zur Weiterverarbeitung ausgegeben, zum Beispiel um eine gepackte Fassung zu erstellen.
sudo apt-ftparchive [OPTION(EN)] sources PFAD
apt-ftparchive contents
contents sucht im gegebenen PFAD nach Paketdateien und erstellt ein Inhaltsverzeichnis dieser Dateien. Diese Informationen können z.B. mit apt-file durchsucht werden.
sudo apt-ftparchive [OPTION(EN)] contents PFAD
apt-ftparchive release
release sucht im angegebenen PFAD nach Paket- und Quellpaketindexdateien (und ihren komprimierten Formen) und erstellt eine Releasedatei mit Prüfsummen der Indexdateien und weiteren Informationen zur Paketquelle.
sudo apt-ftparchive [OPTION(EN)] release PFAD
apt-ftparchive generate
generate automatisiert das Erstellen der Indizes nach Vorgabe der Konfiguration. Es wird benutzt, um in Skripten die Downloadserver automatisch mit frischen Indexdateien zu versorgen.
sudo apt-ftparchive [OPTION(EN)] generate PFAD
apt-ftparchive clean
clean räumt die Datenbank auf und entfernt im Zuge des Aufräumens die nicht mehr vorhandenen Pakete aus den Indizes.
sudo apt-ftparchive [OPTION(EN)] clean PFAD
Optionen zu ftparchive
Kommandozeilenoptionen zu apt-ftparchive | ||
--db | -d | Angabe einer Datenbank zum Speichern der Ergebnisse. Irrelevant für generate. |
--md5 | Generiert MD5-Prüfsummen zusätzlich zu SHA1-Prüfsummen. Standardmäßig aktiv. | |
--quiet | -q | Unterdrückt die Ausgabe von Fortschrittsanzeigen. Damit kann die Programmausgabe z.B. in Logdateien automatisiert verarbeitet werden. |
--delink | Schaltet delinking explizit an. Delinking erzeugt Hardlinks für doppelt vorhandenen Dateien nach einem festgelegten Muster. Beispiel: 11.10/ linkt auf oneiric/ | |
--no-delink | Schaltet delinking expolizit aus. | |
--readonly | Nutzt die Cachedatenbank (--db) schreibgeschützt (read-only). Neuere Ergebnisse werden nicht gespeichert. | |
--contents | Speichert das Paketinhaltsverzeichnis in der Cachedatenbank zur späteren Verwendung. | |
--source-override | -s | Angabe einer alternativen Override-Datei für source. |
--arch | -a | Führe die Aktion nur für die angegebene Architektur. Benötigt eine Angabe in der Konfigurationsdatei oder mit -o. |
--configfile | -c | Gibt alternative Konfigurationsdatei an. |
--option | -o | Überschreibt einzelne Werte der Standardkonfiguration. |
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
apt-cdrom
apt-cdrom kennt zwei Kommandos: ident und add. ident identifiziert die aktuelle CD zum Zweck der Fehlersuche. add fügt die Paketindizes der CD dem Paketcache hinzu und nutzt die CD als Paketquelle.
sudo apt-cdrom [OPTION(EN)] -d=CDROM-MOUNTPUNKT add
Kommandozeilenoptionen zu apt-cdrom | ||
--cdrom | -d | mount-Punkt der CD mit APT-Archiven. Der Mountpunkt muss in der fstab aufgelistet sein. |
--rename | -r | Das Label einer CDRom übergehen und ein selbstgewähltes Label angeben. |
--no-mount | -m | Verhindert, dass apt-cdrom den angegebenen Mountpunkt ein- und aushängt. |
--fast | -f | Nimmt an, die Pakete auf dem Datenträger seien valide und übergeht die Prüfung. |
--thorough | -a | Durchsucht eine CD komplett, statt nur an den Standardorten nach Paketindizes zu suchen. |
--just-print --recon --no-act | -n | Simulation: Das System zeigt etwaige Änderungen nur an, ohne sie auszuführen. |
--configfile | -c | Gibt alternative Konfigurationsdatei an. |
--option | -o | Überschreibt einzelne Werte der Standardkonfiguration für diesen Durchlauf. |
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
apt-sortpkgs
apt-sortpkgs sortiert Indizes von Paketquellen nach installierbaren Paketen und Quelltextpaketen und gibt diese Liste zur Weiterverarbeitung aus.
sudo apt-sortpkgs [OPTION(EN)] PAKETINDEX|QUELLENINDEX
Hinweis:
Die Nutzung von apt-sortpkgs ist im Normalfall nur nach dem Einlesen eigener Paketindizes nötig. Das Sortieren der Quellen in der sources.list wird von apt-get update erledigt.
Kommandozeilenoptionen zu apt-sortpkgs | ||
--source | -s | Sortiert Paketquellen, in denen der Quelltext von Programmen bezogen werden kann. |
--configfile | -c | Gibt alternative Konfigurationsdatei an. |
--option | -o | Überschreibt einzelne Werte der Standardkonfiguration. |
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
apt-config
apt-config kennt die Kommandos shell und dump. dump zeigt ohne zusätzliche Optionen aufgerufen alle aktuellen Konfigurationsoptionen für APT an.
sudo apt-config [OPTION(EN)] dump
shell wird benutzt, um in der aufrufenden Shell, den Wert eines APT_KONFIGURATIONSSTRINGs in eine SHELL_VARIABLE zu speichern. Einige Konfigurationsstrings sind unter apt-get beschrieben.
sudo apt-config [OPTION(EN)] shell SHELL_VARIABLE APT_KONFIGURATIONSSTRING
Kommandozeilenoptionen zu apt-config | ||
--configfile | -c | Gibt alternative Konfigurationsdatei an. |
--option | -o | Überschreibt einzelne Werte der Standardkonfiguration. |
--version | -v | Gibt die Versionsnummer aus. |
--help | -h | Zeigt den Hilfetext an. |
apt-file
Kommandozeilenwerkzeug, um alle Pakete nach einer Datei zu durchsuchen. Einzelheiten siehe apt-file.
Erweiterungen
add-apt-repository
add-apt-repository ist ein mitgeliefertes Skript, das das Hinzufügen von Quellen, insbesondere PPAs, vereinfacht und automatisiert.
Dabei wird ein entsprechender Listeneintrag in /etc/apt/sources.list.d/ erzeugt bzw. die /etc/apt/sources.list erweitert und außerdem der zur Quelle zugehörige Schlüssel heruntergeladen und dem Schlüsselbund hinzugefügt.
sudo add-apt-repository [OPTION(EN)] ppa:PPA_ANBIETER/PPA_ARCHIVNAME
oder
sudo add-apt-repository [OPTION(EN)] "deb ARCHIV_URI CODENAME KOMPONENTE"
Paketquellen einrichten
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
- 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
- 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
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.