En primer lugar, si ya ha actualizado paquetes de un PPA por error, vea esta respuesta: /ubuntu//a/142808/103117 en particular la sección sobre el uso de ppa-purge. Como ya había actualizado los paquetes y apt-get no se degradará independientemente de las prioridades, es más fácil purgar todos los paquetes actualizados primero, luego corregir las prioridades, luego volver a agregar el PPA y solo actualizar los paquetes que desee.
Para obtener una explicación completa del sistema de prioridad / fijación, consulte man apt_preferences
.
Si un paquete está disponible desde múltiples fuentes, a cada uno se le asignará una prioridad y puede verlo con apt-cache policy <package name>
. Por ejemplo, uso un PPA llamado nathan-renniewaldock / ppa / ubuntu y no quiero instalar mysql-server-5.5 (mi "paquete Y") desde allí. Entonces puedo verificar mi situación actual con:
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
Entonces, debido a que todo es la prioridad 500, de acuerdo con la página del manual, se elige el que tenga el número de versión más alto.
Si, por ejemplo, desea instalar solo ddclient ("paquete X"), pero no cualquier otro paquete, desea reducir la prioridad para todos los paquetes en el PPA, excepto para ddclient. Crea un archivo llamado /etc/apt/preferences.d/nathan-preferences
. Tenga en cuenta que todos los archivos en ese directorio se leen y hay algunas reglas sobre el nombre de archivo (debe contener solo caracteres alfanuméricos, guiones, guiones y no tener extensión o terminar en .pref).
Primero necesitamos saber cómo identificar nuestro PPA. El apt-cache policy
comando en sí mismo muestra información sobre todas las fuentes. Sé que mi PPA tiene "nathan" en el nombre, así que lo hago:
$ 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 parte interesante es "o = LP-PPA-nathan-renniewaldock", que usamos en el archivo /etc/apt/preferences.d/nathan-prefs de esta manera:
Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400
Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500
Esto establece todo en el PPA a la prioridad 400, luego vuelve ddclient al valor predeterminado de 500. Ahora, puedo verificar que ha funcionado:
$ 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
Entonces ddclient tiene una prioridad de 500, que es lo mismo que el paquete original de Ubuntu, pero se instalará desde el PPA nathan porque esa es una versión superior. Ahora asegurémonos de que los otros paquetes no se instalen:
$ 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
En este caso, el paquete de la PPA nathan tiene prioridad 400, que es inferior a la de Ubuntu, por lo que, aunque sea de una versión superior, no se actualizará. Podemos consultar con:
$ 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]?
Dado que solo se debe actualizar el paquete que quiero, me complace decir que sí.