Tout d'abord, si vous avez déjà mis à niveau des packages à partir d'un PPA par erreur, consultez cette réponse: /ubuntu//a/142808/103117 en particulier la section sur l'utilisation de ppa-purge. Étant donné que j'avais déjà mis à niveau les packages et apt-get ne rétrogradera pas quelles que soient les priorités, il est plus facile de purger tous les packages mis à niveau en premier, puis de fixer les priorités, puis de rajouter le PPA et de ne mettre à niveau que les packages que vous souhaitez.
Pour une explication complète du système de priorité / épinglage, voir man apt_preferences
.
Si un package est disponible à partir de plusieurs sources, chacune se verra attribuer une priorité et vous pouvez le voir avec apt-cache policy <package name>
. Par exemple, j'utilise un PPA appelé nathan-renniewaldock / ppa / ubuntu et je ne veux pas installer mysql-server-5.5 (mon "package Y") à partir de là. Je peux donc vérifier ma situation actuelle avec:
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
Donc, comme tout est prioritaire 500, selon la page de manuel, celle qui a le numéro de version le plus élevé est choisie.
Si, par exemple, vous souhaitez installer uniquement ddclient ("package X"), mais pas tout autre package, vous souhaitez réduire la priorité de tous les packages du PPA, à l'exception de ddclient. Créez un fichier appelé /etc/apt/preferences.d/nathan-preferences
. Notez que tous les fichiers de ce répertoire sont lus et qu'il existe certaines règles concernant le nom de fichier (il ne doit contenir que des caractères alphanumériques, des hypens, des tirets et ne doit pas avoir d'extension ou se terminer par .pref).
Nous devons d'abord savoir comment identifier notre AAE. La apt-cache policy
commande à elle seule diffuse des informations sur toutes les sources. Je sais que mon PPA a "nathan" dans le nom, donc je fais:
$ 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
La partie intéressante est "o = LP-PPA-nathan-renniewaldock", que nous utilisons dans le fichier /etc/apt/preferences.d/nathan-prefs comme ceci:
Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400
Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500
Cela définit tout dans le PPA à la priorité 400, puis remet ddclient à la valeur par défaut 500. Maintenant, je peux vérifier que cela a fonctionné:
$ 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
Donc, ddclient a une priorité de 500, ce qui est le même que le paquet Ubuntu d'origine, mais il sera installé à partir du PPA nathan car celui-ci est une version supérieure. Maintenant, assurons-nous que les autres packages ne seront pas installés:
$ 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
Dans ce cas, le package du PPA nathan a la priorité 400 qui est inférieure à celle d'Ubuntu, donc même s'il s'agit d'une version supérieure, il ne sera pas mis à niveau. Nous pouvons vérifier avec:
$ 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]?
Étant donné que seul le package que je souhaite doit être mis à niveau, je suis heureux de dire oui.