Zum Inhalt springen

APT/Pinning/Anwendungen: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „== Anwendungen == ; Konfiguration * Das Pinning erfolgte früher traditionell in der Datei '''/etc/apt/preferences''' * Seit Ubuntu 10.04 sollte man den Ordner '''/etc/apt/preferences.d/''' nutzen, in dem man eine neue Datei mit einem beliebigen Namen anlegt * Idealerweise enthält der Dateiname dann einen Hinweis auf die jeweilige Paketquelle * Diese Datei darf entweder die Dateiendung '''.pref''' oder aber keine Endung besitzen (beispielsweise '''xenial…“
 
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Anwendungen ==
== Anwendungen ==
; Konfiguration
; Konfiguration
* Das Pinning erfolgte früher traditionell in der Datei '''/etc/apt/preferences'''
Pinning erfolgte früher traditionell in der Datei '''/etc/apt/preferences'''
* Seit Ubuntu 10.04 sollte man den Ordner '''/etc/apt/preferences.d/''' nutzen, in dem man eine neue Datei mit einem beliebigen Namen anlegt
 
Besser ist
* sollte man den Ordner '''/etc/apt/preferences.d/''' nutzen, in dem man eine neue Datei mit einem beliebigen Namen anlegt
* Idealerweise enthält der Dateiname dann einen Hinweis auf die jeweilige Paketquelle
* Idealerweise enthält der Dateiname dann einen Hinweis auf die jeweilige Paketquelle
* Diese Datei darf entweder die Dateiendung '''.pref''' oder aber keine Endung besitzen (beispielsweise '''xenial.pin''' würde ignoriert werden)
* Diese Datei darf entweder die Dateiendung '''.pref''' oder aber keine Endung besitzen (beispielsweise '''xenial.pin''' würde ignoriert werden)
Zeile 202: Zeile 204:


Während der erste Abschnitt die Nutzung des PPAs praktisch untersagt, gilt dies nicht für die gewünschten Pakete '''foo''' und '''bar'''
Während der erste Abschnitt die Nutzung des PPAs praktisch untersagt, gilt dies nicht für die gewünschten Pakete '''foo''' und '''bar'''
[[Kategorie:APT]]

Aktuelle Version vom 22. Oktober 2025, 11:30 Uhr

Anwendungen

Konfiguration

Pinning erfolgte früher traditionell in der Datei /etc/apt/preferences

Besser ist

  • sollte man den Ordner /etc/apt/preferences.d/ nutzen, in dem man eine neue Datei mit einem beliebigen Namen anlegt
  • Idealerweise enthält der Dateiname dann einen Hinweis auf die jeweilige Paketquelle
  • Diese Datei darf entweder die Dateiendung .pref oder aber keine Endung besitzen (beispielsweise xenial.pin würde ignoriert werden)
  • Unabhängig vom Speicherort muss das Anlegen und die Bearbeitung mit einem Editor mit Root-Rechten erfolgen
Beispiel

/etc/apt/sources.list

## Offizielle Quellen
deb https://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-src https://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
## Inoffizielle Quelle
deb https://peters-ubuntupakete.example.org/ubuntu/ xenial main restricted universe multiverse

Pinning per Release

Hinweis
Eine Leerzeile definiert einen neuen Abschnitt für einen weiteren Eintrag
  • Leerzeilen zwischen Package, Pin und Pin-Priority sind daher nicht zulässig
Beispiel

/etc/apt/preferences.d/xenial

Package: *
Pin: release v=16.04, l=Ubuntu
Pin-Priority: 1000

Von nun an haben alle Pakete aus offiziellen Paketquellen für die Version 16.04 und dem Distributionsnamen (Label) Ubuntu Vorrang, selbst wenn es in anderen Quellen neuere Pakete gibt

  • Eine Formulierung wie Pin: release a=xenial hätte nicht ausgereicht, da es ja auch Paketquellen von Ubuntu 16.04 gibt, die xenial-security, xenial-updates und weitere heißen
  • Erst wenn es Pakete dort nicht gibt, werden diese (soweit verfügbar) aus anderen Quellen installiert
  • Die verschiedenen Parameter für Pin: release werden im Abschnitt Parameter für Pinning per Release weiter unten erläutert

Pinning nach Ursprung

Beispiel

/etc/apt/preferences.d/peters-ubuntupakete

Package: *
Pin: origin peters-ubuntupakete.example.org
Pin-Priority: 300
  • Dieser Fall setzt die Priorität für eine bestimmte Internetadresse (origin)
  • Die genaue Bedeutung der Pin-Priority wird im Abschnitt Werte für Pin-Priority weiter unten erläutert

Pinning per Version

Der Dateiname für eine bestimmte Programmversion lautet beispielsweise /etc/apt/preferences.d/hello

Package: hello
Pin: version 2.1.1*
Pin-Priority: 1000

Dieses Beispiel verhindert die Installation des Paketes hello in einer neueren Version als 2.1.1, aber auch die unbeabsichtigte "automatische" Deinstallation aufgrund von Konflikten

Parameter für Pinning per Release

Unix GNU Beschreibung
a archive Name des Repositories
c Bereich eines Repositories
v version Version des Repositories/Veröffentlichung
o origin "Erzeuger" des Repositories
l label Name der Distribution

Die genauen Werte können mittels des Befehls apt policy nachgeschlagen werden

Hier ein Ausschnitt aus der Ausgabe dieses Kommandos

25 https://packages.medibuntu.org bionic/free Packages
release v=18.04,o=Medibuntu,a=bionic,l=Medibuntu,c=free
origin packages.medibuntu.org
500 https://ppa.launchpad.net/mozillateam/ppa/ubuntu bionic/main Packages
release v=18.04,o=LP-PPA-mozillateam,a=bionic,n=bionic,l=Firefox ESR and Thunderbird stable builds,c=main
origin ppa.launchpad.net
500 https://de.archive.ubuntu.com bionic/main Packages
release v=18.04,o=Ubuntu,a=bionic,l=Ubuntu,c=main
origin de.archive.ubuntu.com
[.....]

Mit Pinning verwaltete Pakete

firefox-esr-locale-de -> 52.9.0esr+build2-0ubuntu0.18.04.1 mit Priorität 1000
firefox-esr -> 52.9.0esr+build2-0ubuntu0.18.04.1 mit Priorität 1000
[.....]

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
Pin-Priority Beschreibung
> 999 Version wird in jedem Fall installiert, auch wenn das einen Downgrade des Paketes nach sich zieht
990 - 999 Version wird installiert, auch wenn sie nicht zum Release gehört, es sei denn ein aktuelleres Pakete ist bereits installiert
500 - 989 Version wird installiert, es sei denn, es gibt eine Version, die zum Release gehört oder eine aktuellere Version ist bereits installiert
100 - 499 Version wird installiert, es sei denn, es gibt eine aktuellere die nicht zum Release gehört oder die bereits installierte Version ist aktueller
1 - 99 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 immer bevorzugt

Experten-Info
Ausführlichere Informationen hierzu findet man in der Manpage von apt_preferences oder im APT HOWTO

Überprüfung

Die Wirkung des Apt-Pinnings auf bestimmte Pakete kann mit folgendem Befehl überprüft werden

# apt policy PAKETE

Gezielte Umgehung mit apt-get

Im Terminal [2] kann man mit apt-get gesetzte Prioritäten aber auch gezielt umgehen

Folgender Aufruf installiert beispielsweise das Programm MPlayer aus dem Paketbereich xenial (Ubuntu 16.04)

  • Dabei werden Abhängigkeiten nach der Priorität erfüllt
# apt-get -t xenial install mplayer-custom

apt-mark - Aktuelle Version behalten

# apt-mark hold firefox 

Dieser Befehl setzt die aktuell installierte Firefox Version auf "Halten", ist also identisch mit dem Pin auf die aktuelle Version

  • Um das automatische updaten wieder zu erlauben gibt man den folgenden Befehl ein
sudo apt-mark unhold firefox

Beispiele

Von proposed-Quellen downgraden

  • Mit Pinning gibt es eine vergleichsweise einfache Möglichkeit, ungewollte Upgrades auf Pakete aus den proposed-Quellen rückgängig zu machen, sprich auf die herkömmlichen und i.d.R
  • gut getesteten Pakete bzgl
  • Installationsroutine und Systemintegration downzugraden
  • Zuerst deaktiviert man die proposed-Quellen [3] und aktualisiert die Paketindexdateien

Dann legt man die Datei /etc/apt/preferences/no-proposed an

Package: *
Pin: release a=ARCHIV*
Pin-Priority: 1001
  • Dabei ist ARCHIV durch den Codenamen der jeweiligen Ubuntu-Version zu ersetzen
  • Codenamen sind beispielsweise trusty, xenial und weitere
  • Nach dem Codenamen sollte ein Stern * gesetzt werden, damit auch Pakete aus den Quellen ARCHIV-updates und ARCHIV-security berücksichtigt werden

Anschließend kann ein Upgrade bzw. Downgrade der Pakete durchgeführt werden

# apt-get dist-upgrade 

Nachdem die Paketversionen korrigiert wurden, sollte die Pinning-Datei wieder entfernt werden, damit irgendwann in Zukunft ein Upgrade auf eine neuere Ubuntu-Version ohne Probleme möglich ist

Einzelne Pakete aus älterer/neuerer Version installieren

  • Mitunter möchte man eine aktuellere Version eines Pakets aus der nächsten Ubuntu-Version nutzen, ist aber nicht bereit, ein komplettes Upgrade zu machen
  • Oder aber man hat ein Upgrade hinter sich, die neue Version eines Programms verursacht jedoch Probleme und man würde lieber für dieses eine Paket zur früheren Version zurückkehren
  • Die Methode mit Apt-Pinning entspricht im Prinzip dem manuellen Herunterladen und Installieren der entsprechenden Pakete von https://packages.ubuntu.com, ist aber deutlich bequemer, besonders wenn verschiedene Abhängigkeiten ebenfalls einen Up- bzw. Downgrade erfordern
Achtung
Die Verwendung von Paketen aus anderen Ubuntu-Versionen kann im Einzelfall eine pragmatische Lösung sein, in der Regel ist aber davon abzuraten
  • Besonders bei einer großen Zahl an Abhängigkeiten sind Probleme vorprogrammiert
Beispiel

Das Paket subversion (siehe SVN) liegt für Ubuntu 16.04 (xenial) in der Version 1.6.17 und für Ubuntu 17.04.10 (zesty) in der Version 1.7.5 vor

Nach einem Upgrade auf Ubuntu 17.04 möchte man zur Version 1.6 des Pakets zurückkehren

Dazu fügt man den Paketquellen folgende Zeile hinzu [3]

deb https://archive.ubuntu.com/ubuntu xenial main
deb-src https://archive.ubuntu.com/ xenial main
deb https://archive.ubuntu.com/ xenial-updates main
deb https://archive.ubuntu.com/ xenial-security main

Nun wird in der Datei /etc/apt/preferences folgender Inhalt ergänzt (bzw. die Datei neu angelegt)

Package: subversion
Pin: version 1.6*
Pin-Priority: 1001
Package: *
Pin: release v=16.04, l=Ubuntu
Pin-Priority: -1
  • Nun kann nach Aktualisieren der Paketlisten mit apt-get update das Paket subversion aus den Quellen von Ubuntu 16.04 installiert werden [4]
  • Wurde es bereits installiert, wird mit apt-get dist-upgrade automatisch die ältere Version installiert
  • Unter Umständen müssen je nach Komplexität der Abhängigkeiten noch weitere Pinning-Einträge hinzugefügt werden

Einzelne Pakete aus einem Sammel-PPA installieren

  • Bei der Verwendung eines Personal Packages Archiv (PPA) tritt immer wieder das Problem auf, dass nach dem Einbinden und Aktualisieren nicht nur das gewünschte Programm, sondern - je nach PPA - eine ganze Reihe weiterer Programme in den Paketquellen auftaucht, die u. U. mit den Versionen aus den offiziellen Paketquellen kollidieren können
  • Die Nutzung dieser Sammel-PPAs kann deutlich vereinfacht werden, in dem man nur das oder die gewünschten Pakete aus einem PPA zulässt (und allen anderen blockiert)
  • Zwingende Voraussetzung: das Paket hat keine speziellen Abhängigkeiten, die ebenfalls aus dem PPA stammen müssen

Dazu legt man - vor dem Installieren des Pakets - eine Datei /etc/apt/preferences.d/LP-BENUTZER-PPA-NAME mit Root-Rechten und folgendem Inhalt an (LP-BENUTZER-PPA-NAME und Paketnamen bitte anpassen)

Package: *
Pin: release o=LP-PPA-LP-BENUTZER-PPA-NAME
Pin-Priority: -1
Package: foo
Pin: release o=LP-PPA-LP-BENUTZER-PPA-NAME
Pin-Priority: 500
Package: bar
Pin: release o=LP-PPA-LP-BENUTZER-PPA-NAME
Pin-Priority: 500

Während der erste Abschnitt die Nutzung des PPAs praktisch untersagt, gilt dies nicht für die gewünschten Pakete foo und bar