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

34

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

    
posée Ton van den Heuvel 21.02.2011 - 09:55
la source

6 réponses

26

Utiliser l'épinglage

  

Pinning est un processus qui vous permet de rester sur une version stable de   Ubuntu (ou tout autre système debian) en saisissant des paquets depuis un   version plus récente. - help.ubuntu.com

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

Pour désactiver les mises à jour automatiques du référentiel repo , 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 dépôt une priorité inférieure à celle des paquets déjà installés (qui ont 100).

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

    
réponse donnée kynan 15.07.2012 - 20:55
la source
34

Vous pouvez spécifier une version avec l’option -t . À 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 package iceweasel dans le dépôt officiel Debian. Si je veux installer Iceweasel à partir de cette version spécifique, je cours:

apt-get install -t squeeze-backports iceweasel

de 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 mentionné dans le commentaire, " -t spécifie le nom de la version et non du référentiel. Il n’ya pas de nom de dépôt dans Ubuntu (contrairement à Linux basé sur RedHat) , CentOS, ...) ".

    
réponse donnée cartoonist 19.08.2011 - 03:19
la source
8

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 & lt; = P & lt; 500
  provoque l'installation d'une version, sauf s'il existe une version disponible appartenant à une autre distribution ou si la version installée est plus récente

Et pour sélectionner un dépôt pour l’épinglage, vous devez utiliser les champs du fichier Release du référentiel. Tels que archive , label , release , version etc. 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.

Réponse longue

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

  1. Champs des fichiers Release et mappage vers apt-cache policy output

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

  3. Utilisation des champs Release files pour définir la priorité

1. Champs de Release file et apt-cache policy output

De l'article Wiki Debian

  • Description
  • Label
  • Origine
  • Version
  • Suite
  • Nom de code
  • Composants
  • Architectures

Vous verriez la sortie de apt-cache policy comme celle-ci

 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 de ces lignes proviennent des fichiers Release .

  • Description définit la description d’un référentiel. Ceci n'est pas affiché dans apt-cache policy output

  • Libellé 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.

  • Origin indique l'origine du référentiel. Le dépôt officiel d'Ubuntu a pour valeur Ubuntu . Illustré comme o= dans la sortie

  • Version est la version d’une distribution. C'est 16.04 pour Xenial. Illustré comme v= dans la sortie

  • Suite est identique à Archive . De debian wiki c'est Le nom de la distribution de Debian que les paquets de ce répertoire appartiennent (ou sont conçus pour), c'est-à-dire stable, test ou instable. . 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 n'utilisent que le nom de la version pour cela, c'est pourquoi cela ne sera pas très utile dans Pinning.

  • Composant raconte l’objet de la licence. C'est main , multiverse , restricted , universe dans Ubuntu. Dans la sortie, il est affiché comme c=main ou c=restricted etc. La plupart des PPA utilisent main pour ce champ, ce qui ne permet pas non plus de les épingler beaucoup.

  • L’architecture concerne l’architecture du système d’exploitation. Illustré comme b=i386 ou b=amd64 dans la sortie

  • Nom de code correspond au nom de la distribution. Pour 16.04, il s'agit de xenial . Pour 14.04, il s'agit de trusty . Montré en apt-cache policy de sortie sous la forme n=xenial ou n=trusty . Il en va de même pour tous les référentiels d’une distribution unique. C'est pourquoi cela n'aide pas beaucoup à épingler.

L'autre ligne de la sortie apt-cache policy commençant par origin indique l'origine Internet du référentiel. Il peut également être utilisé pour épingler. Mais ne doit pas être mélangé avec le champ Release files Origin . Ce sont différents.

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

Comment pouvons-nous utiliser le pinning 1 pour restreindre le dépôt?

Il existe plusieurs manières de contrôler l’épinglage et seul un petit sous-ensemble est efficace pour Ubuntu. Une explication des détails dépasse toutefois le cadre de la réponse. Veuillez vous reporter à apt_preference man-page pour cela.

2. Format de fichier Pin

Les fichiers de préférences 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 un nom de paquet séparé par une virgule suit. Les expressions régulières et les globes sont autorisés

  • La deuxième ligne commence par Pin: et est utilisée pour cibler un ensemble de packages.

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

    Si nous voulons épingler la version 5.0, nous utiliserons version 5.0 ici. Les patrons Glob sont autorisés.

    Ou si nous voulons épingler des paquets d’origine 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 Release files pour définir la priorité

Voici un exemple

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

Dans cet exemple, les packages issus des archives xenial reçoivent une priorité plus élevée que xenial-updates et xenial-security .

Après avoir épinglé, l'exécution d'un apt-cache policy nautilus montre qu'il a effectivement donné une priorité plus élevée à une version inférieure de xenial archive sur une archive de version supérieure 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 donner la priorité aux paquets fournis par PPA également, cela ne fonctionnera pas. Parce que les PPA utilisent le même nom d'archive xenial par défaut. Ainsi, affecter une priorité à a=xenial s'appliquera également à ces packages. Par exemple (après PPA activé),

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 xenial archive du dépôt officiel Ubuntu et le PPA ont la même priorité 1001 , car tous deux utilisent la même valeur pour Archive dans 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 paquets depuis 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 ne nous aidera pas à identifier un référentiel. Nous devons utiliser plusieurs champs ensemble en utilisant des virgules dans un fichier de préférences pour cibler avec précision un référentiel.

Par exemple, pour empêcher tous les packages 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

Ici, nous utilisons la valeur de nom de code ainsi que la valeur Origin de la PPA. (Bien que la valeur du nom de code ne soit pas requise ici en fait). Parfois, le référentiel peut manquer ces valeurs. Dans ces cas, d'autres techniques devraient être utilisées. Le résultat de apt-cache policy libgl1-mesa-glx indique que cela fonctionne. Il a réduit la priorité de tous les packages 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

Ignorez le fait que c'est un candidat. Cela s'est produit, car il est déjà installé sur mon système . Vérifiez la priorité à droite

Épingler un référentiel en l’absence d’informations de version

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

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

Remarque 1: Cette origine est l’origine Internet, et non celle qui spécifie le fournisseur dans le fichier Release.

Remarque 2: Pin-Priority number a une signification particulière. Consultez la page de manuel apt_preference pour plus de détails.

    
réponse donnée Anwar 21.08.2016 - 13:43
la source
7

Une alternative basée sur l'interface graphique serait d'ouvrir le centre du logiciel et de sélectionner edit & gt; sources de logiciels ...

tout ce que vous avez à faire est de décocher les référentiels dont vous ne souhaitez pas les mises à jour.

J'espère que ça aide

    
réponse donnée Allan 21.02.2011 - 11:35
la source
5

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

Puis supprimez les commentaires de sources.list . Peut-être pas le meilleur moyen, mais au moins les pages apt-get man ne spécifient aucun moyen 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 ne fait pas que lancer une option pour les exclure temporairement).

    
réponse donnée Olli 21.02.2011 - 10:01
la source
1

Une autre option consiste à choisir l’origine dans le gestionnaire de paquets Synaptic.

  1. Recherchez le nom du package que vous souhaitez installer
  2. Cliquez sur le bouton Origine
  3. Choisissez le référentiel que vous souhaitez installer
  4. Choisissez les packages
  5. Appliquer
réponse donnée woot 29.06.2017 - 19:59
la source

Lire d'autres questions sur les étiquettes