Tout d'abord, si vous avez déjà mis à niveau des paquets d'un PPA par erreur, consultez cette réponse : https://askubuntu.com/a/142808/103117 en particulier la section sur l'utilisation de ppa-purge. Étant donné que j'avais déjà mis à niveau des paquets et qu'apt-get ne rétrograde pas sans tenir compte des priorités, il est plus facile de purger d'abord tous les paquets mis à niveau, puis de fixer les priorités, puis de réinsérer le PPA et de ne mettre à niveau que les paquets que vous voulez.
Pour une explication complète du système de priorité / d'épinglage, voir man apt_preferences
.
Si un paquet est disponible à partir de plusieurs sources, chacune d'entre elles 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 "paquet 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 de priorité 500, selon la page de manuel, c'est celui qui a le numéro de version le plus élevé qui est choisi.
Si, par exemple, vous souhaitez installer uniquement ddclient (" paquet X "), mais aucun autre paquet, vous devez réduire la priorité de tous les paquets du PPA, sauf 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 du fichier (il ne doit contenir que des caractères alphanumériques, des tirets, des traits d'union et ne doit pas avoir d'extension ou se terminer par .pref).
Tout d'abord, nous devons savoir comment identifier notre PPA. Le site apt-cache policy
à elle seule, la commande diffuse des informations sur toutes les sources. Je sais que mon PPA a "nathan" dans son nom, alors je le 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 met tout dans le PPA à la priorité 400, puis remet ddclient à la priorité 500 par défaut. 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
Ainsi, ddclient a une priorité de 500, ce qui est le même que le paquet Ubuntu original, mais il sera installé à partir du PPA nathan car celui-ci est une version supérieure. Maintenant, assurons-nous que les autres paquets 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 paquet du PPA nathan a une priorité 400 qui est inférieure à celle d'Ubuntu, donc même s'il est d'une version supérieure, il ne sera pas mis à jour. 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]?
Comme seul le paquet que je veux doit être mis à jour, je suis heureux de dire oui.