AA_nail_barunpatro_sxc_993864.jpg

© Barunpatro, sxc.hu

Festgenagelt

Tricks zum Mischen von Debian-Releases

22.05.2012 Dank Pinning mischen Sie in behutsamen Dosen ein stabiles Debian mit ausgesuchten topaktuellen Komponenten – und profitieren dabei trotzdem von problemlosen Updates.

Zwar steckt bei vielen Distributionen ein Debian unter der Haube, doch war das Original selbst als Desktop-Distribution lange weniger populär als seine diversen wie die Abkömmling: Insbesondere der Stable-Zweig enttäuschte im Desktop-Einsatz durch mangelnde Aktualität der Programme. Für den Server-Einsatz boten die Stable-Pakete andererseits aufgrund der Stabilität oft die ideale Basis. Desktop-Nutzer wichen auf ein Derivat aus oder nutzten das Unstable-Repository. Im Gegensatz zu früheren Jahren gilt Debian Unstable übrigens zum gegenwärtigen Zeitpunkt durchaus als brauchbare Basis.

Mischmasch

Möchten Sie trotzdem grundsätzlich beim Stable-Release bleiben und benötigen nur das eine oder andere Paket in einer neueren Version, dann finden Sie das Gewünschte häufig im Testing-, Unstable- oder Experimental-Zweig. Dabei brauchen Sie das Paket nicht manuell an der Paketverwaltung vorbei aus dem Quellcode oder einer externen Quelle zu installieren, was immer die Stabilität des Gesamtsystems gefährdet.

Das intelligente Paketmanagement von Debian ermöglicht das individuelle Mischen von Paketen aus den verschiedenen Zweigen. Allerdings sind dabei Probleme mit den Abhängigkeiten vorprogrammiert. Um dem vorzubeugen, erweitern Sie als erstes die Konfigurationsdatei /etc/apt/apt.conf um den folgenden Eintrag:

APT:: Default-Release "stable"

Damit setzen Sie ein so genanntes Target-Release, mit dem Sie der Paketverwaltung mitteilen, dass sie beim Holen von Paketen das Stable-Release bevorzugen soll, selbst wenn für ein Paket mehrere passende Versionen existieren. Apt verwendet dann beim Aktualisieren oder Installieren stets die hier angegebene Version und ignoriert etwaige neuere Pakete aus anderen Releases.

Alternativ übergeben Sie das Ziel-Release auf der Kommandozeile an das Programm Apt-get als Parameter. Möchten Sie tatsächlich ein Paket in einer neueren Version installieren, teilen Sie Apt-get beim Aufruf explizit den Wechsel auf das neuere Release für das betreffende Pakete mit. Listing 1 zeigt zwei alternative Aufrufe für diesen Zweck.

Listing 1

sudo apt-get -t testing install icedove
sudo apt-get install icedove/testing

Mit beiden Kommandos weisen Sie Apt-get an, das Paket icedove (die Thunderbird-Variante von Debian) entgegen der Voreinstellung mitsamt den zugehörigen Abhängigkeiten aus dem Unstable-Zweig zu installieren. Dieses Verfahren des manuellen Mischens zweier Releases funktioniert zwar im Einzelfall, birgt aber Gefahren. Je mehr Pakete Sie aus Stable und Unstable oder Stable und Testing mischen, um so mehr Abhängigkeiten zieht Apt-get nach und installiert dazu weitere Bibliotheken, die ihrerseits wieder Updates erforderlich machen.

Die Praxis lehrt, dass dieses Verfahren nur im begrenzten Umfang zuverlässig funktioniert – und wenn, dann nur für zwei Releases. Mischen Sie dagegen Pakete aus Stable, Unstable und Testing oder gar Experimental, bemerken Sie mit Sicherheit relativ bald Probleme bei der Stabilität. Ein vollständiges Release-Update auf Unstable mittels apt-get dist-upgrade bringt in diesem Fall meist ein zuverlässigeres System hervor.

Pinning

Es gibt aber noch einen weiteren Weg, Pakete aus verschiedenen Releases zu mischen: Pinning (genauer Apt-Pinning) ist eine Technik, mit der Sie konkret steuern, welche der in der Datei /etc/apt/sources.list eingetragenen Paketquellen Apt beim Installieren eines Paketes bevorzugt.

Enthält die Konfiguration mehrere Paketquellen – dabei darf es sich durchaus unterschiedliches Releases handeln, etwa Stable und Testing – dann existiert ein Paket höchstwahrscheinlich in verschiedenen Versionen. Apt ermittelt per Default für jede einzelne Version des Paketes eine Priorität und installiert dann die Version mit der höchsten Vorrangstufe.

Die Apt-Konfigurationsdatei /etc/apt/preferences dient dem expliziten Festlegen solcher Stellenwerte und überschreibt die automatisch ermittelte Priorität, was Ihnen eine feinere und bessere Kontrolle darüber erlaubt, welche Version eines Paketes Sie installieren. Passt in der Datei preferences kein Eintrag auf die zu installierende Software oder existiert keine solche Datei, verwendet Apt eine Default-Priorität (siehe Tabelle "Default-Prioritäten").

Default-Prioritäten

Priorität Bedeutung
< 0 Apt installiert das Paket niemals.
1 bis 100 Apt installiert das Paket nur, wenn es noch keine installierte Version des Paketes gibt.
101 bis 500 Apt installiert das Paket, es sei denn, die installierte Version ist neuer oder es existiert in einem anderen Release (bezogen auf Stable, Testing, Unstable) eine neuere Version.
501 bis 990 Apt installiert das Paket, es sei denn, es gibt eine zum Target-Release gehörige Version oder die installierte Version ist neuer.
991 bis 1000 Apt installiert das Paket auf jeden Fall, es sei denn die installierte Version ist neuer.
> 1000 Apt installiert das Paket auf jeden Fall, auch wenn das Installieren ein Downgrade nach sich zieht.

Seit Debian 6 geschieht das Pinning übrigens nicht mehr explizit in einer einzigen Datei /etc/apt/preferences, sondern in Form mehrerer Dateien im Verzeichnis /etc/apt/preferences.d. Jede einzelnen darf beliebig viele Regeln enthalten. Die Namen der Konfigurationsdateien dürfen Sie frei wählen. Jede Regel besteht aus einem Block der in Listing 2 gezeigten Form.

Listing 2

Package: Paket
Pin: PIN-Definition
Pin-Priority: Priorität

In die erste Zeile Packagegehört immer der Name des Paketes, der gegebenenfalls Jokerzeichen enthalten darf, zum Beispiel den Asterisk (*) für alle Pakete. In der Zeile Pin: definieren Sie das Kriterium für die Installation der Software: Eine solche umfasst bei Bedarf das Release, die Version oder die Herkunft (engl.: "origin"), wobei Sie Wildcards verwenden dürfen. Die Tabelle "Pinning-Parameter" zeigt mögliche Optionen.

Pinning-Parameter

Parameter Schlüsselwort Bedeutung Beispiel
a= archive Zweig unstable, testing
c= component Komponente main, contrib, non-free
l= label Bezeichner Debian, DeMudi
n= name Codename wheezy, sid
o= origin Herkunft Debian, DeMudi
v= version Version 6.0.3

In der dritte Zeile folgt schließlich die Priorität, also der numerischen Wert gemäß der Angaben aus der Tabelle "Default-Prioritäten". Das Zusammenwirken der einzelnen Möglichkeiten und Optionen wird verständlicher, wenn Sie sich einige Beispiele ansehen. Das etwas komplexere Beispiel aus Listing 3 zeigt die Möglichkeiten von Apt-Pinning auf.

Listing 3

Package: icedove
Pin: version 3.0.*
Pin-Priority: 1001
Package: *
Pin: origin ""
Pin-Priority: 999
Package: *
Pin: release unstable
Pin-Priority: 20

Apt arbeitet die Einträge in der angegebenen Reihenfolge von oben nach unten ab. Dabei ignoriert es alle weiteren Einträge, sobald es auf einen für das Paket oder die Gruppe passenden Eintrag trifft. Die Konfiguration bewirkt aufgrund des ersten Eintrags, dass Apt immer die aktuellste Version von Icedove 3.0.x installiert, also selbst dann, wenn aufgrund eines in den Paketquellen vorhandenen Unstable-Releases eine Version 3.1 existiert. Der Eintrag bewirkt sogar, dass das Paketmanagement einen Downgrade auf 3.0.x vornimmt, sobald Sie mit Apt-get versuchen, das Paket icedove zu installieren, dieses aber bereits in Version 3.1 eingrichtet ist.

Der zweite Eintrag sorgt dafür, dass jedes andere auf dem lokalen System installierte Paket eine höhere Priorität erhält. Das gewährleistet wiederum, dass der Paketmanager bei einem Update oder beim Auflösen von Abhängigkeiten nur wenige oder gar keine neuen Versionen aus einem Online-Repository holt.

Der dritte Eintrag der Konfiguration sorgt schließlich dafür, dass Apt ein auf dem lokalen System noch gar nicht installiertes Paket aus einem in Ihrer /etc/apt/sources.list aufgeführten Unstable-Release installiert, sobald Sie es explizit zum Installieren aufrufen. Bei einem bereits installierten Paket würde Apt allerdings aufgrund der höheren Priorität des zweiten Eintrags ein bereits installiertes Paket aus dem Stable-Release behalten, obwohl es sich um eine ältere Version handelt.

Pinning-Grundlagen

Ein paar Beispiele verdeutlichen am besten, wie Sie das Pinning gezielt nach Release, Herkunft oder Version steuern. Das Festnageln auf ein Release dürfte der häufigsten Form der Anwendung entsprechen. Mit dem Eintrag aus Listing 4 haben ab sofort sämtliche Pakete aus der derzeitigen Stable-Distribution den Vorzug (v=6.04), selbst wenn in anderen Paketquellen aktuellere Pakete existieren sollten. Der Versuch, ein solches Verhalten mit einem einfachen Pin: release a=stable zu steuern würde fehlschlagen, da dies die Stable-Paketquelle squeeze-updates nicht berücksichtigt.

Listing 4

Package: *
Pin: release v=6.04, l=Debian
Pin-Priority: 1000

Das Pinning nach Herkunft ist ebenfalls eine gelegentlich anzutreffende Form des Pinnings. Mit dem Eintrag aus Listing 5 erreichen Sie, dass Apt für ein Paket oder eine Paketgruppe eine ganz bestimmte Quelle (etwa ein eigenes, selbst gepflegtes Repository) bevorzugt, weil die Pakete dort aktueller sind.

Listing 5

Package: *kde
Pin: origin ftp.informatik.tu-berlin.de
Pin-Priority: 600

Das Pinning nach Version ermöglicht es, das Installieren eines Paketes in einer ganz bestimmten Version zu erzwingen. Mit dem Eintrag aus Listing 6 verhindern Sie explizit, dass das Paketmanagement das Paket samba jemals in einer neueren Version als 3.5.6.x installiert. Außerdem verhindert die Konfiguration das unbeabsichtigte "automatische" Deinstallieren des Paketes aufgrund von Konflikten.

Listing 6

Package: samba*
Pin: version 3.5.6*
Pin-Priority: 1000

Bei den Einträgen in Listing 7 genießt das Testing-Release grundsätzlich die höchste Priorität, der Unstable-Zweig erhält eine etwas niedrigere Priorität. Pakete aus anderen Releases haben mit 10 eine sehr niedrigere Priorität. Mit dieser Konfiguration erreichen Sie, dass Apt grundsätzlich Pakete aus Testing bevorzugt.

Listing 7

Package: *
Pin: release a=testing
Pin-Priority: 1000
Package: *
Pin: release a=unstable
Pin-Priority: 900
Package: *
Pin: release o=Debian
Pin-Priority: 10

Fazit

Mit dem Pinning existiert seit Debian "Woody" eine elegante, aber auch komplexe Möglichkeit, unter Debian Pakete aus unterschiedlichen Releases zu mischen. Obwohl dies relativ gut funktioniert, sollten Sie es damit nicht übertreiben: Die Erfahrung lehrt, dass dieses Verfahren in der Regel nur mit zwei verschiedenen Releases wirklich gut funktioniert. Pinning klappt übrigens mit allen Debian-basierten Distributionen: Bei Ubuntu lauten lediglich die Bezeichnungen für Releases, Versionen und Abteilungen anders. 

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare