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]?