Ist es möglich, nur bestimmte Pakete von einem PPA zu aktualisieren

19

Nehmen wir an, ich habe ein PPA hinzugefügt, das das gewünschte X-Paket enthält, aber auch das Y-Paket, von dem ich keine Aktualisierungen verwenden oder erhalten möchte. Wie kann ich von derselben PPA Updates für ein bestimmtes Paket erhalten, aber Updates von derselben PPA für andere Pakete ablehnen?

Ein schrittweises Beispiel wäre gut, da mir dies in mehreren PPAs passiert ist, die ein bestimmtes Paket haben, das ich möchte, aber auch eine ganze Reihe anderer hinzufügen, die ich noch nicht aktualisieren möchte.

Luis Alvarado
quelle

Antworten:

16

Sie würden verwenden, was als "Pinning" bezeichnet wird

Angenommen, Sie installieren das Paket foo von der PPA, müssen Sie mit ziemlicher Sicherheit auch alle Abhängigkeiten von der ppa installieren.

Wenn es jedoch andere Programme gibt, können Sie angeben, welches Repository für das Fixieren verwendet werden soll.

Siehe Ubuntu-Wiki-Fixierung

Es gibt ein Beispiel für das Anheften eines PPA auf dieser Seite

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

Von der Wiki-Seite:

Damit die Aktualisierung von apt-get so einfach wie möglich ist, setzen Sie eine niedrigere Pin-Priorität auf der PPA, um zu verhindern, dass unerwünschte Paketversionen installiert werden. Einmal eingestellt, verlieren Pakete aus der Ubuntu-Mozilla-Tageszeitung PPA bei jedem Wettbewerb mit Paketen aus anderen Repositories, auch wenn sie eine höhere Version haben.

Erstellen Sie die Datei /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Fügen Sie der Datei Folgendes hinzu:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Mit den folgenden Befehlen können Sie vorher und nachher überprüfen, ob die PIN-Priorität aktualisiert wurde.

apt-cache policy

apt-cache policy firefox-3.5
Panther
quelle
7

Wenn Sie aus Versehen bereits ein Upgrade von Paketen von einem PPA durchgeführt haben, lesen Sie zunächst diese Antwort: /ubuntu//a/142808/103117, insbesondere den Abschnitt zur Verwendung von ppa-purge. Da ich bereits Pakete aktualisiert hatte und apt-get unabhängig von den Prioritäten kein Downgrade durchführt, ist es am einfachsten, zuerst alle aktualisierten Pakete zu löschen, dann die Prioritäten zu korrigieren, dann die PPA erneut hinzuzufügen und nur die gewünschten Pakete zu aktualisieren.

Eine vollständige Erläuterung des Prioritäts- / Fixierungssystems finden Sie unter man apt_preferences.

Wenn ein Paket aus mehreren Quellen verfügbar ist, wird jedem eine Priorität zugewiesen, und Sie können dies mit sehen apt-cache policy <package name>. Zum Beispiel verwende ich eine PPA namens nathan-renniewaldock / ppa / ubuntu und möchte von dort aus nicht mysql-server-5.5 (mein "Paket Y") installieren. So kann ich meine aktuelle Situation überprüfen mit:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Da also alles Priorität 500 hat, wird entsprechend der Manpage die mit der höchsten Versionsnummer ausgewählt.

Wenn Sie beispielsweise nur ddclient ("package X"), aber kein anderes Paket installieren möchten, möchten Sie die Priorität für alle Pakete in der PPA mit Ausnahme von ddclient verringern. Erstellen Sie eine Datei mit dem Namen /etc/apt/preferences.d/nathan-preferences. Beachten Sie, dass alle Dateien in diesem Verzeichnis gelesen werden und es einige Regeln für den Dateinamen gibt (er darf nur alphanumerische Zeichen, Bindestriche und keine Erweiterung enthalten oder mit .pref enden).

Zuerst müssen wir wissen, wie wir unsere PPA identifizieren können. Der apt-cache policyBefehl selbst zeigt Informationen zu allen Quellen an. Ich weiß, dass meine PPA "Nathan" im Namen hat, also mache ich:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

Der interessante Teil ist "o = LP-PPA-nathan-renniewaldock", den wir in der Datei /etc/apt/preferences.d/nathan-prefs wie folgt verwenden:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

Dies setzt alles in der PPA auf die Priorität 400 und setzt dann ddclient wieder auf die Standardeinstellung 500 zurück. Jetzt kann ich überprüfen, ob es funktioniert hat:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Daher hat ddclient eine Priorität von 500. Dies entspricht dem ursprünglichen Ubuntu-Paket, wird jedoch von Nathan PPA installiert, da es sich um eine höhere Version handelt. Stellen wir nun sicher, dass die anderen Pakete nicht installiert werden:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

In diesem Fall hat das Paket von Nathan PPA die Priorität 400, die niedriger ist als die von Ubuntu. Obwohl es sich also um eine höhere Version handelt, wird es nicht aktualisiert. Wir können mit überprüfen:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Da nur das Paket, das ich möchte, aktualisiert werden soll, sage ich gerne Ja.

Rob Fisher
quelle