Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
APT (Advanced Package Tool) 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 komplett auf den neuesten Stand zu bringen. In diesem Artikel findet sich eine kurze Einführung in die Bedienung der Paketverwaltung ohne graphische Oberfläche mittels apt-get.
Zur Installation eines oder mehrerer Pakete dient
sudo apt-get install Paketname1 [Paketname2] ...
Abhängigkeiten werden dabei automatisch mitinstalliert.
Um einzelne Versionen von Paketen zu bevorzugen bzw. zu sperren oder zu erzwingen, muss man Apt-Pinning benutzen. Dies erfordert aber einige Erfahrung im Umgang mit der Paketverwaltung.
Manche Pakete erfordern eine Konfiguration. Die Grundkonfiguration wird automatisch bei der ersten Installation erzeugt. Später dient der Befehl dpkg-reconfigure zur Bearbeitung.
sudo dpkg-reconfigure Paketname1 [Paketname2] ...
Weitere Details kann man unter dpkg-reconfigure nachlesen.
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 dieses Paket erneut.
Die Liste der Paketquellen befindet sich in der Datei /etc/apt/sources.list, die mit einem Texteditor bearbeitet werden kann. Paketquellen, die nicht benötigt werden, können mit einem Kommentarzeichen # am Zeilenanfang deaktiviert werden und umgekehrt durch Entfernen des # wieder aktiviert werden. Dies gilt aber nicht für CD-ROMs, die nicht reaktivierbar sind, sondern erneut hinzugefügt werden müssen.
Ab Ubuntu Karmic Koala 9.10 können PPA-Quellen auch mit folgendem Befehl eingefügt werden:
sudo add-apt-repository ppa:launchpad-team/ppa-name
Dabei wird die PPA-Quelle auch gleich authentifiziert, d.h. der Signierungsschlüssel importiert.
Nach einer Änderung der Paketquellen muss man diese unbedingt neu einlesen:
sudo apt-get update
Um eine Quelle als vertrauenswürdig einzustufen, muss man sich zuvor den zugehörigen GPG-Schlüssel heruntergeladen und gespeichert haben. Danach kann man mit
sudo apt-key add schluesselname.gpg
die Quelle als vertrauenswürdig einstufen.
Standardkonforme Paket-CDs und -DVDs werden mit dem folgenden Befehl hinzugefügt:
sudo apt-cdrom add
Zur Deinstallation eines oder mehrerer Pakete dient
sudo apt-get remove Paketname1 [Paketname2] ...
Von diesen Paketen abhängige Pakete werden automatisch mit entfernt.
Zur Deinstallation eines oder mehrerer Pakete dient
sudo apt-get remove --purge Paketname1 [Paketname2] ...
Dies sollte man nur nutzen, wenn man sicher ist, die Konfiguration nicht später einmal wieder gebrauchen zu können. Es werden allerdings nur systemweite Konfigurationsdateien gelöscht, wie sie zum Beispiel in /etc zu finden sind. Benutzerspezifische Konfigurationsdateien in den Homeverzeichnissen sind davon nicht betroffen. Auch die Konfigurationen automatisch mitentfernter Pakete werden nicht angetastet.
Wenn man sicher ist, dass man nun alle alten Konfigurationen löschen und nicht einzeln angeben will, kann man mit diesen Befehlen alle übriggebliebenen Konfigurationen automatisch löschen.
dpkg -l | grep ^rc | awk '{print $2}' | xargs sudo dpkg --purge
Ab Ubuntu Edgy Eft (6.10) merkt sich die Paketverwaltung Abhängigkeiten, so dass einmal durch die automatische Installation mitinstallierte Pakete auch wieder einfach deinstalliert werden können. Dieses Aufräumen kann man mit
sudo apt-get autoremove
einleiten.
In früheren Ubuntu-Versionen hilft dieser Umweg, um die Abhängigkeiten mit zu entfernen. Als Beispiel wird das Paket gimp einschließlich aller Abhängigkeiten deinstalliert
sudo dpkg -r $(apt-cache show gimp | sed -n '/Depends:/s/^.*://;s/,//gp')
Da apt-get sich vor Edgy Eft keine Abhängigkeiten merken konnte, bleiben wie beschrieben verwaiste Pakete zurück. Um diese zu entfernen, kann man die Programme debfoster
und deborphan
nutzen, deren Gebrauch im Debian-Anwenderhandbuch
beschrieben ist. Das Paket orphaner enthält eine Benutzerschnittstelle, die die Bedienung vereinfacht.
Eine Anleitung, wie man ohne eines dieser Programme auskommt, findet sich im Forum.
Pakete, die installiert wurden, werden normalerweise nach dem Herunterladen in einem speziellen Cache-Archiv (/var/cache/apt/archives) gespeichert. Auf diese Art kann man ein Paket reinstallieren ohne es neu herunterladen zu müssen. Der Nachteil ist, dass dieses Archiv mitunter recht groß werden kann. Um es zu leeren, benutzt man entweder den Befehl
sudo apt-get clean
oder
sudo apt-get autoclean
autoclean entfernt dabei aber nur Pakete, die aus den eingetragenen Paketquellen nicht mehr heruntergeladen werden.
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 von apt-get "kaputte Pakete" gemeldet. Diese muss man reparieren lassen. Der Befehl
sudo apt-get -f install
führt entweder zur Installation weiterer Pakete oder zur Entfernung des installierten Pakets. In letzterem Fall sollte man sich vergewissern, ob das Paket wirklich für Ubuntu geeignet ist.
Falls die defekten Pakete bekannt sind, kann auch folgender Befehl das Problem lösen:
sudo apt-get -f install PAKETNAME1 PAKETNAME2
Wobei PAKETNAME1 bzw. PAKETNAME2 usw. durch die Namen der bekannten defekten Pakete ersetzt wird.
Sollte die Paketverwaltung nach einem upgrade bzw. dist-upgrade unbrauchbar werden, so hilft einer der folgenden Befehle:
sudo apt-get upgrade -f
sudo apt-get dist-upgrade -f
sudo dpkg --configure -a
Wenn apt oder ein anderer Paketmanager beim Installieren die Fehlermeldung: "Konnte Lock nicht bekommen" ausgibt, sollte man die Datei /var/cache/apt/archives/lock mit Root-Rechten löschen.
Der folgende Befehl bringt alle Pakete auf den neuesten in den Paketquellen verfügbaren Stand:
sudo apt-get upgrade
Hierbei werden jedoch keine zusätzlichen Pakete installiert oder bereits installierte Pakete entfernt. Falls dies jedoch über neue Abhängigkeiten erforderlich ist, wird bei dem genannten Befehl angezeigt, dass eine bestimmte Anzahl an Paketen nicht aktualisiert wurde. Um auch in diesem Fall eine Aktualisierung durchführen zu können, muss folgender Befehl verwendet werden:
sudo apt-get dist-upgrade
Erscheint durch einen Paketkonflikt eine Meldung wie
Die folgenden Pakete sind zurückgehalten worden: gstreamer0.10-plugins-bad liblucene2-java
mit abweichenden Paketnamen, so müssen diese explizit aktualisiert werden:
sudo apt-get install gstreamer0.10-plugins-bad liblucene2-java
Dabei sollte darauf geachtet werden, dass bei dieser Vorgehensweise andere Pakete entfernt werden, was eventuell nicht erwünscht ist.
apt-get bietet nach vorheriger Aktivierung der deb-src-Paketquellen (siehe oben) die Möglichkeit die Quellpakete und Abhängigkeiten einzelner Programme herunterzuladen, um diese dann zu kompilieren.
Hierzu lädt man mit
sudo apt-get build-dep Paketname
zuerst alle benötigten Pakete herunter, die man zur Kompilierung von Paketname benötigt. Danach kann man sich den Quellcode mit
apt-get source Paketname
besorgen und das Programm manuell kompilieren. Alternativ und ggf. einfacher kann man mit der Option --build den Quellcode nicht nur herunterladen, sondern auch gleich kompilieren, soweit möglich. In Verbindung mit dem Programm fakeroot (siehe hier) kann man so ein fertiges deb-Paket erstellen, was danach nur noch einzeln installiert werden muss (siehe hier).
fakeroot apt-get --build source Paketname
Pakete können mit dem folgenden Befehl gesucht werden:
apt-cache search Suchbegriff1 [Suchbegriff2] ...
wobei als Standard nicht nur die Namen, sondern auch die Paketbeschreibungen durchsucht werden. Mit Hilfe der Option --names-only wird die Suche auf die Paketnamen eingeschränkt.
Informationen zu Status, Herkunft, Betreuer, Abhängigkeiten u.a. eines Paketes lassen sich wie folgt anzeigen:
apt-cache show Paketname
Möchte man sich ausschließlich über die Abhängigkeiten eines Paketes informieren, kann man sich diese folgendermaßen übersichtlich auflisten lassen:
apt-cache depends Paketname
Analog dazu, kann man sich auch alle Pakete auflisten lassen, die das angegebene Paket als Abhängigkeit haben:
apt-cache rdepends Paketname
In manchen Fällen will man wissen, in welchem Paket eine bestimmte Datei steckt, weil diese z.B. als fehlend aufgeführt wird, wenn man ein Programm startet. In diesem Fall hilft das Paket
apt-file (universe)
Apt-file muss wie apt-get seine Listen auf den neuesten Stand bringen:
sudo apt-file update
Die Suche erfolgt dann mit:
apt-file search Dateiname
Dabei werden die Inhalte aller in den Paketquellen vorhandenen Pakete durchsucht.
Dateien in bereits installierten Paketen können einfacher mit dem folgenden Befehl zugeordnet werden:
dpkg -S Dateiname
Alle Dateien in einem Paket listet der Befehl
dpkg -L Paketname
auf.
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
aus. Die Paketliste befindet sich danach in der Datei packages.list.
Diese Liste ist rein informativ und lässt sich nicht (d.h. nur schwer) zum Wiederherstellen nach einer Neuinstallation verwenden!
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.
Um alle in dieser Liste gespeicherten Pakete später zu installieren, gibt man folgenden Befehl ein:
xargs -a "packages.list" sudo apt-get install
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.
Der folgende Befehl erzeugt eine Liste der in den letzten drei Tagen installierten Pakete:
find /var/lib/dpkg/info/ -daystart \( -name \*.list -a -mtime -3 \) | sed 's#.list$##;s#.*/##' | sort
Eine andere Möglichkeit ist die Erstellung eines eigenen apt-history-Befehls. Dieser beruht auf der Log-Datei /var/log/dpkg.log. Da diese aber von Zeit zu Zeit gegen eine neue, leere Datei ausgetauscht wird, ist dieses leider keine Universallösung. Dazu wird die Datei ~/.bashrc editiert und Folgendes am Ende angefügt:
function apt-history(){
case "$1" in
install)
cat /var/log/dpkg.log | grep 'install '
;;
upgrade|remove)
cat /var/log/dpkg.log | grep $1
;;
rollback)
cat /var/log/dpkg.log | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/dpkg.log
;;
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.
Apt kann über die Konfigurationsdatei /etc/apt/apt.conf umfassend konfiguriert werden. Beispieldateien liegen in /usr/share/doc/apt/examples/
Eine Geschwindigkeitsbegrenzung für http-Quellen setzt man beispielsweise so:
Acquire
{
Queue-mode "access";
http
{
Dl-Limit "100";
};
};"100" steht in diesem Fall für eine Geschwindigkeitsbegrenzung von 100KB/s und kann durch jede beliebige Zahl ersetzt werden.
Diese Revision wurde am 23. Juni 2010 um 20:37 Uhr
von Deadman44 erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet:
Shell, Paketverwaltung
2004 – 2010 ubuntuusers.de • Einige Rechte vorbehalten