Advanced Packaging Tool: Unterschied zwischen den Versionen
Weiterleitung nach Apt erstellt Markierungen: Neue Weiterleitung Visuelle Bearbeitung |
K Textersetzung - „Kurzbeschreibung“ durch „Beschreibung“ |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
# | == 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. | |||
{| | |||
|- | |||
| colspan="2" | '''Advanced Packaging Tool''' | |||
|- | |||
| | Betriebssystem | |||
| | GNU/Linux | |||
|- | |||
| | Kategorie | |||
| | Paketverwaltung | |||
|- | |||
| | Lizenz | |||
| | GPL (Freie Software) | |||
|- | |||
| 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. | |||
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 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 <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. | |||
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: | |||
{| | |||
|- | |||
|| <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 | |||
|- | |||
|} | |||
=== 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 <tt>Package</tt>, <tt>Pin</tt> und <tt>Pin-Priority</tt> 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 <tt>apt-cache policy</tt> 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 <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 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 <tt><nowiki>*</nowiki></tt>). 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 ("<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 | |||
|- | |||
|} | |||
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 "<tt>apt-get update</tt>" '''subversion''' aus den Ubuntu 12.04 Quellen installiert werden . | |||
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 ''' | |||
| | 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. | |||
|- | |||
|} | |||
==== 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-cache add DATEI | |||
==== apt-cache gencaches ==== | |||
<tt>gencache</tt> 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 ==== | |||
<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. | |||
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-cache showpkg PAKET1 [PAKET2] | |||
==== 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-cache stats | |||
==== apt-cache showsrc ==== | |||
<tt>showsrc</tt> zeigt detaillierte Informationen zum verfügbaren Quelltext eines ''Paket''s 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 ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. In diesem Fall werden die Informationen nacheinander ausgegeben. | |||
apt-cache showsrc PAKET1 [PAKET2] | |||
==== 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. | |||
apt-cache dump | |||
==== 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-cache dumpavail | |||
==== 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. | |||
Wird unmet ohne ''Paket''namen aufgerufen, werden die Informationen für alle installierten Paket(e) ausgegeben. | |||
Gibt man bestimmte ''Paket''namen an, müssen diese durch Leerzeichen getrennt angegeben werden. | |||
apt-cache unmet | |||
apt-cache unmet PAKET1 [PAKET2] | |||
==== apt-cache show ==== | |||
<tt>show</tt> zeigt detaillierte Informationen zu einem oder mehreren ''Paket''en an. | |||
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. | |||
In diesem Fall werden die Informationen nacheinander ausgegeben. | |||
apt-cache show PAKET1 [PAKET2] | |||
==== apt-cache search ==== | |||
<tt>search</tt> 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 ''Suchbegriff''e angegeben, werden ausschließlich Pakete angeben, in deren Beschreibung alle Begriffe gefunden wurden. | |||
apt-cache search SUCHBEGRIFF | |||
==== 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. | |||
apt-cache depends PAKET1 [PAKET2] | |||
==== 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). | |||
rdepends 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-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. | |||
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. | |||
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-cache dotty PAKET1 [PAKET2] | |||
===== Auswertung von dotty ===== | |||
Zur Umwandlung der Ausgabe wird <tt>dot</tt> 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 ==== | |||
<tt>xvcg</tt> erstellt aus den Abhängigkeiten der genannten ''Paket''e 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 ''Paket''namens, mehrere ''Paket''namen müssen durch Leerzeichen voneinander getrennt angegeben werden. Die Weiterverarbeitung benötigt die VCG Tools. | |||
apt-cache xvcg PAKET1 [PAKET2] | |||
==== 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. | |||
Mehrere ''Paket''namen 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 ==== | |||
<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. | |||
In diesem Fall werden die Informationen nacheinander ausgegeben. | |||
apt-cache madison PAKET1 [PAKET2] | |||
=== Optionen === | |||
{| | |||
|- | |||
| 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. | |||
|- | |||
|} | |||
=== 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 ''Paket''namen 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 <tt>xterm</tt> untersucht und der Graph als PNG ausgegeben. | |||
apt-cache -o APT::Cache::GivenOnly=true dotty xterm | dot -Tpng > beispiel.png | |||
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 | |||
== 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 <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 | |||
|- | |||
|} | |||
==== 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: <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-key == | |||
'''apt-key''' kennt verschiedene Kommandos , die exakt die Aktion angeben, welche mit dem Schlüsselbund ausgeführt wird. | |||
{| | |||
|- | |||
| 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. | |||
|- | |||
|} | |||
=== Kommandos === | |||
==== apt-key add ==== | |||
<tt>add</tt> 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 <tt>-</tt> angezeigt wird. | |||
sudo apt-key add DATEI | |||
oder | |||
sudo apt-key add - | |||
==== 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. | |||
apt-key export ID | |||
==== apt-key exportall ==== | |||
<tt>exportall</tt> gibt alle derzeit bekannten Schlüssel auf ''stdout'' aus. | |||
apt-key exportall | |||
==== 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. | |||
apt-key list ID | |||
==== 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'' | |||
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. | |||
sudo apt-key update | |||
=== Optionen === | |||
apt-key kennt nur einen Konsolenschalter: <tt>--keyring</tt>, 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 <tt>wget</tt> 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 <tt>adv</tt>, 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''': | |||
<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 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. | |||
{| | |||
|- | |||
| 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. | |||
|- | |||
|} | |||
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 Beschreibung 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: | |||
{| | |||
|- | |||
| 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 ''' | |||
|- | |||
| | '''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 <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''': | |||
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 <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-Kommandos
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
- Aktueller Paketstatus
-
- n für nicht installiert
- c für Konfigurationsdateien verbleibend
- H für nicht vollständig installiert (nicht alle Dateien konnten installiert werden)
- U für entpackt (vor dem eigentlichen Installieren)
- F für nicht vollständig konfiguriert (Fehler in Konfigurationsskripten)
- W für Trigger-Verarbeitung (durch anderes Paket) wird erwartet (Trigger sind z.B. das Aktualisieren des Manpageindexes oder das Aktualisieren der durch .desktop Dateien bereitgestellten MIME-Typen, also Vorgänge, die für mehrere Pakete interessant sind. Anstatt diese Vorgänge nach der Installation jedes einzelnen Paketes auszuführen, wird der Vorgang erst am Ende der Installation aller Pakete ausgeführt.)
- t für Trigger-Verabeitung steht bevor
- i für installiert
- Fehler (Leerzeichen für keine Fehler)
-
- R für Reinstallation erforderlich
So bezeichnet ii ein vollständig installiertes Paket, rc ein entferntes Paket von dem noch Konfigurationsdateien vorliegen und un ein nicht (mehr) installiertes Paket.
Eine vollständige Liste der Statusangaben findet sich in der dpkg-query(1) Manpage im Abschnitt PACKAGE STATES bzw. PAKETZUSTÄNDE.
dpkg-deb
dpkg-deb stellt grundlegende Möglichkeiten zum Packen und Entpacken, sowie die Abfrage von Metainformationen (enthaltene Dateien, Kontrollfelder, ...) von .deb-Paketen bereit.
Einige Optionen können auch direkt mit dem dpkg-Befehl angesteuert werden.
dpkg-deb OPTION VERZEICHNIS/PAKET
Kommandozeilenoptionen zu dpkg-deb | ||
Kürzel | Lange Option | Beschreibung |
-I | --info | Zeigt Informationen des als Argument übergenenen .deb-Paketen an. Als optionales zweites Argument kann der Name einer (vorhandenen) Kontrolldatei übergeben werden, deren Inhalt dann in der Standardausgabe angezeigt wird. |
-b | --build | Erstellt ein .deb-Paket aus einem angegebenen Verzeichnis. |
-c | --contents | Zeigt den Inhalt eines .deb-Pakets an. |
-x | --extract | Entpackt das angegebene .deb-Paket in das angegebene Zielverzeichnis. |
Eine vollständige Liste der Optionen findet sich in der dpkg-deb(1) Manpage im Abschnitt COMMANDS bzw. BEFEHLE.
dpkg-divert
Mit dpkg-divert können Umleitungen eingerichtet werden, sodass z.B. Dateien, die von einem Paket bereitgestellt werden, beim Paketupgrade nicht verändert werden.
So kann man nicht nur lokale Änderungen (ohne Verlust) vornehmen, sondern auch Pakete, die Dateien an exakt der selben Stelle installieren, trotzdem parallel installieren (vorausgesetzt die Pakete sind nicht explizit als gegenseitiger Konflikt markiert).
dpkg-divert (OPTION) BEFEHL DATEI/MUSTER
Kommandozeilenoptionen zu dpkg-divert | |
Befehl | Beschreibung |
--add | Fügt eine Umleitung für die als Argument übergebene Datei hinzu. Die Angabe von --add als Kommando ist optional. Wenn kein Kommando angegeben wurde, wird immer dieses Kommando gewählt. |
--remove | Entfernt die Umleitung für die als Argument übergebene Datei. Wenn bei der Umleitung umbenannt wurde, muss trotzdem die ursprüngliche Name übergeben werden. |
--list | Listet alle aktuell eingerichteten Umleitungen, die auf das als Argument übergebene Suchmuster passen, auf. Ohne Argument werden alle Umleitungen aufgelistet. |
Option | Beschreibung |
--local | Richtet die Umleitung so ein, dass die Datei durch kein Paketupgrade und durch keine Paketinstallation verändert wird. |
--package | Das als Argument übergebene Paket ist als einziges Paket nicht von der Umleitung betroffen. |
--rename | Beim Einrichten (bzw. Entfernen) wird die Datei umbenannt. Standardmäßig wird die Endung .distrib hinzugefügt (bzw. entfernt). Existierende Dateien werden nicht überschrieben, eher bricht die Umbenennung ab. |
--test | Es werden keine Änderungen vorgenommen. |
Eine vollständige Liste der Befehle und Optionen findet sich in der dpkg-divert(8) Manpage im Abschnitt COMMANDS und OPTIONS bzw. BEFEHLE und OPTIONEN.
Beispiele
Installation
sudo dpkg -i /PFAD/ZUM/PAKET/PAKET.deb
Installiert das PAKET im genannten Pfad.
Entfernen
sudo dpkg -r vim
Entfernt das Paket vim.
sudo dpkg -r vim*
Entfernt alle Pakete, deren Name mit vim beginnt.
Anzeige
dpkg -l vim*
Gibt die Informationen zum allen Paketen aus, deren Name mit vim beginnt. Oft macht es Sinn die Ausgaben z.B. mit grep nach den Paketstatus zu filtern.
Konfiguration beenden
sudo dpkg --configure -a
Führt alle noch ausstehenden Konfigurationsskripte aus und kann so einen abgebrochenen Installationsvorgang fortsetzen.
Konfiguration erneut durchführen
sudo dpkg-reconfigure locales
Führt die debconf Konfigurationsskripte des Pakets locales erneut aus (und generiert damit die Sprachpakete neu).
Umleitung einrichten
sudo dpkg-divert --local --rename /usr/bin/apt-build
Die Datei /usr/bin/apt-build wird für alle Pakete ohne Ausnahme auf die Datei /usr/bin/apt-build.distrib umgeleitet. Beim Erstellen der Umleitung wird die Datei direkt umbenannt.
Umleitung entfernen
sudo dpkg-divert --rename --remove /usr/bin/apt-build
Die im vorherigen Beispiel angelegte Umleitung wird wieder entfernt. Das --rename stellt sicher, dass die Datei wieder zurückumbenannt wird.
Vergisst man dies, kann man die Datei einfach manuell z.B. mit mv umbenennen.
aptitude
aptitude ist eine Erweiterung der Paketverwaltung APT (Advanced Packaging Tool) welche auf allen Debian-basierten Systemen, und damit auch Ubuntu, zum Einsatz kommt. Es handelt sich, wie bei apt-get, um eine reine Konsolenanwendung, bietet aber eine grafische Oberfläche auf ncurses Basis.
Im Gegensatz zu apt-get führt aptitude über Änderungen der installierten Pakete „genauer“ Buch, so dass nicht mehr benötigte Pakete automatisch erkannt und deinstalliert werden. Die Installationsgeschichte wird in ein Log geschrieben, wodurch später angezeigt werden kann, wann oder warum ein Paket installiert wurde.
Bei Ubuntu gehört aptitude bis zur Version 10.10 zur Standardinstallation, wurde aber aus platztechnischen Gründen von der Installations-CD genommen. In der Server-Variante ist aptitude nach wie vor installiert.
Achtung!
aptitude hat bis zur Version 0.6.8.1 Probleme mit der Multiarch-Unterstützung (siehe 831768) (dies betrifft in erster Linie 64-bit-Systeme) und ist bis dahin auf Multiarch-Systemen (ab 11.04, z.B. 64-Bit) unter Umständen nicht sinnvoll einsetzbar.
Für Ubuntu 12.04 wurde die Unterstützung zurückportiert und ist in den precise-updates-Quellen verfügbar. Diese sollten deswegen unbedingt aktiviert werden. Bei späteren Ubuntu-Versionen ist das Problem wegen einer neueren aptitude-Version nicht mehr relevant.
Installation
aptitude kann über das Paket
sudo apt-get install aptitude
installiert werden.
Des Weiteren kann man noch das (englische) Handbuch zu aptitude installieren. Dies ist über das Paket
sudo apt-get install aptitude-doc-en
verfügbar.
Bedienung
Wie oben bereits erwähnt, kann man aptitude entweder über die Kommandozeile oder die grafische Oberfläche in der Konsole bedienen. Wie bei der Paketverwaltung üblich, werden Root-Rechte für Schreibvorgänge, wie Paketinstallationen zwingend benötigt. Die allgemeine Syntax lautet:
sudo aptitude BEFEHL PAKET
Ruft man das Programm ohne Befehl und Paket auf, erscheint automatisch die grafische Version.
Die grafische Version startet zwar auch ohne Root-Rechte, allerdings kann man dann nur suchen bzw. die Liste der installierten Pakete anschauen; man kann aber keine Pakete entfernen, installieren etc. .
Grafische Oberfläche
Die Pakete werden vorsortiert und hierarchisch in Form einer aufklappbaren Ordnerstruktur dargestellt.
In der grafischen Oberfläche werden die Pakete je nach „Zustand“ verschiedenfarbig dargestellt:* schwarz : Paket wird nicht verändert
- rot : Paket ist kaputt oder kann nicht installiert werden
- blau : Paket wird aktualisiert
- weiß : Paketversion bleibt erhalten, kann aber aktualisiert werden
- grün : Paket wird installiert
- magenta : Paket wird gelöscht
aptitude kann komplett über die Tastatur gesteuert werden. Alle Funktionen sind aber auch über die entsprechenden Pull-Down Menüs erreichbar, zu denen man mittels Strg + T gelangt. Im Folgenden sind einige Tasten erklärt:
Übersicht Tasten | |
Taste | Funktion |
↓ + ↑ | Auswahlbalken bewegen |
⏎ | Verzeichnis auf- und zuklappen |
/ | Suchen |
N | Weitersuchen |
L | Suchen, alle Pakete, auf die das Suchkriterium nicht zutrifft werden aber ausgeblendet |
I | Paketinformationen anzeigen |
D | Abhängigkeiten anzeigen |
U | Paketquellen updaten |
⇧ + U | alle verfügbaren Updates installieren |
+ | Paket zur Installation vormerken |
- | Paket zum Löschen vormerken |
= | Paketversion halten |
G | Start der Installation/Deinstallation |
? | Hilfe anzeigen, d.h. alle verfügbaren Tasten und deren Funktion |
⇧ + Q | aptitude beenden |
Die Suche von aptitude kennt auch weiterführende Suchfunktionen wie Verknüpfungen, Suche in der Beschreibung etc. . Dazu ein paar Beispiele:* ?name(linux) - sucht nach allen Paketen, die Linux im Namen haben
- ?description(python) - sucht nach allen Paketen, die Python in der Beschreibung haben
- ?and(?name(linux),?description(python) - sucht nach allen Paketen, die Linux im Namen und Python in der Beschreibung haben
- ?installed - sucht nach allen installierten Paketen
- ?installed(?not(?automatic)) - sucht nach allen installierten Paketen ohne markauto Tag
Eine komplette Übersicht bietet das aptitude-Handbuch.
Konsole
Ruft man aptitude mit einer Option bzw. Paketnamen auf, so wird die Aktion ohne Start der grafischen Oberfläche direkt ausgeführt. Die allgemeine Syntax lautet
sudo aptitude BEFEHL OPTION PAKETNAME(N)
Wichtig ist, dass der Befehl vor dem/den Paketnamen steht. Eine Option ist in vielen Fällen nicht notwendig. Wird mehr als ein Paketname angegeben, wird die entsprechende Aktion auf alle genannten Pakete angewendet.
Im Folgenden sind einige gängige Befehle aufgeführt. Teilweise sind diese identisch mit denen von apt-get und haben i.d.R. auch den gleichen Effekt.
Übersicht Befehle Kommandozeile | |
Befehl | Funktion |
install | installiert das Paket, die Abhängigkeiten werden direkt mit aufgelöst |
remove | löscht das Paket, die Konfigurationsdateien bleiben aber erhalten |
purge | löscht das Paket inklusive aller Konfigurationsdateien |
hold | erzwingt, dass das Paket in der aktuell installierten Version gehalten wird, d.h. es werden keine Updates dafür installiert |
forbid-version | verbietet die Installation einer bestimmten Paketversion, diese muss hinter dem Paketnamen mittels = angehängt werden, also z.B. xserver-xorg=1.7.7+2~broken-4 |
safe-upgrade | Es wird ein Update der Pakete durchgeführt, die aktualisiert werden können, ohne dass andere Pakete hinzugefügt oder entfernt werden müssen. Dies ist der „normale“ Befehl, um innerhalb eines Releases ein Update durchzuführen. |
full-upgrade | aktualisiert alle Pakete, installiert neue und entfernt ggf. nicht mehr benötigte; dies ist der Befehl für ein Upgrade zwischen zwei Ubuntu-Versionen (entspricht bei apt-get dem dist-upgrade) |
show | zeigt Informationen zum Paket an |
why | zeigt an, welche Pakete von diesem abhängen |
why-not | zeigt an, warum ein Paket nicht installiert werden kann, also welche Konflikte existieren |
clean | leert den Paketcache, kann u.U. sehr viel Festplattenplatz frei machen |
autoclean | leert den Paketcache für alle Pakete aus den eingetragenen Quellen, kann u.U. sehr viel Festplattenplatz frei machen |
build-dep | installiert die nötigen Quellpakete um das spezifizierte Paket kompilieren zu können (verfügbar seit Ubuntu 8.10) |
Eine Option, die hier für install erwähnt werden soll, ist -R. Dadurch werden nur die direkten Abhängigkeiten mit installiert und nicht auch die Empfehlung, was unter Ubuntu per Voreinstellung passiert, aber Global über den Schlüssel APT::Install-Recommends bestimmt werden kann.
Pakete suchen
Pakete können mit dem folgenden Befehl gesucht werden:
aptitude search SUCHBEGRIFF1 SUCHBEGRIFF2 ...
Wird bei einem Installationsbefehl ein nicht existierender Paketname angegeben, werden Alternativen aufgelistet. Die Eingabe von Paketnamen lässt sich außerdem durch Aktivierung der Shell-Autovervollständigung wesentlich erleichtern.
Es kann auch nach bestimmten Eigenschaften gesucht werden. Alle Suchmöglichkeiten werden in /usr/share/doc/aptitude/README gelistet. So sucht
aptitude search ~Ddepends:gtk~dscanner'!~dvirus'
zum Beispiel nach Paketen, die von gtk abhängen und in deren Beschreibung „scanner“, aber nicht „virus“ vorkommt. Es können also auch Reguläre Ausdrücke zur Suche genutzt werden.
Defekte Pakete reparieren
Wenn ein Paket, das nicht zur separaten Installation gedacht ist, eigentlich weitere Pakete benötigt oder in anderer Weise nicht in die bestehende Installation passt, werden bei der nächsten Verwendung „kaputte Pakete“ gemeldet. Diese muss man reparieren lassen. Der Befehl
sudo aptitude -f install
führt entweder zur Installation weiterer Pakete oder zur Entfernung des installierten Pakets. aptitude macht dabei Vorschläge zur Lösung des Problems, die man akzeptieren oder ablehnen kann.
Falls die defekten Pakete bekannt sind, kann auch folgender Befehl das Problem lösen:
sudo aptitude -f install PAKETNAME1 PAKETNAME2
Wobei PAKETNAME1 bzw. PAKETNAME2 usw. durch die Namen der bekannten defekten Pakete ersetzt wird.
Achtung!
Auch wenn aptitude eine gewisse Intelligenz besitzt, so ist die erste vorgeschlagene Lösung nicht immer die beste. D.h. man sollte die Vorschläge immer sorgsam lesen und dann entscheiden, ob diese sinnvoll sind oder nicht!
Paketverwaltung unbrauchbar
Sollte die Paketverwaltung nach einem upgrade bzw. dist-upgrade unbrauchbar werden, so kann einer der folgenden Befehle helfen:
Nach einem Update der bestehenden Installation:
sudo aptitude safe-upgrade -f
Nach einem Versions-Upgrade auf eine neue Ubuntu-Version:
sudo aptitude full-upgrade -f
Nach beiden Befehlen sollte auf jeden Fall noch
sudo dpkg --configure -a
aufgerufen werden.
Konfigurationsdaten nachträglich löschen
sudo aptitude purge '~c'
löscht die Konfigurationsdaten von bereits deinstallierten Paketen.
Tags vergeben
Tags sind zusätzliche Eigenschaften für lokal installierte Pakete. Zum Kompilieren eines Programms werden beispielsweise viele „-dev“-Pakete benötigt. Viele sind anschließend als manuell installiert markiert, werden aber nach erfolgreicher Kompilierung nicht mehr benötigt, allerdings auch nicht automatisch wieder entfernt. Wenn man den Installationszeitraum noch weiß, kann der Blick ins Log helfen, aber das ist nicht sehr praktisch.
Vergibt man aber schon bei der Installation beispielsweise das Tag „<programmname>kompilierung“ an die betreffenden Pakete, so sieht man auch im Nachhinein leicht, warum ein bestimmtes Paket installiert wurde, und kann gegebenenfalls alle Pakete mit dem Tag entfernen.
Beispiel:
sudo aptitude install --add-user-tag freeorionkompilierung graphviz-dev libalut-dev libboost1.35-dev libdevil-dev liblog4cpp5-dev libsdl-mixer1.2-dev libsdl1.2-dev python2.5-dev sudo aptitude remove '?user-tag(freeorionkompilierung)'
Paketzustand speichern
Will man den Zustand aller installierten Pakete, der Caches, der Paketlisten und APT-, sowie aptitude-Einstellungen zu einem Zeitpunkt speichern oder wiederherstellen, kann man dazu den Mechanismus, der eigentlich für reproduzierbare Bugreports gedacht ist, nutzen:* Backup anlegen:
sudo aptitude-create-state-bundle DATEINAME * Backup direkt ins System einspielen:
sudo tar xvf DATEINAME -C /
Überflüssige Pakete
aptitude entfernt nicht benötigte Pakete automatisch. Wenn aber nicht nur aptitude zur Paketinstallation verwendet wurde, helfen die Pakete debfoster und deborphan , deren Gebrauch im Debian Anwenderhandbuch beschrieben ist. Das Paket deborphan enthält eine Benutzerschnittstelle (orphaner), die die Bedienung vereinfacht.
Automatische Sicherheitsupdates
Hier empfiehlt es sich, mit einem Editor folgende neue Textdatei anzulegen:
#!/bin/sh
date >> /var/log/aptitude-security-updates aptitude update >> /var/log/aptitude-security-updates aptitude safe-upgrade -y -t $(lsb_release --short --codename)-security >> /var/log/aptitude-security-updates |
und diese unter dem Namen aptitude-security-updates im Verzeichnis /etc/cron.daily abzuspeichern. Danach muss man die Ausführrechte mit
chmod 775 aptitude-security-updates
im Terminal setzen. Zukünftig wird dadurch täglich automatisch auf Sicherheitsupdates überprüft und - falls vorhanden - diese ohne Nachfrage installiert. Protokolliert wird dies in der Datei /var/log/aptitude-security-updates.
Ein ausgeklügelter Mechanismus wird von unattended-upgrades bereitgestellt.
Problembehebung
Durch fehlerhafte oder unpassende Paketquellen, durch die Installation mangelhaft erstellter Pakete oder durch Abstürze bei aktiver Verwendung kann es zu Problemen mit der Paketverwaltung kommen.
Das Schaubild verdeutlicht, dass die Fehler an unterschiedlichen Stellen und in verschiedenen Programmen auftreten können. |
Abhängigkeiten
verhindern die Installation eines Pakets
Die folgenden Pakete besitzen unerfüllte Abhängigkeiten: kdelibs3-devel: Hängt ab von: libxslt-devel aber es wird nicht installiert werden Hängt ab von: libxml2-devel aber es wird nicht installiert werden
Gefährlicher ist es, wenn die Installation zwar möglich ist, aber nur um den Preis der Deinstallation zahlreicher anderer Komponenten, die man möglicherweise benötigt.
Wenn gewarnt wird, dass Pakete deinstalliert werden, ohne dass man damit gerechnet hat, sollte man die Aktion im Zweifelsfall abbrechen.
Dieses Problem tritt vor allem dann auf, wenn man Paketquellen verwendet, die nicht für Ubuntu geeignet sind.
Lösung
Nur speziell für Ubuntu ausgewiesene Paketquellen verwenden (siehe auch Fremdquellen).
Konfiguration zurücksetzen
Wurde an den systemweiten Konfigurationsdateien Änderungen vorgenommen, die zu Fehlern führen, ist aber eine funktionierende Form nicht mehr rekonstruierbar, so kann mit folgendem Befehl das Paket reinstalliert werden, sodass alle Paketdateien inkl. der Konfigurationsdateien durch den Standard ersetzt werden:
sudo apt-get -o dpkg::options::="--force-confnew" -o dpkg::options::="--force-confmiss" --reinstall install PAKET
Zurücksetzen von proposed-Aktualisierungen
Wurden versehentlicherweise Pakete aus den proposed-Quellen installiert, können nach dem unter Apt-Pinning beschriebenen Verfahren die Pakete wieder auf eine stabile Version gedowngradet (herabgesetzt) werden.
Defekte Pakete
Die folgenden Pakete besitzen unerfüllte Abhängigkeiten:
z600cups: Hängt ab von: cups (>= 1:1.1.15-10) aber 1.1.20-103 ist installiert
E: Unerfüllte Abhängigkeiten. Versuche -f zu benutzen.
Dieses Problem tritt dann auf, wenn man ein Paket "von Hand" installiert hat, ohne dessen Abhängigkeiten zu erfüllen.
Lösung
Im Terminal ist der vorgeschlagene Konsolenbefehl einzugeben :
sudo apt-get -f install
Installation wurde unterbrochen
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.
Wenn während der Installation von Paketen die Stromzufuhr des Rechners unterbrochen wird, kann das auch für die Paketverwaltung Folgen haben.
Fand der Ausfall während des Downloads und somit vor der eigentlichen Installation statt, kann der Installationsvorgang wiederholt werden, sodass dieser automatisch an passender Stelle fortgesetzt wird.
Wenn aber bereits Dateien eines Pakets installiert wurden, ohne dass die Installation oder Konfiguration zu Ende geführt wurde, gibt es eine entsprechende Fehlermeldung.
Lösung
Wie in der Meldung angegeben ist im Terminal der entsprechende Befehl auszuführen:
sudo dpkg --configure -a
Fehle bei Installation
dpkg: Fehler beim Bearbeiten von gettext (--configure):
Unterprozess post-installation script gab den Fehlerwert 1 zurück
dpkg: Fehler beim Bearbeiten von magicolor2530dl (--remove):
Unterprozess post-removal script gab den Fehlerwert 2 zurück
Bei der Abarbeitung von postinst/preinst- bzw. postrm/prerm-Maintainer Skripten kommt es zu Fehlern.
Lösung
Eine nicht ganz saubere Lösung ist es, diese entsprechenden Skripte umzubenennen. Diese Scripte befinden sich in /var/lib/dpkg/info/.
Achtung!
Nur die zum entsprechenden Paket gehörigen Skripte umbenennen.
Besser (aber schwieriger) ist es, beim entsprechende Skript zu überprüfen, welche Bedingung nicht stimmt und es deswegen zu der Fehlermeldung kommt.
Probleme mit Paketquellen
Ungültige Signatur von Paketquellen
W: GPG-Fehler: http://de.archive.ubuntu.com maverick Release: Die folgenden Signaturen waren ungültig: BADSIG 40976EAF237D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> W: Fehlschlag beim Holen von http://extras.ubuntu.com/ubuntu/dists/maverick/Release
Dieses Problem kann nach einer Systemaktualisierung auftreten.
Lösung
sudo rm /var/lib/apt/lists/* -rf sudo mkdir /var/lib/apt/lists/partial # Für Versionen bis Ubuntu 10.04 Lucid Lynx sudo apt-get update
Den Speicherbereich für Statusinformationen jeder in der sources.list angegebenen Paketquelle zurücksetzen und neu laden.
Fehler beim Einlesen der Paketliste
E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/archive.canonical.com_ubuntu_dists_natty_partner_i18n_Translation-de E: Die Paketliste oder die Statusdatei konnte nicht eingelesen oder geöffnet werden. Failed to exec method /usr/lib/apt/methods/ E: Method has died unexpectedly! E: Unterprozess hat Fehlercode zurückgegeben (100) E: Methode /usr/lib/apt/methods/ ist nicht korrekt gestartet
Diese Probleme können nach einer Systemaktualisierung auftreten.
Lösung
Es ist der selbe Lösungsansatz wie bei Ungültige Signatur von Paketquellen anzuwenden.
Öffentlicher Schlüssel von extras.ubuntu.com fehlt
W: GPG-Fehler: http://extras.ubuntu.com oneiric Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 16126D3A3E5C1192
Dieses Problem kann nach einer Systemaktualisierung auftreten.
Lösung
Kann der Schlüssel nicht mit apt/apt-key importiert werden, hilft eine Neuinstallation des Pakets ubuntu-extras-keyring:
sudo apt-get --reinstall install ubuntu-extras-keyring
Aktualisieren schlägt mit GPG-Fehler fehl
W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 632D16BB0C7135A6
Ggf. funktioniert das Aktualisieren eines aufgenommenen PPAs nicht reibungslos, weil der Schlüssel trotz ordnungsgemäßen Vorgehens nicht installiert wurde (insbesondere unter Ubuntu 11.10 vermehrt beobachtet).
Lösung
Diese Meldung besagt, dass der Authentifizierungsschlüssel nicht importiert wurde. Gelöst werden kann das Problem in diesem Beispiel mit dem Befehl
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 632D16BB0C715DA6
Die Schlüsselnummer muss natürlich entsprechend der Fehlermeldung angepasst werden, siehe ggf. auch auf launchpad.net .
Fehler beim Reaktivieren
gelöschter PPAs
Falls beim Wiederaktivieren eines zuvor deaktivierten oder gelöschten PPAs Probleme beim Importieren des Signierungsschlüssels auftreten, muss dieser zuerst komplett aus den APT-Schlüsseldatenbanken entfernt werden.
Um den Name (ID) des richtigen Schlüssels zu erfahren, kann man direkt in der Datenbank nachschauen:
sudo apt-key list --keyring /etc/apt/trusted.gpg sudo apt-key list --keyring /etc/apt/trusted.gpg~
Ein Ausschnitt könnte folgendermaßen aussehen:
[...]
pub 1024R/12DE56F8 2011-01-01 uid Launchpad PPA for Ubuntu User
pub 1024R/5753AA42 2010-11-23 uid Launchpad PPA for Edubuntu Developers
[...]
Soll nun der Schlüssel des PPAs von "Ubuntu User" entfernt werden, werden die folgenden zwei Befehle ausgeführt:
sudo apt-key --keyring /etc/apt/trusted.gpg del 12DE56F8 sudo apt-key --keyring /etc/apt/trusted.gpg~ del 12DE56F8
Abschließend muss noch der Speicherbereich für Statusinformationen nach Paketverwaltung/Problembehebung zurückgesetzt werden.
Hinweis
Das Entferen eines PPAs mit ppa-purge reicht nicht aus, da die Schlüssel nicht entfernt werden, sondern lediglich die Quelle deaktiviert wird (und das Paket auf die nächstniedrigere Version zurückgesetzt wird).
Fehler mit Berechtigungen
dpkg: Fehler beim Bearbeiten von /var/cache/apt/archives/linux-image-3.0.0-12-generic_3.0.0-12.20_i386.deb (--unpack):
Fehler beim Setzen des Eigentümers von »./boot/vmlinuz-3.0.0-12-generic«: Die Operation ist nicht erlaubt
dpkg-deb: Fehler: Unterprozess einfügen wurde durch Signal (Datenübergabe unterbrochen (broken pipe)) getötet Examining /etc/kernel/postrm.d . run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.0.0-12-generic /boot/vmlinuz-3.0.0-12-generic run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.0.0-12-generic /boot/vmlinuz-3.0.0-12-generic Fehler traten auf beim Bearbeiten von:
/var/cache/apt/archives/linux-image-3.0.0-12-generic_3.0.0-12.20_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Dieser Fehler tritt auf, wenn Systemverzeichnisse sich nicht auf einem Linux-Dateisystem befinden.
Lösung
Systemordner über fstab in Dateisystem mit ausreichender Rechteverwaltung einbinden. U.U. muss eine entsprechende Partition erst angelegt werden: Manuelle Partitionierung
Probleme mit Lockdateien
2: Datei oder Verzeichnis nicht gefunden
E: Lockdatei /var/lib/apt/lists/lock konnte nicht geöffnet werden - open (2: Datei oder Verzeichnis nicht gefunden) E: Das Listenverzeichnis kann nicht gesperrt werden E: Lockdatei /var/cache/apt/archives/lock konnte nicht geöffnet werden - open (2: No such file or directory) E: Das Downloadverzeichnis konnte nicht gesperrt werden.
Lösung
Die Lockdatei und das zugrunde liegende Verzeichnis manuell anlegen. Für das erste Beispiel also:
sudo mkdir -p /var/cache/apt/archives sudo touch /var/cache/apt/archives/lock
11: Ressource ist zur Zeit nicht verfügbar
E: Konnte Sperre /var/cache/apt/archives/lock nicht bekommen - open (11: Die Ressource ist zur Zeit nicht verfügbar) E: Das Verzeichnis /var/cache/apt/archives/ kann nicht gesperrt werden
oder
E: Konnte Sperre /var/lib/dpkg/lock nicht bekommen - open (11: Die Ressource ist zur Zeit nicht verfügbar) E: Das Verzeichnis /var/lib/dpkg/ kann nicht gesperrt werden
Lösung
Arbeitet bereits ein anderes Programm zur Paketverwaltung im Hintergrund? Dies kontrolliert man zuerst mit
sudo lsof /var/cache/apt/archives/lock
um dann gegebenenfalls mit ps herauszufinden, welcher Prozess die Paketverwaltung blockiert. Warten auf das Terminieren des Prozesses löst das Problem meist.
Sollte der Prozess hängen, kann er mit kill zum Beenden gezwungen werden. Sollte der Lock danach immer noch nicht freigegeben sein, kann man als letzte Möglichkeit den Lock mit Rootrechten löschen.
Nach dem Löschen muss die Lockdatei erneut angelegt werden, zum Beispiel mit
sudo touch /var/cache/apt/archives/lock
13: Keine Berechtigung
E: Lockdatei /var/lib/apt/lists/lock konnte nicht geöffnet werden - open (13: Keine Berechtigung)
Lösung
Man sollte das eingegebene Kommando nochmal mit Rootrechten ausführen.
Archivverzeichnis fehlt
E: Archivverzeichnis /var/cache/apt/archives/partial fehlt.
Lösung
Bis Ubuntu 10.04 wird ein fehlendes Verzeichnis für Statusinformationen während der Aktualisierung der Paketindexdateien nicht automatisch angelegt. Durch Neuanlegen des Verzeichnisses wird das Problem behoben:
sudo mkdir -p /var/lib/apt/lists/partial
Fehler in /var/lib/dpkg/available
Vorkonfiguration der Pakete ... dpkg: Fehler: Parsen der Datei »/var/lib/dpkg/available«, nahe Zeile 0:
nach Feldname »../../../../share/pyshared/UpdateManager/check-meta-release.py« muss ein Doppelpunkt folgen
E: Sub-process /usr/bin/dpkg returned an error code (2)
Durch Verletzen der Policy von Versionsbezeichnung von Maintainern, kann es zu Meldungen bezüglich fehlender oder nicht erlaubter Zeichen kommen.
Lösung
Durch Entfernen der Datei /var/lib/dpkg/available wird das Problem behoben:
sudo dpkg --clear-avail
Soll die Datei aus den verfügbaren Paketversionen aus den Paketquellen neu generiert werden, wird folgender Befehl verwendet:
sudo dselect update
Fehlerhafte Paketquellen
Zu Hostnamen gehört keine Adresse
W: Fehlschlag beim Holen von http://archieve.ubuntu.com/dists/oneiric-security/restricted/i18n/Translation-de Beim Auflösen von »archieve.ubuntu.com:http« ist etwas Schlimmes passiert (-5 - Zu diesem Hostnamen gehört keine Adresse)
Bei fehlerhaft eingetragenen oder nicht mehr vorhandenen Paketquellen bzw. fehlerhaften Netzwerkeinstellungen kann es zu dieser Fehlermeldung kommen.
Lösung
Manuell die Paketquellen in der Datei /etc/apt/sources.list korrigieren. Dabei auf Rechtschreibfehler und nicht mehr vorhandene Paketquellen achten. Sollten diese Angaben korrekt sein, muss der Netzwerkzugang auf statische bzw. dynamische IP-Zuweisung untersucht werden.
Hinweis
Bei neueren Ubuntu-Versionen sollten auch Einträge im Ordner /etc/apt/sources.list.d/ überprüft werden.
Paketverwaltung unbrauchbar
Segfault
Es kann vorkommen, dass die Paketverwaltung aufgrund einer Beschädigung des Zwischenspeichers zum Speichern von "verfügbaren" Informationen nicht mehr funktioniert und z.B. ein
sudo apt-get check
mit folgender Fehlermeldung abbricht:
Segmentation faulty Tree
Lösung
Dieser Missstand kann durch das Löschen der beiden Zwischenspeicherdateien /var/cache/apt/pkgcache.bin und /var/cache/apt/srcpkgcache.bin mit Root-Rechten behoben werden.
Dateilisten-Datei
beschädigt
Extrahiere Vorlagen aus Paketen: 100% Vorkonfiguration der Pakete ... (Lese Datenbank ... 55%dpkg: nicht behebbarer fataler Fehler, Abbruch:
Abschließender Zeilenvorschub fehlt in Dateilisten-Datei des Paketes »pulseaudio-module-bluetooth«
E: Sub-process /usr/bin/dpkg returned an error code (2)
Nach einem Festplatten- oder Speicherfehler, bzw. wenn der Paket-Entpackprozess unterbrochen wurde, kann die entsprechende Datei unter /var/lib/dpkg/info/PAKET.list beschädigt sein.
Lösung
Mit folgendem Vorgehen wird die entsprechend beschädigte Datei unter /var/lib/dpkg/info/PAKET.list neu generiert.
Dazu wird zuerst das entsprechende Paket heruntergeladen (sollte sich das Paket noch im Cache unter /var/cache/apt/archives/ befinden, kann dieser Schritt übersprungen werden):
sudo apt-get --download-only --reinstall install PAKET
Abschließend wird die Dateilisten-Datei generiert und am entsprechenden Ort mit dem an 4 Stellen anzupassenden Befehl gespeichert (anzupassen sind zweimal PAKET und einmal jeweils VERSION und ARCHITEKTUR):
dpkg -c /var/cache/apt/archives/PAKET_VERSION_ARCHITEKTUR.deb | awk '{if ($6 == "./") { print "/."; } else if (substr($6, length($6), 1) == "/") {print substr($6, 2, length($6) - 2); } else { print substr($6, 2, length($6) - 1);}}' | sudo tee /var/lib/dpkg/info/PAKET.list
Achtung!
Die Umleitung in die Datei /var/lib/dpkg/info/PAKET.list muss korrekt angepasst werden, da bei falscher Bezeichnung die Paketverwaltung weiter beschädigt werden könnte, indem andere Dateilistendateien überschrieben werden.
Alle Pakete neu installieren
Sind sehr viele Pakete in schlechtem Zustand, lohnt es sich eventuell, alle installierten Programme neu aus den Quellen herunterzuladen und zu installieren:
dpkg --get-selections | grep "\binstall" | awk '{print $1}' > /tmp/dpkg.log
sucht alle installierten Pakete und speichert diese in der Datei /tmp/dpkg.log.
sudo xargs -n1 apt-get --reinstall install -y < /tmp/dpkg.log
nimmt einen Eintrag aus /tmp/dpkg.log und installiert diese Pakete erneut.
Probelme mit status-Datei
In der Datei /var/lib/dpkg/status werden alle wichtigen Informationen für dpkg gespeichert. Ist diese Datei beschädigt, ist die Paketverwaltung unbrauchbar.
Helfen auch die Backupdateien im gleichen Verzeichnis /var/lib/dpkg/ nicht weiter, kann die Datei mithilfe Informationen aus /var/lib/dpkg/available und Infodateien aus /var/lib/dpkg/info/ rekonstruiert werden.
Die Qualität der Rekonstruktion hängt entscheidend von der Aktualität von /var/lib/dpkg/available ab. Diese Datei sollte zuerst (mit apt-get) erneuert werden.
Anschließend kann folgendes Perl-Skript z.B. als dpkg-rebuild gespeichert werden:
#!/usr/bin/perl -w
# Rebuild the Debian '/var/lib/dpkg/status' file from information in # '/var/lib/dpkg/available' and '/var/lib/dpkg/info/*.(list|conffiles)'. # This is useful if your 'status' file got corrupted if the system crashed # during package maintenance, for example. # # Copyright 2002 by Patrick Reynolds (reynolds .at. cs duke edu) # 2012 by Dominique Lasserre (lasserre.d at gmail com) # Distributed under the terms of the GNU General Public License (GPL). # # Usage: # dpkg-rebuild # It takes no arguments and generates output in /tmp/status. # Move /tmp/status to /var/lib/dpkg if it looks acceptable. # With multiarch support! # # Limitations: # 1) Packages that are no longer available will not show up in the # rebuilt 'status' file. This means installed-but-obsolete packages # can't be managed after a rebuild. # Only packages listed in /var/lib/dpkg/available are processed. So update # it before dpkg-rebuild operation. # # 2) The 'Conffiles:' keys in the 'status' file doesn't have checksums. # It is not possible to detect if config file was modified or not, so do # not generate checksums at all. # If a package has config files but not listed in .conffiles they aren't # tracked (and probably package state is guessed false). # 'Config-Version' will not created because it is impossible to detect from # which version config files are from. # Configuration files may not be completely removed when you purge # packages, and package upgrades may clobber existing configuration # files without asking. # # 3) Packages in transitional or error states will be misreported. use strict; use warnings; my $available = "/var/lib/dpkg/available"; my $status = "/tmp/status"; my $info_dir = "/var/lib/dpkg/info"; my %installed; # Multiarch supported architectures. my @archs; open(ARCHS, "dpkg --print-architecture |") || die "no native architecture\n"; while (<ARCHS>) { chomp; push(@archs, $_); } close(ARCHS); open(ARCHS, "dpkg --print-foreign-architectures |"); while (<ARCHS>) { chomp; push(@archs, $_); } close(ARCHS); # Fill %installed with status information of installed packages. # installed{package} => { # "status" => 1, (installed with files -> installed) # "status" => 2, (installed without files -> deinstalled) # ## not implemented: # ## "status" => 3, (installed with files but no md5sums file -> purged) # "conffiles" => array of conffiles # } foreach (<$info_dir/*.list>) { my $package = $_ if (s#.*/([^/]+)\.list$#$1#); my $pkgfile_st = "$info_dir/$package"; $installed{$package}{"status"} = 2; open(LISTFILE, "<$pkgfile_st.list") || die "no $pkgfile_st.list\n"; while (<LISTFILE>) { chomp; $installed{$package}{"status"} = 1; last; } if (-e "$pkgfile_st.conffiles") { open(CONFFILE, "<$pkgfile_st.conffiles") || die "no $pkgfile_st.conffiles\n"; my @files; while (<CONFFILE>) { chomp; push(@files, $_); } $installed{$package}{conffiles} = \@files if @files; } } # 0=between, 1=essential-searching 2=copying-installed, 3=copying-not-installed my $state = 0; my $package; my @conffiles = undef; open(AVAILABLE, "<$available") || die "no $available\n"; open(STATUS, ">$status") || die "no $status\n"; while (<AVAILABLE>) { chomp; my $line = $_; if ($state == 0) { if (/^Package: (\S+)$/) { $package = $1; unless ($installed{$1}) { foreach (@archs) { $package = "$1:$_" if ($installed{"$1:$_"}); } } if ($installed{$package}) { print STATUS "$line\n"; $state = 1; } else { $state = 3; } } else { die "Expected 'Package:' at $.\n"; } } elsif ($state == 1) { my $ess_pkg = 1 if ($line =~ m/^Essential: /); print STATUS "$_\n" if $ess; $state = 2; if ($installed{$package}{"status"} == 1) { print STATUS "Status: install ok installed\n"; } elsif ($installed{$package}{"status"} == 2) { print STATUS "Status: deinstall ok config-files\n"; } elsif ($installed{$package}{"status"} == 3) { print STATUS "Status: purge ok config-files\n"; } if ($installed{$package}{"conffiles"}) { @conffiles = @{$installed{$package}{"conffiles"}}; } else { @conffiles = undef; } delete $installed{$package}; print STATUS "$_\n" unless $ess_pkg; } elsif ($state == 2) { if ($line eq "") { print STATUS "\n"; $state = 0; } elsif (/^Description: / && $conffiles[0]) { print STATUS "Conffiles:\n"; print STATUS " $_\n" foreach (@conffiles); print STATUS "$line\n"; } elsif (!/^Filename: / && !/^Size: / && !/^MD5sum: /) { print STATUS "$line\n"; } } elsif ($state == 3){ $state = 0 if ($line eq ""); } } printf "Installed packages not found in $available:\n"; foreach (sort keys %installed) { print " $_\n"; } |
Nun wird das Skript ausgeführt:
perl dpkg-rebuild
Anschließend wurde bei Erfolg in /tmp/status eine Rekonstruktion erstellt. Diese sollte mit den Backupdateien abgeglichen werden und kann anschließend verwendet werden. Je nach Aktualität der available-Datei wurde eine mehr oder weniger gute Rekonstruktion erstellt. Diese kann allerdings niemals ein externes Backup ersetzen.
debconf
Manche Pakete sind mit dem debconf-Konfigurationssystem ausgestattet. Dadurch wird eine Intervention des Benutzers möglich, sodass diesem bestimmte Elemente wie z.B. Fragen oder Hinweise aus s.g. "Vorlagen" (eng. "templates") präsentiert werden, worauf der Benutzer bestimmte Entscheidungsmöglichkeiten hat.
Dadurch kann z.B. direkt die standardmäßige Sprache festgelegt werden, ohne dass der Benutzer diese Änderung selbst in den Konfigurationsdateien vornehmen muss.
Dieses Konfigurationssystem ist nicht auf einzelne Pakete beschränkt, sondern es können auch paketüberfreifende Konfigurationseinstellungen (anhand s.g. "shared templates") vorgenommen werden. Somit kann z.B. der aktuelle Displaymanager von einem anderen Loginmanager als Standard abgelöst werden.
Debconf wird dabei über die Maintainerskripte preinst (vor der eigentlichen Installation) und postinst (nach der Installation) bzw. postrm (zum abschließenden Entfernen der Datenbankeinträge nach Deinstallation des Paketes) aufgerufen.
Anhand der durch den Benutzer oder durch die Standardwerte gegebenen Rückgabewerte werden mit diesen Skripten bestimmte Einstellungen am System vorgenommen.
Nachdem ein Benutzer die erste Programminstallation eines mit debconf ausgestatteten Paketes durchgeführt und somit eine gewisse Konfiguration vorgenommen hat, kann das Paket mit dem Befehl dpkg-reconfigure "neu konfiguriert" bzw. "rekonfiguriert" werden.
Das heißt, dass nun eine Benutzerinteraktion wie bei der Erstinstallation stattfindet.
Vorlagen und die Ergebnisse der Elemente werden in die debconf-Datenbanken unter /var/cache/debconf gespeichert.
Ergebnisse und der Status (gesehen oder nicht) von Vorlagen, werden in die Datenbank config.dat geschrieben, die Vorlagen selbst sind unter templates.dat zu finden.
In Ausnahmefällen wird ein Passwort abgefragt, welches dann nur unter Schutz der Rootrechte in passwords.dat gesichert wird.
Konfigurierbaren Pakete anzeigen
Eine Liste der unter debconf registrierten "Besitzer von Konfigurationsdateien" (welche idR. den Paketnamen entsprechen) erhält man im Terminal mit:
debconf-show --listowners
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Besitzern durchsucht werden, sind Rootrechte vonnöten .
Konfiguration abfragen
Die Einträge in der debconf-Datenbank lassen sich mit folgendem Befehl abfragen:
debconf-show PAKET
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Einstellungen durchsucht werden, sind Rootrechte vonnöten .
Paket neu konfigurieren
Die Elemente wie Fragen oder Hinweise werden nach ihrer Priorität gefiltert. Die automatische Filterung hängt in erster Linie von der in der Vorlage festgelegten Priorität ab.
Aber auch die von der Paketverwaltung abhängige Schnittstellenoberfläche oder der Status "bereits gesehen" (s.g. "seen") spielen eine Rolle.
Mit der Option --priority können mit dpkg-reconfigure die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden:
Anzeigefilter manuell vorgeben | |
Option + Parameter | Beschreibung |
--priority=low | Alle Elemente wie Fragen oder Hinweise werden dem Benutzer vorgelegt. |
--priority=medium | Normale Elemente, die allgemein vernünftige Vorgaben haben, werden gezeigt. |
--priority=high | Elemente, die keine allgemein vernünftigen Vorgaben haben, werden gezeigt. |
--priority=critical | Fast alles wird auf die Vorgabewerte gesetzt, nur Elemente (idR. Fragen), die ohne Intervention des Benutzers die Systemintegrität stören könnten, werden gezeigt. |
Der folgende Befehl konfiguriert zum Beispiel das Paket ssh neu, wobei alle durch das Paket bereitgestellte Vorlagen durchgearbeitet werden:
sudo dpkg-reconfigure --priority=low ssh
Analog gibt es den Befehl dpkg-preconfigure, mit welchem die debconf-Vorlagen, welche vor einer Paketinstallation durchzuführen waren, abgearbeitet werden.
Hinweis
Standardmäßig wird bei dpkg-reconfigure und dpkg-preconfigure (unabhängig von der systemweiten debconf-Priorität) die Priorität "low" verwendet.
Schnittstellenoberflächen
debconf kann auf mehrere Wege mit dem Benutzer kommunizieren. Es werden folgende Schnittstellenoberflächen (s.g. "frontends") unterstützt, wobei diese unterschiedlich funktional sind.
Schnittstellenoberflächen | ||
Typ | Beschreibung | Funktionalität |
Dialog | konsolenbasierte Vollbilddarstellung mit dialog | vollständige Interaktion möglich |
Readline | traditionelle, einfache Textschnittstelle | um Momentanwert zu sehen, muss libterm-readline-gnu-perl installiert sein |
Gnome | in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden | vollständige Interaktion möglich |
Kde | in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden | vollständige Interaktion möglich |
Editor | Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor | vollständige Interaktion möglich |
Web | Konfiguration über Browser, standardmäßig: http://localhost:8001/ | vollständige Interaktion möglich |
Nicht-interaktiv | Es findet keine Interaktion statt (nicht empfohlen!). | keine Interaktion möglich |
Je nach benutztem Paketverwaltungsprogramm wird automatisch eine Schnittstellenoberfläche davon ausgewählt. Man kann den Standard aber durch Rekonfigurieren des Paketes debconf festsetzen.
Gezielte Konfiguration
Die Datenbank kann nach folgendem Muster (am Beispiel einer einfachen Auswahl) direkt geändert werden. "BESITZER" ist dabei meist der entsprechende Paketname.
echo "set BESITZER/VORLAGE WERT" | sudo debconf-communicate
Hinweis
Es wird ausschließlich der Datenbankeintrag geändert. Eine Änderung an Konfigurationsdateien wird nicht vorgenommen (dies ist den Maintainerskripten preinst, postinst, ... vorbehalten).
Deswegen ist ein solches Eingreifen nur in Ausnahmefällen sinnvoll.
Durch manuelles Ausführen der entsprechenden Maintainerskripte unter /var/cache/dpkg/info kann aber dpkg-preconfigure und analog dpkg-reconfigure "nachgestellt" werden.
Wie dieser Befehl sinnvoll einsetzbar ist, zeigt folgendes sehr spezielles Beispiel an dem Paket ttf-mscorefonts-installer:
Nach einem "Abwürgen" der Schnittstellenoberfläche mit der Frage ob die EULA akzeptiert werden soll, ist die debconf-Datenbank nicht konsistent.
Nun kann die EULA nachträglich akzeptiert werden, sodass das Paket ohne Fehler reinstalliert werden kann:
echo "set msttcorefonts/accepted-mscorefonts-eula true" | sudo debconf-communicate
Grafische Konfiguration
configure-debian
configure-debian ist ein konsolenbasiertes Rekonfigurationsprogramm, welches die Besitzer von Paketen, in ihren Bereich (s.g. "Section") eingeordnet, darstellt.
sudo apt-get install configure-debian
gkdebconf
gkdebconf ist ein grafisches Rekonfigurationsprogramm, welches ebenfalls die Pakete in die Unterbereiche einteilt, aber auch alle auf einmal darstellen kann. Das Programm besitzt darüber hinaus die Fähigkeit, die Schnittstellenoberfläche frei zu wählen.
sudo apt-get install gkdebconf
Dateien und Paketen
Der folgende Befehl in einem Terminal zeigt an, zu welchem Paket eine Datei gehört:
dpkg -S DATEINAME
Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit dpkg-reconfigure neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht.