¿Es posible permitir solo actualizaciones de paquetes específicos de un PPA

19

Digamos que he agregado un PPA que tiene un paquete X que quiero pero también tiene un paquete Y del que no quiero usar ni recibir actualizaciones. ¿Cómo puedo, del mismo PPA, recibir actualizaciones para un paquete específico pero negar las actualizaciones del mismo PPA para otros paquetes?

Un ejemplo paso a paso sería bueno ya que esto me ha sucedido en varias PPA que tienen un paquete en particular que quiero pero también agrego un montón de otros que aún no quiero actualizar.

Luis Alvarado
fuente

Respuestas:

16

Usarías lo que se llama "fijación"

Suponiendo que esté instalando el paquete foo desde el PPA, es casi seguro que también necesite instalar cualquier dependencia del ppa.

Pero si hay otros programas, puede especificar qué repositorio usar con la fijación.

Ver Ubuntu wiki pinning

Hay un ejemplo de anclar un ppa en esa página

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

Desde la página wiki:

Para que la actualización de apt-get sea lo más sencilla posible, establezca una Prioridad de PIN más baja en el PPA, esto detendrá la instalación de versiones de paquetes no deseadas. Una vez configurados, los paquetes del PPA ubuntu-mozilla-daily siempre perderán en cualquier concurso con paquetes de otros repositorios, incluso si tienen una versión más alta.

Crea el archivo /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Agregue lo siguiente al archivo:

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

Utilice los siguientes comandos, antes y después, para verificar que se haya actualizado la Prioridad de PIN.

apt-cache policy

apt-cache policy firefox-3.5
Pantera
fuente
7

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 policycomando 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í.

Rob Fisher
fuente