[[Vorlage(Fortgeschritten)]] [[Vorlage(Getestet, lucid)]] {{{#!vorlage Wissen [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] [:Paketquellen_freischalten: Paketquellen freischalten] [:apt-get: Verwenden von apt-get und apt-cache] }}} [[Inhaltsverzeichnis(2)]] ''Apt-Pinning'' nennt man eine Technik, bei der in der [:sources.list:] verschiedene Paketquellen bevorzugt werden. So kann man bei einer LTS-Version bleiben, aber gezielt Pakete von einer neueren Version oder einer inoffiziellen Quelle ziehen. Es lässt sich auch ein Paket in einer bestimmten Version festhalten oder dessen Installieren oder Deinstallieren verhindern. Dies wird hier als Beispiel dargestellt. Das Pinning geschieht in der Datei '''/etc/apt/preferences''', die in einem Editor mit [:sudo:Root-Rechten] [1] angelegt bzw. bearbeitet werden muss. Im weiteren Verlauf folgen Beispiele. Ab Lucid Lynx müssen im Ordner '''/etc/apt/preferences.d/''' Dateien angelegt werden. Diese können beliebige Namen haben und beliebig viele Regeln enthalten. In Lucid Lynx selbst gibt es aber einen Bug in '''aptitude''', wodurch ''/etc/apt/preferences.d/'' übergangen wird. Deshalb empfielt sich bei Einsatz von selbiger Version die Verwendung der Datei ''/etc/apt/preferences'', {{{#!vorlage Hinweis Das Folgende ist lediglich ein Beispiel, wie Pinning verwendet werden kann. Die konkreten Gewichtungen sind auf keinen Fall als Empfehlung zu verstehen. }}} Die Beispieldatei '''/etc/apt/sources.list''' soll hier als Beispiel wie folgt aussehen: {{{ ## Offizielle Quellen deb http://archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse ## Inoffizielle Quelle deb http://peters-ubuntupakete.example.org/ubuntu/ dapper main restricted universe multiverse }}} == Pinning per release == {{{Package: * Pin: release v=6.06, l=Ubuntu Pin-Priority: 1000 }}} Von nun an haben alle Pakete aus Quellen mit der Version ''6.06'' und dem Distributionsnamen (Label) ''Ubuntu'' den Vorzug, selbst wenn es in anderen Quellen neuere Pakete gibt. Ein ''Pin: release a=dapper'' hätte nicht gereicht, da es ja auch Paketquellen von Dapper gibt, die ''dapper-security'', ''dapper-updates'' etc. heißen. Erst wenn es die Pakete dort nicht gibt werden diese, soweit verfügbar, aus anderen Quellen installiert. Die verschiedenen Parameter für "''Pin: release''" werden im Abschnitt [#Parameter-fuer-Pinning-per-release Parameter für Pinning per release] erläutert. == Pinning per origin == {{{ Package: * Pin: origin peters-ubuntupakete.example.org Pin-Priority: 300 }}} Dieser Fall setzt die Priorität einer bestimmten Internetadresse ("origin"). Die genaue Bedeutung der ''"Pin-Priority"'' werden im Abschnitt [#Werte-fuer-Pin-Priority Werte für Pin-Priority] erläutert. == Pinning per version == {{{ Package: hello Pin: version 2.1.1* Pin-Priority: 1000 }}} Der letzte Fall verhindert das Installieren einer neueren Version des Paketes '''hello''' als Version 2.1.1, aber auch die unbeabsichtigte, „automatische“ Deinstallation aufgrund von Konflikten. {{{#!vorlage Hinweis In der '''/etc/apt/preferences''' definiert eine Leerzeile einen neuen Abschnitt für einen weiteren Eintrag. Leerzeilen zwischen `Package`, `Pin` und `Pin-Priority` sind nicht erlaubt. }}} == Gezieltes Umgehen mit apt-get == Im Terminal [2] kann man mit apt-get die Prioritäten aber auch gezielt umgehen. Folgender Aufruf z.B. zieht mplayer aus dem ''maverick''-Paketbereich. Dabei werden Abhängigkeiten nach der Priorität erfüllt. {{{ apt-get -t maverick install mplayer-custom }}} == Parameter für Pinning per release == Folgende Parameter können für das Pinnen mittels ''release'' verwendet werden: * '''a (archive)''' - Der Name eines Repositories, z.B. ''lucid'', ''lucid-backports'' * '''c (components)''' - Der Bereich eines Repositories z.B. ''universe'' * '''v (version)''' - Version des Repositories bzw. der Veröffentlichung z.B. ''10.04'' für lucid * '''o (origin)''' - Die ''Erzeuger'' des Repositories z.B. ''Ubuntu'' oder ''LP-PPA-eclipse-team'' . Nicht zu Verwechseln mit der ''origin'' als Quelle (Domainname). * '''l (label)''' - Name der Distribution z.B. ''Ubuntu'' Die genauen Werte können mittels `apt-cache policy` nachgeschlagen werden. Hier ein Ausschnitt aus der Ausgabe dieses Kommandos. {{{ 25 http://packages.medibuntu.org jaunty/free Packages release v=9.04,o=Medibuntu,a=jaunty,l=Medibuntu,c=free origin packages.medibuntu.org 500 http://de.archive.ubuntu.com jaunty/main Packages release v=9.04,o=Ubuntu,a=jaunty,l=Ubuntu,c=main origin de.archive.ubuntu.com 50 http://ppa.launchpad.net jaunty/main Packages release v=9.04,o=LP-PPA-eclipse-team,a=jaunty,l=Ubuntu,c=main origin ppa.launchpad.net }}} Die Werte aus den release-Zeilen können ganz oder teilweise zum Pinning übernommen werden. == Werte für Pin-Priority == Die Werte für "''Pin-Priority''" in der Datei '''/etc/apt/preferences''' müssen positive oder negative ganze Zahlen sein. Sie werden wie folgt interpretiert: * '''größer 1000''': Version wird in jedem Fall installiert, auch wenn das einen Downgrade des Paketes nach sich zieht * '''von 991 bis 1000''': Version wird installiert, auch wenn sie nicht zum Release gehört, es sei denn ein aktuelleres Pakete ist bereits installiert * '''von 501 bis 990''' : Version wird installiert, wenn es nicht eine Version gibt, die zum Release gehört oder eine aktuellere Version bereits installiert ist * '''von 101 bis 500''': Version wird installiert, es sei denn, es gibt eine aktuellere die nicht zum Release gehört oder die bereits installierte Version ist aktueller * '''von 0 bis 100''': Version wird nur dann installiert, wenn es keine bereits installierte gibt * '''negativer Wert''': Version wird nicht installiert Das Paket mit der höchsten Punktzahl wird bevorzugt. {{{#!vorlage Experten Ausführlichere Informationen hierzu findet man in der Manpage: '''man apt_preferences''' oder im [http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html#s-pin APT HOWTO] {en}. }}} ---- # tag: Installation, Paketverwaltung