ToDo: siehe apt, Section Pinning. Mergen nach apt/Pinning.

1. Warum Apt-Pinning?

Bei Debian Sarge/Stable hat man oft nur recht alte Pakete zur Verfügung (der Schwerpunkt liegt auf Stabilität und nicht auf Aktualität).

Manchmal braucht man aber aktuellere Pakete. Hier wird erklärt, wie man die Pakete mischen kann, um auch unter Sarge die Testing und Sid/Unstable Pakete nutzen zu können.

2. Warum sollte man so etwas tun?

Im Gegensatz zur Stable-Distribution werden Testing und Unstable nicht vom Security-Team betreut. Bei vielen Paketen, z.B. X, ist das allerdings kein großes Problem. Außerdem haben die neueren Versionen meist auch zusätzliche Features und weniger Bugs.

3. sources.list

Als erstes passen wir die /etc/apt/sources.list an und setzen alle Sourcen ein. Ein Beispiel, wie sie nun aussehen könnte: (siehe auch Debian/sources.list)

# /etc/apt/sources.list
deb http://ftp2.de.debian.org/debian sid main contrib non-free
deb-src ftp://ftp2.de.debian.org/debian sid main contrib non-free

deb http://ftp2.de.debian.org/debian testing main contrib non-free
deb-src http://ftp2.de.debian.org/debian testing main contrib non-free

deb http://ftp2.de.debian.org/debian stable main contrib non-free
deb-src http://ftp2.de.debian.org/debian stable main contrib non-free

deb http://security.debian.org/ stable/updates main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free

4. preferences

Als nächstes erstellen wir die Datei /etc/apt/preferences, sofern sie noch nicht vorhanden ist. Hier kommen nun die eigentlichen Einträge für das Apt-Pinning hinein.

Normalerweise haben die Pakete die höchste Priorität, die die neueste Versions-Nummer besitzen. Durch unseren jetzigen Eintrag wird dies aber verändert: apt/PinPriorität

Package: *
Pin: release v=3.1*
Pin-Priority: 700

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

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

Siehe: http://www.de.debian.org/doc/manuals/debian-reference/ch-package.de.html#s-apt-tracking

Die höchste Priorität (Wert) gibt an, welche Version von apt installiert würde.

Die Namen wie a=stable kommen aus dem Release file im Debian Repository. siehe auch dpkg/LokaleDebDateien

Auszug aus  apt-cache policy 

Debian.de

500 http://ftp2.de.debian.org stable/contrib Packages
     release v=3.0r2,o=Debian,a=stable,l=Debian,c=contrib
     origin ftp2.de.debian.org

Oder ein eigenes Repository durch pinning auf 900 gesetzt:

900 http://lap.local.invalid woody/contrib Packages
     release v=3.0r2,o=Debian,a=stable,l=Debian,c=contrib
     origin lap.local.invalid

5. apt-get update

Als nächstes lassen wir ein einfaches apt-get update laufen. Während des Updates bekommen wir wahrscheinlich folgende Fehlermeldung:

E: Dynamic MMap ran out of room
E: Error occured while processing sqlrelay-sqlite (NewPackage)

E: Problem with MergeList /var/lib/apt/lists/ftp.us.debian.org_debian_dists_woody_contrib_binary-i386_Packages

E: The package lists or status file could not be parsed or opened.

Dies passiert, da der Cache von apt nicht groß genug ist, um alle pakete von stable, testing und unstable zu verarbeiten. Um dies zu umgehen, fügen wir folgende Zeile in die Datei /etc/apt/apt.conf ein.

APT::Cache-Limit "8388608";

6. Pakete installieren

Wenn wir 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). Um nun Pakete einer anderen Version zu installieren, haben wir mehrere möglichkeiten.

  1. Um ein Paket aus Unstable zu installieren und zu versuchen die Abhängigkeiten aus Stable zu beziehen installieren wir wie folgt:
    apt-get install <paket>/unstable
    Dies kann zu komplikationen führen, wie ich hier am Besispiel zeige:
    # apt-get install zsh/unstable
    
    Reading Package Lists... Done
    
    Building Dependency Tree... Done
    
    Selected version 4.0.6-7 (Debian:unstable) for zsh
    
    Some packages could not be installed. This may mean that you have
    
    requested an impossible situation or if you are using the unstable
    
    distribution that some required packages have not yet been created
    
    or been moved out of Incoming.
    
    Since you only requested a single operation it is extremely likely that
    
    the package is simply not installable and a bug report against
    
    that package should be filed.
    
    The following information may help to resolve the situation:
    
    
    Sorry, but the following packages have unmet dependencies:
    
    zsh: Depends: libc6 (>= 2.2.5-13) but 2.2.5-11.1 is to be installed
    
    E: Sorry, broken packages
  2. Um dem zu entgehen, installieren wir wie folgt:
    apt-get install -t unstable <paket>
    Dies wird alle nötigen Abhängigkeiten aus dem Unstable beziehen wie im Beispiel zu sehen:
    # apt-get -t unstable install zsh
    
    Reading Package Lists... Done
    
    Building Dependency Tree... Done
    
    
    The following extra packages will be installed:
    
    libc6 libc6-dev libc6-pic libdb1-compat locales
    
    The following NEW packages will be installed:
    
    libdb1-compat
    
    
    5 packages upgraded, 1 newly installed, 0 to remove and 394 not upgraded.
    
    Need to get 11.6MB of archives. After unpacking 606kB will be used.
    
    Do you want to continue? [Y/n]

7. Das war alles!

Nun könnt ihr frei nach belieben Pakete aus Stable, Sarge und Sid installieren und müsst nicht mehr auf langwierige Updates warten :) .

Text frei übersetzt von http://jaqque.sbih.org/kplug/apt-pinning.html .


siehe auch ../MehrereVersionen

Debian/AptPinning (zuletzt geändert am 2007-12-23 22:48:36 durch localhost)