Comment puis-je sélectionner les paquets d'un PPA?

45

Existe-t-il un moyen de sélectionner les paquets dans un référentiel ppa que vous ajoutez? Autrement dit, exclure certains de la mise à jour tout en incluant d’autres?

Par exemple, je veux seulement le paquet chrome-browser de ce dépôt mais pas les autres. Donc, je ne veux pas sudo apt-get upgradeque les autres paquets de ce ppa (en plus du navigateur chrome) soient installés par-dessus mes paquets existants, juste celui-là.

Je me rends compte que c’est une licence pour me tirer dans le pied si j’ai mal interprété les dépendances et exclu celles qui sont nécessaires à celles que j’ai incluses, mais je sais pertinemment que les autres paquets ne sont pas des dépendances pour celui-là.

Est-ce possible? Peut-être qu'il existe un fichier liste blanche / liste noire ou quelque chose?

Yuvilio
la source
Je transmettais synaptic pour trois raisons: Ubuntu l’a abandonné en tant que programme de mise à jour de logiciel en faveur de Ubuntu Software Center, je ne voyais pas comment Synaptic pouvait arrêter les mises à niveau d’un ppa par rapport aux fichiers installés (ce qui était mon problème), et j’ai préférez une solution en ligne de commande à une autre en interface graphique. Nous avons fini par trouver quelque chose qui fonctionnait (voir ma réponse ci-dessous).
Yuvilio
2
Le Centre de logiciel est utilisé pour installer et supprimer des logiciels, Update Manager est utilisé pour mettre à jour, vous auriez pu utiliser l'épinglage dans Synaptic pour que les autres packages ne puissent pas être mis à niveau, également pour un nouvel utilisateur qui ne voudrait pas jouer avec le Terminal. GUI serait préféré, bien sûr, votre réponse est à peu près correcte.
Uri Herrera
Il y a quelques choses que vous ne pouvez tout simplement pas faire via le Software-Center (qui sont faciles avec Synaptic). Et tout le monde (surtout les débutants) n'est pas à l'aise avec la ligne de commande.
Mrokii
@Mrokii Je conviens que mon approche n'est pas pour les débutants. La réponse Synaptic que vous avez écrite et à laquelle Uri Herrera a fait allusion, ce qui, je suppose, fonctionne, est meilleure à cet égard. Je laisserai les autres utilisateurs l'essayer.
Yuvilio

Réponses:

61

Trouvé un moyen de le faire.

L'astuce consiste à utiliser deux clauses d'épinglage. Le premier à refuser TOUS les paquets du PPA et le second à sélectionner ceux que vous voulez.

Donc 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 la politique d'apt-cache, cela me montrera qu'il existe une version plus récente de chrome-browser disponible et qu'elle s'installera avec une mise à niveau car elle a la même priorité (500) que celle de mon navigateur chrome 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 génial pour ce paquet, mais je ne veux pas que les autres utilisateurs de ce ppa (qui ont également une priorité de 500) s’installent. À l'heure actuelle, si j'essaie de mettre à niveau, j'obtiendrai plus que les packages de chrome que je veux dans ce référentiel:

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

Donc, 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 une priorité inférieure à l' exception de ceux avec "chrome" dans leur nom. Le mécanisme pour cela consiste à épingler un paquet

Je crée un fichier dans /etc/apt/preferences.d/ avec deux clauses. La première demande de donner à tous les paquetages de webapps-preview ppa une priorité inférieure à celle du paquet standard (afin qu’ils ne soient pas préférés même s'ils ont un numéro de version plus élevé. La seconde clause annule en partie la première en disant que ppa avec "chrome" dans leur nom a la même priorité que les autres paquets pour qu’il soit installé (en ayant un numéro de version supérieur).

$ 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 d'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'essaye de mettre à jour, je ne reçois que les paquets que je veux de ce ppa et pas les autres. Tous gentiment cherry choisi 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]?
Yuvilio
la source
5
assez compliqué, à mon humble avis.
Mrokii
5
Je ne suis pas d'accord, c'est assez simple pour ce que quelqu'un aime veut. Et bien d’avoir toutes les instructions pour identifier le nom de code PIN du ppa.
Nicholi
Cette réponse spécifique s’adresse à ceux qui veulent s’assurer que apt préférera toujours les packages d’un référentiel spécifique. Si vous voulez une solution unique, essayez cette réponse ou celle-ci
Braiam
8

Vous pouvez également sélectionner la version à installer à l'aide du ?originsélecteur:

Correspond aux versions de package dont l'origine correspond à l'origine de l'expression régulière. Par exemple, “!? Origin (debian)” trouvera tout paquet non officiel sur votre système (pas à partir de l'archive Debian).

Donc, dans votre cas spécifique, vous pouvez utiliser:

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

Ou vous pouvez spécifier la version en utilisant <packagename>=<version>:

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

Vous pouvez réellement "sélectionner" certains paquets via Synaptic et c'est très simple. Cela fonctionne comme ceci:

  • Si vous souhaitez le faire pour certains PPA uniquement, choisissez "Origine" (coin inférieur gauche) dans la fenêtre Synaptique puis choisissez le PPA que vous souhaitez modifier.

  • choisissez tous les paquets que vous ne voulez plus mettre à jour 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.

Mrokii
la source