Est-il possible d'autoriser uniquement les mises à jour de packages spécifiques à partir d'un PPA

19

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

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

Luis Alvarado
la source

Réponses:

16

Vous utiliseriez ce que l'on appelle "épingler"

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

Mais s'il existe d'autres programmes, vous pouvez spécifier le référentiel à utiliser avec l'épinglage.

Voir l' épinglage du wiki Ubuntu

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

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

Depuis la page wiki:

Pour rendre la mise à niveau apt-get aussi indolore que possible, définissez une priorité de broche plus faible sur le PPA, cela empêchera les versions de packages indésirables de s'installer. Une fois définis, les packages du PPA ubuntu-mozilla-daily perdront toujours dans n'importe quel concours avec les packages d'autres référentiels, 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
Panthère
la source
7

Tout d'abord, si vous avez déjà mis à niveau des packages à partir d'un PPA par erreur, consultez cette réponse: /ubuntu//a/142808/103117 en particulier la section sur l'utilisation de ppa-purge. Étant donné que j'avais déjà mis à niveau les packages et apt-get ne rétrogradera pas quelles que soient les priorités, il est plus facile de purger tous les packages mis à niveau en premier, puis de fixer les priorités, puis de rajouter le PPA et de ne mettre à niveau que les packages que vous souhaitez.

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

Si un package est disponible à partir de plusieurs sources, chacune 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 "package 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 prioritaire 500, selon la page de manuel, celle qui a le numéro de version le plus élevé est choisie.

Si, par exemple, vous souhaitez installer uniquement ddclient ("package X"), mais pas tout autre package, vous souhaitez réduire la priorité de tous les packages du PPA, à l'exception de 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 de fichier (il ne doit contenir que des caractères alphanumériques, des hypens, des tirets et ne doit pas avoir d'extension ou se terminer par .pref).

Nous devons d'abord savoir comment identifier notre AAE. La apt-cache policycommande à elle seule diffuse des informations sur toutes les sources. Je sais que mon PPA a "nathan" dans le nom, donc je 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 définit tout dans le PPA à la priorité 400, puis remet ddclient à la valeur par défaut 500. 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

Donc, ddclient a une priorité de 500, ce qui est le même que le paquet Ubuntu d'origine, mais il sera installé à partir du PPA nathan car celui-ci est une version supérieure. Maintenant, assurons-nous que les autres packages 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 package du PPA nathan a la priorité 400 qui est inférieure à celle d'Ubuntu, donc même s'il s'agit d'une version supérieure, il ne sera pas mis à niveau. 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]?

Étant donné que seul le package que je souhaite doit être mis à niveau, je suis heureux de dire oui.

Rob Fisher
la source