Comment puis-je choisir des paquets dans un PPA?

42

Existe-t-il un moyen de choisir des paquets à partir d’un référentiel ppa que vous ajoutez? C'est-à-dire exclure certains de la mise à jour tout en incluant d'autres?

Par exemple, je veux juste le package du navigateur chrome de ce référentiel mais pas les autres. Donc, je ne veux pas que mon sudo apt-get upgrade ait les autres paquets de ppa (à part le navigateur chrome) à installer sur ceux qui existent déjà, juste celui-là.

Je me rends compte que c'est une licence pour me filmer dans le pied si je lis mal les dépendances et exclut celles qui sont nécessaires à celles que j'ai incluses, mais je sais que les autres paquets ne sont pas dépendants .

Est-ce possible? Peut-être y a-t-il un fichier de liste blanche / liste noire ou quelque chose?

    
posée yuvilio 31.07.2012 - 05:01
la source

3 réponses

56

J'ai trouvé un moyen de le faire.

L'astuce consiste à utiliser deux clauses d'épinglage. Le premier à interdire 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 règle apt-cache, cela me montrera qu’il ya une version plus récente de chrome-browser disponible et qu’elle s’installera avec une mise à jour car elle a la même priorité (500) que 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 dans ce ppa (qui ont aussi une priorité de 500) à installer. En ce moment, si j'essaie de mettre à niveau, j'obtiendrai plus que les paquets de chrome que je veux 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]? 

Donc, je peux dire à apt que je veux que tous les paquets de ce ppa, webapps-preview dans ce cas, aient une priorité inférieure sauf avec "chrome" dans leur nom. Le mécanisme pour cela est épingler un package

Je crée un fichier dans /etc/apt/preferences.d/ avec deux clauses. Le premier dit de donner à tous les paquets du papp webapps-preview une priorité inférieure à celle des paquets classiques (de sorte qu'ils ne soient pas préférés, même s'ils ont un numéro de version plus élevé). en premier lieu en disant que les paquets de ce ppa avec "chrome" en leur nom ont la même priorité que les autres paquets pour qu’ils soient installés (en ayant 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 stratégie 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 apt & lt; 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. Tout gentiment cerise ramassé 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]?
    
réponse donnée yuvilio 31.07.2012 - 06:55
la source
5

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

  • Si vous ne le faites que pour certains PPA, choisissez "Origin" (coin inférieur gauche) dans la fenêtre Synaptic, puis choisissez le PPA que vous souhaitez modifier

  • choisissez tous les packages que vous ne souhaitez pas mettre à jour automatiquement.

  • choisissez le menu "Package / Lock Version". Tous les paquets que vous avez choisis ne seront plus mis à niveau automatiquement tant que vous ne les déverrouillerez plus.

réponse donnée Mrokii 31.07.2012 - 22:20
la source
5

Vous pouvez également sélectionner la version à installer avec le sélecteur ?origin :

  

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

Donc, dans votre cas particulier, 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
    
réponse donnée Braiam 22.08.2013 - 00:56
la source

Lire d'autres questions sur les étiquettes