49 votes

Comment choisir des paquets cherry pick à partir d'un PPA ?

Existe-t-il un moyen de cherry pick des paquets à partir d'un dépôt ppa que vous ajoutez ? C'est à dire d'en exclure certains de la mise à jour tout en en incluant d'autres ?

Par exemple, je veux juste le paquet chrome-navigateur de ce dépôt mais pas les autres. Je ne veux donc pas que mon sudo apt-get upgrade pour que les autres paquets de ce ppa (en dehors de chromium-browser) s'installent par dessus mes paquets existants, juste celui-là.

Je sais que c'est une licence qui me permet de me tirer une balle dans le pied si je lis mal les dépendances et que j'exclus celles qui sont nécessaires à celles que j'ai incluses, mais je sais pertinemment dans ce cas que les autres paquets ne sont pas des dépendances de celui-là.

Est-ce possible ? Peut-être existe-t-il un fichier de liste blanche ou de liste noire ou quelque chose du genre ?

63voto

yuvilio Points 3299

J'ai trouvé un moyen de le faire.

L'astuce consiste à utiliser deux les clauses d'épinglage. La première pour interdire TOUS les paquets du PPA et la seconde pour sélectionner ceux que vous voulez.

Ainsi, pour l'exemple ci-dessus, j'ajoute d'abord le ppa comme d'habitude :

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

Maintenant, si je lance apt-cache policy, il me montrera qu'il y a une version plus récente de chromium-browser disponible et qu'elle s'installera avec une mise à jour parce qu'elle est dans la même priorité (500) que mon chromium-browser actuel.

$ 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)
$ 

C'est très bien pour ce paquet mais je ne veux pas que les autres de ce ppa (qui ont aussi une priorité de 500) s'installent. Pour l'instant, si j'essaie de faire une mise à jour, j'obtiendrai plus que les paquets de chrome que je veux à partir de ce dépôt :

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

Ce que je peux faire, c'est dire à apt que je veux que tous les paquets de ce ppa, webapps-preview dans ce cas, aient un nom de fichier inférieur priorité sauf ceux dont le nom contient "chrome". Le mécanisme est le suivant épingler un paquet

Je crée un fichier dans /etc/apt/preferences.d/ avec deux clauses. La première dit de donner à tous les paquets du ppa webapps-preview une priorité inférieure à la priorité normale (de sorte qu'ils soient no même s'ils ont un numéro de version plus élevé. La seconde clause annule en partie la première en disant de donner aux paquets de ce ppa avec "chromium" dans leur nom la même priorité que les autres paquets afin qu'il soit installé (du fait qu'il a un numéro de version plus élevé).

$ 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

Pour identifier la chaîne correcte pour l'option "Pin : release", nous pouvons utiliser à nouveau la politique apt-cache.

$ 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
...

Pour les versions d'apt < 0.8.14, les paquets épinglés doivent être spécifiés explicitement car les caractères génériques ne fonctionnent pas :

$ 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

Et maintenant, quand j'essaie de mettre à jour, je n'obtiens que les paquets que je veux de ce ppa et pas les autres. Tout est bien sélectionné pour moi :

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

10voto

Braiam Points 64282

Vous pouvez également sélectionner la version à partir de laquelle vous souhaitez effectuer l'installation à l'aide de l'option ?origin sélecteur :

Recherche les versions de paquets dont l'origine correspond à l'expression régulière origin. Par exemple, "!?origin(debian)" trouvera tous les paquets non officiels sur votre système (paquets ne provenant pas de l'archive Debian).

Dans votre cas particulier, vous pouvez donc utiliser :

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

Vous pouvez également spécifier la version en utilisant <packagename>=<version> :

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

5voto

rexzr Points 23

Vous pouvez en fait "cherry pick" certains paquets via Synaptic et c'est très facile. Le fonctionnement est le suivant :

  • Si vous voulez faire cela pour certains PPAs seulement, choisissez "Origin" (coin inférieur gauche) dans la fenêtre Synaptic et choisissez ensuite le PPA que vous voulez changer.

  • choisir tous les paquets que vous ne voulez plus mettre à niveau automatiquement.

  • choisissez le menu "Package/Lock Version". Tous les paquets que vous avez choisis ne seront plus mis à jour automatiquement jusqu'à ce que vous les déverrouilliez à nouveau.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X