apt-get
ist die zeitgemäße Benutzerschnittstelle zur
Verwaltung von Paketen auf einem Debian System. Während es mit dpkg
möglich ist, jedes beliebige Debian Paket zu installieren (wenn es zuvor
auf die lokale Festplatte kopiert wurde), so ist apt-get
zwingend auf eine Paketliste und damit auch eine
sinnvolle sources.list
angewiesen. Somit ist immer gewährleistet,
dass das System in einem stabilen und fest definierten Zustand verbleibt. Mit apt-get
wird dem Administrator ein ebenso elegantes wie
auch mächtiges Werkzeug gegeben. Dies haben auch viele andere Distributionshersteller
erkannt und haben apt-get
in die eigenen Distributionen aufgenommen. apt-get
ist somit auch auf RPM-basierten Systemen, wie beispielsweise Novell/SuSE
oder RedHat/Fedora zu Hause. Die Entwicklung wird dabei über die Webseite koordiniert. Eine Übersicht
von Repositories mit RPM-Paketen, die via APT installiert werden können, finden Sie
unter http://freshrpms.net/apt/repositories.html.
Dieses Programm ohne grafische Benutzeroberfläche ist recht einfach zu benutzen.
Grafische Frontends zu apt
sind mit aptitude
und gpk-application
verfügbar.
Bevor apt-get
die gewünschten Aktionen wie zum Beispiel
das Löschen oder Installieren einzelner Pakete ausführt, die das System verändern,
werden Sie über den zukünftigen Zustand des Systems informiert. Es werden folgende
Informationen angezeigt: die Anzahl der Pakete, die aktualisiert werden (neuere
Version), die Anzahl der Pakete, die nicht verändert werden (kept back), die Anzahl
der zu löschenden Pakete sowie die Anzahl der neu zu installierenden Pakete.
Zusätzlich werden, wenn Sie die Option install
benutzen, die Pakete ausgewählt und
angezeigt, die aufgrund der Abhängigkeiten der zu installierenden Pakete benötigt
werden. Hier ein Beispiel:
The following extra packages will be installed: libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy squake pgp-i python-base debmake ldso perl libreadlineg2 ssh
Sollte es notwendig sein, Pakete zu löschen, oder wurden Pakete zum Entfernen ausgewählt, so werden auch diese gesondert angezeigt.
The following packages will be REMOVED: xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid nas xpilot xfig
Diese Liste sollte aufmerksam geprüft werden, um sicherzugehen, dass nicht versehentlich Pakete entfernt werden.
Wenn Pakete neu installiert werden, so wird auch darüber informiert:
The following NEW packages will be installed: zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base
Dies dient nur zur Information; diese Pakete sind bisher nicht auf Ihrem System installiert.
Bei der Auswahl der Pakete kann es passieren, dass aufgrund von nicht erfüllten Abhängigkeiten einzelne Pakete in der aktuellen Version behalten werden. Da nicht alle benötigten Komponenten installiert werden können, werden diese Pakete nicht aktualisiert (kept back).
The following packages have been kept back: compface man-db tetex-base msql libpaper svgalib1 gs snmp arena lynx xpat2 groff xscreensaver
Immer wenn ein System mit der Option upgrade
aktualisiert wird, kann es passieren, dass einzelne Pakete nicht
aktualisiert werden können, weil diese auf Paketen basieren, die noch nicht in der
benötigten Version verfügbar sind, oder aber es bestehen Konflikte mit bereits
installierten Paketen. In diesem Fall werden die Pakete im aktuellen Zustand
gehalten. Sie können apt-get install
benutzen, um diese Pakete trotzdem zu
aktualisieren.
The following held packages will be changed: cvs
Wenn Sie ein auf
„hold“ gesetztes Paket aktualisieren, bekommen Sie die Meldung, dass
dieses Paket verändert (changed) wird. Außer bei apt-get install
kann diese Meldung auch bei apt-get dist-upgrade
auftreten.
Abschließend findet sich noch eine Zusammenfassung über die Anzahl der betroffenen Pakete. Weiterhin wird angezeigt, welches Datenvolumen übertragen werden muss und wie viel Festplattenplatz zusätzlich benötigt wird (oder auch frei wird).
206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded. 12 packages not fully installed or removed. Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.
Die erste Zeile ist eine knappe Zusammenfassung in Zahlen zu den bereits vorher ausgegebenen Informationen. In der zweiten Zeile finden Sie die nicht installierten Pakete, die bereits entpackt, aber nicht konfiguriert wurden („N packages not fully installed or removed“). In der dritten Zeile finden Sie die Informationen über den benötigten Platz und die zu übertragenden Daten. Hierbei steht die erste Zahl für die tatsächlich noch zu übertragenden Daten und die zweite für den Gesamtwert. Wenn bereits Pakete bei einer früheren Installation (möglicherweise auch nur teilweise) übertragen worden sind, aber nicht installiert werden konnten, so werden diese gespeichert und nicht noch einmal übertragen.
Wenn Sie nun mit der Installation beginnen (dies müssen Sie bei apt-get install
mit einem y
anstoßen), werden die Pakete von dem ausgewählten
Medium gelesen und installiert.
Während des Herunterladens von Archiven und Paketdateien zeigt apt-get
eine Reihe von Informationen an:
sushi:/root# apt-get update Get:1 ftp://linux frozen/main Packages [833kB] Get:2 ftp://linux frozen/main Release [93B] Get:3 ftp://linux frozen/contrib Packages [33.4kB] Get:4 ftp://linux frozen/contrib Release [96B] Get:5 ftp://linux frozen/non-free Packages [78.1kB] Get:6 ftp://linux frozen/non-free Release [97B] Get:7 ftp://linux stable/non-US Packages [8880B] Get:8 ftp://linux stable/non-US Release [95B] Fetched 953kB in 12s (74.1kB/s) Reading Package Lists... Done Building Dependency Tree... Done
Unmittelbar während des Downloads wird auch der Fortschritt angezeigt, inklusive der voraussichtlich noch benötigten Zeit für die Übertragung:
11% [5 frozen/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s
In den mit Get:
beginnenden Zeilen stehen die benutzte Methode
(hier ftp
) und der benutzte Server. Den Servernamen können
Sie in einem lokalen Netz auch verkürzt angeben, wie hier mit linux
gezeigt. Weiterhin werden der Bereich (frozen
und stable
) sowie die Verzeichnisse (main
, contrib
usw.) und die Dateinamen mit der Dateigröße
angezeigt.
Bei der Installation von Paketen sieht der Vorgang ähnlich aus:
sushi:/root# apt-get install aptitude Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: aptitude 0 packages upgraded, 1 newly installed, 0 to remove and 3 not upgraded. Need to get 148kB of archives. After unpacking 471kB will be used. Get:1 ftp://ftp.debian.de potato/main aptitude 0.0.4a-3 [148kB] Fetched 148kB in 5s (25.3kB/s) Selecting previously deselected package aptitude. (Reading database ... 22625 files and directories currently installed.) Unpacking aptitude (from .../aptitude_0.0.4a-3_i386.deb) ... Setting up aptitude (0.0.4a-3) ...
Hier wird in der Zeile „Get:“ der Paketname der zu installierenden Software angezeigt. Danach wird das Paket entpackt und installiert.
apt-get benutzt folgende Syntax:
apt-get [options] [command] [package ...]
Die Optionen werden Sie sicher seltener benötigen, daher zuerst einige Worte zu den einzelnen Kommandos:
check
Bei jedem Start von apt
(es sei denn, Sie benutzen die
Option update
) wird eine Reihe von Prüfungen
durchgeführt, um sicherzustellen, dass apt
funktionsfähig und Ihr System in
einem guten Zustand ist. Sie können diese Prüfungen auch zu jeder
Zeit selbst
anstoßen:
sushi:/root# apt-get check Reading Package Lists... Done Building Dependency Tree... Done
Als Erstes werden die Paketdateien anhand der Informationen in /etc/apt/sources.list
eingelesen.
Wenn Sie diesen Vorgang noch einmal wiederholen, werden Sie
feststellen, dass der zweite Test deutlich schneller beendet ist,
die Informationen werden von apt
zwischengespeichert. Für
Paketdateien, die nicht gefunden werden, wird ggf. eine Warnung
ausgegeben; diese Pakete werden dann ignoriert.
Im zweiten Schritt wird eine detaillierte Analyse des Systems
durchgeführt, inklusive aller Abhängigkeiten. Es werden von jedem
installierten oder bereits entpackten, aber noch nicht
konfigurierten Paket die Abhängigkeiten geprüft. Wenn dabei ein
Problem auftaucht, wird dies angezeigt, und apt-get
bricht die weitere
Bearbeitung ab.
sushi:/root# apt-get check Reading Package Lists... Done Building Dependancy Tree... Done You might want to run apt-get -f install' to correct these. Sorry, but the following packages have unmet dependencies: 9fonts: Depends: xlib6g but it is not installed uucp: Depends: mailx but it is not installed blast: Depends: xlib6g (>= 3.3-5) but it is not installed adduser: Depends: perl-base but it is not installed aumix: Depends: libgpmg1 but it is not installed debiandoc-sgml: Depends: sgml-base but it is not installed bash-builtins: Depends: bash (>= 2.01) but 2.0-3 is installed cthugha: Depends: svgalibg1 but it is not installed Depends: xlib6g (>= 3.3-5) but it is not installed libreadlineg2: Conflicts:libreadline2 (< 2.1-2.1)
In diesem Beispiel gibt es eine ganze Reihe Probleme: Einige Pakete sind gar nicht installiert, bei anderen Paketen sind falsche Versionen installiert. Für jedes einzelne Paket, bei dem ein Problem festgestellt wurde, wird eine Zeile ausgegeben mit den Informationen, um welches Paket es sich handelt und welches Problem festgestellt wurde.
Es gibt zwei Möglichkeiten, wie es zu solchen Problemen kommen kann: Bei einem „Upgrade“ kann es passieren, dass ein benötigtes Paket fehlt, oder es ist während der Installation eines Pakets ein Problem aufgetreten. Wenn Letzteres der Fall ist, dann wurde das Paket zwar entpackt, aber nicht korrekt konfiguriert.
Beide Situationen können von apt
in den meisten Fällen mit der
Option -f
selbst behoben werden. Wenn Sie dselect
mit der Methode apt
benutzen, wird immer die Option -f
verwendet, um eine einfache
Verwendung zu gewährleisten.
Trotzdem kann es passieren, dass bei einem schweren Problem apt
nicht in der Lage ist, das Problem zu beheben. In diesem Fall müssen
Sie von Hand mit dem Programm dpkg
den Konflikt beseitigen. Sie
können danach mit apt-get
fortfahren.
update
aktualisiert die Übersicht der verfügbaren Pakete, liest also die
Informationen aus den Dateien Packages.gz
der jeweiligen
Distribution ein. Sie sollten update
immer ausführen, wenn Sie
wissen, dass sich die Inhalte der Paketdateien beziehungsweise die
verfügbaren Pakete auf dem Server geändert haben. Auf jeden Fall
sollten Sie update
vor dem Aufruf von upgrade
oder dist-upgrade
aufrufen.
Eine neue Fähigkeit von apt
seit Debian 4.0 ist die
Möglichkeit, lediglich die Änderungen der
Packages-Dateien seit ihrer letzten
Aktualisierung herunterzuladen.
upgrade
Um alle auf dem System installierten Pakete auf die aktuelle
Version zu bringen, können Sie upgrade
benutzen. Alle bereits
installierten Pakete, von denen eine neuere Version verfügbar ist,
werden aktualisiert. Es werden keine Pakete gelöscht, die bereits
installiert sind (und in den neuen Paketdateien nicht mehr enthalten
sind), oder Pakete installiert, die noch nicht auf dem System
vorhanden sind. Pakete, die bereits installiert sind und es bei
einem Upgrade erforderlich machen, den Status anderer Pakete zu
verändern, werden nicht aktualisiert. apt-get update
muss vorab ausgeführt
werden, so dass sichergestellt ist, dass die Paketinformationen auf
dem neuesten Stand sind.
dist-upgrade
ist eigentlich eine Ergänzung oder Erweiterung zu upgrade
. Es wird hierbei dafür Sorge
getragen, dass für das System wichtigere Pakete zuerst installiert
werden. Hierbei werden in engen Grenzen auch Abhängigkeiten
verändert, um ein Paket installieren zu können. Dies ist dann
notwendig, wenn ein System komplett auf eine neue Version umgestellt
werden soll und kein „sanfter“ Übergang gewährleistet
werden kann.
dselect-upgrade
Mit dieser Option werden auch die Paketinformationen
„recommends“ und „suggests“
ausgewertet. Dies ist sonst nur mit dselect
möglich. Diese Vorschläge für
weitere Pakete sind zur Funktion des gewünschten Pakets nicht
zwingend erforderlich, können aber durchaus sinnvoll sein.
install
Diese Option benötigt noch einen oder mehrere Paketnamen. Jedes
dieser Pakete (der Paketname, also beispielsweise sendmail
, reicht hierbei aus) sowie
die noch benötigten Pakete (diese werden automatisch ermittelt)
werden auf Basis der Informationen in /etc/apt/sources.list
geholt und
installiert. Wenn Sie hinter den Namen des Pakets ein Minuszeichen (-
) setzen, wird das Paket aus dem
System entfernt, wenn es bereits installiert ist. Achten Sie darauf,
dass das Minuszeichen (ohne ein Leerzeichen dazwischen) unmittelbar
nach dem Paketnamen steht. Diese Funktion kann auch bei Konflikten
bei der Installation einzelner Pakete sehr nützlich sein: Sie können
so Pakete in einem Vorgang löschen und installieren. Die Option
„install“ wählt immer die aktuellste verfügbare
Version eines Pakets aus. Es kann jedoch sinnvoll sein, auch Zugriff
auf ältere Programmversionen zu haben. Hierzu kann ab der Version
0.5.3 von apt
folgende Syntax verwendet werden: apt-get install sane/unstable
. Durch
einen Slash (/) getrennt, kann hinter dem Paketnamen
das gewünschte Release eines Pakets angegeben werden.
Eine weitere Möglichkeit ist es, falls verschiedene Versionen
eines Pakets verfügbar sind, direkt die gewünschte Versionsnummer
anzugeben. Zunächst sollte man mit apt-cache
prüfen, welche Versionen
eines Pakets verfügbar sind. Mit apt-get install vim=6.0.093-2
kann
dann ganz gezielt die gewünschte Version installiert werden.
--reinstall
Diese Option installiert das gewünschte Paket komplett neu, auch
wenn es bereits installiert ist. Beachten Sie, dass hierbei auch die
Option install
anzugeben ist!
remove
Diese Funktion ist analog zu „install“, nur mit dem
Unterschied, dass die Pakete standardmäßig entfernt werden, anstatt
sie zu installieren. Analog zu dem eben Beschriebenen können Sie
hier ein Pluszeichen (+
) verwenden, um Pakete zu
installieren.
check
dient lediglich zur Diagnose. Es wird überprüft, ob sich irgendwelche Unstimmigkeiten in den Paketen finden.
--purge remove
Löscht das gewünschte Paket und alle weiteren Pakete, die direkt von diesem Paket abhängig sind. Weiterhin werden alle zu den Paketen gehörenden Konfigurationsdateien gelöscht.
clean
Dies löscht das lokale Verzeichnis, in dem sich die zu
installierenden Pakete befinden. Alles, mit Ausnahme der lock-Datei,
wird aus /var/cache/apt/archives/
und /var/cache/apt/archives/partial/
gelöscht.
source
Dieses Kommando holt die notwendigen Dateien zur Erzeugung eines
Binärpakets. Es können so angepasste Pakete erzeugt werden oder aber
Pakete auf einer anderen Architektur übersetzt werden. Wichtig ist
hierbei ein entsprechender „deb-src“-Eintrag in der
Datei sources.list
. Um alle zu einem Paket
gehörenden Dateien von einem Server zu holen, reicht das Kommando apt-get source paketname
. Es werden
die aktuellen Versionen der Dateien paketname.orig.tar.gz
, paketname.dsc
und paketname.diff.gz
im aktuellen
Verzeichnis gespeichert.
Um aus den Quellen direkt ein Binärpaket zu erzeugen, kann die
Option -b
angegeben werden. Das komplette
Kommando lautet dann apt-get source -b paketname
. Wenn die
benötigten Source-Pakete bereits vorliegen, kann das Binärpaket auch
direkt mit dem Kommando dpkg-buildpackage -rfakeroot -us -uc
erzeugt werden.
build-dep
Die meisten Software-Pakete benötigen bei der Übersetzung aus den Quellpaketen weitere Entwicklungspakete wie Libraries und Header-Dateien. Diese werden häufig nicht mitgeliefert und liegen in gesonderten Paketen vor. Das Debian Paketsystem sieht so genannte „build dependencies“ vor, in denen alle Abhängigkeiten zur Erzeugung eines Pakets beschrieben sind.
Das Kommando apt-get build-dep paketname
sorgt
dafür, dass alle zur Übersetzung eines Pakets benötigten Dateien auf
dem System vorhanden sind.
moo
Als kleine versteckte Option haben die Entwickler auch noch ein so genanntes „Easter-Egg“ eingebaut:
fr@sushi:~$ apt-get moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ...."Have you mooed today?"...
Soweit zu den Parametern. Sie können noch folgende Optionen benutzen, um apt-get
zu steuern:
-h
Zeigt die Hilfe zu apt-get
an.
-m
Ignoriert eventuell fehlende Pakete.
-d
Holt die gewünschten Pakete vom Server, ohne diese zu installieren.
-f
Behebt die defekten Abhängigkeiten zwischen den Paketen. apt-get -f install
versucht, diese
automatisch zu reparieren.
-s
Simulation, führt keine Aktionen aus.
-u
Zeigt auch die zu aktualisierenden Pakete an.
-y
Aktualisiert alle Pakete automatisch, indem alle Fragen mit „Yes“ beantwortet werden.
Hier nun ein Beispiel aus der Praxis zur Benutzung von APT:
Beachten Sie bitte, dass Pakete nur mit Superuser-Rechten (root) installiert werden können.
Zuallererst muss apt
die Informationen über die verfügbaren Pakete
erhalten; hierzu dient das Kommando apt-get update
.
sushi:/root # apt-get update Hit ftp://192.168.0.5 potato/main Packages Hit ftp://192.168.0.5 potato/main Release Get:1 ftp://192.168.0.5 potato/non-free Packages [78.6kB] Get:2 ftp://192.168.0.5 potato/non-free Release [99B] Fetched 68.5kB in 0s (104kB/s) Reading Package Lists... Done Building Dependency Tree... Done
Nachdem das System nun über den aktuellen Stand der Pakete informiert ist, können
Sie weitere Pakete mittels apt
installieren, was hier am Beispiel von sane
gezeigt wird:
sushi:/root# apt-get install sane Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libgimp1 libsane The following NEW packages will be installed: libgimp1 libsane sane 0 packages upgraded, 3 newly installed, 0 to remove and 3 not upgraded. Need to get 703kB of archives. After unpacking 1729kB will be used. Do you want to continue? [Y/n]
Beachten Sie hierbei, dass automatisch die benötigten Pakete libgimp1
und libsane
ausgewählt wurden. Insgesamt werden also drei
Pakete installiert. Weiter unten erhalten Sie noch Informationen über den später
benötigten Festplattenplatz der Pakete sowie über die Größe der Pakete, die ja
eventuell via FTP erst übertragen werden müssen. Wenn Sie mit den Angaben so
einverstanden sind, bestätigen Sie dies mit der Eingabetaste, oder drücken Sie die
Taste n
und danach die Eingabetaste, um den Vorgang
abzubrechen.
Wenn mehrere Pakete gleichzeitig installiert werden sollen, so können diese einfach hintereinander auf der Kommandozeile angegeben werden.
Download aller installierten Pakete | |
---|---|
Manchmal kann es wünschenswert sein, alle bereits installierten Pakete eines Systems erneut auf den Rechner zu kopieren, beispielsweise um eine Sicherungskopie zu haben oder um ein System zu duplizieren. Natürlich können die Pakete auch auf eine CD-ROM/DVD gebrannt oder in einen Spiegel eingefügt werden. Vorteilhaft bei dieser Methode ist es, dass ein in sich konsistentes System entsteht, in dem alle Abhängigkeiten erfüllt sind. Ein Download der gewünschten Pakete kann mit folgenden Befehlen erzeugt werden:
# COLUMNS=200 dpkg -l | grep '^ii' | awk '{ print $2 }' > /tmp/pkgliste # cat /tmp/pkgliste | xargs apt-get --download-only --reinstall -y install
Die erste Zeile listet via Die zweite Zeile gibt via Die Debian Pakete sind nach dem Download im Verzeichnis |
Über die APT Konfigurationsdatei /etc/apt/preferences
kann detailliert festgelegt
werden, welche Versionen von Paketen installiert werden sollen.
Enthält die Datei /etc/apt/sources.list
unterschiedliche Quellen für
Pakete, dies kann auch unterschiedliche Distributionen (beispielsweise
„stable“ und „testing“) betreffen, so kann es vorkommen,
dass ein
bestimmtes Paket in verschiedenen Versionen verfügbar ist. APT vergibt
für jede Version eines bekannten Paketes eine Priorität. Installiert wird jeweils
die Version eines Paketes mit der höchsten Priorität. Die APT Konfigurationsdatei
überschreibt die ermittelte Priorität und erlaubt so eine genaue Kontrolle darüber,
welche Version installiert wird.
Sind über die Informationen in der sources.list
gleiche Versionen eines Paketes aus
unterschiedlichen Quellen verfügbar, so wird die in der sources.list
zuerst genannte Quelle genutzt. Bei
gleichen Versionsnummern eines Paketes ist keine Auswahl der Quelle über die APT
Konfigurationsdatei möglich.
Ist keine APT-Konfigurationsdatei oder kein Eintrag
in der Konfigurationsdatei vorhanden, der auf ein Paket passt, so wird für dieses
Paket die voreingestellte Priorität verwendet, welche der Distribution
entspricht. Es besteht die Möglichkeit, ein bestimmtes Ziel-Release festzulegen,
aus dem die Pakete installiert werden sollen. Diese Distribution wird als
„Target Release“ bezeichnet. Das Ziel-Release kann dem Programm apt-get
auf der Kommandozeile übergeben werden
oder in der Konfigurationsdatei /etc/apt/apt.conf
(siehe apt.conf) gesetzt werden. Auf der Kommandozeile wird das
Ziel-Release wie folgt angegeben:
apt-get install -t testing paketname
Wurde ein Ziel-Release angegeben, so nutzt APT den folgenden Algorythmus, um die Prioritäten eines Paketes zu ermitteln.
Wenn das Paket bereits installiert ist.
Wenn das Paket nicht installiert ist und auch nicht zum Ziel-Release gehört.
Wenn das Paket nicht installiert ist und zum Ziel-Release gehört.
Wird das Ziel-Release nicht angegeben, so vergibt APT die Priorität 100 an alle installierten Pakete und die Priorität 500 an alle nicht installierten Pakete. Danach folgt APT den nachfolgend angeführten Regeln, wobei die Regeln in der beschriebenen Reihenfolge abgearbeitet werden.
Ein Paket wird niemals mit einer kleineren Versionsnummer installiert
(Downgrade), wenn die Priorität unter 1001 liegt.
„Downgrade“ bedeutet, dass eine nicht aktuelle Version
eines Paketes installiert wird, obwohl bereits eine aktuelle Version des
Paketes installiert ist. Keine voreingestellte Priorität innerhalb von
APT übersteigt den Wert 1000, ein solcher Wert kann ausschließlich über
die Voreinstellungsdatei (preferences
) gesetzt werden. Der
Downgrade eines Paketes ist in jedem Fall als problematisch anzusehen
und sollte nach Möglichkeit vermieden werden. In vielen Fällen führt ein
Downgrade zu einem nicht funktionierenden Paket oder gar zu schweren
Problemen mit dem Gesamtsystem.
Das Paket mit der höchsten Priorität wird installiert.
Wenn zwei oder mehrere Versionen eines Paketes die gleiche Priorität haben, so wird die Version mit der höchsten Versionsnummer installiert.
Wenn zwei oder mehr Versionen eines Paketes die gleiche Priorität und
Versionnummer haben, aber die Pakete sich in den Metadaten
unterscheiden, oder aber die Option --reinstall
auf der Kommandozeile
angegeben ist, so wird das nicht installierte Paket ausgewählt.
Am häufigsten ist die Situation anzutreffen, dass ein bereits installiertes
Paket (Priorität 100) in einer Version installiert ist, die nicht so aktuell
(hoch) ist wie ein Paket, welches über eine Quelle in der Datei /etc/apt/sources.list
(Priorität 500 oder 990)
verfügbar ist. Dieses Paket wird aktualisiert, wenn das Kommando apt-get install paketname
oder apt-get upgrade
ausgeführt wird.
Seltener tritt der Fall ein, dass ein bereits installiertes Paket in einer
aktuelleren Version vorhanden ist und kein Paket aus einer der in der Datei /etc/apt/sources.list
genannten Quellen eine
höhere Versionsnummer aufweist. In diesem Fall wird kein Downgrade durchgeführt,
wenn das Kommando apt-get install paketname
oder apt-get upgrade
ausgeführt wird.
Manchmal ist die bereits installierte Version eines Paketes aktueller als die
zum Ziel-Release gehörende Version, jedoch nicht so aktuell wie ein Paket,
welches aus einer anderen Distribution verfügbar ist. In diesem Fall wird das
Paket durch das Kommando apt-get install paketname
oder apt-get upgrade
aktualisiert, da eine der
verfügbaren Versionen eine höhere Priorität besitzt als die aktuell installierte
Version.
Die APT Konfigurationsdatei /etc/apt/preferences
erlaubt dem Administrator,
die Zuweisung von Prioritäten detailliert zu steuern. Die Konfigurationsdatei
besteht aus Einträgen, die sich über mehrere Zeilen erstrecken und untereinander
durch Leerzeilen getrennt sind. Die Einträge beziehen sich auf ein einzelnes
Paket (spezifische Form) oder auf eine Anzahl von Paketen (generelle Form).
Die spezifische Form weist einem Paket eine (Pin-)Priorität zu und
übergibt dabei eine gewünschte Version oder einen Versionsbereich. Das
folgende Beispiel weist allen Versionen des Paketes perl
eine hohe Priorität zu, solange die
Versionsnummer mit „5.8“ beginnt.
Package: perl Pin: version 5.8* Pin-Priority: 1001
Die generelle Form setzt eine Priorität für die angegebene Distribution oder für alle Pakete von einem bestimmten Server, welcher über den vollen Domainnamen (FQDN) identifiziert wird.
Diese generelle Form wirkt sich ausschließlich auf Gruppen von Paketen aus. Folgendes Beispiel weist allen Paketversionen auf einem lokalen Repository mit Paketen eine hohe Priorität zu.
Package: * Pin: origin "" Pin-Priority: 999
Zu beachten ist hier das Schlüsselwort „origin“. Dieses entspricht nicht dem gleich lautenden Begriff in einer „Release“-Datei! In einer „Release“-Datei wird mit dem Schlüsselwort „origin“ ein Autor oder Hersteller (beispielsweise „Debian“ oder „Ximian“) beschrieben, nicht eine Internetadresse.
Der folgende Eintrag setzt eine geringe Priorität für alle Paketversionen, die zu einer als „unstable“ bezeichneten Distribution gehören.
Package: * Pin: release a=unstable Pin-Priority: 50
Das letzte Beispiel zeigt einen Eintrag, der eine hohe Priorität allen Paketen zuweist, die zum Release „stable“ gehören und eine Versionsnummer von „3.0“ aufweisen.
Package: * Pin: release a=unstable, v=3.0 Pin-Priority: 50
Prioritäten (P), die in der APT-Konfigurationsdatei vergeben werden, müssen positive oder negative Integerzahlen sein. Diese werden wie folgt interpretiert.
Installiert ein Paket, auch wenn dies ein „Downgrade“ des Paketes bewirkt.
Installiert ein Paket, auch wenn es nicht aus dem „Target“-Release stammt, außer die bereits installierte Version ist aktueller.
Installiert ein Paket, wenn kein Paket passend zum „Target“-Release vorhanden ist oder die bereits installierte Version aktueller ist.
Bewirkt, dass eine Version installiert wird, solange keine andere Version aus irgeneiner anderen Distribution verfügbar ist oder aber die installierte Version aktueller ist.
Installiert eine Version eines Paketes nur, wenn dieses Paket noch nicht installiert ist.
Verhindert, dass diese Version eines Paketes installiert wird.
Die Einträge werden in der aufgeführten Reihenfolge in der Konfigurationsdatei abgearbeitet. Wird ein auf das Paket oder die Paketgruppe passender Eintrag gefunden, so werden die folgenden Einträge ignoriert.
Sind die vorab beschriebenen Einträge in einer Konfigurationsdatei in der beschriebenen Reihenfolge abgelegt, so ergibt sich folgende Konfigurationsdatei:
Package: perl Pin: version 5.8* Pin-Priority: 1001 Package: * Pin: origin "" Pin-Priority: 999 Package: * Pin: release unstable Pin-Priority: 50
In dieser Zusammenstellung gelten folgende Regeln:
Es wird die aktuellste Version des Paketes „perl“ installiert, solange diese Version mit „5.8“ beginnt. Ist eine Version 5.8 von Perl verfügbar und ist die Version 5.9 bereits installiert, so wird ein „Downgrade“ durchgeführt.
Jedes andere Paket, welches nicht das Paket „perl“ ist und auf dem lokalen System verfügbar ist, bekommt eine höhere Priorität. Dies bewirkt, dass nur wenige, nicht lokal verfügbare Pakete aus dem Netz installiert werden. Dies betrifft auch Versionen des „Target“-Release.
Ein Paket, welches nicht auf dem lokalen System verfügbar ist, aber in
einer Quelle in der Datei /etc/apt/sources.list
aufgeführt wird und
zu einem „unstable“ Release gehört, wird nur installiert,
wenn es zur Installation ausgewählt wird und noch keine Version dieses
Paketes installiert ist.
Die Paketquellen, welche in der Datei /etc/apt/sources.list
aufgeführt werden,
enthalten im Idealfall die Dateien Packages
(bzw. Packages.gz
) und Release
, mit denen die an der jeweiligen Quelle
verfügbaren Pakete beschrieben werden.
Die Datei Packages
befindet sich normalerweise im Pfad .../dists/dist-name/component/arch
, also
beispielsweise .../dists/stable/main/binary-i386/Packages
. Diese
Datei besteht aus einem mehrzeiligen Eintrag für jedes Paket, von dem für die APT
Prioritäten lediglich die beiden Zeilen Package
und Version
benötigt werden.
Die Datei Release
befindet sich im Pfad .../dists/dist-name
, also beispielsweise unter .../dists/stable/Release
oder auch .../dists/sarge/Release
. Abweichend von der Datei Packages
werden fast alle Informationen aus der Release
-Datei benötigt. Diese sind:
Bezeichnet das Archiv, zu dem alle Pakete dieses
Verzeichnisses gehören. Beispielsweise gibt die Zeile Archive: stable
an, dass alle Pakete
in dem Verzeichnisbaum unterhalb der Datei Release
zum
„stable“-Release von Debian gehören.
In der APT Konfigurationsdatei wird dieser Wert wie folgt gesetzt:
Pin: release a=stable
Diese Zeile bezeichnet die Release-Version der Distribution. Der Wert „3.1“ besagt auch, dass alle Pakete im Verzeichnisbaum zur Release 3.1 „Sarge“ von Debian gehören. Für Versionen wie „testing“ und „unstable“ werden keine Versionsnummern vergeben, da diese Versionen noch nicht veröffentlicht sind. Um diesen Wert in der APT-Konfigurationsdatei anzugeben, ist eine der folgenden Zeilen notwendig:
Pin: release v=3.0 Pin: release a=stable, v=3.0 Pin: release 3.0
Bezeichnet den Abschnitt der Distribution, aus der die
Pakete stammen. Beispielsweise bezeichnet die Zeile Component: main
in der Release
-Datei,
dass alle Pakete
unterhalb diese Verzeichnisses zum Abschnitt „main“
gehören. Dies bedeutet auch, dass alle diese Pakete einer Lizenz
entsprechen, die in den Debian Free Software Guidelines (siehe auch DFSG) festgelegt ist. Diese Angabe wird wie folgt in der APT-Konfigurationsdatei preferences
festgelegt
Pin: release c=main
Bezeichnet den Ursprung der Pakete, meist ist hier
„Debian“ angegeben. In der APT preferences
-Datei sieht diese Zeile
wie folgt aus:
Pin: release o=Debian
Eine Bezeichnung für die Pakete in diesem Verzeichnisbaum, dieser
Eintrag hat meistens den Wert „Debian“. In der APT preferences
-Datei sieht diese Zeile
wie folgt aus:
Pin: release l=Debian
Alle verfügbaren Dateien (Packages
und Release
), die über Quellen in der Datei /etc/apt/sources.list
verfügbar sind, werden im
Verzeichnis /var/lib/apt/lists/
abgelegt. Dieses Verzeichnis
kann durch die Variable Dir::State::Lists
in der Datei apt.conf
verändert werden. Die Dateinamen der
gespeicherten Packages
und Release
-Dateien werden mit dem Namen des Servers
sowie dem Pfad und der Architektur ergänzt, beispielsweise debiananwenderhandbuch.de_debian_dists_stable_main_binary-i386_Packages
.
Weiterhin ist es möglich, eine oder mehrere Zeilen, beginnend mit dem
Schlüsselwort Explanation:
, mit einer Erklärung dieses
Eintrages einzufügen.
Die Zeile Pin-Priority:
in jedem Eintrag ist nicht zwingend
erforderlich. Wird ein solcher Eintrag nicht gefunden, so wird eine um den Wert
1 reduzierte Priorität gegenüber dem vorhergehenden Eintrag vergeben.
Das erste Beispiel zeigt, wie man allen Paketen der „stable“ Distribution eine Priorität über der vorgegebenen (von 500) zuweist. Bei allen anderen Paketen wird die Priorität um den Wert 10 verringert.
Explanation: Uninstall or do not install any Debian-originated Explanation: package versions other than those in the stable distro Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release o=Debian Pin-Priority: -10
Die beschriebene Konfiguration führt dazu, dass alle Pakete aus der aktuellen „stable“ Distribution installiert werden bzw. bereits installierte Pakete immer aktuell gehalten werden. Darüber hinaus ist es möglich, einzelne Pakete aus anderen Distributionen zu installieren, hier am Beispiel eines Paketes aus „testing“ gezeigt:
apt-get install paketname/testing
Das so aus „testing“ installierte Paket wird zu einem späteren Zeitpunkt nicht weiter aktualisiert. Dies muss von Hand durch den erneuten Aufruf des oben beschriebenen Kommandos erfolgen.
Das zweite Beispiel setzt eine hohe Priorität für Pakete aus dem „testing“-Zweig, eine etwas niedrigere Priorität für den „unstable“-Zweig und eine noch geringere Priorität für Pakete aus anderen Bereichen.
Package: * Pin: release a=testing Pin-Priority: 900 Package: * Pin: release a=unstable Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -10
Diese Konfiguration bewirkt, dass bevorzugt Pakete aus „testing“ in den jeweils aktuellen Versionen installiert werden. Auch hier ist es möglich, mittels
apt-get install paketname/unstable
gezielt einzelne Pakete aus dem „unstable“-Bereich zu installieren.
Eine besondere Stärke des Debian Paketmanagements ist, dass unterschiedliche
Release-Stände verwendet werden können. Hierzu sind zumindest zwei Releases
(beispielsweise „woody“ und „testing“) mit entsprechenden
Einträgen in der Datei /etc/apt/sources.list
anzugeben. Nun kann mittels apt-get --target-release
der gewünschte Release-Stand
für ein Paket gewählt werden.
Sinnvoll einsetzbar ist dieses Feature leider nur mit zwei Releases; werden drei
Debian Releases (beispielsweise zusätzlich „unstable“) oder aber eine
Nicht-Debian Paketquelle gemischt, so kommt es zu seltsamen Ergebnissen. Die Lösung
für dieses Problem ist eine Erweiterung der Datei /etc/apt/preferences
.
Hier zunächst ein Beispiel für eine sinnvolle /etc/apt/preferences
-Datei. Auf den meisten Systemen
wird diese Datei nicht existieren (sie wird auch nicht zwingend benötigt) und muss
daher neu angelegt werden.
* Track stable: Explanation: see http://www.argon.org/~roderick/apt-pinning.html Package: * Pin: release o=Debian,a=stable Pin-Priority: 900 Package: * Pin: release o=Debian,a=testing Pin-Priority: 400 Package: * Pin: release o=Debian,a=unstable Pin-Priority: 300 Package: * Pin: release o=Debian Pin-Priority: -1 * Track testing: Explanation: see http://www.argon.org/~roderick/apt-pinning.html Package: * Pin: release o=Debian,a=testing Pin-Priority: 900 Package: * Pin: release o=Debian,a=unstable Pin-Priority: 300 Package: * Pin: release o=Debian Pin-Priority: -1
Bereits beim einmaligen Aufruf von apt-get
kann mit der Option -t
der Wert für „APT::Default-Release“
gesetzt werden. Diese Einstellung gilt jedoch lediglich für diesen einen Aufruf von apt-get
. Beispiel: apt-get -t unstable install paketname
. Dies kann
durchaus ein sehr nützliches Feature sein, kann sich aber in anderen Fällen auch
problematisch auswirken.
Die gute Seite: Sind in der sources.list
die Releases testing
und unstable
definiert und ist in der Datei apt.conf
der Wert für APT::Default-Release
auf „testing“
gesetzt, so ergeben sich folgende Prioritäten für das Paket „foo“:
release version priority no -t switch -t unstable testing 1.1 990 500 unstable 1.2 500 990
Ist das Paket „foo“ nicht installiert und wird apt-get install foo
aufgerufen, so wird die Version
1.1 aus „testing“ installiert, da diese die höchste Priorität hat.
Mittels apt-get -t unstable install foo
kann gezielt die
Version 1.2 aus „unstable“ installiert werden, da für diesen einen
Aufruf von apt-get
die Priorität erhöht wird.
Übrigens kann auch die Ausgabe des Kommandos apt-cache policy
(ohne weitere Parameter)
als Gerüst für eine eigene Datei /etc/apt/preferences
dienen:
fr@inari:~$ apt-cache policy Paketdateien: 100 /var/lib/dpkg/status release 500 http://security.debian.org testing/updates/main Packages release o=Debian,a=testing,l=Debian-Security,c=main 500 http://ftp2.de.debian.org testing/main Packages release o=Debian,a=testing,l=Debian,c=main origin ftp2.de.debian.org Festgehaltene Pakete (»Pin«):
Die Manpage zu dieser Konfigurationsdatei wird mittels man apt_preferences 5
angezeigt und enthält
weitere Informationen.
© 1999 - 2024 | Das Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg steht unter einer Creative Commons Namensnennung-Nicht Kommerziell-Keine Bearbeitung 3.0 Deutschland Lizenz.