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.
| ![[Tipp]](bilder/css/tip.png) | 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 - 2025 | Das Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg steht unter einer Creative Commons Namensnennung-Nicht Kommerziell-Keine Bearbeitung 3.0 Deutschland Lizenz.
 1999 - 2025 | Das Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg steht unter einer Creative Commons Namensnennung-Nicht Kommerziell-Keine Bearbeitung 3.0 Deutschland Lizenz.