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 policy
Befehl 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.