¿Cómo selecciono paquetes de un PPA?

45

¿Hay alguna manera de seleccionar paquetes de un repositorio de ppa que agregue? Es decir, ¿excluir algunos de la actualización e incluir otros?

Por ejemplo, solo quiero el paquete de navegador de cromo de este repositorio, pero no los otros. Así que no quiero sudo apt-get upgradeque tenga otros paquetes de ese ppa (además del navegador de cromo) instalados sobre los existentes, solo ese.

Me doy cuenta de que esta es una licencia para pegarme un tiro en el pie si leo mal las dependencias y excluyo las que son necesarias a las que incluí, pero sé de hecho en este caso que los otros paquetes no son dependencias para esa.

¿Es esto posible? Tal vez hay algún archivo de lista blanca / lista negra o algo así.

yuvilio
fuente
Transmitiría Synaptic por tres razones: Ubuntu lo descartó como el actualizador de software a favor del Centro de software de Ubuntu, no vi una manera para que Synaptic detuviera las actualizaciones de un ppa sobre los archivos instalados (que era mi problema), y yo prefiera una solución de línea de comando a una GUI. Terminé encontrando algo que funcionó (ver mi respuesta a continuación).
yuvilio
2
El Centro de software se usa para instalar y eliminar software, el Administrador de actualizaciones se usa para actualizar, podría haber utilizado la fijación en Synaptic para que los otros paquetes no se actualicen, también para un nuevo usuario que no quisiera meterse con la Terminal Se preferiría la GUI, por supuesto, la suya es más o menos la respuesta correcta.
Uri Herrera
Hay algunas cosas que simplemente no puede hacer a través de Software-Center (que son fáciles con Synaptic). Y no todos (especialmente los novatos) se sienten cómodos con la línea de comandos.
Mrokii
@Mrokii Estoy de acuerdo en que mi enfoque no es para principiantes. La respuesta sináptica que escribió y que Uri Herrera insinuó, que supongo que funciona, es mejor en ese sentido. Dejaré que otros que lo prueben lo califiquen.
yuvilio

Respuestas:

61

Encontré una forma de hacerlo.

El truco es usar dos cláusulas de fijación. El primero en rechazar TODOS los paquetes del PPA y el segundo en seleccionar los que desea.

Entonces, para el ejemplo anterior, primero agrego el ppa como de costumbre:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

Ahora, si ejecuto la política apt-cache, me mostrará que hay una versión más nueva de chromium-browser disponible y que se instalará con una actualización porque tiene la misma prioridad (500) que mi navegador de chromium actual.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

Eso es genial en lo que respecta a ese paquete, pero no quiero que se instalen los demás en este ppa (que también tienen una prioridad 500). En este momento, si intento actualizar, obtendré más que solo los paquetes de cromo que quiero de ese repositorio:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Entonces, lo que puedo hacer es decirle a apt que quiero que todos los paquetes en ese ppa, webapps-preview en este caso, tengan una prioridad más baja, excepto los que tienen "cromo" en su nombre. El mecanismo para esto es fijar un paquete

Creo un archivo en /etc/apt/preferences.d/ con dos cláusulas. La primera de ellas dice dan todos los paquetes en las aplicaciones web-previsualización ppa una prioridad más baja que la normal (para que se no preferido, incluso si tienen un número de versión superior. La segunda cláusula anula en parte la primera diciendo dan los paquetes en ese ppa con "cromo" en su nombre tiene la misma prioridad que otros paquetes para que se instale (al tener un número de versión más alto).

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Para identificar la cadena correcta para la opción "Pin: liberar", podemos usar la política apt-cache nuevamente.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

Para versiones aptas <0.8.14, los paquetes anclados deben especificarse explícitamente ya que los comodines no funcionan:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Y ahora, cuando trato de actualizar, obtengo solo los paquetes que quiero de ese ppa y no los otros. Todo muy bien escogido para mí:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?
yuvilio
fuente
55
bastante complicado, en mi humilde opinión.
Mrokii
55
No estoy de acuerdo, esto es bastante sencillo para lo que a alguien le gusta quiere. Y es bueno tener todas las instrucciones sobre cómo identificar el nombre del PIN de ppa.
Nicholi
Esta respuesta específica es para aquellos que desean asegurarse de que apt siempre prefiera los paquetes de un repositorio específico. Si quieres una solución única, prueba esta respuesta o esta
Braiam
8

También puede seleccionar la versión desde la que desea instalar con el ?originselector:

Coincide con versiones de paquetes cuyo origen coincide con el origen de la expresión regular Por ejemplo, "!? Origin (debian)" encontrará paquetes no oficiales en su sistema (paquetes que no pertenecen al archivo de Debian).

Entonces, en su caso específico, puede usar:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

O puede especificar la versión usando <packagename>=<version>:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
Braiam
fuente
5

En realidad, puede "seleccionar" ciertos paquetes a través de Synaptic y es muy fácil. Funciona así:

  • Si desea hacer eso solo para ciertos PPA, elija "Origen" (esquina inferior izquierda) en la ventana Sináptica y luego elija el PPA que desea cambiar

  • elija todos los paquetes que ya no desea actualizar automáticamente.

  • elija el menú "Versión de paquete / bloqueo". Todos los paquetes que elija ya no se actualizarán automáticamente hasta que los desbloquee nuevamente.

Mrokii
fuente