20 votes

Est-il possible d'autoriser uniquement les mises à jour de certains paquets à partir d'un PPA ?

Disons que j'ai ajouté un PPA qui contient un paquet X que je veux mais qui contient aussi un paquet Y que je ne veux pas utiliser ou dont je ne veux pas recevoir de mises à jour. Comment puis-je, à partir du même PPA, recevoir des mises à jour pour un paquet spécifique mais refuser les mises à jour du même PPA pour d'autres paquets.

Un exemple étape par étape serait bien car cela m'est arrivé dans plusieurs PPAs qui ont un paquet particulier que je veux mais qui en ajoutent aussi un tas d'autres que je ne veux pas encore mettre à jour.

18voto

Panther Points 96601

Vous utiliserez ce que l'on appelle "l'épinglage".

En supposant que vous installez le paquet foo à partir du PPA, vous aurez certainement besoin d'installer toutes les dépendances du PPA également.

Mais s'il y a d'autres programmes, vous pouvez spécifier quel référentiel utiliser avec l'épinglage.

Véase Épinglage du wiki d'Ubuntu

Il y a un exemple d'épinglage d'un ppa sur cette page

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

De la page wiki :

Pour rendre la mise à jour d'apt-get aussi indolore que possible, définissez une Pin-Priorité plus faible sur le PPA, cela empêchera l'installation de versions de paquets non désirées. Une fois défini, les paquets du PPA ubuntu-mozilla-daily seront toujours perdants dans toute compétition avec les paquets d'autres dépôts, même s'ils ont une version supérieure.

Créer le fichier /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Ajoutez ce qui suit au fichier :

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Utilisez les commandes suivantes, avant et après, pour vérifier que la priorité des broches a été mise à jour.

apt-cache policy

apt-cache policy firefox-3.5

10voto

Rob Fisher Points 597

Tout d'abord, si vous avez déjà mis à niveau des paquets d'un PPA par erreur, consultez cette réponse : https://askubuntu.com/a/142808/103117 en particulier la section sur l'utilisation de ppa-purge. Étant donné que j'avais déjà mis à niveau des paquets et qu'apt-get ne rétrograde pas sans tenir compte des priorités, il est plus facile de purger d'abord tous les paquets mis à niveau, puis de fixer les priorités, puis de réinsérer le PPA et de ne mettre à niveau que les paquets que vous voulez.

Pour une explication complète du système de priorité / d'épinglage, voir man apt_preferences .

Si un paquet est disponible à partir de plusieurs sources, chacune d'entre elles se verra attribuer une priorité et vous pouvez le voir avec apt-cache policy <package name> . Par exemple, j'utilise un PPA appelé nathan-renniewaldock/ppa/ubuntu et je ne veux pas installer mysql-server-5.5 (mon "paquet Y") à partir de là. Je peux donc vérifier ma situation actuelle avec :

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Donc, comme tout est de priorité 500, selon la page de manuel, c'est celui qui a le numéro de version le plus élevé qui est choisi.

Si, par exemple, vous souhaitez installer uniquement ddclient (" paquet X "), mais aucun autre paquet, vous devez réduire la priorité de tous les paquets du PPA, sauf ddclient. Créez un fichier appelé /etc/apt/preferences.d/nathan-preferences . Notez que tous les fichiers de ce répertoire sont lus et qu'il existe certaines règles concernant le nom du fichier (il ne doit contenir que des caractères alphanumériques, des tirets, des traits d'union et ne doit pas avoir d'extension ou se terminer par .pref).

Tout d'abord, nous devons savoir comment identifier notre PPA. Le site apt-cache policy à elle seule, la commande diffuse des informations sur toutes les sources. Je sais que mon PPA a "nathan" dans son nom, alors je le fais :

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

La partie intéressante est "o=LP-PPA-nathan-renniewaldock", que nous utilisons dans le fichier /etc/apt/preferences.d/nathan-prefs comme ceci :

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

Cela met tout dans le PPA à la priorité 400, puis remet ddclient à la priorité 500 par défaut. Maintenant, je peux vérifier que cela a fonctionné :

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Ainsi, ddclient a une priorité de 500, ce qui est le même que le paquet Ubuntu original, mais il sera installé à partir du PPA nathan car celui-ci est une version supérieure. Maintenant, assurons-nous que les autres paquets ne seront pas installés :

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Dans ce cas, le paquet du PPA nathan a une priorité 400 qui est inférieure à celle d'Ubuntu, donc même s'il est d'une version supérieure, il ne sera pas mis à jour. Nous pouvons vérifier avec :

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Comme seul le paquet que je veux doit être mis à jour, je suis heureux de dire oui.

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