web-dev-qa-db-fra.com

Comment empêcher la mise à jour d'un paquet spécifique?

En raison de bug # 693758 , je voudrais empêcher apt-get upgrade et Update Manager de mettre à jour le paquet "libgtk2.0-0".

Comment cela peut il etre accompli?

363
Ivan

En portant

Il y a quatre façons de retenir des paquets: avec dpkg, apt, aptitude ou dselect.

dpkg

Mettre un colis en attente:

echo "<package-name> hold" | Sudo dpkg --set-selections

Enlevez la cale:

echo "<package-name> install" | Sudo dpkg --set-selections

Affichez le statut de vos colis:

dpkg --get-selections

Afficher le statut d'un seul paquet:

dpkg --get-selections | grep "<package-name>"

apte

Tenir un colis:

Sudo apt-mark hold <package-name>

Enlevez la cale:

Sudo apt-mark unhold <package-name>

désélectionner

Avec dselect, entrez dans l’écran [S] elect, trouvez le paquet que vous souhaitez conserver dans son état actuel et appuyez sur = ou H. Les modifications prendront effet immédiatement après la sortie de l'écran [S] select.


Les approches suivantes sont limitées en ce que verrouiller/conserver un paquet dans aptitude ou synaptic n'affecte pas apt-get/apt.

aptitude

Tenir un colis:

Sudo aptitude hold <package-name>

Enlevez la cale:

Sudo aptitude unhold <package-name>

Verrouillage avec le gestionnaire de paquets Synaptic

Allez dans Gestionnaire de paquets Synaptic (Système> Administration> Gestionnaire de paquets Synaptic).

Cliquez sur le bouton de recherche et tapez le nom du paquet.

Lorsque vous trouvez le package, sélectionnez-le et accédez au menu Package et sélectionnez Version verrouillée.

Synaptic menu

Ce paquet n'apparaîtra plus dans le gestionnaire de mise à jour et ne sera pas mis à jour.

542
hhlp

Pour mettre un paquet "foo" en attente:

echo "foo hold" | dpkg --set-selections

Dans votre cas, nous allons mettre le vin en attente:

Sudo -i
echo "wine hold" | dpkg --set-selections

Pour enlever la cale:

Sudo -i
echo "wine install" | dpkg --set-selections
43
Panther

Je recherchais la même chose et, après de nombreuses recherches, j'ai constaté qu'en utilisant la syntaxe suivante, vous pouvez interdire une version en particulier mais autoriser la prochaine mise à jour:

 Paquetage: compiz-plugins-main 
 Pin: version 1: 0.9.7.0 ~ bzr19-0ubuntu10.1 
 Priorité de la broche: -1 

Cela va dans le fichier/etc/apt/preferences.

33
soger

Installez synaptic en utilisant Sudo apt-get install synaptic.

Exécutez-le à l'aide de gksudo synaptic et dans le champ de recherche, localisez le package que vous souhaitez verrouiller, c'est-à-dire: gedit

enter image description here

Dans le menu du paquet, sélectionnez Version verrouillée:

enter image description here

Et c'est tout, la version actuellement installée au moment du verrouillage restera installée même pendant les mises à niveau.

19
Bruno Pereira

Empêcher l’installation d’un paquet est appelé "maintien du paquet" et il est très simple à faire:

écho nom du paquet tenir | dpkg --set-selections 

... où * nom_package * est le nom du paquet que vous souhaitez empêcher l'installation.

Note: la commande ci-dessus suppose les privilèges root. En d'autres termes, vous devrez probablement taper Sudo su avant de l'exécuter.

16
RobotHumans

Depuis quelque temps, apt-get est remplacé par apt. Par exemple, je souhaite empêcher la mise à jour de Firefox vers la version supérieure à 56, car de nombreux add-ons, tels que "Onglets" ne fonctionnent plus. avec le nouveau Firefox 57 (voir "Mise à jour WebExtensions").

Il est possible de contenir plusieurs packages avec une commande et d'utiliser des caractères génériques.

Empêcher Firefox de se mettre à jour

Sudo apt-mark hold firefox firefox-locale-*

Si vous désiriez les récupérer plus tard, ce serait la commande:

Sudo apt-mark unhold firefox firefox-locale-*
5
rubo77

Je vous synaptic vous pouvez geler la version d'un paquet spécifique, je ne suis pas sûr à 100% de savoir si cela modifiera apt-get mais cela arrêtera définitivement le gestionnaire de mise à jour.

Pour geler un paquet, sélectionnez-le dans Synaptic, puis ouvrez le menu du paquet et sélectionnez Geler la version.

J'espère que cela t'aides

edit: This question 16668 traite une situation similaire

4
Allan

Voir les bogues # 75332 , # 158981 et # 72806 .

Le résumé est que le maintien au niveau d'apt-get/aptitude ne déclenche pas le statut de maintien dans dpkg (voir le bogue 72806 en particulier) et que le statut de mise à jour-manager est lu par dpkg.

la solution de contournement est exécutée en tant que root: echo "package hold" | dpkg --set-selections

3
jasper

Tout ce que vous avez toujours voulu savoir sur "conserver" et "épingler" des packages dans des versions spécifiques: https://help.ubuntu.com/community/PinningHowto

3
Jeff Ferland

Vous pouvez utiliser sur aptitude le "remplacement spécifique", comme ceci:

aptitude reinstall ~i Oracle-Java8-jre:

Ceci est une utilisation unique (non stockée pour les réinstallations futures), conservez un remplacement spécifique, pour réinstaller tous les packages de votre système, mais pas Oracle-Java8-jre.

Si vous utilisez un remplacement spécifique à Keep, le paquet sera momentanément dans un état de garder une aptitude n'essaiera pas de l'installer.

Une très bonne chose si vous pensez que votre système a été compromis.

2
cabonamigo

Si vous avez installé Synaptic, vous pouvez sélectionner le package et utiliser le menu Package -> Verrouiller la version pour empêcher sa mise à jour.

Vous pouvez installer Synaptic avec Sudo apt-get install synaptic. Personnellement, je le trouve plus utile que le Centre logiciel ... là encore, je suis assez vieux. :)

1
dinchamion

De temps en temps, on peut vouloir retenir tous les paquets actuellement installés. Voici comment.

Commencez par enregistrer l’état actuel pour pouvoir annuler:

dpkg --get-selections > current_selections.txt

Ensuite, pour retenir tous les paquets:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

Enfin, lorsque vous souhaitez revenir à l'état précédent:

dpkg --set-selections < current_selections.txt

Un cas d'utilisation pour cela pourrait être lors de la création d'un instantané VM ou Amazon AMI pour migrer d'un QA vers un environnement de production.

0
JVW

Ajout de détails aux commentaires de @ soger relatifs à Ubuntu 16.04.

Ubuntu 16.04 n'a pas de fichier/etc/apt/preferences existant par défaut. Si vous n'en avez pas actuellement, créez simplement un nouveau fichier et complétez-le avec une strophe telle que décrite par @soger pour exclure le package donné et ses dépendances des mises à jour.

Ensuite, lancez apt update et vous êtes GTG. : 0)

Par exemple, je dispose d’un serveur Ubuntu 16.04.5 LTS avec une carte vidéo Intel intégrée et d’une carte NVidia. La carte NVidia est la seule utilisée. Le serveur utilise également des pilotes CUDA. J'ai eu un problème où apt a continué à insister

va-driver-all

(Pilotes Intel) nécessitait une mise à jour, mais il n’était pas possible de déterminer quelle version installer. Cela me rendait fou et je n’avais de toute façon pas besoin des pilotes Intel. J'ai saisi ce texte dans le fichier de préférences et vidé le fichier, le problème a été résolu.

Package: va-driver-all
Pin: release *
Pin-Priority: -1
0
MrPotatoHead