491 votes

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

À cause du bug n° 693758, je voudrais empêcher apt-get upgrade et le Gestionnaire de mises à jour de mettre à jour le paquet "libgtk2.0-0".

Comment cela peut-il être réalisé?

0 votes

@hhlp: Mais cette question concerne un paquet qui n'a jamais été installé.

1 votes

@George Edison - Il existe également un maintien de paquet, qui vous permet de ne pas mettre à jour le paquet. Ainsi, maintenir un paquet signifie essentiellement dire au gestionnaire de paquets de conserver la version actuelle quoi qu'il arrive. C'est utile si une version plus récente d'un programme fonctionnant actuellement cesse de fonctionner après une mise à jour. (vous ne pouvez pas maintenir un paquet qui n'a jamais été installé, voir aussi ma question est la même)... j'ai testé cela juste maintenant - voyez ce qu'il a dit désactiver les mises à jour automatiques des paquets

0 votes

Puisque cette question a été posée avant notre passage de apt-get à apt, il convient de noter que apt-mark hold nomdupaquet est toujours la solution standard pour cela. Essayer apt hold se plaindra simplement avec E: Opération invalide hold

744voto

NotMe Points 3732

Retenir

Il existe différentes manières de retenir des paquets : avec dpkg, apt, dselect, aptitude ou Synaptic.

dpkg

Metre un paquet en attente :

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

Supprimer l'attente :

echo " install" | sudo dpkg --set-selections

Afficher l'état de tous vos paquets :

dpkg --get-selections

Afficher l'état d'un seul paquet :

dpkg --get-selections 

Afficher tous les paquets en attente :

dpkg --get-selections | grep "\

`

apt

Retenir un paquet :

sudo apt-mark hold 

Supprimer l'attente :

sudo apt-mark unhold 

Afficher tous les paquets en attente :

sudo apt-mark showhold

dselect

Avec dselect, allez à l'écran de sélection, trouvez le paquet que vous souhaitez maintenir dans son état actuel et appuyez sur = ou H. Les changements prendront effet immédiatement après la sortie de l'écran de sélection.


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

aptitude

Retenir un paquet :

sudo aptitude hold 

Supprimer l'attente :

sudo aptitude unhold 

Verrouillage avec 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 paquet, sélectionnez-le et allez dans le menu Paquet et sélectionnez Verrouiller la version.

Menu Synaptic

Ce paquet ne s'affichera désormais pas dans le gestionnaire de mises à jour et ne sera pas mis à jour.

`

5 votes

Cela fonctionne également pour empêcher l'installation d'un paquet. Lors de l'installation devscripts, de nombreux paquets sont tirés en tant que paquets recommandés. Comme je n'ai pas besoin d'un serveur de messagerie (postfix), je pourrais désactiver son installation en exécutant echo postfix hold | sudo dpkg --set-selections avant d'exécuter sudo apt-get install devscripts. Cette action de maintien persiste uniquement pour cette installation, après l'installation les sélections sont réinitialisées.

7 votes

Il convient également de souligner que les maintiens de paquets peuvent parfois perturber les mises à niveau et les correctifs en créant une situation où il n'y a pas de solution légale que apt puisse calculer pour une dépendance. Si le paquet foo a une dépendance == < or <= sur libbar, alors apt refusera de mettre à jour libbar ainsi que foo. Avec le temps, ces dépendances en cascade peuvent bloquer un grand nombre de mises à jour, y compris des mises à jour de sécurité importantes. Vous devrez soit supprimer le maintien et laisser la mise à niveau se faire, soit reconstruire les paquets que vous retenez contre de nouvelles versions de leurs dépendances si cela se produit.

2 votes

Juste une note: apt-mark ne prend pas en charge hold dans la version 0.7.25 (Ubuntu Lucid)

48voto

soger Points 661

J'étais à la recherche de la même chose et après beaucoup de recherche j'ai trouvé qu'en utilisant la syntaxe suivante vous pouvez interdire une version spécifique mais permettre la prochaine mise à jour:

Forfait: compiz-plugins-main
Épingle: version 1:0.9.7.0~bzr19-0ubuntu10.1
Priorité d'épingle: -1

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

13 votes

Il s'agit d'une bien meilleure façon que de prévenir les mises à jour indéfiniment

0 votes

Avec cette méthode, je pense que les chances sont plus grandes de prévenir les "logiciels publicitaires" d'Ubuntu tels qu'Ubuntu One ou l'icône Amazon d'être réinstallés lors de la prochaine mise à niveau de la version.

0 votes

Cette méthode empêche également Aptitude de signaler qu'un paquet est "améliorable" (en supposant qu'une version plus ancienne soit utilisée que celle disponible dans le dépôt)

44voto

Panther Points 96601

Pour mettre un paquet "foo" en attente :

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

Dans votre cas, nous allons mettre wine en attente :

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

Pour supprimer la mise en attente :

sudo -i
echo "wine install" | dpkg --set-selections

2 votes

Notez également que tant qu'un paquet est en attente, vous pouvez installer une version spécifique via apt-get install wine=1.2.3. Être en attente empêche apt-get (dist-)upgrade de le modifier.

0 votes

@rcoup Si vous avez une ancienne version en attente, et que vous mettez manuellement à jour vers une nouvelle version sans enlever la mise en attente comme vous le décrivez, l'ancienne version sera-t-elle conservée en cache pour que vous puissiez y revenir ?

3 votes

@cxrodgers le cache local (généralement /var/cache/apt/archives) est indépendant des maintiens et mises à niveau, donc toutes les versions que vous avez téléchargées y resteront jusqu'à ce que vous exécutiez apt-get [auto]clean

23voto

Bruno Pereira Points 70510

Installer synaptic en utilisant sudo apt-get install synaptic.

Exécutez en utilisant gksudo synaptic et dans la zone de recherche, localisez le package que vous souhaitez verrouiller, par exemple: gedit

entrer la description de l'image ici

Dans le menu du package, sélectionnez Verrouiller la version:

entrer la description de l'image ici

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

11 votes

Veuillez consulter "La version verrouillée n'est pas aussi intelligente qu'elle en a l'air. Elle est censée faire ce qu'elle promet, à savoir verrouiller la version... Mais elle ne le fait que dans Synaptic. Tout ce qui effectue des mises à jour de paquets (à savoir : Gestionnaire de mises à jour, apt-get, aptitude, etc.) ignore cela. Il s'agit probablement d'un comportement bogué, donc je m'attends à ce que cela soit corrigé avec le temps." depuis askubuntu.com/questions/9607/what-does-lock-version-do. Quel est l'état actuel ? Si quelque chose est verrouillé dans Synaptic, est-ce que les autres gestionnaires de paquets vont "honorer" le verrouillage ?

2 votes

Vasa1 : À partir de la version 0.75.13, toujours pas :( Même problème avec aptitude.

0 votes

A partir de 0.84.3 (janv. '21), il ne utilise toujours pas apt-mark.

16voto

RobotHumans Points 27764

Empêcher l'installation d'un paquet s'appelle le "holding de paquet" et c'est très simple à faire :

echo _nom\_du\_paquet_ hold | dpkg --set-sélections

...où *nom_du_paquet* est le nom du paquet que vous voulez empêcher d'installer.

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

0 votes

Parfait ça était la réponse. Merci.

0 votes

s/sudo su/sudo -s/g (ou sudo -i). (-i donnera un shell de connexion, -s ne le fera pas).

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