apt-Pinning - das mischen von Debian-Releases
 

Debian gibt es in mindestens drei verschiedenen sogenannten Releases (Veröffentlichungen): stable, testing und unstable.

stable Die stabile Distribution ist die letzte, offiziell freigegebene Distribution von Debian. Sie gilt - wie der Name schon sagt - als stabil und wird primär zur Verwendung empfohlen.
testing Die Test-Distribution enthält Pakete, die in einer stabilen Version noch nicht akzeptiert werden, aber in der Warteschlange dafür stehen. Der Hauptvorteil in der Verwendung dieser Distribution besteht darin, dass sie aktuellere Versionen der Software bietet.
unstable An der instabilen Distribution findet die aktive Entwicklung von Debian statt. Diese Distribution wird hauptsächlich von Entwicklern und Leuten genutzt, die immer den aktuellen Stand der Entwicklung wollen.

Nun ist es so, daß ein Vermischen der Releases nicht so ohne weiteres möglich ist. Hat man einmal eine Distribution, ob stable, testing oder unstable installiert und die Paketquellen entsprechend ausgewählt, versucht Debian nur Pakete aus dem enstprechenden Zweig zu installieren. Selbst das Angeben von mehreren Zweigen in der sources.list hilft nicht. Dies dient der Stabilität, da das Mischen von Paketen aus unterschiedlichen Zweigen zu inkonsistenzen führen kann. Möchte man dennoch Pakete aus unterschiedlichen Zweigen installieren, hilft das apt-Pinning.

Das Pinning

apt-Pinning nennt man nun eine Technik, die bei Angabe von mehreren Quellen aus verschiedenen Releases eine Quelle bevorzugen kann. So kann man zum updaten schön bei stable bleiben, jedoch auch Pakete aus testing oder sogar unstable installieren. Es erleichtert sozusagen das Mischen von Paketen aus verschiedenen Releases, ohne die Notwendigkeit ein stable-System nach unstable upgraden zu müssen um ein Paket aus dem unstable-Zweig zu installieren. Sozusagen kann man alle übrigen Pakete stabil halten, während man ein paar Pakete aus unstable installiert.

Dazu benötigt man mindestens zwei Dateien:
/etc/apt/sources.list
/etc/apt/preferences

Zusätzlich kann noch die Datei /etc/apt/apt.conf ins Spiel kommen. Die Dateien preferences und apt.conf können auch fehlen, in dem Fall legt man sie einfach an. Gibt man sämtliche Quellen, also stable, testing und unstable an, kann das den apt-Cache sprengen. In diesem Fall wird die Datei apt.conf benötigt, weil in ihr ein Eintrag getätigt wird, um den Cache zu vergrößern. Dieser Eintrag sieht wie folgt aus:
APT::Cache-Limit "8388608";

In der sources.list fügt man nun sämtliche Quellen die man haben will hinzu, z.B.
deb http://ftp2.de.debian.org/debian stable main contrib non-free
deb http://ftp2.de.debian.org/debian testing main contrib non-free
deb http://ftp2.de.debian.org/debian unstable main contrib non-free
Im preferences-File findet das eigentliche pinning statt. Normalerweise werden immer die aktuellsten Pakete installiert, aber mit dem Pinning kann man dieses Verhalten ändern. Die Einträge in der Datei preferences sehen wie folgt aus:

Package: * Das Wildcard-Zeichen (*) steht für jedes Paket.
Pin: release a=testing Pin spezifiziert das Release. Folgende Parameter können für das Pinnen mittels release verwendet werden:
a (archive) - Der Zweig eines Repositories z.B. stable
c (components) - Der Bereich eines Repositories z.B. main
v (version) - Version des Repositories bzw. der Veröffentlichung, z.B. 3.1
o (origin) - Die Erzeuger des Repositories, hier Debian
l (label) - Name der Distribution, hier auch Debian
Pin-Priority: 900 Pin-Priority spezifiziert den priority Level.

Würde man nun ein normales apt-get install paket ausführen, würde es die Stable oder die Version installieren, die die höchste Priorität besitzt (/etc/apt/preferences). Angenommen wir haben ein testing installiert und wollen nun Pakete einer anderen Version installieren, dann haben wir folgende zwei Möglichkeiten:
# apt-get install Paket/unstable
# apt-get -t unstable install Paket
Die erste Methode versucht die Abhängigkeiten aus dem eigentlichen Release (in unserem Falle testing) zu erfüllen, was häufig zu einer Fehlermeldung führt, weil die benötigten Pakete fehlen.
Die zweite Methode löst die Abhängigkeiten aus dem angebenen Release (in unserem Beispiel unstable), was eher zum Erfolg führt.

Beispiel um eine Distribution auf stable zu halten:

Package: * alle Pakete
Pin: release a=stable,v=3.0* installiert nur Pakete für die stable version 3.0, aber trotzdem alle Sicherheits-Updates, die als Version 3.0r1, 3.0r2, usw. erscheinen.
Pin-Priority: 1001