APT Pinning

Eine besondere Stärke des Debian Paketmanagements ist das 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 ist dieses Feature leider nur mit zwei Releases einsetzbar, werden drei Debian Releases (beispielsweise zusätzlich „testing“) 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 mittels 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 in der Datei apt.conf ist 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 es 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.