Das Wiki ist im Nur-Lese-Modus, es wird durch ein neues Wiki ersetzt. Mehr Infos....

APT-Pinning

1. Einleitung und erstes Beispiel

APT versucht immer, die höchsten Versionen aus dem ihm in der /etc/apt/sources.list zugewiesenen Quellen zu installieren. Dieses Verhalten ist nicht immer erwünscht; zB. wenn man nur bestimmte Pakete aus den [:BackPorts:Backports] installieren möchte, würde ein dist-upgrade versuchen, sämtliche in den Backports zur Verfügung stehenden Pakete in das System einzuspielen. Dies wird mit fast hundertprozentiger Sicherheit zu nur schwer, wenn überhaupt aufzulösenden Konflikten führen.

Um dieses Verhalten zu beeinflussen, kann man APT Prioritäten (sog. Pin-Priorities) für Quellen oder auch einzelne Pakete vorschreiben. Jene werden in der Datei /etc/apt/preferences festgelegt, die selbst angelegt werden muss.

Grundsätzlich gilt, je höher die Pin-Priority, desto höher die Priorität zur Installation der Pakete v. v.!

Welche Quelle oder welche Pakete welche Priorität haben, kann mit dem Befehl

apt-cache policy

abgefragt werden. Ohne weitere Optionen gibt dieser die Pin-Priorities für die einzelnen Paketquellen aus, gibt man ein Paket ein, so die verschieden Versionen.

Hier als Beispiel die Ausgaben bei einer Mischung aus Testing(derzeit Etch) und Unstable(Sid):

user@debian:~$ apt-cache policy
Paketdateien:
 100 /var/lib/dpkg/status
     release a=now
  90 http://debian.tu-bs.de sid/non-free Packages
     release o=Debian,a=unstable,l=Debian,c=non-free
     origin debian.tu-bs.de
  90 http://debian.tu-bs.de sid/contrib Packages
     release o=Debian,a=unstable,l=Debian,c=contrib
     origin debian.tu-bs.de
  90 http://debian.tu-bs.de sid/main Packages
     release o=Debian,a=unstable,l=Debian,c=main
     origin debian.tu-bs.de
 990 http://www.debian-multimedia.org etch/main Packages
     release o=Unofficial Multimedia Packages,a=testing,l=Unofficial Multimedia Packages,c=main
     origin www.debian-multimedia.org
 990 http://security.debian.org etch/updates/main Packages
     release o=Debian,a=testing,l=Debian-Security,c=main
     origin security.debian.org
 990 http://debian.tu-bs.de etch/non-free Packages
     release o=Debian,a=testing,l=Debian,c=non-free
     origin debian.tu-bs.de
 990 http://debian.tu-bs.de etch/contrib Packages
     release o=Debian,a=testing,l=Debian,c=contrib
     origin debian.tu-bs.de
 990 http://debian.tu-bs.de etch/main Packages
     release o=Debian,a=testing,l=Debian,c=main
     origin debian.tu-bs.de
Festgehaltene Pakete (»Pin«):
user@debian:~$

user@debian:~$  apt-cache policy wine
wine:
  Installiert:(keine)
  Mögliche Pakete:0.9.25-1
  Versions-Tabelle:
     0.9.28-1 0
         90 http://debian.tu-bs.de sid/main Packages
     0.9.25-1 0
        990 http://debian.tu-bs.de etch/main Packages

Man sieht hier, dass unter "Mögliche Pakete" die Versionsnummer des Paketes aus der Etch-Quelle angeführt wird. Wollte ich wine installieren, so würde diese ausgewählt, sofern nichts anderes bestimmt wird (dazu später).

Die hier benutzte /etc/apt/preferences sieht folgendermaßen aus:

Package: *
Pin: release a=testing
Pin-Priority: 990

Package: *
Pin: release a=unstable
Pin-Priority: 90

Um die automatische Installation des Pakets zu verhindern, genügt es, den Pin von Sid niedriger als den von Etch anzusetzen, aber: Ist das Paket ersteinmal installiert, so würde ein automatischer upgrade des Pakets aus Sid erfolgen, sofern der Pin größer gleich 100 beträgt. Bei einem Wert niedriger als 100 passiert dies nicht, da die installierten Pakete den Wert von 100 besitzen.

Will man nun ein Paket, zB. wine aus Sid installieren, so muss man aptitute die Option -t [Release] mitgeben. Das t steht für target release, also übersetzt in etwa Zielversion, Zielquelle.

aptitude install -t unstable wine

Die Abhängigkeiten werden dann, sofern nicht aus Etch zu lösen, durch Sid bedient, so dass man diese nicht manuell aufschlüsseln muss.

2. Zweites Beispiel: Stable + Backports

Siehe Backports 4.2

3. Drittes Beispiel: Rettung von APT durch Pinning

Falls man versehentlich eine höhere Version eines Paketes aus einer anderen Quelle zur Installation vorgesehen hat (ohne Pinning), dieses Paket aber nicht installationsfähig ist, so kann dies zu der verfahrenen Situation führen, dass APT nun ständig versucht, dieses Paket anstelle der gewünschten (niedrigeren) Version zuinstallieren und daran scheitert. Selbst ein Herausnehmen der anderen Quelle aus der sources.list nebst einem aptitude update ändert daran nichts.

Eine Lösung hierfür ist, die Hauptquelle mit einem Pin von zB. 1001 zu versehen (siehe die obige Tabelle). ZB.:

Package: *
Pin: release a=stable
Pin-Priority: 1001

Zwei Beispiele aus der Praxis:

4. Weblink

AptPinning (last edited 2007-12-28 14:12:11 by SebastianFeltel)