Apt-Pinning. Ein oft genanntes Stichwort bei Debian und Co. Manchmal möchte man eine neuere Softwareversion installieren als diejenige, die in einer bestimmten Veröffentlichung von Debian- oder Ubuntu vorhanden ist. Die Gründe sind vielfältig. Vielleicht ist man lediglich an einem neuen Feature interessiert, andererseits kann man aber genauso gut auch auf ein neues Paket angewiesen sein oder es ausschließlich aus Neugier installieren.
Für Debian Stable gibt es genau aus diesem Grund das offizielle Backport-Projekt, mit dem sichergestellt ist, dass ausgewählte Pakete zwar aktueller sind als die bestehenden, aber immer noch stabil mit dem Gesamtsystem harmonieren.
Mit Apt-Pinning gibt es eine weitere Möglichkeit für erfahrene und fortgeschrittene Anwender aktuellere Software zu installieren. Insbesondere ist diese Methode für Debian Testing und Unstable interessant, wenn man z.B. Pakete aus dem Experimental Zweig zusätzlich installieren möchte und es kann unter Umständen auch für Debian Stable eine Option sein, wenn keine Backports vorhanden sind.
Meine Motivation für diesen Beitrag waren zwei Pakete in Debian Testing, die nicht aktualisiert wurden, obwohl in Unstable eine Version vorhanden war, die Bugs beseitigte.
Im Regelfall bin ich der typische, langweilige Debianbenutzer. Bei meinen Stable-Installationen läuft nur Stable, bei Testing nur Testing und bei Unstable...nur Unstable. Das ist zwar wenig aufregend, hat mich bisher aber immer vor instabilem Paket-Mischmasch bewahrt.
Manche ätzen, dass das Mischen von Paketen später nur mit der Suche nach Hilfe in irgendwelchen Foren oder IRC-Channels enden kann, wo die Methusalems dich erst einmal zu Abbitte und Buße auffordern. Du möchtest nicht wissen, was mit Leuten passiert, die eingestehen Ubuntu-PPAs mit Debianpaketen gemischt zu haben. Ihr seid also gewarnt! 😈
Apt-Pinning wird ausführlich und gut mit man apt_preferences erklärt. Hilfreich finde ich außerdem
Apt-Pinning anhand eines Beispiels
Bei meinem konkreten Problem ging es um Vim und Iceweasel. Vor einem Monat wurde ich durch Zufall auf #debian im IRC auf einen Bug in Vim aufmerksam gemacht, den ich zwei Stunden später dann per Reportbug gemeldet habe. Die Bearbeitung und Lösung des Problems war mustergültig. Der Paketverwalter bestätigte den Fehler und knapp zwei Wochen später war der Bug durch Upstream gefixt worden und das neue Paket in Debian Unstable. Doch auch Wochen danach kam davon nichts in Testing an. Mittlerweile hat es das Paket zwar nach Testing geschafft, doch gerade in so einem Fall kann Apt-Pinning weiterhelfen.
Mein anderer Favorit ist Iceweasel. In der Regel folge ich den Anweisungen auf mozilla.debian.net und habe zum gleichen Thema auch schon einen Beitrag geschrieben. Im Moment dauert es aber mal wieder mit dem Versionswechsel von 7 auf 8 und 9 ist nicht mehr weit entfernt.
Apt-Pinning Pin-Priorität
In einem solchen Fall ist Apt-Pinning sehr einfach global einzurichten. Standardmäßig wird jedem Paket, jeder Installation und Aktualisierung eine Priorität zugewiesen, von der man in der Regel gar nichts mitbekommt. Alle installierten Pakete haben Prioriät 100, alle anderen Pakete innerhalb einer Version wie z.B. Squeeze 500. Überprüfen lässt sich das mit
apt-cache policy
Die Zahlenwerte haben laut man apt_preferences eine unterschiedliche Gewichtung. Im Allgemeinen gilt umso höher der Zahlenwert, desto höher die Priorität ein Paket aus einer anderen Version zu installieren. Für mich funktioniert das Folgende ziemlich gut:
Erstellt euch in /etc/apt/apt.conf.d/ eine Datei mit beliebigem Namen. Ich habe hier 10default-release gewählt und editiert sie mit folgendem Inhalt. Z.B.:
APT::Default-Release "testing";
Das gilt natürlich nur für Debian Testing und sollte auf die entsprechende Debian Version geändert werden, die man gerade benutzt. Führt man danach ein aptitude update
aus und anschließend apt-cache policy
stellt man fest, dass sich die Priorität für die Pakete in Debian Testing auf 990 erhöht hat.
Zwar wäre das Folgende auch ohne diese Festlegung machbar gewesen, mir hilft es aber sicherzustellen, dass bei zukünftigen Updates immer Testing Pakete vor allen anderen bevorzugt werden.
Um nun Vim oder Iceweasel aus Debian Unstable zu installieren, muss man zuerst die Paketquellen in /etc/apt/sources.list aktualisieren und z.B. folgenden Eintrag für Unstable hinzufügen.
deb http://ftp.de.debian.org/debian unstable main
Danach lässt sich Iceweasel oder Vim aus Unstable mit
aptitude -t unstable install iceweasel vim
installieren. Bei zukünftigen Updates prüft Apt, ob die Version aus Unstable oder Testing neuer sein sollte. Da Testing bei mir eine höhere Priorität bekommen hat, wird im Zweifelsfall immer aus Testing installiert.
Das ist natürlich noch nicht alles. Apt kann mehr, viel mehr. Wenn ihr Ubuntu benutzt lässt sich z.B. explizit festlegen, ob ihr nur Pakete aus 10.04 bevorzugt oder doch besser 11.04. Wie wäre es, wenn man festlegen könnte, ob man nur bis Version X aus Debian Testing installiert und danach nur noch Pakete aus Experimental installiert? Wie schränke ich meine Prioritäten nur auf KDE-Pakete ein?
Apt ist ein wirklich sehr mächtiges und smartes Programm. Doch in der Regel kommt man wie oben beschrieben schon mit sehr wenig Aufwand aus und sollte beim Mischen von Paketen verschiedener Versionen immer skeptisch bleiben. Für alle, die sich eine maßgeschneiderte Preferences-Datei anlegen möchten, empfehle ich wie schon gesagt einen Blick in man apt_preferences zu werfen oder sich das folgende fortgeschrittene Beispiel anzuschauen.
Raphael Hertzog bezeichnete vor sieben Monaten die Installation von Gnome 3 aus Debian Experimental in Testing als "apt-pinning for the brave". Das zu bewerten, liegt wie immer bei euch. 😉
4 Replies to “Apt-Pinning für die Mutigen”