Advanced Packaging Tool: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Kurzbeschreibung“ durch „Beschreibung“
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Advanced Packaging =Tool ==
== Advanced Packaging Tool ==
APT ist ein Paketmanagement-System, das im Bereich des Betriebssystems Debian GNU/Linux entstanden ist.  
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.
Mittels APT ist es sehr einfach, Programmpakete zu suchen, zu installieren oder auch das ganze System auf den neuesten Stand zu bringen.
{|  
{|
|-  
|-
| colspan="2" | '''Advanced Packaging Tool'''
| colspan="2" | '''Advanced Packaging Tool'''
|-
|-
| | Aktuelle Version
| | Betriebssystem
| | 0.9.7.7(13. Dezember 2012)
| | GNU/Linux
|-
|-
| | Betriebssystem
| | Kategorie
| | GNU/Linux
| | Paketverwaltung
|-
|-
| | Kategorie
| | Lizenz
| | Paketverwaltung
| | GPL (Freie Software)
|-
|-
|  | Lizenz
|  | GPL (Freie Software)
|-
| colspan="2" | packages.qa.debian.org/a/apt.html
| colspan="2" | 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.  
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 <tt>apt-get</tt> und <tt>apt-cache</tt> zentral sind. Seit Debian 3.1 wird die Benutzung von aptitude als konsolenbasierendes Paketverwaltungssystem empfohlen.
APT besteht aus einer Programmbibliothek und mehreren diese Bibliothek nutzenden Kommandozeilen-Programmen, von denen <tt>apt-get</tt> und <tt>apt-cache</tt> zentral sind. Seit Debian 3.1 wird die Benutzung von aptitude als konsolenbasierendes Paketverwaltungssystem empfohlen.
Zeile 30: Zeile 27:


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


== Interna ==
== Interna ==
In der Datei <tt>/etc/apt/sources.list</tt> 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.
In der Datei <tt>/etc/apt/sources.list</tt> 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.


Zeile 41: Zeile 36:


== Frontends ==
== 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.
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.
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.
Zeile 50: Zeile 44:
Mit Fink und Cydia stehen Frontends für Mac OS X und dessen Derivate zur Verfügung.
Mit Fink und Cydia stehen Frontends für Mac OS X und dessen Derivate zur Verfügung.


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


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.


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.


== Apt-cacher und apt-proxy  ==
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.


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.
== apt-get ==
[[apt-get]]


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-Kommandos ==
[[APT/Kommandos]]


== apt-get ==
== Paketquellen ==
[[APT/Paketquellen]]


Alle Kommandos von '''apt-get''' werden im Terminal eingegeben . Allgemein besteht ein apt-get-Befehl aus den Optionsschaltern, dem "command" (Kommando) und gegebenenfalls aus einem oder mehreren Paketnamen. Manche Kommandos benötigen keine Angabe von Paketnamen. Allerdings benötigt apt-get außer im Fall von <tt>-h</tt> oder <tt>--help</tt> die Angabe eines Kommandos. Ein Paketname besteht nur aus dem Namen des Pakets ohne Versionsangabe.
== 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.


Eine Übersicht der auf APT aufsetzenden Programme bzw. graphischen Oberflächen findet sich im Artikel Paketverwaltung.
Es lässt sich auch ein Paket in einer bestimmten Version festhalten oder dessen Installieren oder Deinstallieren verhindern. Dies wird hier als Beispiel dargestellt.


apt-get benötigt in den allermeisten Fällen Root-Rechte .  
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.


Die allgemeine Form sieht so aus:
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.


[sudo] apt-get [Option(en)] Kommando [PAKET1] [PAKET2]
==== 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:


{|  
{|
|-
| colspan="2" | Kommandos zu apt-get
|-
|-
| | <tt>update</tt>  
|| <nowiki>## Offizielle Quellen</nowiki>
|  | Neueinlesen der Paketlisten
deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
<nowiki>## Inoffizielle Quelle</nowiki>
deb http://peters-ubuntupakete.example.org/ubuntu/ precise main restricted universe multiverse
 
|-
|-
| | <tt>upgrade</tt>
|}
| | installierte Pakete wenn möglich auf verbesserte Version aktualisieren
=== Pinning per release ===
{|
|-
|-
| | <tt>install</tt> <tt>PAKET(E)</tt>
|| Package: *
|  | Installation von <tt>PAKET(E)</tt>
Pin: release v=10.04, l=Ubuntu
Pin-Priority: 1000
|-
|-
| | <tt>remove</tt> <tt>PAKET(E)</tt>
|}
|  | Deinstallation von <tt>PAKET(E)</tt>
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 ===
{|
|-
|-
| | <tt>autoremove</tt> <tt>[PAKET(E)]</tt>
|| Package: *
|  | Deinstallation ungenutzter Abhängigkeiten [inkl <tt>PAKET(E)</tt>]
Pin: origin peters-ubuntupakete.example.org
Pin-Priority: 300
|-
|-
| | <tt>purge</tt> <tt>PAKET(E)</tt>
|}
| | wie <tt>remove</tt>, zusätzlich werden alle globalen Konfigurationen von <tt>PAKET(E)</tt> entfernt
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 ===
{|
|-
|-
| | <tt>source</tt> <tt>PAKET(E)</tt>
|| Package: hello
|  | Quelltext von <tt>PAKET(E)</tt> herunterladen
Pin: version 2.1.1*
|-
Pin-Priority: 1000
|  | <tt>build-dep</tt> <tt>PAKET(E)</tt>
|  | zum Erstellen von <tt>PAKET(E)</tt> notwendigen Abhängigkeiten installieren
|-
|  | <tt>dist-upgrade</tt>
|  | wie <tt>upgrade</tt>, nur können bei dem Vorgang auch Pakete installiert bzw. entfernt werden
|-
|  | <tt>dselect-upgrade</tt>
|  | in dselect gemachten Anweisungen folgen
|-
|  | <tt>clean</tt>
|  | Leeren des Paketcaches (Entfernen von zur Installation heruntergeladenen Paketen)
|-
|  | <tt>autoclean</tt>
|  | wie <tt>clean</tt>, nur werden ausschließlich Pakete, die nicht mehr in den Quellen verfügbar sind, gelöscht
|-
|  | <tt>check</tt>
|  | Überprüfung auf Abhängigkeitsfehler
|-
|  | <tt>markauto</tt> <tt>PAKET(E)</tt>
|  | <tt>PAKET(E)</tt> als "automatisch installiert" markieren
|-
|  | <tt>unmarkauto</tt> <tt>PAKET(E)</tt>
|  | <tt>PAKET(E)</tt> als "manuell installiert" markieren
|-
|  | <tt>changelog</tt> <tt>PAKET(E)</tt>
|  | Herunterladen und Anzeige des Changelogs von <tt>PAKET(E)</tt>
|-
|  | <tt>download</tt> <tt>PAKET(E)</tt>
|  | <tt>PAKET(E)</tt> herunterladen
 
 
|-
|-
|}
|}
===  Kommandos ===
Dieses Beispiel verhindert das Installieren einer neueren Version als 2.1.1 des Paketes '''hello''', aber auch die unbeabsichtigte „automatische“ Deinstallation aufgrund von Konflikten.


==== apt-get update ====
===== Hinweis =====
In der '''/etc/apt/preferences''' definiert eine Leerzeile einen neuen Abschnitt für einen weiteren Eintrag. Leerzeilen zwischen <tt>Package</tt>, <tt>Pin</tt> und <tt>Pin-Priority</tt> sind nicht erlaubt!


<tt>update</tt> liest alle in der /etc/apt/sources.list und in '''/etc/apt/sources.list.d/''' eingetragenen Paketquellen neu ein. Hierbei erfolgt eine Prüfung auf die Signatur der Paketlisten. <tt>update</tt> benötigt keine Angabe von Paketnamen.
=== 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.


Dieser Schritt ist vor einem <tt>upgrade</tt>, <tt>dist-upgrade</tt> oder nach dem Hinzufügen einer neuen Quelle zu empfehlen, um die aktuellsten Informationen zu den verfügbaren Paketen zu erhalten.
apt-get -t precise install mplayer-custom


sudo apt-get [Option(en)] update 
=== 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''
==== apt-get upgrade ====
* '''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''


<tt>upgrade</tt> bringt die installierten Pakete auf den neuesten in den Paketquellen verfügbaren Stand. Hierbei werden weder neue Pakete installiert noch durch neue Abhängigkeiten unnötig gewordene Pakete deinstalliert. <tt>upgrade</tt> benötigt keine Angabe von Paketnamen.
Die genauen Werte können mittels <tt>apt-cache policy</tt> nachgeschlagen werden. Hier ein Ausschnitt aus der Ausgabe dieses Kommandos.


sudo apt-get [Option(en)] upgrade  
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


==== apt-get dist-upgrade ====
Die Werte aus den release-Zeilen können ganz oder teilweise zum Pinning übernommen werden.


<tt>dist-upgrade</tt> bringt die installierten Pakete auf den neuesten in den Paketquellen verfügbaren Stand. Hierbei werden im Gegensatz zu <tt>upgrade</tt> neue Pakete installiert und durch neue Abhängigkeiten unnötig gewordene Pakete ersetzt, auch wenn dies alte Abhängigkeiten beeinflusst. <tt>dist-upgrade</tt> benötigt keine Angabe von Paketnamen.
=== 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


sudo apt-get [Option(en)] dist-upgrade 
Das Paket mit der höchsten Punktzahl wird bevorzugt.


===== Hinweis =====
=== 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.


<tt>dist-upgrade</tt> führt kein Upgrade auf eine neue Ubuntu-Version durch.  
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):


==== apt-get install ====
{|
|-
|| Package: *
Pin: release a=ARCHIV*
Pin-Priority: 1001
|-
|}
Dabei ist <tt>ARCHIV</tt> durch den Codenamen der jeweiligen Ubuntuversion zu ersetzen. Der Stern <tt><nowiki>*</nowiki></tt> sollte nach dem Codenamen gesetzt werden, damit auch Pakete aus den ''-updates'' und ''-security''-Quellen berücksichtigt werden. Codenamen sind: <tt>hardy</tt>, <tt>lucid</tt>, <tt>oneiric</tt>, <tt>precise</tt>, <tt>quantal</tt>, ...


<tt>install</tt> lädt das Paket bzw. die Pakete inklusive der noch nicht installierten Abhängigkeiten (und eventuell der vorgeschlagenen weiteren Pakete) herunter und installiert diese.
Anschließend sollte das Upgrade bzw. Downgrade der Pakete durchgeführt werden:


Wendet man <tt>install</tt> auf ein bereits installiertes Paket an, wird dieses unabhängig vom aktuellen Status als "manuell installiert" markiert. <tt>install</tt> benötigt die Angabe mindestens eines Paketnamens, es können beliebig viele Pakete gleichzeitig angegeben werden. Diese werden durch ein Leerzeichen voneinander getrennt.
sudo apt-get dist-upgrade


sudo apt-get [Option(en)] install PAKET1 [PAKET2] 
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.


==== apt-get clean ====
===== Hinweis =====
Bis einschließlich Ubuntu 10.04 kann kein Globbing beim Archivnamen verwendet werden (Schreibweise mit Stern <tt><nowiki>*</nowiki></tt>). Stattdessen müssen alle Archive ausgeschrieben werden:


<tt>clean</tt> löscht die bereits heruntergeladenen Installationsdateien aus dem Paket-Cache '''/var/cache/apt/archives/''' und gibt so Festplattenspeicher frei. <tt>clean</tt> benötigt keine Angabe von Paketnamen.
{|
|-
|| Package: *
Pin: release a=ARCHIV
Pin-Priority: 1001


sudo apt-get [Option(en)] clean 
Package: *
Pin: release a=ARCHIV-updates
Pin-Priority: 1001


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


<tt>remove</tt> deinstalliert ein oder mehrere Paket(e). Die Konfigurationsdateien, die durch die manuelle oder Autokonfiguration des Pakets erstellt wurden, bleiben erhalten. <tt>remove</tt> benötigt die Angabe mindestens eines Paketnamens.
Package: *
Pin: release a=ARCHIV-backports
Pin-Priority: 1001


Wenn mehrere Pakete gleichzeitig gelöscht werden sollen, müssen diese durch Leerzeichen voneinander getrennt werden.
|-
|}
===== 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.


sudo apt-get [Option(en)] remove PAKET1 [PAKET2] 
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.


==== apt-get autoremove ====
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.


<tt>autoremove</tt> deinstalliert nicht mehr benötigte Pakete, die als Abhängigkeit installiert wurden. <tt>autoremove</tt> kann auf zwei Arten verwendet werden:# Ohne Angabe eines Paketnamens. Hierbei werden alle zur Zeit nicht mehr benötigten Abhängigkeiten deinstalliert (<tt>remove</tt>)
====== Achtung! ======
# Mit Angabe eines oder mehrerer Paketnamen. Hierbei wird zuerst das oder die angegebenen Paket(e) deinstalliert (<tt>remove</tt>), dann die frei gewordenen Abhängigkeiten deinstalliert.
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 ("<tt>precise</tt>") in der Version 1.6.17 und für Ubuntu 12.10 ("<tt>quantal</tt>") in der Version 1.7.5 vor.


<tt>autoremove</tt> benötigt keine Angabe von Paketnamen:
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:


sudo apt-get [Option(en)] autoremove [PAKET1] [PAKET2] 
{|
|-
|| 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):


==== apt-get autoclean ====
{|
|-
|| Package: subversion
Pin: version 1.6*
Pin-Priority: 1001


<tt>autoclean</tt> löscht alle heruntergeladenen Paketinstallationsdateien, die aktuell nicht mehr in den Quellen verfügbar sind (Unterschied: <tt>clean</tt> löscht ausnahmslos alle Installationsdateien). <tt>autoclean</tt> benötigt keine Angabe von Paketnamen:
Package: *
Pin: release v=12.04, l=Ubuntu
Pin-Priority: -1
|-
|}
Nun kann nach Aktualisieren der Paketlisten mit "<tt>apt-get update</tt>" '''subversion''' aus den Ubuntu 12.04 Quellen installiert werden .


sudo apt-get [Option(en)] autoclean 
Wurde es bereits installiert, wird es mit "<tt>apt-get dist-upgrade</tt>" automatisch gedowngradet.


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


<tt>purge</tt> kann auf zwei Arten verwendet werden:# Zur Deinstallation eines Pakets inklusive Löschung der globalen Konfiguration. Dies entspricht <tt>remove</tt> mit dem Parameter <tt>--purge</tt>
== apt-cache ==
# Zum Löschen der globalen Konfiguration eines Pakets nach der Deinstallation mit <tt>remove</tt>
'''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 ''Paket''namens. Generell kann man apt-cache als normaler Benutzer ausführen , vereinzelte Optionen können Root-Rechte erfordern.


<tt>purge</tt> benötigt die Angabe mindestens eines Paketnamens. Sollen mehrere Pakete und ihre globalen Konfigurationsdateien gelöscht werden, werden diese durch Leerzeichen voneinander getrennt.
apt-cache [Option(en)] Kommando [Paket]


Der gleiche Effekt lässt sich mit dem Kommando <tt>remove --purge</tt> erzielen.
{|
|-
| colspan="2" | '''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 ''Paket''s 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 ''Paket''e.
|-
| | '''rdepends '''
| | Zeigt eine Liste der Pakete, die vom eingegebenen ''Paket'' abhängen.
|-
| | '''pkgnames '''
| | Zeigt eine Liste von ''Paket''namen, die mit dem Suchbegriff anfangen.
|-
| | '''dotty '''
| | Erstellt einen Graphen der Abhängigkeiten des ''Paket''s, der mit '''dotty''' verarbeitet werden kann.
|-
| | '''xvcg '''
| | Erstellt einen Graphen der Abhängigkeiten des ''Paket''s, der mit '''xvcg''' verarbeitet werden kann.
|-
| | '''policy '''
| | Zeigt die Prioritäten der Quellen oder eines ''Paket''s an.
|-
| | '''madison '''
| | Zeigt die verfügbaren Versionen eines ''Paket''s in den verschiedenen Quellen an.


sudo apt-get [Option(en)] purge PAKET1 [PAKET2] 
|-
|}
==== apt-cache add ====
<tt>add</tt> fügt einen in einer ''Datei'' gespeicherten Paketindex dem Paketcache hinzu. add fehlt in der deutschen Übersetzung der Manpage.


==== apt-get build-dep ====
apt-cache add DATEI


<tt>build-dep</tt> installiert die zum Erstellen von Paket aus dem Quelltext nötigen Abhängigkeiten. <tt>build-dep</tt> benötigt die Angabe mindestens eines Paketnamens.
==== apt-cache gencaches ====
<tt>gencache</tt> baut den Paketcache sowie die Liste der installierten Programme neu auf und prüft auf fehlende Abhängigkeiten.


sudo apt-get [Option(en)] build-dep PAKET1 [PAKET2] 
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.


==== apt-get check ====
sudo apt-cache gencaches


<tt>check</tt> überprüft die Liste der installierten Pakete auf Abhängigkeitsfehler. <tt>check</tt> benötigt keine Angabe eines Paketnamens.
==== apt-cache showpkg ====
<tt>showpkg</tt> 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.


sudo apt-get [Option(en)] check 
showpkg benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.


==== apt-get source ====
apt-cache showpkg PAKET1 [PAKET2]


<tt>source</tt> lädt das Quelltext-Paket des Pakets in das aktuelle Verzeichnis herunter, damit man diesen selbst kompilieren kann. <tt>source</tt> benötigt die Angabe eines Paketnamens, aber keine Root-Rechte.
==== apt-cache stats ====
<tt>stats</tt> zeigt eine ausführliche Übersicht der Statistiken zum Paketcache an, unter anderem die Anzahl der gelisteten ''Paket''e und die Größe im Dateisystem. Es sind keine weiteren Optionen erforderlich.


apt-get [Option(en)] source PAKET1 
apt-cache stats


==== apt-get help ====
==== apt-cache showsrc ====
<tt>showsrc</tt> zeigt detaillierte Informationen zum verfügbaren Quelltext eines ''Paket''s an.


<tt>help</tt> zeigt den Hilfetext an. Er kann auch via Option <tt>-h</tt> oder <tt>--help</tt> aufgerufen werden. Eine ausführliche Informationsseite findet man in der Manpage zu apt-get.
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 ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.


apt-get help
apt-cache showsrc PAKET1 [PAKET2]


==== apt-get dselect-upgrade ====
==== apt-cache dump ====
<tt>dump</tt> zeigt eine Liste aller verfügbaren ''Paket''e im Paketcache an, inklusive der Abhängigkeiten und weiteren Informationen zum Paketcache. Diese Informationen werden nur im Fehlerfall benötigt.


<tt>dselect-upgrade</tt> führt die von dselect gemachten oder manuell markierten Änderungen aus. <tt>dselect-upgrade</tt> benötigt keine Angabe eines Paketnamens.
apt-cache dump


sudo apt-get [Option(en)] dselect-upgrade 
==== apt-cache dumpavail ====
<tt>dumpavail</tt> zeigt eine Liste aller verfügbaren ''Paket''e im Paketcache, der Programmversionen und der zugehörigen Paketbeschreibungen an.


==== apt-get markauto ====
apt-cache dumpavail


<tt>markauto</tt> markiert die übergebenen Pakete als ''automatisch installiert''. <tt>markauto</tt> benötigt die Angabe mindestens eines Paketnamens.
==== apt-cache unmet ====
<tt>unmet</tt> zeigt eine Liste der nicht erfüllten Abhängigkeiten an. Diese Liste beinhaltet auch die nicht installierten ''Vorschläge'' der ''Paket''e. unmet kann mit und ohne Angabe von Paketnamen aufgerufen werden.


sudo apt-get [Option(en)] markauto PAKET1 [PAKET2]
Wird unmet ohne ''Paket''namen aufgerufen, werden die Informationen für alle installierten Paket(e) ausgegeben.


==== apt-get unmarkauto ====
Gibt man bestimmte ''Paket''namen an, müssen diese durch Leerzeichen getrennt angegeben werden.


<tt>unmarkauto</tt> markiert die übergebenen Pakete als ''"manuell installiert"''. <tt>unmarkauto</tt> benötigt die Angabe mindestens eines Paketnamens.
apt-cache unmet
apt-cache unmet PAKET1 [PAKET2]


sudo apt-get [Option(en)] unmarkauto PAKET1 [PAKET2]
==== apt-cache show ====
<tt>show</tt> zeigt detaillierte Informationen zu einem oder mehreren ''Paket''en an.


==== apt-get changelog ====
Diese Informationen beinhalten eine Liste der Abhängigkeiten, eine Beschreibung und die angebotene Version. show benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.


<tt>changelog</tt> lädt den Änderungsbericht (Changelog) des angegebenen Paket herunter und zeigt ihn an. <tt>changelog</tt> benötigt sinnvollerweise die Angabe eines Paketnamens, aber keine Root-Rechte.
In diesem Fall werden die Informationen nacheinander ausgegeben.


apt-get [Option(en)] changelog PAKET
apt-cache show PAKET1 [PAKET2]


==== apt-get download ====
==== apt-cache search ====
<tt>search</tt> durchsucht den Paketcache in den Namen und Beschreibungsfeldern nach dem ''Suchbegriff'' und gibt die entsprechenden ''Paketnamen'' aus.


<tt>download</tt> funktioniert erst ab Ubuntu 11.04 und lädt die Installationsdateien des angegebenen Pakets in das aktuelle Verzeichnis herunter. <tt>download</tt> benötigt die Angabe mindestens eines Paketnamens, aber ebenfalls keine Root-Rechte.
Der ''Suchbegriff'' kann auch ein Regulärer Ausdruck sein. Werden mehrere ''Suchbegriff''e angegeben, werden ausschließlich Pakete angeben, in deren Beschreibung alle Begriffe gefunden wurden.


apt-get [Option(en)] download PAKET1 [PAKET2]
apt-cache search SUCHBEGRIFF


Unter älteren Ubuntu-Versionen kann man stattdessen die Option <tt>-d</tt> (siehe unten) verwenden:
==== apt-cache depends ====
<tt>depends</tt> gibt eine Liste der Pakete an, von denen das genannte ''Paket'' abhängt. depends benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.


sudo apt-get -d --reinstall install PAKET1 [PAKET2]  
apt-cache depends PAKET1 [PAKET2]


Die heruntergeladenen Pakete sind dann im Ordner '''/var/cache/apt/archives/''' zu finden.
==== apt-cache rdepends ====
<tt>rdepends</tt> gibt eine Liste der Pakete an, die vom genannten ''Paket'' abhängen, die Reverse Depends (Rückwärtsabhängigkeiten).


===  Optionen ===
rdepends benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.


apt-get bietet zahlreiche Schalter, um das Verhalten zu beeinflussen.
In diesem Fall werden die Informationen nacheinander ausgegeben.


apt-cache rdepends PAKET1 [PAKET2]
==== apt-cache pkgnames ====
<tt>pkgnames</tt> gibt zu einem ''Suchbegriff'' eine Liste von ''Paket''en 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.
|-
| colspan="3" | Kommandozeilenoptionen zu apt-get
|-
|  | Lange Option
|  | Kürzel
|  | Beschreibung
|-
|  | <tt>--arch-only</tt>
|  |
|  | Nur Pakete mit der zum System passenden Architektur werden heruntergeladen.
|-
|  | <tt>--assume-yes</tt> <tt>--yes</tt>
|  | <tt>-y</tt>
|  | Interaktive Fragen werden automatisch mit "YES"/"JA" beantwortet
|-
|  | <tt>--compile</tt> <tt>--build</tt>
|  | <tt>-b</tt>
|  | Den Quelltext kompilieren, nachdem er heruntergeladen wurde. Benutzung in Verbindung mit <tt>source</tt>.
|-
|  | <tt>--config-file</tt>
|  | <tt>-c</tt>
|  | Die angegebene Konfigurationsdatei benutzen, die die Standardkonfiguration ersetzt.
|-
|  | <tt>--diff-only</tt>
|  |
|  | Nur das Diff-File eines Patchsets herunterladen.
|-
|  | <tt>--download-only</tt>
|  | <tt>-d</tt>
|  | Pakete werden nur heruntergeladen, nicht installiert.
|-
|  | <tt>--fix-broken</tt>
|  | <tt>-f</tt>
|  | Fehl ende Abhängigkeiten werden nachinstalliert, kaputte Pakete werden eventuell deinstalliert. Es erlaubt die Nutzung von <tt>install</tt> oder <tt>remove</tt> ohne Angabe von Paketnamen.
|-
|  | <tt>--fix-missing</tt> <tt>--ignore-missing</tt>
|  | <tt>-m</tt>
|  | Nicht downloadbare Pakete werden auf "hold" gesetzt. In Verbindung mit <tt>--no-download</tt> werden nur Pakete im Paket-Cache benutzt.
|-
|  | <tt>--force-yes</tt>
|  |
|  | Ausnahmslos alle Rückfragen mit "YES"/"JA" beantwortet, auch wenn die Fragen als "kritisch" gekennzeichnet sind. Sehr gefährliche Option!
|-
|  | <tt>--ignore-hold</tt>
|  |
|  | Ein Paket wird trotz gesetztem Status "hold" auf die neueste Version gebracht.
|-
|  | <tt>--install-suggests</tt>
|  |
|  | Vorgeschlagene Pakete werden mitinstalliert.
|-
|  | <tt>--list-cleanup</tt>
|  |
|  | apt löscht nach <tt>update</tt> gespeicherte Listen aus Quellen, die nicht mehr in der sources.list stehen (standardmäßig aktiv).
|-
|  | <tt>--no-install-recommends</tt>
|  |
|  | Empfohlene Pakete werden nicht automatisch installiert.
|-
|  | <tt>--no-list-cleanup</tt>
|  |
|  | apt behält nach <tt>update</tt> die Paketlisten nicht mehr existenter Quellen der sources.list. Nützlich bei häufigem Wechsel des Mirrors.
|-
|  | <tt>--no-upgrade</tt>
|  |
|  | Bereits installierte Pakete werden auf dem alten Stand belassen und nicht auf die neueste Version gebracht. In Verbindung mit <tt>install</tt> ist es so eventuell möglich, alte Abhängigkeiten beizubehalten.
|-
|  | <tt>--only-upgrade</tt>
|  |
|  | Ausschließlich bereits installierte Pakete werden auf eine neue Version gebracht, keine neuen Pakete werden installiert.
|-
|  | <tt>--option</tt>
|  | <tt>-o</tt>
|  | Option: Die angegebene Option benutzen, statt dem in der Standardkonfiguration festgelegten Wert.
|-
|  | <tt>--print-uris</tt>
|  |
|  | Ausgabe der "download URIs" statt Herunterladen der Quellen bzw Pakete in Verbindung mit <tt>update</tt> oder <tt>install</tt>.
|-
|  | <tt>--purge</tt>
|  |
|  | Wird in Verbindung mit <tt>remove</tt> oder <tt>autoremove</tt> benutzt. Es werden zusätzlich zu den Paketen Konfigurationsdateien gelöscht.
|-
|  | <tt>--quiet</tt>
|  | <tt>-q</tt>
|  | Programmausgabe ohne Fortschrittsanzeige mit logbarer Ausgabe. Erhöhung des "Stille"-Levels mit <tt>-qq</tt> möglich. <tt>-qq</tt> impliziert <tt>-y</tt>, um einen automatischen Ablauf zu ermöglichen.
|-
|  | <tt>--reinstall</tt>
|  |
|  | Ein bereits installiertes Paket wird in Verbindung mit <tt>install</tt> neu aus den Quellen installiert, obwohl es bereits auf der aktuellen Version ist.
|-
|  | <tt>--show-upgraded</tt>
|  | <tt>-u</tt>
|  | Ausgabe einer Liste aller Pakete, die auf die neueste Version gebracht werden.
|-
|  | <tt>--simulate</tt> <tt>--just-print</tt> <tt>--dry-run</tt> <tt>--recon</tt> <tt>--no-act</tt>
|  | <tt>-s</tt>
|  | Die angedachten Änderungen werden simuliert, keine Änderung am System. Seit Version ?? ohne Root-Rechte möglich.
|-
|  | <tt>--tar-only</tt>
|  |
|  | Ausschließlich das TAR-File des Quelltextes herunterladen.
|-
|  | <tt>--target-release</tt> <tt>--default-release</tt>
|  | <tt>-t</tt>
|  | Setzt die Priorität für die Quellen des genannten Release-Namens auf 990.
|-
|  | <tt>--trivial-only</tt>
|  |
|  | Gegenstück zu <tt>--assume-yes</tt>. Alle Fragen werden mit "NO" beantwortet, so dass nur unkritische Operationen automatisch ausgeführt werden.
|-
|  | <tt>--verbose-versions</tt>
|  | <tt>-V</tt>
|  | Die Textausgabe der heruntergeladenen Daten wird um die vollen Versionsangaben erweitert.  


apt-cache pkgnames SUCHBEGRIFF


|-
==== apt-cache dotty ====
|}
<tt>dotty</tt> erstellt aus den Abhängigkeiten der genannten ''Paket''e eine Vorlage, die mit '''dot''' zu einem Graph weiterverarbeitet werden kann.
===== Hinweis =====


Wie bei Shell-Befehlen üblich, lassen sich kurze Optionen zu einem Block zusammenfassen. Beispiel:
Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. dotty benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.


apt-get -s -t lucid update
apt-cache dotty PAKET1 [PAKET2]


lässt sich zusammenfassen in
===== Auswertung von dotty =====
Zur Umwandlung der Ausgabe wird <tt>dot</tt> aus dem Paket Graphviz - Graph Visualization Software genutzt:


apt-get -st lucid update
sudo apt-get install graphviz


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


==== Deinstallation inklusive Abhängigkeiten und Konfiguration ====
APT::Cache::GivenOnly "true";


Durch die Kombinationen von Kommando und Optionen hat man die Möglichkeit, mehrere Aktionen zu bündeln. Zum Beispiel die Deinstallation eines Pakets, der dann nicht mehr benötigten Abhängigkeiten sowie die Löschung der zugehörigen systemweiten Konfiguration des Pakets.
in der APT-Konfiguration.


sudo apt-get --purge autoremove PAKET
Die Option kann aber auch direkt beim Aufruf übergeben werden.


===== Hinweis =====
==== apt-cache xvcg ====
<tt>xvcg</tt> erstellt aus den Abhängigkeiten der genannten ''Paket''e eine Vorlage, die mit '''xvcg''' zu einem Graph weiterverarbeitet werden kann.


Viele Anwendungsprogramme legen ihre spezifische Konfiguration durch den Benutzer in dessen Homeverzeichnis ab. Diese Daten werden niemals automatisch gelöscht.  
Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. xvcg benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. Die Weiterverarbeitung benötigt die VCG Tools.


==== Beispielskripte ====
apt-cache xvcg PAKET1 [PAKET2]


Der Ablauf eines "update"-Vorgangs lässt sich als Skript abbilden und zum Beispiel mit cron aufrufen.  
==== apt-cache policy ====
<tt>policy</tt> zeigt ohne Angabe eines ''Paket''namens eine Übersicht der Prioritäten der einzelnen Paketquellen an, mit Angabe von ''Paket''namen eine Übersicht der verfügbaren Versionen und der Prioritäten ihrer Quellen.


Hier werden einige Beispiele je nach gewünschtem Ergebnis gezeigt, die allerdings nur einen kleinen Teil der Möglichkeiten von <tt>apt</tt> nutzen.
Mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.


===== Halbautomatische Aktualisierung =====
apt-cache policy


Falls man bei einem selten kontrollierten Rechner die Aktualisierungen vor dem Einspielen zwar einsehen möchte, aber den Zeitaufwand möglichst gering halten will, bietet sich (von diversen Automatismen abgesehen) folgender Ablauf an:
oder


apt-cache policy PAKET1 [PAKET2]


{|
==== apt-cache madison ====
|-  
<tt>madison</tt> zeigt eine tabellarische Übersicht, der in den Paketquellen verfügbaren Versionen eines Programms, an. madison benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.
|| <nowiki>#!/bin/bash</nowiki>
apt-get update
apt-get -d dist-upgrade
apt-get autoclean
|-
|}
Hier werden zuerst die Paketlisten auf den neuesten Stand gebracht, dann vorhandene Aktualisierungspakete heruntergeladen und schließlich in den Quellen nicht mehr vorhandene Pakete aus dem Cache gelöscht, um Speicherplatz zu sparen. Dieser Ablauf kann automatisiert werden, so dass bei der nächsten Anmeldung die nötigen Pakete für einen "update"-Vorgang bereits vorliegen.


===== Automatische Sicherheitsaktualisierung =====
In diesem Fall werden die Informationen nacheinander ausgegeben.
 
Zusätzlich zum zuvor beschriebenen Verfahren kann man auch sicherheitskritische Aktualisierungen sofort einspielen:
 
 
{|
|-
|| <nowiki>#!/bin/bash</nowiki>
apt-get update
apt-get -yt $(lsb-release -s)-security dist-upgrade
apt-get -d dist-upgrade
apt-get autoclean


apt-cache madison PAKET1 [PAKET2]


=== Optionen ===
{|
|-
| colspan="3" | '''Kommandozeilenoptionen zu apt-cache '''
|-
|-
|}
| | '''Lange Option '''
===== Automatische Sicherheitsaktualisierung  =====
| | Kürzel
 
| | Beschreibung
====== mit Einspielen unkritischer Pakete¶ ======
 
Zusätzlich kann man unkritische Aktualisierungen auch automatisch einspielen und nur noch diejenigen Pakete manuell aktualisieren, die eine Nachfrage stellen:
 
==  apt-Kommandos ==
 
Diese Seite gibt einen Überblick über weitere Befehle aus dem APT-Komplex, sowie apt-file.
 
 
{|
|-
| colspan="2" | '''Weitere APT-Befehle '''
|-
|-
| | '''apt-mark '''
| | <tt>'''--pkg-cache</tt> '''
| | Markiert Pakete als automatisch/manuell installiert.  
| | <tt>-p</tt>
| | Angabe der Datei, in der der Paketcache gespeichert wird.
|-
|-
| | '''apt-extracttemplates '''
| | <tt>'''--src-cache</tt> '''
| | Extrahiert debconf-Dateien aus Paketen.  
| | <tt>-s</tt>
| | Angabe der Datei, in der der Paketcache beim Herunterladen zwischengespeichert wird.
|-
|-
| | '''apt-ftparchive '''
| | <tt>'''--quiet</tt> '''
| | Generiert Paketindex für Paketquellen.  
| | <tt>-q</tt>
| | Ausgabe erzeugen, die weiterverarbeitet werden kann, z.B. Unterdrückung des Fortschrittsbalkens. <tt>-qq</tt> unterdrückt mehr Meldungen als <tt>-q</tt>.
|-
|-
| | '''apt-cdrom '''
| | <tt>'''--important</tt> '''
| | Verwaltung von Paketquellen auf CD-ROM.  
| | <tt>-i</tt>
| | Nur Abhängigkeiten und deren Abhängigkeiten in '''unmet''' und '''depends''' anzeigen.
|-
|-
| | '''apt-sortpkgs '''
| | <tt>'''--no-pre-depends</tt> <tt>--no-depends</tt> <tt>--no-recommends</tt> <tt>--no-suggests</tt> <tt>--no-conflicts</tt> <tt>--no-breaks</tt> <tt>--no-replaces</tt> <tt>--no-enhances</tt> '''
| | Sortiert Paketindexdateien nach Paketname.
| |
| | Beeinflussen die Ausgabe von '''depends''' und '''rdepends'''
|-
|-
| | '''apt-config '''
| | <tt>'''--full</tt> '''
| | Zeigt die APT-Konfiguration an.  
| | <tt>-f</tt>
| | Ausgabe der kompletten Paketeinträge bei der Suche.
|-
|-
| | '''apt-file '''
| | <tt>'''--all-versions</tt> '''
| | Dateisuche in Paketen auf einem (entfernten) Paketserver.  
| | <tt>-a</tt>
 
| | Ausgabe aller verfügbaren Versionen (Kandidaten) bei der Suche nach einem ''Paket''.
 
|-
|-
|}
| | <tt>'''--no-all-versions</tt> '''
===  Kommandos ===
| |
 
| | Ausgabe der neuesten verfügbaren Version (Kandidat) bei der Suche nach einem ''Paket''.
==== 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)]
 
 
{|  
|-
| colspan="2" | '''Kommandos von apt-mark '''
|-
|-
| | <tt>'''auto PAKET(E)</tt> '''
| | <tt>'''--generate</tt> '''
| | Setzt den erweiterten Paketstatus für <tt>PAKET(E)</tt> auf "automatisch installiert".  
| | <tt>-g</tt>
| | Cache wird bei jedem Aufruf regeneriert. (Standard)
|-
|-
| | <tt>'''manual PAKET(E)</tt> '''
| | <tt>'''--no-generate</tt> '''
| | Setzt den erweiterten Paketstatus für <tt>PAKET(E)</tt> auf "manuell installiert".  
| |
| | Cache wird ohne automatische Regeneration benutzt.
|-
|-
| | <tt>'''hold PAKET(E)</tt> '''
| | <tt>'''--names-only</tt> '''
| | Setzt den Paketstatus für <tt>PAKET(E)</tt> auf "festgesetzt". Dies ist äquivalent zu dem dpkg-Kommando "<tt>echo "PAKET hold" | dpkg --set-selections</tt>".  
| | <tt>-n</tt>
| | Beschränkt die Suche auf die ''Paket''namen. Standard: Suche in ''Paket''namen und -beschreibung.
|-
|-
| | <tt>'''unhold PAKET(E)</tt> '''
| | <tt>'''--all-names</tt> '''
| | Setzt den Paketstatus für <tt>PAKET(E)</tt> von "festgesetzt" zurück (idR. auf "installiert"). Dies ist äquivalent zu dem dpkg-Kommando "<tt>echo "PAKET install" | dpkg --set-selections</tt>" (der Status <tt>install</tt> kann abweichen).  
| |
| | Zwingt '''pkgnames''', auch virtuelle ''Paket''e und fehlende Abhängigkeiten auszugeben.
|-
|-
| | <tt>'''showauto [PAKET(E)]</tt> '''
| | <tt>'''--recurse</tt> '''
| | Ohne Parameter werden alle als "automatisch installiert" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "automatisch installiert" markierten Pakete ausgegeben.  
| |
| | Ermöglicht '''depends''' und '''rdepends''' eine rekursive Ausgabe, so dass alle Abhängigkeiten in einer Ausgabe erscheinen.
|-
|-
| | <tt>'''showmanual [PAKET(E)]</tt> '''
| | <tt>'''--installed</tt> '''
| | Ohne Parameter werden alle als "manuell installiert" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "manuell installiert" markierten Pakete ausgegeben.  
| |
| | Beschränkt die Ausgabe von '''depends''' und '''rdepends''' auf installierte ''Paket''e.
|-
|-
| | <tt>'''showhold [PAKET(E)]</tt> '''
| | <tt>'''--help</tt> '''
| | Ohne Parameter werden alle als "festgesetzt" markierten Pakete ausgegeben. Wird eine Paketliste übergeben, werden davon nur die als "festgesetzt" markierten Pakete ausgegeben.  
| | <tt>-h</tt>
 
| | Gibt einen kurzen Hilfetext aus und beendet das Programm.
 
|-
|-
|}
| | <tt>'''--version</tt> '''
===== Optionen zu apt-mark =====
| | <tt>-v</tt>
 
| | Gibt die Version aus und beendet das Programm.
 
{|  
|-  
| colspan="3" | Kommandozeilenoptionen zu apt-mark
|-
|-
| | <tt>'''--version</tt> '''
| | <tt>'''--config-file</tt> '''
| | <tt>-v</tt>  
| | <tt>-c</tt>
| | Gibt die Versionsnummer aus.  
| | Ermöglicht die Angabe einer alternativen Konfigurationsdatei, die von der Standardkonfiguration abweicht.
|-
|-
| | <tt>'''--help</tt> '''
| | <tt>'''--option</tt> '''
| | <tt>-h</tt>  
| | <tt>-o</tt>
| | Zeigt den Hilfetext an.
| | Ermöglicht die Angabe einzelner abweichender Optionen bei Benutzung der Standardkonfiguration.
|-
|  | <tt>'''--file=DATEI</tt> '''
|  | <tt>-f=DATEI</tt>
|  | Liest/Speichert die Informationen in <tt>DATEI</tt>, statt dem Standardwert <tt>Dir::State</tt>.  
 


|-
|-
|}
|}
==== apt-extracttemplates ====
=== Beispiele ===
===== Bezug zu einem Paket =====
Steht ein ''Paket'' im Bezug zu einem anderen Paket, wird dies im Beschreibungstext erwähnt.


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-cache -f search PROGRAMM


apt-extracttemplates [OPTION(EN)] DATEI.deb
sucht nach ''Programm'' in allen ''Paket''namen und -beschreibungen und gibt anschließend die kompletten Informationen aus.


Es kennt die folgenden Kommandozeilenoptionen:
===== 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.
|-
| colspan="3" | Kommandozeilenoptionen zu apt-extracttemplates
|-
|  | <tt>'''--tempdir</tt> '''
|  | <tt>-t</tt>
|  | Speichert die extrahierten Skripte und Templates in einem anderen temporären Verzeichnis als im Standardwert <tt>APT::ExtractTemplates::TempDir</tt> angegeben.
|-
|  | <tt>'''--configfile</tt> '''
|  | <tt>-c</tt>
|  | Gibt alternative Konfigurationsdatei an.
|-
|  | <tt>'''--option</tt> '''
|  | <tt>-o</tt>
|  | Überschreibt einzelne Werte der Standardkonfiguration für diesen Durchlauf.
|-
|  | <tt>'''--version</tt> '''
|  | <tt>-v</tt>
|  | Gibt die Versionsnummer aus.
|-
|  | <tt>'''--help</tt> '''
|  | <tt>-h</tt>
|  | Zeigt den Hilfetext an.  


===== Ausgabe der Abhängigkeiten eines Pakets =====
apt-cache depends PAKET


|-
===== Ausgabe der Paketstruktur mit dotty =====
|}
Im Beispiel wird das Paket <tt>xterm</tt> untersucht und der Graph als PNG ausgegeben.
==== apt-ftparchive ====


apt-ftparchive erstellt die Indexdateien (Indizes), die zum Betreiben einer Paketquelle nötig sind.
apt-cache -o APT::Cache::GivenOnly=true dotty xterm | dot -Tpng > beispiel.png


sudo apt-ftparchive [OPTION(EN)] KOMMANDO PFAD
Die Ausgabe von <tt>apt-cache</tt> wird mit einer Umleitung an das Graphviz-Werkzeug <tt>dot</tt> übergeben, um eine Grafik (hier im PNG-Format, andere Formate sind möglich, siehe Manpage von <tt>dot</tt>) 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
|-
| colspan="2" | '''Kommandos von apt-ftparchive '''
|-
|  | <tt>'''packages</tt> '''
|  | Erstellt eine, für eine Paketquelle benötigte, Paketdatei für einen Verzeichnisbaum (mit Paketen).
|-
|  | <tt>'''sources</tt> '''
|  | Erstellt eine, für eine Quelltextpaketquelle benötigte, Quelltextpaketdatei für einen Verzeichnisbaum (mit Quelltextpaketen).
|-
|  | <tt>'''contents</tt> '''
|  | Erstellt ein Inhaltsverzeichnis der Pakete. Diese kann dann z.B. mit apt-file durchsucht werden.
|-
|  | <tt>'''release</tt> '''
| Erstellt eine, für eine (Quelltext)Paketquelle benötigte, Releasedatei für einen Verzeichnisbaum (mit Paket- und Quelltextpaketdateien).
|-
|  | <tt>'''generate</tt> '''
|  | Automatisierung des Indexierungsprozesses.
|-
|  | <tt>'''clean</tt> '''
|  | Aufräumen der Datenbank.  


== 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.
|}
===== apt-ftparchive packages =====


<tt>packages</tt> sucht im angegebenen <tt>PFAD</tt> 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.
=== Installation ===
Das Programm ist nicht in der Standardinstallation enthalten und kann mit dem Paket


sudo apt-ftparchive [OPTION(EN)] packages PFAD
sudo apt-get install apt-file


===== apt-ftparchive sources =====
zum System hinzugefügt werden.


<tt>sources</tt> sucht im angegebenen <tt>PFAD</tt> 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.
=== Bedienung ===
Nach der Installation müssen zunächst die Paketinhalte neu synchronisiert werden. Dies geschieht mit


sudo apt-ftparchive [OPTION(EN)] sources PFAD
apt-file update


===== apt-ftparchive contents =====
Sollen die Inhalte für alle Benutzer geladen werden, muss der Befehl als Administrator ausgeführt werden.


<tt>contents</tt> sucht im gegebenen <tt>PFAD</tt> nach Paketdateien und erstellt ein Inhaltsverzeichnis dieser Dateien. Diese Informationen können z.B. mit apt-file durchsucht werden.
apt-file wird im Terminal ausgeführt . Die Grundsyntax sieht folgendermaßen aus:


sudo apt-ftparchive [OPTION(EN)] contents PFAD
apt-file OPTION BEFEHL


===== apt-ftparchive release =====
==== Kommandos ====
 
{|
<tt>release</tt> sucht im angegebenen <tt>PFAD</tt> nach Paket- und Quellpaketindexdateien (und ihren komprimierten Formen) und erstellt eine Releasedatei mit Prüfsummen der Indexdateien und weiteren Informationen zur Paketquelle.
|-
 
| | '''BEFEHL '''
sudo apt-ftparchive [OPTION(EN)] release PFAD
| | '''Bedeutung '''
 
|-
===== apt-ftparchive generate =====
| | '''update '''
 
| | Synchronisiert die Paketinhalte mit den Quellen. Empfohlen nach Änderung an den Paketquellen.
<tt>generate</tt> 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 =====
 
<tt>clean</tt> 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 =====
 
 
{|
|-
| colspan="3" | Kommandozeilenoptionen zu apt-ftparchive
|-
|-
| | <tt>'''--db</tt> '''
| | '''search SUCHMUSTER '''
| | <tt>-d</tt>  
| | Sucht in allen bekannten Paketen nach <tt>SUCHMUSTER</tt>. Sucht nur nach Dateinamen, nicht nach Verzeichnissen.
|  | Angabe einer Datenbank zum Speichern der Ergebnisse. Irrelevant für <tt>generate</tt>.  
|-
|-
| | <tt>'''--md5</tt> '''
| | '''list SUCHMUSTER '''
| |  
| | Listet die Dateien aller Pakete auf, die auf <tt>SUCHMUSTER</tt> passen.
|  | Generiert MD5-Prüfsummen zusätzlich zu SHA1-Prüfsummen. Standardmäßig aktiv.  
|-
|-
| | <tt>'''--quiet</tt> '''
| | '''purge '''
| | <tt>-q</tt>
| | Löscht den Cache
|  | Unterdrückt die Ausgabe von Fortschrittsanzeigen. Damit kann die Programmausgabe z.B. in Logdateien automatisiert verarbeitet werden.
 
|-
|-
| | <tt>'''--delink</tt> '''
|}
|  |
==== Optionen ====
| | Schaltet delinking explizit an. Delinking erzeugt Hardlinks für doppelt vorhandenen Dateien nach einem festgelegten Muster. Beispiel: <tt>11.10/</tt> linkt auf <tt>oneiric/</tt>
{|
|-
|-
| | <tt>'''--no-delink</tt> '''
| | '''Option '''
| |  
| | '''Bedeutung '''
|  | Schaltet delinking expolizit aus.
|-
|-
| | <tt>'''--readonly</tt> '''
| | '''-s DATEI '''
| |  
| | Andere sources.list-Datei nutzen
|  | Nutzt die Cachedatenbank (<tt>--db</tt>) schreibgeschützt (read-only). Neuere Ergebnisse werden nicht gespeichert.
|-
|-
| | <tt>'''--contents</tt> '''
| | '''-c CACHE-VERZEICHNIS '''
| |  
| | Anderes Verzeichnis als Cache nutzen
|  | Speichert das Paketinhaltsverzeichnis in der Cachedatenbank zur späteren Verwendung.
|-
|-
| | <tt>'''--source-override</tt> '''
| | '''-a ARCHITEKTUR '''
| | <tt>-s</tt>
| | Spezifische Architektur benutzen
|  | Angabe einer alternativen Override-Datei für <tt>source</tt>.
|-
|-
| | <tt>'''--arch</tt> '''
| | '''-l '''
| | <tt>-a</tt>
| | Nur Paketnamen anzeigen
| Führe die Aktion nur für die angegebene Architektur. Benötigt eine Angabe in der Konfigurationsdatei oder mit <tt>-o</tt>.
|-
|-
| | <tt>'''--configfile</tt> '''
| | '''-x '''
| | <tt>-c</tt>
| | SUCHMUSTER als regulären Ausdruck interpretieren
| Gibt alternative Konfigurationsdatei an.
|-
|-
| | <tt>'''--option</tt> '''
| | '''-v '''
| | <tt>-o</tt>
| | Mehr Informationen anzeigen
| Überschreibt einzelne Werte der Standardkonfiguration.
|-
|-
| | <tt>'''--version</tt> '''
| | '''-y '''
| | <tt>-v</tt>
| | Nur simulieren
| Gibt die Versionsnummer aus.
|-
|-
| | <tt>'''--help</tt> '''
| | '''-h '''
| | <tt>-h</tt>
| | Hilfe anzeigen
| Zeigt den Hilfetext an.
 


|-
|-
|}
|}
==== apt-cdrom ====
=== Beispiele ===
* Auflistung aller Dateien, die zu elinks gehören: <br/>apt-file list elinks
* Suche nach der Datei '''/usr/include/c++/4.6/vector''': <br/>apt-file search /usr/include/c++/4.6/vector


apt-cdrom kennt zwei Kommandos: <tt>ident</tt> und <tt>add</tt>. <tt>ident</tt> identifiziert die aktuelle CD zum Zweck der Fehlersuche. <tt>add</tt> fügt die Paketindizes der CD dem Paketcache hinzu und nutzt die CD als Paketquelle.
== apt-key ==
'''apt-key''' kennt verschiedene Kommandos , die exakt die Aktion angeben, welche mit dem Schlüsselbund ausgeführt wird.


sudo apt-cdrom [OPTION(EN)] -d=CDROM-MOUNTPUNKT add
{|
 
 
{|  
|-
| colspan="3" | '''Kommandozeilenoptionen zu apt-cdrom '''
|-
|-
| | <tt>'''--cdrom</tt> '''
| colspan="2" | '''Kommandos zu apt-key '''
|  | <tt>-d</tt>
|  | mount-Punkt der CD mit APT-Archiven. Der Mountpunkt muss in der fstab aufgelistet sein.
|-
|-
| | <tt>'''--rename</tt> '''
| | '''add '''
| | <tt>-r</tt>
| | Hinzufügen eines neuen Schlüssels.
|  | Das Label einer CDRom übergehen und ein selbstgewähltes Label angeben.  
|-
|-
| | <tt>'''--no-mount</tt> '''
| | '''del '''
| | <tt>-m</tt>
| | Löschen eines Schlüssels.
|  | Verhindert, dass apt-cdrom den angegebenen Mountpunkt ein- und aushängt.  
|-
|-
| | <tt>'''--fast</tt> '''
| | '''export '''
| | <tt>-f</tt>
| | Export eines Schlüssels.
|  | Nimmt an, die Pakete auf dem Datenträger seien valide und übergeht die Prüfung.  
|-
|-
| | <tt>'''--thorough</tt> '''
| | '''exportall '''
| | <tt>-a</tt>
| | Export aller bekannten Schlüssel.
|  | Durchsucht eine CD komplett, statt nur an den Standardorten nach Paketindizes zu suchen.  
|-
|-
| | <tt>'''--just-print</tt> <tt>--recon</tt> <tt>--no-act</tt> '''
| | '''list '''
| | <tt>-n</tt>
| | Ausgabe der bekannten Schlüssel.
|  | Simulation: Das System zeigt etwaige Änderungen nur an, ohne sie auszuführen.  
|-
|-
| | <tt>'''--configfile</tt> '''
| | '''finger '''
| | <tt>-c</tt>
| | Ausgabe der Fingerabdrücke der bekannten Schlüssel.
|  | Gibt alternative Konfigurationsdatei an.  
|-
|-
| | <tt>'''--option</tt> '''
| | '''adv '''
| | <tt>-o</tt>
| | Angabe von erweiterten gpg-Optionen.
|  | Überschreibt einzelne Werte der Standardkonfiguration für diesen Durchlauf.  
|-
|-
| | <tt>'''--version</tt> '''
| | '''update '''
| | <tt>-v</tt>
| | Neuladen des Hauptschlüssels der aktuellen Version und Löschen abgelaufener Schlüssel.
|  | Gibt die Versionsnummer aus.
|-
|  | <tt>'''--help</tt> '''
|  | <tt>-h</tt>
|  | Zeigt den Hilfetext an.  
 


|-
|-
|}
|}
==== apt-sortpkgs ====
=== Kommandos ===
==== apt-key add ====
<tt>add</tt> fügt dem Schlüsselbund einen neuen Schlüssel hinzu.


apt-sortpkgs sortiert Indizes von Paketquellen nach installierbaren Paketen und Quelltextpaketen und gibt diese Liste zur Weiterverarbeitung aus.
Dieser kann entweder in einer ''Datei'' gespeichert sein oder aus dem ''stdin'' - einer Weiterleitung der Ausgabe eines vorherigen Befehls - kommen, was dann durch ein <tt>-</tt> angezeigt wird.


sudo apt-sortpkgs [OPTION(EN)] PAKETINDEX|QUELLENINDEX
sudo apt-key add DATEI


==== Hinweis: ====
oder
 
sudo apt-key add -


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.  
==== apt-key del ====
<tt>del</tt> 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 ====
|-
<tt>export</tt> gibt einen Schlüssel, der durch seine ''ID'' bezeichnet wird, auf ''stdout'' zur Weiterverabeitung aus.
| colspan="3" | '''Kommandozeilenoptionen zu apt-sortpkgs '''
|-
|  | <tt>'''--source</tt> '''
|  | <tt>-s</tt>  
|  | Sortiert Paketquellen, in denen der Quelltext von Programmen bezogen werden kann.
|-
|  | <tt>'''--configfile</tt> '''
|  | <tt>-c</tt>
|  | Gibt alternative Konfigurationsdatei an.
|-
|  | <tt>'''--option</tt> '''
|  | <tt>-o</tt>
|  | Überschreibt einzelne Werte der Standardkonfiguration.
|-
|  | <tt>'''--version</tt> '''
|  | <tt>-v</tt>
|  | Gibt die Versionsnummer aus.
|-
|  | <tt>'''--help</tt> '''
|  | <tt>-h</tt>
|  | Zeigt den Hilfetext an.  


apt-key export ID


|-
==== apt-key exportall ====
|}
<tt>exportall</tt> gibt alle derzeit bekannten Schlüssel auf ''stdout'' aus.
==== apt-config ====


apt-config kennt die Kommandos <tt>shell</tt> und <tt>dump</tt>. <tt>dump</tt> zeigt ohne zusätzliche Optionen aufgerufen alle aktuellen Konfigurationsoptionen für APT an.
apt-key exportall


sudo apt-config [OPTION(EN)] dump
==== apt-key list ====
<tt>list</tt> 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.


<tt>shell</tt> wird benutzt, um in der aufrufenden Shell, den Wert eines <tt>APT_KONFIGURATIONSSTRING</tt>s in eine <tt>SHELL_VARIABLE</tt> zu speichern. Einige Konfigurationsstrings sind unter apt-get beschrieben.
apt-key list ID


sudo apt-config [OPTION(EN)] shell SHELL_VARIABLE APT_KONFIGURATIONSSTRING
==== apt-key finger ====
<tt>finger</tt> zeigt den Fingerabdruck aller derzeit bekannten Schlüssel auf ''stdout'' an.


apt-key finger


{|
==== apt-key adv ====
|-
<tt>adv</tt> erlaubt die Angabe spezieller Parameter für das im Hintergrund arbeitende GnuPG (gpg). Alle aus gpg bekannten Parameter können angegeben werden. <tt>adv</tt> benötigt die Angabe der zu verarbeitenden Schlüssel''ID''
| colspan="3" | '''Kommandozeilenoptionen zu apt-config '''
|-
|  | <tt>'''--configfile</tt> '''
|  | <tt>-c</tt>
|  | Gibt alternative Konfigurationsdatei an.  
|-
|  | <tt>'''--option</tt> '''
|  | <tt>-o</tt>
|  | Überschreibt einzelne Werte der Standardkonfiguration.  
|-
|  | <tt>'''--version</tt> '''
|  | <tt>-v</tt>  
|  | Gibt die Versionsnummer aus.
|-
|  | <tt>'''--help</tt> '''
|  | <tt>-h</tt>
|  | Zeigt den Hilfetext an.


sudo apt-key adv gpg-option ID


|-
==== apt-key update ====
|}
<tt>update</tt> 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.
==== apt-file ====


Kommandozeilenwerkzeug, um alle Pakete nach einer Datei zu durchsuchen. Einzelheiten siehe apt-file.
sudo apt-key update


=== Erweiterungen ===
=== Optionen ===
apt-key kennt nur einen Konsolenschalter: <tt>--keyring</tt>, mit dem ein alternativer Schlüsselbund zur Bearbeitung übergeben werden kann.


==== add-apt-repository ====
=== Beispiele ===
==== add mit wget ====
Schlüssel zu Fremdquellen werden manchmal mit der Fremdquelle zusammen auf dem Webserver des Projekts veröffentlicht.


add-apt-repository ist ein mitgeliefertes Skript, das das Hinzufügen von Quellen, insbesondere PPAs, vereinfacht und automatisiert.  
Dann kann man den Schlüssel mit <tt>wget</tt> herunterladen und sofort an die Schlüsselverwaltung übergeben.


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.
Im Beispiel wird der Schlüssel für die Paketquelle des Browsers Opera heruntergeladen:


sudo add-apt-repository [OPTION(EN)] ppa:PPA_ANBIETER/PPA_ARCHIVNAME
wget -O - http://deb.opera.com/archive.key | sudo apt-key add -


oder
==== adv im Einsatz ====
Nutzt man <tt>adv</tt>, kann man alle Optionen, die GnuPG im Hintergrund benutzt, selbst angeben statt Standardwerte zu benutzen.


sudo add-apt-repository [OPTION(EN)] "deb ARCHIV_URI CODENAME KOMPONENTE"
sudo apt-key adv --keyserver PGP_KEY_SERVER --recv-keys ID


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


Programme werden bei Ubuntu mittels spezieller Pakete ('''.deb''') installiert. Diese Pakete werden in der Regel aus Paketquellen (Repositories) bezogen. Paketquellen werden einerseits im Internet zur Verfügung gestellt, andererseits können auch Datenträger wie CDs oder DVDs als Paketquelle dienen. Dieser Artikel beschreibt, wie man die vorhandenen Paketquellen ergänzt bzw. verändert.
== 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


Während Kubuntu die Muon Paketverwaltung verwendet (bis Ubuntu 11.04 wurde KPackageKit eingesetzt), verwenden alle anderen Ubuntu-Varianten – direkt oder indirekt – den Paketmanager Synaptic, um Paketquellen zu verwalten. Prinzipiell kann die zugrundeliegende Datei /etc/apt/sources.list auch von Hand bearbeitet werden – unabhängig von der Desktop-Umgebung.
COLUMNS=200 dpkg-query -l > packages_list.list


Bezüglich fremder Paketquellen sind noch diese beiden Artikel wichtig: * Fremdquellen/-pakete - die Gefahren von Fremdquellen und Fremdpaketen
aus. Die Paketliste befindet sich danach in der Datei '''packages_list.list'''.
* PPA - ein "Personal Package Archive" freischalten


===== 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


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


Nach jeder Änderung an den Paketquellen müssen diese aktualisiert bzw. neu eingelesen werden. Die konkrete Vorgehensweise ist von der eingesetzten (grafischen) Paketverwaltung abhängig und wird in den genannten Artikeln beschrieben.  
eine Liste '''packages.list''' zur Wiederherstellung der Pakete erzeugen.


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


==== Ab Ubuntu 10.10 ====
apt-mark showauto > package-states-auto
apt-mark showmanual > package-states-manual


Im Software-Center gibt es unter "''Bearbeiten -> Software-Paketquellen''" die Möglichkeit, die Paketquellen zu bearbeiten. Diese Einstellungsmöglichkeit kann man auch über folgenden Befehl im Terminal starten:
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.


gksu software-properties-gtk
Der folgende Befehl sichert diese Informationen in die Datei '''sources.list.sav''':


[[Image:Grafik55.png|top]]Alternativ kann man die Paketquellen mit Synaptic über das Menü "''Einstellungen -> Paketquellen''" konfigurieren.
<nowiki>find /etc/apt/sources.list* -type f -name '*.list' -exec bash -c 'echo -e "\n## $1 ";grep "^[[:space:]]*[^#[:space:]]" ${1}' _ {} \; > sources.list.save </nowiki>


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


Bis einschließlich Ubuntu 10.04 findet man im Menü von GNOME unter * ''"System -> Systemverwaltung -> Software-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.


einen passenden Dialog. Hier kann man die zu nutzenden Ubuntu-Quellen auswählen, das Verhalten bei Updates einstellen, fremde Quellen hinzufügen sowie Authentifizierungs-Schlüssel für diese hinzufügen.
====== 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:


[[Image:Grafik56.png|top]]
sudo apt-key add trusted-keys.gpg <nowiki># Schlüsselbund importieren</nowiki>
sudo apt-get update


===  KDE (Kubuntu) ===
Um alle auf der Liste gespeicherten Pakete zu installieren, gibt man folgenden Befehl ein:


In KDE gibt es mehrere Möglichkeiten, die Paketquellen über ein grafisches Programm zu bearbeiten. Auch hier können sämtliche Paketquellen (de-)aktiviert, neue hinzugefügt und Authentifizierungs-Schlüssel eingelesen werden.
xargs -a "packages.list" sudo apt-get install


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


Ab Ubuntu 11.10 kann der Menü-Punkt ''"Einstellungen -> Software-Quellen einrichten"'' der Muon Paketverwaltung verwendet werden.
xargs -a "package-states-auto" sudo apt-mark auto
xargs -a "package-states-manual" sudo apt-mark manual


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


Nutzer von kPackagekit erledigen das direkt über den folgenden Weg:* ''"KDE Systemeinstellungen -> Softwareverwaltung -> Einstellungen -> Quellen bearbeiten"''
==== 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


oder * ''"System -> Softwareverwaltung -> Einstellungen -> Quellen bearbeiten"''
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.


[[Image:Grafik57.png|top]]
Anschließend können die so heruntergeladenen Pakete über die Synaptic-Paketverwaltung oder mit dpkg installiert werden.


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


Es gibt eine weitere Möglichkeit, ohne Umwege programmunabhängig in die Paketquellenverwaltung zu gelangen. Dazu startet man mit dem Tastenkürzel Alt + F2 oder ''" -> Befehl ausführen"'' KRunner und gibt dann folgenden Befehl ein:
grep 'install ' /var/log/dpkg.log


softwareverwaltung
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.


[[Image:Grafik59.png|top]]
Man braucht die mit gzip komprimierten Dateien nicht erst zu entpacken, sondern benutzt einfach zgrep:


===  Xfce (Xubuntu) ===
zgrep 'install ' /var/log/dpkg.log.NUMMER.gz


Xubuntu verwendet inzwischen ebenfalls das Software-Center (siehe oben). Um in älteren Xubuntu-Versionen Paketquellen auszuwählen und neue fremde Quellen hinzuzufügen, startet man über das Menü Synaptic: * ''"Xfce-Menu -> System -> Synaptic-Paketverwaltung"''
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 <tt>apt-history</tt>.


Nun unter ''"Einstellungen -> Paketquellen"'' die zu nutzenden Ubuntu Quellen auswählen, das Verhalten bei Updates einstellen, fremde Quellen hinzufügen sowie Authentifizierungs-Schlüssel für diese hinzufügen.
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:


=== LXDE (Lubuntu) ===
{|
|-
|| function apt-history(){
case "$1" in
install)
cat /var/log/{dpkg.log,dpkg.log.1} | grep 'install '
<nowiki>;;</nowiki>
upgrade|remove)
cat /var/log/{dpkg.log,dpkg.log.1} | grep $1
<nowiki>;;</nowiki>
rollback)
cat /var/log/{dpkg.log,dpkg.log.1} | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
<nowiki>;;</nowiki>
<nowiki>*)</nowiki>
cat /var/log/{dpkg.log,dpkg.log.1}
<nowiki>;;</nowiki>
  esac
}
|-
|}
Anschließend neu einloggen (oder ein neues Terminalfenster öffnen), damit der Befehl verfügbar ist. Mittels


Um in LXDE die Paketquellen von Ubuntu zu verwalten, startet man:* ''"LXDE-Menu -> Systemwerkzeuge -> Synaptic-Paketverwaltung"'' (ab Ubuntu 11.04) oder
apt-history upgrade
* ''"LXDE-Menu -> Einstellungen -> Synaptic Package Manager"''


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


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


Ansonsten gilt das bei Xfce bereits Beschriebene.
Um dies manuell für alle nicht vollständig deinstallierten Pakete nachzuholen, kann folgender Befehl genutzt werden:


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


Weitere Paketquellen können auch im Terminal mit Hilfe apt hinzugefügt werden. Dazu muss folgender Befehl ausgeführt werden:
=== 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.


sudo add-apt-repository 'deb PFAD/ZUR/QUELLE DISTRIBUTION KOMPONENTEN'
Das behebt folgender Ablauf:


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


sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu precise main restricted universe multiverse'  
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.


Danach müssen die Quellen immer mittels des Befehls apt-get update aktualisiert werden, erst dann können Pakete aus der neuen Quelle hinzugefügt werden.
== 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.


Gegebenenfalls muss noch ein Schlüssel zur Authentifizierung der Quelle hinzugefügt werden. Wie das geht, ist im Artikel apt-key beschrieben.
=== Optionen ===
Für die meisten Operationen sind Rootrechte nötig.


=== Problembehebung ===
==== 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.


Bei einem deutschsprachigen Ubuntu ist in der Regel der deutsche Spiegelserver in Dresden in den Paketquellen eingetragen (Sicherheitsaktualisierungen erfolgen direkt über die Canonical-Server). Es kann passieren, dass dieser Spiegelserver überlastet ist. Sollte das längerfristig der Fall sein, ändert man diesen über ''"Software-Paketquellen -> Herunterladen -> Andere -> Besten Server auswählen"''. Der Spiegelserver mit der schnellsten Anbindung für das ausgewählte Land wird nun automatisch ermittelt.
{|
 
|-
Alternativ kann man das auch über das manuelle Bearbeiten der Datei /etc/apt/sources.list erledigen. Beispiel:* bisher:
| colspan="3" | '''Kommandozeilenoptionen zu dpkg '''
 
 
 
 
{|  
|-  
|| deb http://de.archive.ubuntu.com/ubuntu precise main restricted universe multiverse
|-
|-
|}
| | '''Kürzel '''
* neu:  
| | '''Lange Option '''
 
| | '''Beschreibung '''
|-
| | <tt>'''-i</tt> '''
| | <tt>'''--install</tt> '''
| | Installiert das als Argument übergebene '''.deb'''-Paket (Dateiname oder mit Option <tt>-R</tt> Ordnername).
|-
| |
| | <tt>'''--configure</tt> '''
| | 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 <tt>-a</tt> bzw. <tt>--pending</tt> angegeben, um alle noch zu konfigurierenden Pakete zu verarbeiten.Soll ein bereits korrekt installiertes Paket erneut konfiguriert werden, muss dpkg-reconfigure genutzt werden.
|-
| | <tt>'''-r</tt> '''
| | <tt>'''--remove</tt> '''
| | 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.
|-
| | <tt>'''-l</tt> '''
| | <tt>'''--list</tt> '''
| | Ruft dpkg-query auf und gibt eine Liste mit Status, Version und einer Beschreibung 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.
|-
| | <tt>'''-P</tt> '''
| | <tt>'''--purge</tt> '''
| | Entfernt das genannte Paket inklusive der Konfigurationsdateien.
|-
| | <tt>'''-R</tt> '''
| | <tt>'''--recursive</tt> '''
| | Statt eines Pfades zu einer '''.deb''' kann mit <tt>-R</tt> auch ein Verzeichnis angegeben werden, die gewählte Operation wird dann auf alle Pakete im Verzeichnis angewandt.
|-
| | <tt>'''-L</tt> '''
| | <tt>'''--listfiles</tt> '''
| | Ruft dpkg-query auf und gibt eine Liste der im Paket enthaltenen Dateien aus.
|-
| | <tt>'''-S</tt> '''
| | <tt>'''--search</tt> '''
| | 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 <tt>ACTIONS</tt> bzw. <tt>AKTIONEN</tt>.


==== 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.


{|  
{|
|-  
|-
|| deb http://ch.archive.ubuntu.com/ubuntu precise main restricted universe multiverse
| colspan="2" | '''Kommandozeilenoptionen mit force '''
|-
| | '''Lange Option '''
| | '''Beschreibung '''
|-
| | <tt>'''--force-help</tt> '''
| | Gibt eine Liste der force-Optionen mit einer Beschreibung aus.
|-
| | <tt>'''--force-depends</tt> '''
| | Ändert Abhängigkeitsfehler zu Warnungen. Ein Paket kann so trotz fehlender Abhängigkeiten installiert werden. <tt>apt-get -f</tt> wird eventuell zur Korrektur benötigt.
|-
| | <tt>'''--force-architecture</tt> '''
| | 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.
|-
| | <tt>'''--force-remove-reinstreq</tt> '''
| | Erlaubt das Entfernen eines Pakets, dessen Reinstallation nötig ist. Teile des Paketes können nach dem Entfernen auf dem System verbleiben.
|-
|-
|}
|}
Statt <tt>http://ch.archive.ubuntu.com</tt> steht praktisch in fast allen Nachbarländern von Deutschland (oder zumindest in Europa) ein entsprechender Spiegelserver zur Verfügung. Man muss daher nur das Landeskürzel entsprechend ändern. Dabei ist unter Umständen diese Liste hilfreich.
Eine vollständige Liste der force-Optionen findet sich in der '''dpkg'''(1) Manpage im Abschnitt <tt>OPTIONS</tt> bzw. <tt>OPTIONEN</tt>.


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


Zur Kontrolle, ob das gewünschte Land einen Spiegelserver bereitstellt, hilft folgender Befehl:
Die Abfrage von Informationen über Paketdateien wird stattdessen über dpkg-deb geregelt. Einige Optionen können auch direkt mit dem <tt>dpkg</tt>-Befehl angesteuert werden.


ping XX.archive.ubuntu.com
dpkg-query OPTION PAKET/SUCHMUSTER


wobei '''XX''' hier für das jeweilige Länderkürzel steht. Erfolgt eine Antwort, ist ein Spiegel aktiv. Beendet wird der Befehl mit Strg + C .  
{|
 
|-
==  Apt-Pinning ==
| colspan="3" | '''Kommandozeilenoptionen zu dpkg-query '''
 
|-
''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.  
| | '''Kürzel '''
| | '''Lange Option '''
| | '''Beschreibung '''
|-
| | <tt>'''-l</tt> '''
| | <tt>'''--list</tt> '''
| | Gibt eine Liste der zum Suchmuster passenden Pakete und deren Informationen aus.
|-
| | <tt>'''-S</tt> '''
| | <tt>'''--search</tt> '''
| | Gibt aus, in welchen Paketen sich Dateien befinden, die zum angegeben Suchmuster (z.B. Pfad) passen.
|-
| | <tt>'''-L</tt> '''
| | <tt>'''--listfiles</tt> '''
| | 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 <tt>COMMANDS</tt> bzw. <tt>BEFEHLE</tt>.


Es lässt sich auch ein Paket in einer bestimmten Version festhalten oder dessen Installieren oder Deinstallieren verhindern. Dies wird hier als Beispiel dargestellt.
==== Paketstatus ====
Zusätzlich zur Beschreibung des Pakets gibt <tt>--list</tt>/<tt>-l</tt> eine Statusangabe zum jeweiligen Paket aus. Diese besteht aus 3 Stellen: # Gewünschter Paketstatus


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.  
*
** <tt>u</tt> für unbekannt
** <tt>i</tt> für installieren
** <tt>h</tt> für halten
** <tt>r</tt> für entfernen (Konfigurationsdateien behalten)
** <tt>p</tt> für vollständig (inkl. Konfigurationsdateien) entfernen


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.
# Aktueller Paketstatus


==== Hinweis: ====
*
** <tt>n</tt> für nicht installiert
** <tt>c</tt> für Konfigurationsdateien verbleibend
** <tt>H</tt> für nicht vollständig installiert (nicht alle Dateien konnten installiert werden)
** <tt>U</tt> für entpackt (vor dem eigentlichen Installieren)
** <tt>F</tt> für nicht vollständig konfiguriert (Fehler in Konfigurationsskripten)
** <tt>W</tt> 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.)
** <tt>t</tt> für Trigger-Verabeitung steht bevor
** <tt>i</tt> für installiert


Das Folgende ist lediglich ein Beispiel, wie Pinning verwendet werden kann. Die konkreten Gewichtungen sind auf keinen Fall als Empfehlung zu verstehen.
# Fehler (Leerzeichen für keine Fehler)


Die Beispieldatei '''/etc/apt/sources.list''' soll hier als Beispiel wie folgt aussehen:
*
** <tt>R</tt> für Reinstallation erforderlich


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


{|
Eine vollständige Liste der Statusangaben findet sich in der '''dpkg-query'''(1) Manpage im Abschnitt <tt>PACKAGE STATES</tt> bzw. <tt>PAKETZUSTÄNDE</tt>.
|-  
|| <nowiki>## Offizielle Quellen</nowiki>
deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
<nowiki>## Inoffizielle Quelle</nowiki>
deb http://peters-ubuntupakete.example.org/ubuntu/ precise main restricted universe multiverse


==== 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 <tt>dpkg</tt>-Befehl angesteuert werden.
|}
===  Pinning per release ===


dpkg-deb OPTION VERZEICHNIS/PAKET


{|  
{|
|-  
|-
|| Package: *
| colspan="3" | '''Kommandozeilenoptionen zu dpkg-deb '''
Pin: release v=10.04, l=Ubuntu
|-
Pin-Priority: 1000
| | '''Kürzel '''
| | '''Lange Option '''
| | '''Beschreibung '''
|-
| | <tt>'''-I</tt> '''
| | <tt>'''--info</tt> '''
| | 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.
|-
| | <tt>'''-b</tt> '''
| | <tt>'''--build</tt> '''
| | Erstellt ein '''.deb'''-Paket aus einem angegebenen Verzeichnis.
|-
| | <tt>'''-c</tt> '''
| | <tt>'''--contents</tt> '''
| | Zeigt den Inhalt eines '''.deb'''-Pakets an.
|-
| | <tt>'''-x</tt> '''
| | <tt>'''--extract</tt> '''
| | Entpackt das angegebene '''.deb'''-Paket in das angegebene Zielverzeichnis.
|-
|-
|}
|}
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.  
Eine vollständige Liste der Optionen findet sich in der '''dpkg-deb'''(1) Manpage im Abschnitt <tt>COMMANDS</tt> bzw. <tt>BEFEHLE</tt>.


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.
==== 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.
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 ===
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


{|  
{|
|-  
|-
|| Package: *
| colspan="2" | '''Kommandozeilenoptionen zu dpkg-divert '''
Pin: origin peters-ubuntupakete.example.org
|-
Pin-Priority: 300
| | '''Befehl '''
| | '''Beschreibung '''
|-
| | <tt>'''--add</tt> '''
| | Fügt eine Umleitung für die als Argument übergebene Datei hinzu. Die Angabe von <tt>--add</tt> als Kommando ist optional. Wenn kein Kommando angegeben wurde, wird immer dieses Kommando gewählt.
|-
| | <tt>'''--remove</tt> '''
| | Entfernt die Umleitung für die als Argument übergebene Datei. Wenn bei der Umleitung umbenannt wurde, muss trotzdem die ursprüngliche Name übergeben werden.
|-
| | <tt>'''--list</tt> '''
| | Listet alle aktuell eingerichteten Umleitungen, die auf das als Argument übergebene Suchmuster passen, auf. Ohne Argument werden alle Umleitungen aufgelistet.
|-
| colspan="2" |
|-
| | '''Option '''
| | '''Beschreibung '''
|-
| | <tt>--local</tt>
| | Richtet die Umleitung so ein, dass die Datei durch kein Paketupgrade und durch keine Paketinstallation verändert wird.
|-
| | <tt>--package</tt>
| | Das als Argument übergebene Paket ist als einziges Paket nicht von der Umleitung betroffen.
|-
| | <tt>--rename</tt>
| | 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.
|-
| | <tt>--test</tt>
| | Es werden keine Änderungen vorgenommen.
|-
|-
|}
|}
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.
Eine vollständige Liste der Befehle und Optionen findet sich in der '''dpkg-divert'''(8) Manpage im Abschnitt <tt>COMMANDS</tt> und <tt>OPTIONS</tt> bzw. <tt>BEFEHLE</tt> und <tt>OPTIONEN</tt>.


=== Pinning per version ===
=== Beispiele ===
==== Installation ====
sudo dpkg -i /PFAD/ZUM/PAKET/PAKET.deb


Installiert das <tt>PAKET</tt> im genannten Pfad.


{|
==== Entfernen ====
|-  
sudo dpkg -r vim
|| 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 =====
Entfernt das Paket '''vim'''.


In der '''/etc/apt/preferences''' definiert eine Leerzeile einen neuen Abschnitt für einen weiteren Eintrag. Leerzeilen zwischen <tt>Package</tt>, <tt>Pin</tt> und <tt>Pin-Priority</tt> sind nicht erlaubt!
sudo dpkg -r vim*


===  Gezieltes Umgehen mit apt-get ===
Entfernt alle Pakete, deren Name mit <tt>vim</tt> beginnt.


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.
==== Anzeige ====
dpkg -l vim*


apt-get -t precise install mplayer-custom
Gibt die Informationen zum allen Paketen aus, deren Name mit <tt>vim</tt> beginnt. Oft macht es Sinn die Ausgaben z.B. mit grep nach den Paketstatus zu filtern.


=== Pinning per release ===
==== Konfiguration beenden ====
sudo dpkg --configure -a


Folgende Parameter können für das Pinnen mittels ''release'' verwendet werden:* '''a (archive)''' - Der Name eines Repositories, z.B. ''precise'' oder ''precise-backports''
Führt alle noch ausstehenden Konfigurationsskripte aus und kann so einen abgebrochenen Installationsvorgang fortsetzen.
* '''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''


==== Konfiguration erneut durchführen ====
sudo dpkg-reconfigure locales


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


Die genauen Werte können mittels <tt>apt-cache policy</tt> nachgeschlagen werden. Hier ein Ausschnitt aus der Ausgabe dieses Kommandos.
==== Umleitung einrichten ====
sudo dpkg-divert --local --rename /usr/bin/apt-build


  25 http://packages.medibuntu.org precise/free Packages
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.
    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.
==== Umleitung entfernen ====
sudo dpkg-divert --rename --remove /usr/bin/apt-build


===  Pin-Priority ===
Die im vorherigen Beispiel angelegte Umleitung wird wieder entfernt. Das <tt>--rename</tt> stellt sicher, dass die Datei wieder zurückumbenannt wird.


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
Vergisst man dies, kann man die Datei einfach manuell z.B. mit mv umbenennen.
* '''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


== 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.


Das Paket mit der höchsten Punktzahl wird bevorzugt.
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.


=== Beispiele ===
===== 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.


==== proposed-Quellen downgraden ====
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.


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.
=== Installation ===
aptitude kann über das Paket


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):
sudo apt-get install aptitude


installiert werden.


{|
Des Weiteren kann man noch das (englische) Handbuch zu aptitude installieren. Dies ist über das Paket
|-
|| Package: *
Pin: release a=ARCHIV*
Pin-Priority: 1001
|-
|}
Dabei ist <tt>ARCHIV</tt> durch den Codenamen der jeweiligen Ubuntuversion zu ersetzen. Der Stern <tt><nowiki>*</nowiki></tt> sollte nach dem Codenamen gesetzt werden, damit auch Pakete aus den ''-updates'' und ''-security''-Quellen berücksichtigt werden. Codenamen sind: <tt>hardy</tt>, <tt>lucid</tt>, <tt>oneiric</tt>, <tt>precise</tt>, <tt>quantal</tt>, ...


Anschließend sollte das Upgrade bzw. Downgrade der Pakete durchgeführt werden:
sudo apt-get install aptitude-doc-en


sudo apt-get dist-upgrade
verfügbar.


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.
=== 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:


===== Hinweis =====
sudo aptitude BEFEHL PAKET


Bis einschließlich Ubuntu 10.04 kann kein Globbing beim Archivnamen verwendet werden (Schreibweise mit Stern <tt><nowiki>*</nowiki></tt>). Stattdessen müssen alle Archive ausgeschrieben werden:
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 ====
|-
[[Image:Grafik64.png|top]]
|| Package: *
Pin: release a=ARCHIV
Pin-Priority: 1001


Package: *
Die Pakete werden vorsortiert und hierarchisch in Form einer aufklappbaren Ordnerstruktur dargestellt.
Pin: release a=ARCHIV-updates
Pin-Priority: 1001


Package: *
In der grafischen Oberfläche werden die Pakete je nach „Zustand“ verschiedenfarbig dargestellt:* '''schwarz''' : Paket wird nicht verändert
Pin: release a=ARCHIV-security
* '''rot''' : Paket ist kaputt oder kann nicht installiert werden
Pin-Priority: 1001
* '''blau''' : Paket wird aktualisiert
 
* '''weiß''' : Paketversion bleibt erhalten, kann aber aktualisiert werden
Package: *
* '''grün''' : Paket wird installiert
Pin: release a=ARCHIV-backports
* '''magenta''' : Paket wird gelöscht
Pin-Priority: 1001


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:


{|
|-
| colspan="2" | '''Übersicht Tasten '''
|-
| | '''Taste '''
| | '''Funktion'''
|-
| | '''↓ + ↑ '''
| | Auswahlbalken bewegen
|-
| | '''⏎ '''
| | Verzeichnis auf- und zuklappen
|-
| | '''/ '''
| | Suchen
|-
| | '''N '''
| | Weitersuchen
|-
|-
|}
| | '''L '''
===== Einzelne Pakete aus früherer / späterer Ubuntu-Version installieren =====
| | Suchen, alle Pakete, auf die das Suchkriterium nicht zutrifft werden aber ausgeblendet
 
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 ("<tt>precise</tt>") in der Version 1.6.17 und für Ubuntu 12.10 ("<tt>quantal</tt>") 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
|-
|-
|}
| | '''I '''
Nun wird in der Pinningsdatei '''/etc/apt/preferences''' folgender Inhalt ergänzt (bzw. die Datei neu angelegt):
| | Paketinformationen anzeigen
 
 
{|
|-
|| Package: subversion
Pin: version 1.6*
Pin-Priority: 1001
 
Package: *
Pin: release v=12.04, l=Ubuntu
Pin-Priority: -1
|-
|-
|}
| | '''D '''
Nun kann nach Aktualisieren der Paketlisten mit "<tt>apt-get update</tt>" '''subversion''' aus den Ubuntu 12.04 Quellen installiert werden .
| | Abhängigkeiten anzeigen
 
Wurde es bereits installiert, wird es mit "<tt>apt-get dist-upgrade</tt>" 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 ''Paket''namens. Generell kann man apt-cache als normaler Benutzer ausführen , vereinzelte Optionen können Root-Rechte erfordern.
 
apt-cache [Option(en)] Kommando [Paket]
 
 
{|  
|-
| colspan="2" | '''Kommandos zu apt-cache '''
|-
|-
| | '''add '''
| | '''U '''
| | Fügt eine Datei mit Paketindizes dem Paketcache hinzu.
| | Paketquellen updaten
|-
|-
| | '''gencaches '''
| | '''⇧ + U '''
| | Baut den Paketcache auf.
| | alle verfügbaren Updates installieren
|-
|-
| | '''showpkg '''
| | '''+ '''
| | Zeigt die Meta-Informationen an.
| | Paket zur Installation vormerken
|-
|-
| | '''stats '''
| | '''- '''
| | Zeigt Statistiken zum Paketcache an.
| | Paket zum Löschen vormerken
|-
|-
| | '''showsrc '''
| | '''<nowiki>= </nowiki>'''
| | Zeigt Informationen zum Quelltext eines ''Paket''s an.
| | Paketversion halten
|-
|-
| | '''dump '''
| | '''G '''
| | Zeigt eine Liste aller laut Paketcache verfügbaren Pakete an.
| | Start der Installation/Deinstallation
|-
|-
| | '''dumpavail '''
| | '''? '''
| | Zeigt eine ausführliche Liste aller laut Paketcache verfügbaren Pakete an.
| | Hilfe anzeigen, d.h. alle verfügbaren Tasten und deren Funktion
|-
|-
| | '''unmet '''
| | '''⇧ + Q '''
| | Zeigt eine Liste aller nicht erfüllten Abhängigkeiten an.
| | aptitude beenden
|-
|-
| | '''show '''
|}
|  | Zeigt die Paketinformationen zu einem oder mehreren Paketen an.
Die Suche von aptitude kennt auch weiterführende Suchfunktionen wie Verknüpfungen, Suche in der Beschreibung etc. . Dazu ein paar Beispiele:* <tt>?name(linux)</tt> - sucht nach allen Paketen, die Linux im Namen haben
* <tt>?description(python)</tt> - sucht nach allen Paketen, die Python in der Beschreibung haben
* <tt>?and(?name(linux),?description(python)</tt> - sucht nach allen Paketen, die Linux im Namen und Python in der Beschreibung haben
* <tt>?installed</tt> - sucht nach allen installierten Paketen
* <tt>?installed(?not(?automatic))</tt> - 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.
 
{|
|-
| colspan="2" | '''Übersicht Befehle Kommandozeile '''
|-
|-
| | '''search '''
| | '''Befehl '''
| | Durchsucht die Paketinformationen nach einem oder mehreren Suchbegriffen.
| | '''Funktion '''
|-
|-
| | '''depends '''
| | <tt>'''install</tt> '''
| | Zeigt eine Liste der Abhängigkeiten der ''Paket''e.
| | installiert das Paket, die Abhängigkeiten werden direkt mit aufgelöst
|-
|-
| | '''rdepends '''
| | <tt>'''remove</tt> '''
| | Zeigt eine Liste der Pakete, die vom eingegebenen ''Paket'' abhängen.
| | löscht das Paket, die Konfigurationsdateien bleiben aber erhalten
|-
|-
| | '''pkgnames '''
| | <tt>'''purge</tt> '''
| | Zeigt eine Liste von ''Paket''namen, die mit dem Suchbegriff anfangen.
| | löscht das Paket inklusive aller Konfigurationsdateien
|-
|-
| | '''dotty '''
| | <tt>'''hold</tt> '''
| | Erstellt einen Graphen der Abhängigkeiten des ''Paket''s, der mit '''dotty''' verarbeitet werden kann.
| | erzwingt, dass das Paket in der aktuell installierten Version gehalten wird, d.h. es werden keine Updates dafür installiert
|-
|-
| | '''xvcg '''
| | <tt>'''forbid-version</tt> '''
| | Erstellt einen Graphen der Abhängigkeiten des ''Paket''s, der mit '''xvcg''' verarbeitet werden kann.  
| | verbietet die Installation einer bestimmten Paketversion, diese muss hinter dem Paketnamen mittels <tt><nowiki>=</nowiki></tt> angehängt werden, also z.B. <tt>xserver-xorg=1.7.7+2~broken-4</tt>
|-
|-
| | '''policy '''
| | <tt>'''safe-upgrade</tt> '''
| | Zeigt die Prioritäten der Quellen oder eines ''Paket''s an.  
| | 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.
|-
|-
| | '''madison '''
| | <tt>'''full-upgrade</tt> '''
| | Zeigt die verfügbaren Versionen eines ''Paket''s in den verschiedenen Quellen an.  
| | 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 <tt>apt-get</tt> dem <tt>dist-upgrade</tt>)
 
|-
 
| | <tt>'''show</tt> '''
| | zeigt Informationen zum Paket an
|-
| | <tt>'''why</tt> '''
| | zeigt an, welche Pakete von diesem abhängen
|-
| | <tt>'''why-not</tt> '''
| | zeigt an, warum ein Paket nicht installiert werden kann, also welche Konflikte existieren
|-
| | <tt>'''clean</tt> '''
| | leert den Paketcache, kann u.U. sehr viel Festplattenplatz frei machen
|-
| | <tt>'''autoclean</tt> '''
| | leert den Paketcache für alle Pakete aus den eingetragenen Quellen, kann u.U. sehr viel Festplattenplatz frei machen
|-
| | <tt>'''build-dep</tt> '''
| | installiert die nötigen Quellpakete um das spezifizierte Paket kompilieren zu können (verfügbar seit Ubuntu 8.10)
|-
|-
|}
|}
==== apt-cache add ====
Eine Option, die hier für <tt>install</tt> erwähnt werden soll, ist <tt>-R</tt>. 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 <tt>APT::Install-Recommends</tt> bestimmt werden kann.


<tt>add</tt> fügt einen in einer ''Datei'' gespeicherten Paketindex dem Paketcache hinzu. add fehlt in der deutschen Übersetzung der Manpage.
==== Pakete suchen ====
Pakete können mit dem folgenden Befehl gesucht werden:


apt-cache add DATEI
aptitude search SUCHBEGRIFF1 SUCHBEGRIFF2 ...


==== apt-cache gencaches ====
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.


<tt>gencache</tt> baut den Paketcache sowie die Liste der installierten Programme neu auf und prüft auf fehlende Abhängigkeiten.  
Es kann auch nach bestimmten Eigenschaften gesucht werden. Alle Suchmöglichkeiten werden in '''/usr/share/doc/aptitude/README''' gelistet. So sucht


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.
aptitude search ~Ddepends:gtk~dscanner'!~dvirus'


sudo apt-cache gencaches
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.


==== apt-cache showpkg ====
==== 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


<tt>showpkg</tt> 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.
sudo aptitude -f install


showpkg benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.
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.


apt-cache showpkg PAKET1 [PAKET2] 
Falls die defekten Pakete bekannt sind, kann auch folgender Befehl das Problem lösen:


==== apt-cache stats ====
sudo aptitude -f install PAKETNAME1 PAKETNAME2


<tt>stats</tt> zeigt eine ausführliche Übersicht der Statistiken zum Paketcache an, unter anderem die Anzahl der gelisteten ''Paket''e und die Größe im Dateisystem. Es sind keine weiteren Optionen erforderlich.
Wobei PAKETNAME1 bzw. PAKETNAME2 usw. durch die Namen der bekannten defekten Pakete ersetzt wird.


apt-cache stats
===== 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!


==== apt-cache showsrc ====
==== Paketverwaltung unbrauchbar ====
Sollte die Paketverwaltung nach einem <tt>upgrade</tt> bzw. <tt>dist-upgrade</tt> unbrauchbar werden, so kann einer der folgenden Befehle helfen:


<tt>showsrc</tt> zeigt detaillierte Informationen zum verfügbaren Quelltext eines ''Paket''s an.
Nach einem Update der bestehenden Installation:


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 ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.
sudo aptitude safe-upgrade -f


apt-cache showsrc PAKET1 [PAKET2] 
Nach einem Versions-Upgrade auf eine neue Ubuntu-Version:


==== apt-cache dump ====
sudo aptitude full-upgrade -f


<tt>dump</tt> zeigt eine Liste aller verfügbaren ''Paket''e im Paketcache an, inklusive der Abhängigkeiten und weiteren Informationen zum Paketcache. Diese Informationen werden nur im Fehlerfall benötigt.
Nach beiden Befehlen sollte auf jeden Fall noch


apt-cache dump
sudo dpkg --configure -a


==== apt-cache dumpavail ====
aufgerufen werden.


<tt>dumpavail</tt> zeigt eine Liste aller verfügbaren ''Paket''e im Paketcache, der Programmversionen und der zugehörigen Paketbeschreibungen an.
==== Konfigurationsdaten nachträglich löschen ====
sudo aptitude purge '~c'


apt-cache dumpavail
löscht die Konfigurationsdaten von bereits deinstallierten Paketen.


==== apt-cache unmet ====
==== 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.


<tt>unmet</tt> zeigt eine Liste der nicht erfüllten Abhängigkeiten an. Diese Liste beinhaltet auch die nicht installierten ''Vorschläge'' der ''Paket''e. unmet kann mit und ohne Angabe von Paketnamen aufgerufen werden.  
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.


Wird unmet ohne ''Paket''namen aufgerufen, werden die Informationen für alle installierten Paket(e) ausgegeben.
Beispiel:


Gibt man bestimmte ''Paket''namen an, müssen diese durch Leerzeichen getrennt angegeben werden.
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)'


apt-cache unmet
=== Paketzustand speichern ===
apt-cache unmet PAKET1 [PAKET2]
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:


==== apt-cache show ====
sudo aptitude-create-state-bundle DATEINAME * Backup direkt ins System einspielen:


<tt>show</tt> zeigt detaillierte Informationen zu einem oder mehreren ''Paket''en an.
sudo tar xvf DATEINAME -C /


Diese Informationen beinhalten eine Liste der Abhängigkeiten, eine Beschreibung und die angebotene Version. show benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.  
=== Ü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.


In diesem Fall werden die Informationen nacheinander ausgegeben.
=== Automatische Sicherheitsupdates ===
Hier empfiehlt es sich, mit einem Editor folgende neue Textdatei anzulegen:


apt-cache show PAKET1 [PAKET2] 
{|
|-
|| <nowiki>#!/bin/sh</nowiki>
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


==== apt-cache search ====
chmod 775 aptitude-security-updates


<tt>search</tt> durchsucht den Paketcache in den Namen und Beschreibungsfeldern nach dem ''Suchbegriff'' und gibt die entsprechenden ''Paketnamen'' aus.  
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'''.


Der ''Suchbegriff'' kann auch ein Regulärer Ausdruck sein. Werden mehrere ''Suchbegriff''e angegeben, werden ausschließlich Pakete angeben, in deren Beschreibung alle Begriffe gefunden wurden.
Ein ausgeklügelter Mechanismus wird von unattended-upgrades bereitgestellt.


apt-cache search SUCHBEGRIFF 
== 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.


==== apt-cache depends ====
Das Schaubild verdeutlicht, dass die Fehler an unterschiedlichen Stellen und in verschiedenen Programmen auftreten können.
||


<tt>depends</tt> gibt eine Liste der Pakete an, von denen das genannte ''Paket'' abhängt. depends benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.
|-
|}
==== 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


apt-cache depends PAKET1 [PAKET2] 
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.


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


<tt>rdepends</tt> gibt eine Liste der Pakete an, die vom genannten ''Paket'' abhängen, die Reverse Depends (Rückwärtsabhängigkeiten).  
Dieses Problem tritt vor allem dann auf, wenn man Paketquellen verwendet, die nicht für Ubuntu geeignet sind.


rdepends benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.  
===== Lösung =====
Nur speziell für Ubuntu ausgewiesene Paketquellen verwenden (siehe auch Fremdquellen).


In diesem Fall werden die Informationen nacheinander ausgegeben.
==== 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:


apt-cache rdepends PAKET1 [PAKET2] 
sudo apt-get -o dpkg::options::="--force-confnew" -o dpkg::options::="--force-confmiss" --reinstall install PAKET


==== apt-cache pkgnames ====
===== 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.


<tt>pkgnames</tt> gibt zu einem ''Suchbegriff'' eine Liste von ''Paket''en aus, deren Namen mit dem ''Suchbegriff'' anfangen. Der ''Suchbegriff'' darf kein Regulärer Ausdruck sein.  
==== 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.


Wird pkgnames ohne Suchbegriff aufgerufen, gibt es alle verfügbaren Pakete inklusive der Metapakete aus.
Dieses Problem tritt dann auf, wenn man ein Paket "von Hand" installiert hat, ohne dessen Abhängigkeiten zu erfüllen.


apt-cache pkgnames SUCHBEGRIFF
===== Lösung =====
Im Terminal ist der vorgeschlagene Konsolenbefehl einzugeben :


==== apt-cache dotty ====
sudo apt-get -f install


<tt>dotty</tt> erstellt aus den Abhängigkeiten der genannten ''Paket''e eine Vorlage, die mit '''dot''' zu einem Graph weiterverarbeitet werden kann.  
==== Installation wurde unterbrochen ====
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.


Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. dotty benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.
Wenn während der Installation von Paketen die Stromzufuhr des Rechners unterbrochen wird, kann das auch für die Paketverwaltung Folgen haben.


apt-cache dotty PAKET1 [PAKET2] 
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.


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


Zur Umwandlung der Ausgabe wird <tt>dot</tt> aus dem Paket Graphviz - Graph Visualization Software genutzt:
===== Lösung =====
Wie in der Meldung angegeben ist im Terminal der entsprechende Befehl auszuführen:


sudo apt-get install graphviz
sudo dpkg --configure -a


Dotty kann keine größeren Zusammenhänge darstellen. Um die Berechnung in Grenzen zu halten, hilft folgende APT-Einstellung:
==== 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


APT::Cache::GivenOnly "true";
Bei der Abarbeitung von '''postinst'''/'''preinst'''- bzw. '''postrm'''/'''prerm'''-Maintainer Skripten kommt es zu Fehlern.


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


Die Option kann aber auch direkt beim Aufruf übergeben werden.
====== Achtung! ======
Nur die zum entsprechenden Paket gehörigen Skripte umbenennen.


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


<tt>xvcg</tt> erstellt aus den Abhängigkeiten der genannten ''Paket''e eine Vorlage, die mit '''xvcg''' zu einem Graph weiterverarbeitet werden kann.  
==== 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


Die Nutzung ist mit einer Ausgabeumleitung sinnvoll. xvcg benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. Die Weiterverarbeitung benötigt die VCG Tools.
Dieses Problem kann nach einer Systemaktualisierung auftreten.


apt-cache xvcg PAKET1 [PAKET2] 
====== Lösung ======
sudo rm /var/lib/apt/lists/* -rf
sudo mkdir /var/lib/apt/lists/partial <nowiki># Für Versionen bis Ubuntu 10.04 Lucid Lynx</nowiki>
sudo apt-get update


==== apt-cache policy ====
Den Speicherbereich für Statusinformationen jeder in der sources.list angegebenen Paketquelle zurücksetzen und neu laden.


<tt>policy</tt> zeigt ohne Angabe eines ''Paket''namens eine Übersicht der Prioritäten der einzelnen Paketquellen an, mit Angabe von ''Paket''namen eine Übersicht der verfügbaren Versionen und der Prioritäten ihrer Quellen.  
===== 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


Mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben.
Diese Probleme können nach einer Systemaktualisierung auftreten.


apt-cache policy
====== Lösung ======
Es ist der selbe Lösungsansatz wie bei Ungültige Signatur von Paketquellen anzuwenden.


oder
===== Ö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


apt-cache policy PAKET1 [PAKET2] 
Dieses Problem kann nach einer Systemaktualisierung auftreten.


==== apt-cache madison ====
====== Lösung ======
Kann der Schlüssel nicht mit apt/apt-key importiert werden, hilft eine Neuinstallation des Pakets '''ubuntu-extras-keyring''':


<tt>madison</tt> zeigt eine tabellarische Übersicht, der in den Paketquellen verfügbaren Versionen eines Programms, an. madison benötigt die Angabe mindestens eines ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden.
sudo apt-get --reinstall install ubuntu-extras-keyring


In diesem Fall werden die Informationen nacheinander ausgegeben.
===== 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


apt-cache madison PAKET1 [PAKET2] 
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).


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


==== 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:
|}
===  Beispiele ===


===== Bezug zu einem Paket =====
sudo apt-key list --keyring /etc/apt/trusted.gpg
sudo apt-key list --keyring /etc/apt/trusted.gpg~


Steht ein ''Paket'' im Bezug zu einem anderen Paket, wird dies im Beschreibungstext erwähnt.
Ein Ausschnitt könnte folgendermaßen aussehen:


apt-cache -f search PROGRAMM
[...]


sucht nach ''Programm'' in allen ''Paket''namen und -beschreibungen und gibt anschließend die kompletten Informationen aus.
pub 1024R/'''12DE56F8''' 2011-01-01
uid Launchpad PPA for Ubuntu User


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


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


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


gibt alle Paketnamen aus, die mit ''Programm'' anfangen, somit auch die verfügbaren Erweiterungen.
sudo apt-key --keyring /etc/apt/trusted.gpg del 12DE56F8
sudo apt-key --keyring /etc/apt/trusted.gpg~ del 12DE56F8


===== Ausgabe der Abhängigkeiten eines Pakets =====
Abschließend muss noch der Speicherbereich für Statusinformationen nach Paketverwaltung/Problembehebung zurückgesetzt werden.


apt-cache depends PAKET 
====== 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).


===== Ausgabe der Paketstruktur mit dotty =====
==== 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)


Im Beispiel wird das Paket <tt>xterm</tt> untersucht und der Graph als PNG ausgegeben.
Dieser Fehler tritt auf, wenn Systemverzeichnisse sich nicht auf einem Linux-Dateisystem befinden.


apt-cache -o APT::Cache::GivenOnly=true dotty xterm | dot -Tpng > beispiel.png
===== Lösung =====
Systemordner über fstab in Dateisystem mit ausreichender Rechteverwaltung einbinden. U.U. muss eine entsprechende Partition erst angelegt werden: Manuelle Partitionierung


Die Ausgabe von <tt>apt-cache</tt> wird mit einer Umleitung an das Graphviz-Werkzeug <tt>dot</tt> übergeben, um eine Grafik (hier im PNG-Format, andere Formate sind möglich, siehe Manpage von <tt>dot</tt>) zu erzeugen.
==== 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.


Oder auch mit rekursiven Abhängigkeiten:  
====== Lösung ======
Die Lockdatei und das zugrunde liegende Verzeichnis manuell anlegen. Für das erste Beispiel also:


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
sudo mkdir -p /var/cache/apt/archives
sudo touch /var/cache/apt/archives/lock


== apt-file ==
===== 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


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


Grundlage sind die offiziellen Paketlisten, die dazu lokal gespeichert werden.
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


=== Installation ===
====== Lösung ======
Arbeitet bereits ein anderes Programm zur Paketverwaltung im Hintergrund? Dies kontrolliert man zuerst mit


Das Programm ist nicht in der Standardinstallation enthalten und kann mit dem Paket
sudo lsof /var/cache/apt/archives/lock


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


zum System hinzugefügt werden.
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.


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


Nach der Installation müssen zunächst die Paketinhalte neu synchronisiert werden. Dies geschieht mit
sudo touch /var/cache/apt/archives/lock


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


Sollen die Inhalte für alle Benutzer geladen werden, muss der Befehl als Administrator ausgeführt werden.
====== Lösung ======
Man sollte das eingegebene Kommando nochmal mit Rootrechten ausführen.


apt-file wird im Terminal ausgeführt . Die Grundsyntax sieht folgendermaßen aus:
==== Archivverzeichnis fehlt ====
E: Archivverzeichnis /var/cache/apt/archives/partial fehlt.


apt-file OPTION BEFEHL
===== 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:


==== Kommandos ====
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.
|-
|  | '''BEFEHL '''
|  | '''Bedeutung '''
|-
|  | '''update '''
|  | Synchronisiert die Paketinhalte mit den Quellen. Empfohlen nach Änderung an den Paketquellen.
|-
|  | '''search SUCHMUSTER '''
|  | Sucht in allen bekannten Paketen nach <tt>SUCHMUSTER</tt>. Sucht nur nach Dateinamen, nicht nach Verzeichnissen.
|-
|  | '''list SUCHMUSTER '''
|  | Listet die Dateien aller Pakete auf, die auf <tt>SUCHMUSTER</tt> passen.  
|-
|  | '''purge '''
|  | Löscht den Cache


===== Lösung =====
Durch Entfernen der Datei '''/var/lib/dpkg/available''' wird das Problem behoben:


|-
sudo dpkg --clear-avail
|}
==== Optionen ====


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


{|
sudo dselect update
|-
|  | '''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


==== 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.
|}
===  Beispiele ===


* Auflistung aller Dateien, die zu elinks gehören: <br/>apt-file list elinks
===== Lösung =====
* Suche nach der Datei '''/usr/include/c++/4.6/vector''': <br/>apt-file search /usr/include/c++/4.6/vector
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


==  apt-key ==
sudo apt-get check


'''apt-key''' kennt verschiedene Kommandos , die exakt die Aktion angeben, welche mit dem Schlüsselbund ausgeführt wird.
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.
| colspan="2" | '''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.  


==== 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.
|}
===  Kommandos ===
 
==== apt-key add ====


<tt>add</tt> fügt dem Schlüsselbund einen neuen Schlüssel hinzu.  
===== Lösung =====
Mit folgendem Vorgehen wird die entsprechend beschädigte Datei unter '''/var/lib/dpkg/info/PAKET.list''' neu generiert.


Dieser kann entweder in einer ''Datei'' gespeichert sein oder aus dem ''stdin'' - einer Weiterleitung der Ausgabe eines vorherigen Befehls - kommen, was dann durch ein <tt>-</tt> angezeigt wird.
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-key add DATEI
sudo apt-get --download-only --reinstall install PAKET


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


sudo apt-key add -  
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


==== apt-key del ====
===== 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.


<tt>del</tt> löscht einen vorhanden Schlüssel aus dem Schlüsselbund. Der zu löschende Schlüssel muss mit seiner ''ID'' angegeben 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:


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


==== apt-key export ====
sucht alle installierten Pakete und speichert diese in der Datei '''/tmp/dpkg.log'''.


<tt>export</tt> gibt einen Schlüssel, der durch seine ''ID'' bezeichnet wird, auf ''stdout'' zur Weiterverabeitung aus.
sudo xargs -n1 apt-get --reinstall install -y < /tmp/dpkg.log


apt-key export ID
nimmt einen Eintrag aus '''/tmp/dpkg.log''' und installiert diese Pakete erneut.


==== apt-key exportall ====
==== 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.


<tt>exportall</tt> gibt alle derzeit bekannten Schlüssel auf ''stdout'' aus.
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.


apt-key exportall
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.


==== apt-key list ====
Anschließend kann folgendes Perl-Skript z.B. als '''dpkg-rebuild''' gespeichert werden:


<tt>list</tt> 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.
{|
|-
|| <nowiki>#!/usr/bin/perl -w</nowiki>


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


==== apt-key finger ====
use strict;
use warnings;


<tt>finger</tt> zeigt den Fingerabdruck aller derzeit bekannten Schlüssel auf ''stdout'' an.
my $available = "/var/lib/dpkg/available";
my $status = "/tmp/status";
my $info_dir = "/var/lib/dpkg/info";
my %installed;


apt-key finger
<nowiki># Multiarch supported architectures.</nowiki>
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);


==== apt-key adv ====
<nowiki># Fill %installed with status information of installed packages.</nowiki>
<nowiki># installed{package} => {</nowiki>
<nowiki># </nowiki> "status" => 1, (installed with files -> installed)
<nowiki># </nowiki> "status" => 2, (installed without files -> deinstalled)
<nowiki># </nowiki> <nowiki>## not implemented:</nowiki>
<nowiki># </nowiki> <nowiki>## </nowiki> "status" => 3, (installed with files but no md5sums file -> purged)
<nowiki># </nowiki> "conffiles" => array of conffiles
<nowiki># }</nowiki>
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;
}
}


<tt>adv</tt> erlaubt die Angabe spezieller Parameter für das im Hintergrund arbeitende GnuPG (gpg). Alle aus gpg bekannten Parameter können angegeben werden. <tt>adv</tt> benötigt die Angabe der zu verarbeitenden Schlüssel''ID''
<nowiki># 0=between, 1=essential-searching 2=copying-installed, 3=copying-not-installed</nowiki>
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 "");
}
}


sudo apt-key adv gpg-option ID
printf "Installed packages not found in $available:\n";
 
foreach (sort keys %installed) {
==== apt-key update ====
print " $_\n";
}
|-
|}
Nun wird das Skript ausgeführt:


<tt>update</tt> 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.
perl dpkg-rebuild


sudo apt-key update
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.


===  Optionen ===
== 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.


apt-key kennt nur einen Konsolenschalter: <tt>--keyring</tt>, mit dem ein alternativer Schlüsselbund zur Bearbeitung übergeben werden kann.
Dadurch kann z.B. direkt die standardmäßige Sprache festgelegt werden, ohne dass der Benutzer diese Änderung selbst in den Konfigurationsdateien vornehmen muss.


===  Beispiele ===
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.


==== add mit wget ====
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.


Schlüssel zu Fremdquellen werden manchmal mit der Fremdquelle zusammen auf dem Webserver des Projekts veröffentlicht.  
Anhand der durch den Benutzer oder durch die Standardwerte gegebenen Rückgabewerte werden mit diesen Skripten bestimmte Einstellungen am System vorgenommen.


Dann kann man den Schlüssel mit <tt>wget</tt> herunterladen und sofort an die Schlüsselverwaltung übergeben.  
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 <tt>dpkg-reconfigure</tt> "neu konfiguriert" bzw. "rekonfiguriert" werden.


Im Beispiel wird der Schlüssel für die Paketquelle des Browsers Opera heruntergeladen:
Das heißt, dass nun eine Benutzerinteraktion wie bei der Erstinstallation stattfindet.


wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
Vorlagen und die Ergebnisse der Elemente werden in die debconf-Datenbanken unter '''/var/cache/debconf''' gespeichert.


==== adv im Einsatz ====
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.


Nutzt man <tt>adv</tt>, kann man alle Optionen, die GnuPG im Hintergrund benutzt, selbst angeben statt Standardwerte zu benutzen.
In Ausnahmefällen wird ein Passwort abgefragt, welches dann nur unter Schutz der Rootrechte in '''passwords.dat''' gesichert wird.


sudo apt-key adv --keyserver PGP_KEY_SERVER --recv-keys ID
=== Konfigurierbaren Pakete anzeigen ===
Eine Liste der unter debconf registrierten "Besitzer von Konfigurationsdateien" (welche idR. den Paketnamen entsprechen) erhält man im Terminal mit:


lädt den Schlüssel ID vom angegeben Server herunter.
debconf-show --listowners


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


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


==== Übersicht der installierten Pakete ====
debconf-show PAKET


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


Um eine Liste zu erstellen, die alle installierten Pakete und deren Beschreibungen enthält, führt man den Befehl
=== 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.


COLUMNS=200 dpkg-query -l > packages_list.list
Aber auch die von der Paketverwaltung abhängige Schnittstellenoberfläche oder der Status "bereits gesehen" (s.g. "seen") spielen eine Rolle.


aus. Die Paketliste befindet sich danach in der Datei '''packages_list.list'''.
Mit der Option ''--priority'' können mit <tt>dpkg-reconfigure</tt> die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden:


===== Hinweis =====
{|
 
|-
Diese Liste ist rein informativ und lässt sich nicht (d.h. nur schwer) zum Wiederherstellen nach einer Neuinstallation verwenden!
| colspan="2" | '''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:


====== Paketliste zur Wiederherstellung erzeugen ======
sudo dpkg-reconfigure --priority=low ssh


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
Analog gibt es den Befehl <tt>dpkg-preconfigure</tt>, mit welchem die debconf-Vorlagen, welche ''vor'' einer Paketinstallation durchzuführen waren, abgearbeitet werden.


dpkg --get-selections | awk '!/deinstall|purge|hold/ {print $1}' > packages.list
===== Hinweis =====
 
Standardmäßig wird bei dpkg-reconfigure und dpkg-preconfigure (unabhängig von der systemweiten debconf-Priorität) die Priorität "low" verwendet.
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''':
 
<nowiki>find /etc/apt/sources.list* -type f -name '*.list' -exec bash -c 'echo -e "\n## $1 ";grep "^[[:space:]]*[^#[:space:]]" ${1}' _ {} \; > sources.list.save </nowiki>
 
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  <nowiki># Schlüsselbund importieren</nowiki>
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 <tt>apt-history</tt>.
 
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 '
              <nowiki>;;</nowiki>
        upgrade|remove)
              cat /var/log/{dpkg.log,dpkg.log.1} | grep $1
              <nowiki>;;</nowiki>
        rollback)
              cat /var/log/{dpkg.log,dpkg.log.1} | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              <nowiki>;;</nowiki>
        <nowiki>*)</nowiki>
              cat /var/log/{dpkg.log,dpkg.log.1}
              <nowiki>;;</nowiki>
      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 <tt>install</tt>, <tt>remove</tt> oder <tt>rollback</tt>.
 
===  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.
 
 
{|
|-
| colspan="3" | '''Kommandozeilenoptionen zu dpkg '''
|-
|  | '''Kürzel '''
|  | '''Lange Option '''
|  | '''Beschreibung '''
|-
|  | <tt>'''-i</tt> '''
|  | <tt>'''--install</tt> '''
|  | Installiert das als Argument übergebene '''.deb'''-Paket (Dateiname oder mit Option <tt>-R</tt> Ordnername).
|-
|  |
|  | <tt>'''--configure</tt> '''
|  | 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 <tt>-a</tt> bzw. <tt>--pending</tt> angegeben, um alle noch zu konfigurierenden Pakete zu verarbeiten.Soll ein bereits korrekt installiertes Paket erneut konfiguriert werden, muss dpkg-reconfigure genutzt werden.
|-
|  | <tt>'''-r</tt> '''
|  | <tt>'''--remove</tt> '''
|  | 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.
|-
|  | <tt>'''-l</tt> '''
|  | <tt>'''--list</tt> '''
|  | 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.
|-
|  | <tt>'''-P</tt> '''
|  | <tt>'''--purge</tt> '''
|  | Entfernt das genannte Paket inklusive der Konfigurationsdateien.
|-
|  | <tt>'''-R</tt> '''
|  | <tt>'''--recursive</tt> '''
|  | Statt eines Pfades zu einer '''.deb''' kann mit <tt>-R</tt> auch ein Verzeichnis angegeben werden, die gewählte Operation wird dann auf alle Pakete im Verzeichnis angewandt.
|-
|  | <tt>'''-L</tt> '''
|  | <tt>'''--listfiles</tt> '''
|  | Ruft dpkg-query auf und gibt eine Liste der im Paket enthaltenen Dateien aus.
|-
|  | <tt>'''-S</tt> '''
|  | <tt>'''--search</tt> '''
|  | 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 <tt>ACTIONS</tt> bzw. <tt>AKTIONEN</tt>.
 
==== 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.
 
 
{|
|-
| colspan="2" | '''Kommandozeilenoptionen mit force '''
|-
|  | '''Lange Option '''
|  | '''Beschreibung '''
|-
|  | <tt>'''--force-help</tt> '''
|  | Gibt eine Liste der force-Optionen mit einer Kurzbeschreibung aus.
|-
|  | <tt>'''--force-depends</tt> '''
|  | Ändert Abhängigkeitsfehler zu Warnungen. Ein Paket kann so trotz fehlender Abhängigkeiten installiert werden. <tt>apt-get -f</tt> wird eventuell zur Korrektur benötigt.
|-
|  | <tt>'''--force-architecture</tt> '''
|  | 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.
|-
|  | <tt>'''--force-remove-reinstreq</tt> '''
|  | 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 <tt>OPTIONS</tt> bzw. <tt>OPTIONEN</tt>.
 
===  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 <tt>dpkg</tt>-Befehl angesteuert werden.
 
dpkg-query OPTION PAKET/SUCHMUSTER
 
 
{|
|-
| colspan="3" | '''Kommandozeilenoptionen zu dpkg-query '''
|-
|  | '''Kürzel '''
|  | '''Lange Option '''
|  | '''Beschreibung '''
|-
|  | <tt>'''-l</tt> '''
|  | <tt>'''--list</tt> '''
|  | Gibt eine Liste der zum Suchmuster passenden Pakete und deren Informationen aus.
|-
|  | <tt>'''-S</tt> '''
|  | <tt>'''--search</tt> '''
|  | Gibt aus, in welchen Paketen sich Dateien befinden, die zum angegeben Suchmuster (z.B. Pfad) passen.
|-
|  | <tt>'''-L</tt> '''
|  | <tt>'''--listfiles</tt> '''
|  | 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 <tt>COMMANDS</tt> bzw. <tt>BEFEHLE</tt>.
 
==== Paketstatus ====
 
Zusätzlich zur Kurzbeschreibung des Pakets gibt <tt>--list</tt>/<tt>-l</tt> eine Statusangabe zum jeweiligen Paket aus. Diese besteht aus 3 Stellen: # Gewünschter Paketstatus
 
*
** <tt>u</tt> für unbekannt
** <tt>i</tt> für installieren
** <tt>h</tt> für halten
** <tt>r</tt> für entfernen (Konfigurationsdateien behalten)
** <tt>p</tt> für vollständig (inkl. Konfigurationsdateien) entfernen
 
# Aktueller Paketstatus
 
*
** <tt>n</tt> für nicht installiert
** <tt>c</tt> für Konfigurationsdateien verbleibend
** <tt>H</tt> für nicht vollständig installiert (nicht alle Dateien konnten installiert werden)
** <tt>U</tt> für entpackt (vor dem eigentlichen Installieren)
** <tt>F</tt> für nicht vollständig konfiguriert (Fehler in Konfigurationsskripten)
** <tt>W</tt> 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.)
** <tt>t</tt> für Trigger-Verabeitung steht bevor
** <tt>i</tt> für installiert
 
# Fehler (Leerzeichen für keine Fehler)
 
*
** <tt>R</tt> für Reinstallation erforderlich
 
 
 
So bezeichnet <tt>ii</tt> ein vollständig installiertes Paket, <tt>rc</tt> ein entferntes Paket von dem noch Konfigurationsdateien vorliegen und <tt>un</tt> ein nicht (mehr) installiertes Paket.
 
Eine vollständige Liste der Statusangaben findet sich in der '''dpkg-query'''(1) Manpage im Abschnitt <tt>PACKAGE STATES</tt> bzw. <tt>PAKETZUSTÄNDE</tt>.
 
==== 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 <tt>dpkg</tt>-Befehl angesteuert werden.
 
dpkg-deb OPTION VERZEICHNIS/PAKET
 
 
{|
|-
| colspan="3" | '''Kommandozeilenoptionen zu dpkg-deb '''
|-
|  | '''Kürzel '''
|  | '''Lange Option '''
|  | '''Beschreibung '''
|-
|  | <tt>'''-I</tt> '''
|  | <tt>'''--info</tt> '''
|  | 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.
|-
|  | <tt>'''-b</tt> '''
|  | <tt>'''--build</tt> '''
|  | Erstellt ein '''.deb'''-Paket aus einem angegebenen Verzeichnis.
|-
|  | <tt>'''-c</tt> '''
|  | <tt>'''--contents</tt> '''
|  | Zeigt den Inhalt eines '''.deb'''-Pakets an.
|-
|  | <tt>'''-x</tt> '''
|  | <tt>'''--extract</tt> '''
|  | 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 <tt>COMMANDS</tt> bzw. <tt>BEFEHLE</tt>.
 
==== 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
 
 
{|
|-
| colspan="2" | '''Kommandozeilenoptionen zu dpkg-divert '''
|-
|  | '''Befehl '''
|  | '''Beschreibung '''
|-
|  | <tt>'''--add</tt> '''
|  | Fügt eine Umleitung für die als Argument übergebene Datei hinzu. Die Angabe von <tt>--add</tt> als Kommando ist optional. Wenn kein Kommando angegeben wurde, wird immer dieses Kommando gewählt.
|-
|  | <tt>'''--remove</tt> '''
|  | Entfernt die Umleitung für die als Argument übergebene Datei. Wenn bei der Umleitung umbenannt wurde, muss trotzdem die ursprüngliche Name übergeben werden.
|-
|  | <tt>'''--list</tt> '''
|  | Listet alle aktuell eingerichteten Umleitungen, die auf das als Argument übergebene Suchmuster passen, auf. Ohne Argument werden alle Umleitungen aufgelistet.
|-
| colspan="2" |
|-
|  | '''Option '''
|  | '''Beschreibung '''
|-
|  | <tt>--local</tt>
|  | Richtet die Umleitung so ein, dass die Datei durch kein Paketupgrade und durch keine Paketinstallation verändert wird.
|-
|  | <tt>--package</tt>
|  | Das als Argument übergebene Paket ist als einziges Paket nicht von der Umleitung betroffen.
|-
|  | <tt>--rename</tt>
|  | 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.
|-
|  | <tt>--test</tt>
|  | Es werden keine Änderungen vorgenommen.
|-
|}
Eine vollständige Liste der Befehle und Optionen findet sich in der '''dpkg-divert'''(8) Manpage im Abschnitt <tt>COMMANDS</tt> und <tt>OPTIONS</tt> bzw. <tt>BEFEHLE</tt> und <tt>OPTIONEN</tt>.
 
===  Beispiele ===
 
==== Installation ====
 
sudo dpkg -i /PFAD/ZUM/PAKET/PAKET.deb
 
Installiert das <tt>PAKET</tt> im genannten Pfad.
 
==== Entfernen ====
 
sudo dpkg -r vim
 
Entfernt das Paket '''vim'''.
 
sudo dpkg -r vim*
 
Entfernt alle Pakete, deren Name mit <tt>vim</tt> beginnt.
 
==== Anzeige ====
 
dpkg -l vim*
 
Gibt die Informationen zum allen Paketen aus, deren Name mit <tt>vim</tt> 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 <tt>--rename</tt> 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 ====
 
[[Image:Grafik64.png|top]]
 
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:
 
 
{|
|-
| colspan="2" | '''Ü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
|-
|  | '''<nowiki>= </nowiki>'''
|  | 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:* <tt>?name(linux)</tt> - sucht nach allen Paketen, die Linux im Namen haben
* <tt>?description(python)</tt> - sucht nach allen Paketen, die Python in der Beschreibung haben
* <tt>?and(?name(linux),?description(python)</tt> - sucht nach allen Paketen, die Linux im Namen und Python in der Beschreibung haben
* <tt>?installed</tt> - sucht nach allen installierten Paketen
* <tt>?installed(?not(?automatic))</tt> - 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.
 
 
{|
|-
| colspan="2" | '''Übersicht Befehle Kommandozeile '''
|-
|  | '''Befehl '''
|  | '''Funktion '''
|-
|  | <tt>'''install</tt> '''
|  | installiert das Paket, die Abhängigkeiten werden direkt mit aufgelöst
|-
|  | <tt>'''remove</tt> '''
|  | löscht das Paket, die Konfigurationsdateien bleiben aber erhalten
|-
|  | <tt>'''purge</tt> '''
|  | löscht das Paket inklusive aller Konfigurationsdateien
|-
|  | <tt>'''hold</tt> '''
|  | erzwingt, dass das Paket in der aktuell installierten Version gehalten wird, d.h. es werden keine Updates dafür installiert
|-
|  | <tt>'''forbid-version</tt> '''
|  | verbietet die Installation einer bestimmten Paketversion, diese muss hinter dem Paketnamen mittels <tt><nowiki>=</nowiki></tt> angehängt werden, also z.B. <tt>xserver-xorg=1.7.7+2~broken-4</tt>
|-
|  | <tt>'''safe-upgrade</tt> '''
|  | 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.
|-
|  | <tt>'''full-upgrade</tt> '''
|  | 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 <tt>apt-get</tt> dem <tt>dist-upgrade</tt>)
|-
|  | <tt>'''show</tt> '''
|  | zeigt Informationen zum Paket an
|-
|  | <tt>'''why</tt> '''
|  | zeigt an, welche Pakete von diesem abhängen
|-
|  | <tt>'''why-not</tt> '''
|  | zeigt an, warum ein Paket nicht installiert werden kann, also welche Konflikte existieren
|-
|  | <tt>'''clean</tt> '''
|  | leert den Paketcache, kann u.U. sehr viel Festplattenplatz frei machen
|-
|  | <tt>'''autoclean</tt> '''
|  | leert den Paketcache für alle Pakete aus den eingetragenen Quellen, kann u.U. sehr viel Festplattenplatz frei machen
|-
|  | <tt>'''build-dep</tt> '''
|  | 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 <tt>install</tt> erwähnt werden soll, ist <tt>-R</tt>. 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 <tt>APT::Install-Recommends</tt> 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 <tt>upgrade</tt> bzw. <tt>dist-upgrade</tt> 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:
 
 
{|
|-
|| <nowiki>#!/bin/sh</nowiki>
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  <nowiki># Für Versionen bis Ubuntu 10.04 Lucid Lynx</nowiki>
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 <tt>PAKET</tt> und einmal jeweils <tt>VERSION</tt> und <tt>ARCHITEKTUR</tt>):
 
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:
 
 
{|
|-
|| <nowiki>#!/usr/bin/perl -w</nowiki>
 
<nowiki># Rebuild the Debian '/var/lib/dpkg/status' file from information in</nowiki>
<nowiki># '/var/lib/dpkg/available' and '/var/lib/dpkg/info/*.(list|conffiles)'.</nowiki>
<nowiki># This is useful if your 'status' file got corrupted if the system crashed</nowiki>
<nowiki># during package maintenance, for example.</nowiki>
<nowiki>#</nowiki>
<nowiki># Copyright 2002 by Patrick Reynolds (reynolds .at. cs duke edu)</nowiki>
<nowiki># </nowiki>          2012 by Dominique Lasserre (lasserre.d at gmail com)
<nowiki># Distributed under the terms of the GNU General Public License (GPL).</nowiki>
<nowiki>#</nowiki>
<nowiki># Usage:</nowiki>
<nowiki># </nowiki>  dpkg-rebuild
<nowiki># It takes no arguments and generates output in /tmp/status.</nowiki>
<nowiki># Move /tmp/status to /var/lib/dpkg if it looks acceptable.</nowiki>
<nowiki># With multiarch support!</nowiki>
<nowiki>#</nowiki>
<nowiki># Limitations:</nowiki>
<nowiki># </nowiki>  1) Packages that are no longer available will not show up in the
<nowiki># </nowiki>  rebuilt 'status' file.  This means installed-but-obsolete packages
<nowiki># </nowiki>  can't be managed after a rebuild.
<nowiki># </nowiki>  Only packages listed in /var/lib/dpkg/available are processed. So update
<nowiki># </nowiki>  it before dpkg-rebuild operation.
<nowiki>#</nowiki>
<nowiki># </nowiki>  2) The 'Conffiles:' keys in the 'status' file doesn't have checksums.
<nowiki># </nowiki>  It is not possible to detect if config file was modified or not, so do
<nowiki># </nowiki>  not generate checksums at all.
<nowiki># </nowiki>  If a package has config files but not listed in .conffiles they aren't
<nowiki># </nowiki>  tracked (and probably package state is guessed false).
<nowiki># </nowiki>  'Config-Version' will not created because it is impossible to detect from
<nowiki># </nowiki>  which version config files are from.
<nowiki># </nowiki>  Configuration files may not be completely removed when you purge
<nowiki># </nowiki>  packages, and package upgrades may clobber existing configuration
<nowiki># </nowiki>  files without asking.
<nowiki>#</nowiki>
<nowiki># </nowiki>  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;
 
<nowiki># Multiarch supported architectures.</nowiki>
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);
 
<nowiki># Fill %installed with status information of installed packages.</nowiki>
<nowiki># installed{package} => {</nowiki>
<nowiki># </nowiki>    "status" => 1,  (installed with files -> installed)
<nowiki># </nowiki>    "status" => 2,  (installed without files -> deinstalled)
<nowiki># </nowiki>  <nowiki>## not implemented:</nowiki>
<nowiki># </nowiki>  <nowiki>## </nowiki> "status" => 3,  (installed with files but no md5sums file -> purged)
<nowiki># </nowiki>    "conffiles" => array of conffiles
<nowiki># }</nowiki>
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;
  }
}
 
<nowiki># 0=between, 1=essential-searching 2=copying-installed, 3=copying-not-installed</nowiki>
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 <tt>dpkg-reconfigure</tt> "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 <tt>dpkg-reconfigure</tt> die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden:
=== 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.


 
{|
{|  
|-
| colspan="2" | '''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 <tt>dpkg-preconfigure</tt>, 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.
{|
|-
| colspan="3" | '''Schnittstellenoberflächen '''
| colspan="3" | '''Schnittstellenoberflächen '''
|-
|-
| | '''Typ '''
| | '''Typ '''
| | '''Beschreibung '''
| | '''Beschreibung '''
| | '''Funktionalität '''
| | '''Funktionalität '''
|-
|-
| | Dialog  
| | Dialog
| | konsolenbasierte Vollbilddarstellung mit dialog  
| | konsolenbasierte Vollbilddarstellung mit dialog
| | vollständige Interaktion möglich  
| | vollständige Interaktion möglich
|-
|-
| | Readline  
| | Readline
| | traditionelle, einfache Textschnittstelle  
| | traditionelle, einfache Textschnittstelle
| | um Momentanwert zu sehen, muss '''libterm-readline-gnu-perl''' installiert sein  
| | um Momentanwert zu sehen, muss '''libterm-readline-gnu-perl''' installiert sein
|-
|-
| | Gnome  
| | Gnome
| | in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden  
| | in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden
| | vollständige Interaktion möglich  
| | vollständige Interaktion möglich
|-
|-
| | Kde  
| | Kde
| | in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden  
| | in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden
| | vollständige Interaktion möglich  
| | vollständige Interaktion möglich
|-
|-
| | Editor  
| | Editor
| | Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor  
| | Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor
| | vollständige Interaktion möglich  
| | vollständige Interaktion möglich
|-
|-
| | Web  
| | Web
| | Konfiguration über Browser, standardmäßig: http://localhost:8001/  
| | Konfiguration über Browser, standardmäßig: http://localhost:8001/
| | vollständige Interaktion möglich  
| | vollständige Interaktion möglich
|-
|-
| | Nicht-interaktiv  
| | Nicht-interaktiv
| | Es findet keine Interaktion statt (nicht empfohlen!).  
| | Es findet keine Interaktion statt (nicht empfohlen!).
| | keine Interaktion möglich  
| | 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.
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 ===
=== Gezielte Konfiguration ===
Die Datenbank kann nach folgendem Muster (am Beispiel einer einfachen Auswahl) direkt geändert werden. ''"BESITZER"'' ist dabei meist der entsprechende Paketname.


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
 
echo "set BESITZER/VORLAGE WERT" | sudo debconf-communicate  


===== Hinweis =====
===== Hinweis =====
Es wird ausschließlich der Datenbankeintrag geändert. Eine Änderung an Konfigurationsdateien wird nicht vorgenommen (dies ist den Maintainerskripten '''preinst''', '''postinst''', ... vorbehalten).
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.  
Deswegen ist ein solches Eingreifen nur in Ausnahmefällen sinnvoll.


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


Wie dieser Befehl sinnvoll einsetzbar ist, zeigt folgendes sehr spezielles Beispiel an dem Paket '''ttf-mscorefonts-installer''':
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.  
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
Nun kann die EULA nachträglich akzeptiert werden, sodass das Paket ohne Fehler reinstalliert werden kann:


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


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


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
 
sudo apt-get install configure-debian  


==== gkdebconf ====
==== 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.


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
 
sudo apt-get install gkdebconf  
 
===  Dateien und Paketen ===


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


dpkg -S DATEINAME  
dpkg -S DATEINAME


Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit <tt>dpkg-reconfigure</tt> neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht.
Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit <tt>dpkg-reconfigure</tt> neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht.
[[Kategorie:APT]]

Aktuelle Version vom 19. Oktober 2024, 13:30 Uhr

Advanced Packaging Tool

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

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

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

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

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

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

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

Interna

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

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

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

Frontends

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

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

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

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

APT-RPM

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

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

Apt-cacher und apt-proxy

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

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

apt-get

apt-get

apt-Kommandos

APT/Kommandos

Paketquellen

APT/Paketquellen

Apt-Pinning

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

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

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

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

Hinweis:

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

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

## Offizielle Quellen

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

Pinning per release

Package: *

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

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

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

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

Pinning per origin

Package: *

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

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

Pinning per version

Package: hello

Pin: version 2.1.1* Pin-Priority: 1000

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

Hinweis

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

Gezieltes Umgehen mit apt-get

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

apt-get -t precise install mplayer-custom

Pinning per release

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

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

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

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

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

Pin-Priority

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

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

Das Paket mit der höchsten Punktzahl wird bevorzugt.

Beispiele

proposed-Quellen downgraden

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

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

Package: *

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

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

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

sudo apt-get dist-upgrade

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

Hinweis

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

Package: *

Pin: release a=ARCHIV Pin-Priority: 1001

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

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

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

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

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

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

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

Achtung!

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

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

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

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

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

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

Package: subversion

Pin: version 1.6* Pin-Priority: 1001

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

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

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

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

apt-cache

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

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

Kommandos

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

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

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

apt-cache add

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

apt-cache add DATEI

apt-cache gencaches

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

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

sudo apt-cache gencaches

apt-cache showpkg

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

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

apt-cache showpkg PAKET1 [PAKET2]

apt-cache stats

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

apt-cache stats

apt-cache showsrc

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

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

apt-cache showsrc PAKET1 [PAKET2]

apt-cache dump

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

apt-cache dump

apt-cache dumpavail

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

apt-cache dumpavail

apt-cache unmet

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

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

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

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

apt-cache show

show zeigt detaillierte Informationen zu einem oder mehreren Paketen an.

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

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache show PAKET1 [PAKET2]

apt-cache search

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

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

apt-cache search SUCHBEGRIFF

apt-cache depends

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

apt-cache depends PAKET1 [PAKET2]

apt-cache rdepends

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

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

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache rdepends PAKET1 [PAKET2]

apt-cache pkgnames

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

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

apt-cache pkgnames SUCHBEGRIFF

apt-cache dotty

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

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

apt-cache dotty PAKET1 [PAKET2]

Auswertung von dotty

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

sudo apt-get install graphviz

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

APT::Cache::GivenOnly "true";

in der APT-Konfiguration.

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

apt-cache xvcg

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

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

apt-cache xvcg PAKET1 [PAKET2]

apt-cache policy

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

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

apt-cache policy

oder

apt-cache policy PAKET1 [PAKET2]

apt-cache madison

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

In diesem Fall werden die Informationen nacheinander ausgegeben.

apt-cache madison PAKET1 [PAKET2]

Optionen

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

Beispiele

Bezug zu einem Paket

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

apt-cache -f search PROGRAMM

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

Erweiterungspakete

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

apt-cache pkgnames PROGRAMM

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

Ausgabe der Abhängigkeiten eines Pakets

apt-cache depends PAKET

Ausgabe der Paketstruktur mit dotty

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

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

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

Oder auch mit rekursiven Abhängigkeiten:

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

apt-file

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

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

Installation

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

sudo apt-get install apt-file

zum System hinzugefügt werden.

Bedienung

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

apt-file update

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

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

apt-file OPTION BEFEHL

Kommandos

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

Optionen

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

Beispiele

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

apt-key

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

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

Kommandos

apt-key add

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

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

sudo apt-key add DATEI

oder

sudo apt-key add -

apt-key del

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

sudo apt-key del ID

apt-key export

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

apt-key export ID

apt-key exportall

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

apt-key exportall

apt-key list

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

apt-key list ID

apt-key finger

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

apt-key finger

apt-key adv

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

sudo apt-key adv gpg-option ID

apt-key update

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

sudo apt-key update

Optionen

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

Beispiele

add mit wget

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

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

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

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

adv im Einsatz

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

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

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

Tipps

Paketlisten

Übersicht der installierten Pakete

Reine Informationsliste erzeugen

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

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

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

Hinweis

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

Paketliste zur Wiederherstellung erzeugen

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

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

eine Liste packages.list zur Wiederherstellung der Pakete erzeugen.

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

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

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

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

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

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

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

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

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

Installation von Paketen aus einer Liste

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

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

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

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

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

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

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

URL-Liste zu installierender Pakete

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

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

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

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

wget -i wget.list

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

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

Verlaufslisten

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

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

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

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

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

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

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

apt-history

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

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

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

}

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

apt-history upgrade

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

Konfigurationsdateien entfernen

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

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

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

Sonstiges

Anzahl zu aktualisierender Pakete beim Anmelden an der Konsole falsch

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

Das behebt folgender Ablauf:

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

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

dpkg

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

Optionen

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

Normale Optionen

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

Kommandozeilenoptionen zu dpkg
Kürzel Lange Option Beschreibung
-i --install Installiert das als Argument übergebene .deb-Paket (Dateiname oder mit Option -R Ordnername).
--configure Versucht die Installation von noch nicht fertig konfigurierten Paketen zu beenden. Entweder können die Paketnamen als Argumente übergeben werden oder es wird die Option -a bzw. --pending angegeben, um alle noch zu konfigurierenden Pakete zu verarbeiten.Soll ein bereits korrekt installiertes Paket erneut konfiguriert werden, muss dpkg-reconfigure genutzt werden.
-r --remove Entfernt das als Argument übergebene genannte Paket. Wichtig: Der Name des Pakets, nicht der Dateiname muss angegeben werden. Eventuell vom Programm angelegt Konfigurationsdateien bleiben erhalten.
-l --list Ruft dpkg-query auf und gibt eine Liste mit Status, Version und einer Beschreibung 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 Beschreibung 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 Beschreibung des Pakets gibt --list/-l eine Statusangabe zum jeweiligen Paket aus. Diese besteht aus 3 Stellen: # Gewünschter Paketstatus

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

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

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

dpkg-deb

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

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

dpkg-deb OPTION VERZEICHNIS/PAKET

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

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

dpkg-divert

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

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

dpkg-divert (OPTION) BEFEHL DATEI/MUSTER

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

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

Beispiele

Installation

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

Installiert das PAKET im genannten Pfad.

Entfernen

sudo dpkg -r vim

Entfernt das Paket vim.

sudo dpkg -r vim*

Entfernt alle Pakete, deren Name mit vim beginnt.

Anzeige

dpkg -l vim*

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

Konfiguration beenden

sudo dpkg --configure -a

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

Konfiguration erneut durchführen

sudo dpkg-reconfigure locales

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

Umleitung einrichten

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

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

Umleitung entfernen

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

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

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

aptitude

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

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

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

Achtung!

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

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

Installation

aptitude kann über das Paket

sudo apt-get install aptitude

installiert werden.

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

sudo apt-get install aptitude-doc-en

verfügbar.

Bedienung

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

sudo aptitude BEFEHL PAKET

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

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

Grafische Oberfläche

Datei:Grafik64.png

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

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

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

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

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

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

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

Eine komplette Übersicht bietet das aptitude-Handbuch.

Konsole

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

sudo aptitude BEFEHL OPTION PAKETNAME(N)

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

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

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

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

Pakete suchen

Pakete können mit dem folgenden Befehl gesucht werden:

aptitude search SUCHBEGRIFF1 SUCHBEGRIFF2 ...

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

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

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

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

Defekte Pakete reparieren

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

sudo aptitude -f install

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

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

sudo aptitude -f install PAKETNAME1 PAKETNAME2

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

Achtung!

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

Paketverwaltung unbrauchbar

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

Nach einem Update der bestehenden Installation:

sudo aptitude safe-upgrade -f

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

sudo aptitude full-upgrade -f

Nach beiden Befehlen sollte auf jeden Fall noch

sudo dpkg --configure -a

aufgerufen werden.

Konfigurationsdaten nachträglich löschen

sudo aptitude purge '~c'

löscht die Konfigurationsdaten von bereits deinstallierten Paketen.

Tags vergeben

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

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

Beispiel:

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

Paketzustand speichern

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

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

sudo tar xvf DATEINAME -C /

Überflüssige Pakete

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

Automatische Sicherheitsupdates

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

#!/bin/sh

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

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

chmod 775 aptitude-security-updates

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

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

Problembehebung

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

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

Abhängigkeiten

verhindern die Installation eines Pakets

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

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

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

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

Lösung

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

Konfiguration zurücksetzen

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

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

Zurücksetzen von proposed-Aktualisierungen

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

Defekte Pakete

Die folgenden Pakete besitzen unerfüllte Abhängigkeiten:

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

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

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

Lösung

Im Terminal ist der vorgeschlagene Konsolenbefehl einzugeben :

sudo apt-get -f install

Installation wurde unterbrochen

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

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

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

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

Lösung

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

sudo dpkg --configure -a

Fehle bei Installation

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

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

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

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

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

Lösung

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

Achtung!

Nur die zum entsprechenden Paket gehörigen Skripte umbenennen.

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

Probleme mit Paketquellen

Ungültige Signatur von Paketquellen

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

Dieses Problem kann nach einer Systemaktualisierung auftreten.

Lösung

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

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

Fehler beim Einlesen der Paketliste

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

Diese Probleme können nach einer Systemaktualisierung auftreten.

Lösung

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

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

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

Dieses Problem kann nach einer Systemaktualisierung auftreten.

Lösung

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

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

Aktualisieren schlägt mit GPG-Fehler fehl

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

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

Lösung

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

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

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

Fehler beim Reaktivieren

gelöschter PPAs

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

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

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

Ein Ausschnitt könnte folgendermaßen aussehen:

[...]

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

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

[...]

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

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

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

Hinweis

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

Fehler mit Berechtigungen

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

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

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

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

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

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

Lösung

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

Probleme mit Lockdateien

2: Datei oder Verzeichnis nicht gefunden

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

Lösung

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

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

11: Ressource ist zur Zeit nicht verfügbar

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

oder

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

Lösung

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

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

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

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

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

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

13: Keine Berechtigung

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

Lösung

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

Archivverzeichnis fehlt

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

Lösung

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

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

Fehler in /var/lib/dpkg/available

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

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

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

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

Lösung

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

sudo dpkg --clear-avail

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

sudo dselect update

Fehlerhafte Paketquellen

Zu Hostnamen gehört keine Adresse

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

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

Lösung

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

Hinweis

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

Paketverwaltung unbrauchbar

Segfault

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

sudo apt-get check

mit folgender Fehlermeldung abbricht:

Segmentation faulty Tree

Lösung

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

Dateilisten-Datei

beschädigt

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

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

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

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

Lösung

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

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

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

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

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

Achtung!

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

Alle Pakete neu installieren

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

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

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

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

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

Probelme mit status-Datei

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

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

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

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

#!/usr/bin/perl -w

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

use strict; use warnings;

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

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

chomp;
push(@archs, $_);

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

chomp;
push(@archs, $_);

} close(ARCHS);

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

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

}

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

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

}

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

print " $_\n";

}

Nun wird das Skript ausgeführt:

perl dpkg-rebuild

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

debconf

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

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

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

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

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

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

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

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

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

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

Konfigurierbaren Pakete anzeigen

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

debconf-show --listowners

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

Konfiguration abfragen

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

debconf-show PAKET

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

Paket neu konfigurieren

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

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

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

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

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

sudo dpkg-reconfigure --priority=low ssh

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

Hinweis

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

Schnittstellenoberflächen

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

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

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

Gezielte Konfiguration

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

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

Hinweis

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

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

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

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

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

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

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

Grafische Konfiguration

configure-debian

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

sudo apt-get install configure-debian

gkdebconf

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

sudo apt-get install gkdebconf

Dateien und Paketen

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

dpkg -S DATEINAME

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