web-dev-qa-db-fra.com

Comment installer uniquement les mises à jour à partir d'un référentiel spécifique?

Comment limiter les mises à jour installées à celles d'un ensemble spécifique de référentiels? Est-ce possible?

39
Ton van den Heuvel

Utilisez Pinning

L’épinglage est un processus qui vous permet de rester sur une version stable d’Ubuntu (ou de tout autre système Debian) tout en récupérant des paquets d’une version plus récente. - help.ubuntu.com

Vous pouvez désactiver les mises à jour automatiques à partir de certains référentiels sans les supprimer entièrement via les règles aptname__:

Pour désactiver les mises à jour automatiques du référentiel reponame__, ajoutez un fichier.
/etc/apt/preferences.d/repo avec le contenu suivant:

Package: *
Pin: release n=repo
Pin-Priority: 50

Ce qui donnera à tous les paquets de ce référentiel une priorité inférieure à celle des paquets déjà installés (qui en ont 100).

Pour plus d'informations man apt_preferences ou consultez le Wiki de la communauté Ubunt .

29
kynan

Vous pouvez spécifier une version avec l'option -t. A titre d'exemple, j'ai ajouté le référentiel suivant à /etc/apt/sources.list pour installer la dernière version d'Iceweasel:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Comme vous le savez, il existe un même paquet iceweaseldans le référentiel officiel Debian. Si je veux installer Iceweasel à partir de cette version spécifique, je lance:

apt-get install -t squeeze-backports iceweasel

depuis la page de manuel d'apt-get:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

Je pense que c'est une meilleure solution.

UPDATE: Comme @SuB l'a mentionné dans le commentaire, "-t spécifie la version et non le nom du référentiel. Il n'y a pas de nom de référentiel dans Ubuntu (contrairement à Linux basé sur RedHat tel que RHEL, Fedora, CentOS, ...) ".

35
cartoonist

Réponse courte

Vous devez épingler les référentiels que vous ne souhaitez pas installer avec une priorité inférieure à 100. Ce qui signifie (à partir de la page de manuel apt_preference)

100 <= P <500
provoque l'installation d'une version sauf si une version appartenant à une autre distribution est disponible ou si la version installée est plus récente.

Et pour sélectionner un référentiel à épingler, vous utiliseriez les champs du fichier Releasedu référentiel. Tels que archivename__, labelname__, releasename__, versionetc. En spécifiant les valeurs de ces champs, vous pouvez sélectionner avec précision un référentiel et lui attribuer votre priorité préférée. Consultez la page apt_preference pour plus de détails.


Longue réponse

Avant de continuer, nous devons savoir quelque chose d’important à propos de l’épinglage. Ces comprend

  1. Champs de fichiers Releaseet sa correspondance avec la sortie apt-cache policy

  2. Format des fichiers de préférences apt

  3. Utilisation des champs de fichiers Releasepour définir la priorité

1. Champs du fichier Releaseet de la sortie apt-cache policy

De Debian Wiki article

  • La description
  • Label
  • Origine
  • Version
  • Suite
  • Nom de code
  • Composants
  • Des architectures

Vous verrez la sortie de apt-cache policy comme ceci

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main AMD64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=AMD64

Les valeurs dans ces lignes proviennent de fichiers Releasename__.

  • Description définit la description d'un référentiel. Ceci n'est pas indiqué dans la sortie de apt-cache policy

  • Label c'est l'étiquette du référentiel. De nombreux référentiels ont des étiquettes vides. Il est affiché dans l=<label> dans la sortie.

  • Origine Ceci indique l'origine du référentiel. Le référentiel officiel Ubuntu a pour valeur Ubuntuname__. Montré comme o= dans la sortie

  • Version est la version d'une distribution. Il est 16.04 pour Xenial. Montré comme v= dans la sortie

  • Suite est identique à Archive. Depuis le wiki debian, il est . Le nom de la distribution de Debian à laquelle les paquets contenus dans ce répertoire appartiennent (ou sont conçus pour), c’est-à-dire stables, en test ou instables. . Pour Ubuntu, il s'agit de release-updates, release-security etc. Par exemple, xenial-updates, xenial-security. Il est affiché dans la sortie sous la forme a=xenial, a=xenial-security. Les PPA utilisent simplement le nom de la version pour cela, c'est pourquoi cela n'aidera pas beaucoup Pinning.

  • Composant ​​parle de la licence. C'est mainname__, multiversename__, restrictedname__, universedans Ubuntu. Dans la sortie, il est affiché c=main ou c=restricted etc. La plupart des PPA utilisent mainpour ce champ, ainsi cela n'aide pas beaucoup à épingler.

  • Architecture concerne l'architecture du système d'exploitation. Indiqué par b=i386 ou b=AMD64 dans la sortie

  • Nom de code est le nom de version de la distribution. Pour 16.04, il s'agit de xenialname__. Pour 14.04, il s'agit de trustyname__. Montré dans apt-cache policy sous la forme n=xenial ou n=trusty. Il en va généralement de même pour tous les référentiels d'une seule distribution. C'est pourquoi cela n'aide pas beaucoup.

L’autre ligne de la sortie apt-cache policy qui commence par Originindique l’origine Internet du référentiel. Il peut également être utilisé pour épingler. Mais ne doit pas être mélangé avec Releasefiles Originfield. Ce sont différents.

Nous utiliserons ces valeurs pour épingler un référentiel.

Alors, comment utilisons-nous l'épinglage1 restreindre le référentiel?

Il existe plusieurs façons de contrôler l’épinglage et seul un petit sous-ensemble est efficace pour Ubuntu. Une explication détaillée dépasse toutefois le cadre de la réponse. Veuillez vous référer à apt_preference man-page pour cela.

2. Format de fichier Pin

Les fichiers de préférence pin ou apt résident dans le dossier /etc/apt/preferences.d. Chaque épinglage contient trois lignes.

  • La première ligne commence par Package: et suivent les noms de paquetages séparés par des virgules. Les expressions régulières et les globs sont autorisés

  • La deuxième ligne commence par Pin: et sert à cibler un ensemble de packages.

    Si nous voulons épingler des paquets de xenialsupérieurs à xenial-updates, nous utiliserons release a=xenial.

    Si nous voulons épingler la version 5.0, nous utiliserons version 5.0 ici. Les modèles globaux sont autorisés.

    Ou si nous voulons épingler des paquets à partir de http://archive.ubuntu.com, nous utiliserons Origin "archive.ubuntu.com". Notez que nous n'écrivons pas le protocole http:// ici.

  • La troisième ligne commence par Pin-Priority: et sa valeur est un nombre. Ce qui signifie la priorité des éléments ciblés ci-dessus.

3. Utilisation des champs de fichiers Releasepour définir la priorité

Voici un exemple

Package: *
Pin: release a=xenial
Pin-Priority: 1001

Dans cet exemple, les packages des archives xenialont une priorité supérieure à xenial-updates et xenial-security.

Après avoir épinglé, exécuter un apt-cache policy nautilus montre qu’elle a effectivement donné une priorité plus élevée à une version inférieure de l’archive xenialpar rapport à une archive de version supérieure à partir de xenial-updates. Notez la ligne Candidate:.

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main AMD64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main AMD64 Packages

Mais, si nous voulons également accorder la priorité aux packages fournis par PPA, cela ne fonctionnera pas. Parce que les PPA utilisent le même nom d'archive xenialpar défaut. Ainsi, l'attribution d'une priorité à a=xenial s'appliquera également à ces packages. Par exemple (après avoir activé le PPA),

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main AMD64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main AMD64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main AMD64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main AMD64 Packages

Maintenant, la version candidate provient d'un PPA. Les deux paquets de l'archive xenialdu référentiel officiel Ubuntu et du PPA ont la même priorité 1001, car ils utilisent la même valeur pour Archivedans le fichier Release. Pour réussir à épingler, nous devons combiner plus de champs dans le fichier Pin.


Quelques exemples

Épingler un référentiel PPA

Pour épingler des packages à partir d'un référentiel, nous devons le cibler en utilisant les informations trouvées dans la commande apt-cache policy. Nous venons de voir que a=xenial n'aidera pas à repérer un référentiel. Nous devons utiliser plusieurs champs ensemble en utilisant une virgule dans un fichier de préférences pour cibler précisément un référentiel.

Par exemple, pour empêcher tous les paquets de http://ppa.launchpad.net/oibaf/graphics-drivers/ ppa, nous pouvons utiliser

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

Nous utilisons ici la valeur du nom de code ainsi que la valeur Origindu PPA. (Bien que la valeur du nom de code ne soit pas requise ici en fait). Parfois, le référentiel peut manquer cette valeur. Dans ces cas, d'autres techniques devraient être utilisées. La sortie de apt-cache policy libgl1-mesa-glx indique que cela fonctionne. Cela a réduit la priorité de tous les paquets de ce PPA.

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~Gd~x
  Candidate: 12.1~git1608200730.16ef7a~Gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~Gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main AMD64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main AMD64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main AMD64 Packages

Ignore le fait qu'il s'agisse d'un candidat. Ceci est arrivé, car il est déjà installé sur mon système . Vérifier la priorité à droite

Épingler un référentiel lorsque des informations de version sont manquantes

Si nous voulons épingler un référentiel dont les informations de version sont manquantes, comme celui-ci http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04, nous devons utiliser une autre méthode. Comme aucun autre référentiel n'utilise cette origine, nous pouvons utiliser en toute sécurité Originpour épingler ce référentiel.

Package: *
Pin: Origin download.opensuse.org
Pin-Priority: 10

Note 1: Cette origine est l’origine Internet, pas celle qui spécifie le fournisseur dans le fichier de version.

Note 2:Pin-Priority numéro a une signification particulière. Vérifiez page de manuel apt_preference pour plus de détails.

11
Anwar

Une alternative basée sur l'interface graphique consisterait à ouvrir un centre logiciel et à sélectionner éditer> sources logicielles ...

Software Sources with Ubuntu software tab selected

Software Sources with other software tab selected

il vous suffit de décocher les référentiels pour lesquels vous ne voulez pas de mises à jour.

J'espère que cela t'aides

7
Allan

Le choix évident consiste à modifier /etc/apt/sources.list et à mettre en commentaire tous les autres référentiels, puis à exécuter

apt-get update && apt-get upgrade && apt-get autoclean

Et puis supprimez les commentaires de sources.list. Peut-être pas la meilleure façon, mais au moins apt-get pages de manuel ne spécifient aucune façon de le faire.

Sur une note connexe, par exemple, le processus de mise à niveau de la distribution Ubuntu désactive tous les référentiels tiers lors de la mise à niveau (et n’exécutez pas seulement une option pour les exclure temporairement).

5
Olli

Une autre option de l'interface graphique consiste à choisir simplement le gestionnaire de paquets Origin dans Synaptic.

  1. Recherchez le nom du paquet que vous souhaitez installer
  2. Cliquez sur le bouton Origine
  3. Choisissez le référentiel que vous souhaitez installer
  4. Choisissez les forfaits
  5. Appliquer
1
woot