“Les paquets suivants ont été conservés:” Pourquoi et comment puis-je le résoudre?

878

Je viens d'ajouter un référentiel PPA pour la version de développement de GIMP, mais j'obtiens cette erreur:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Pourquoi et comment puis-je le résoudre pour pouvoir utiliser la dernière version au lieu de la version actuelle?

jfoucher
la source
17
Strictement parlant, je dirais que c'est un avertissement, pas une erreur.
Kazark

Réponses:

907

Selon un article sur debian-administration.org ,

Si les dépendances ont changé sur l'un des packages que vous avez installés de sorte qu'un nouveau package doit être installé pour effectuer la mise à niveau, il sera alors répertorié comme "gardé en arrière".

Solution prudente 1:

Selon la réponse de Pablo , vous pouvez exécuter sudo apt-get --with-new-pkgs upgradeet installer les packages conservés.

Cela présente l'avantage de ne pas marquer les paquets conservés comme "installés manuellement", ce qui pourrait forcer davantage les utilisateurs à intervenir plus tard (voir les commentaires).

Si la solution de Pablo fonctionne pour vous, faites-la passer au vote supérieur. Si non, veuillez commenter ce qui a mal tourné.

Solution prudente 2:

La solution prudente est de courir sudo apt-get install <list of packages kept back>. Dans la plupart des cas, cela donnera aux paquets conservés ce dont ils ont besoin pour réussir leur mise à niveau.

Solution agressive:

Une solution plus agressive consiste à exécuter sudo apt-get dist-upgrade, ce qui forcera l'installation de ces nouvelles dépendances.

Mais dist-upgrade peut être assez dangereux . Contrairement à la mise à niveau, il peut supprimer des packages pour résoudre des situations de dépendance complexes. Contrairement à vous, APT n’est pas toujours assez intelligent pour savoir si ces ajouts et suppressions pourraient faire des ravages.

Donc, si vous vous trouvez dans un endroit où la "solution prudente" ne fonctionne pas, dist-upgrade peut fonctionner ... mais vous feriez probablement mieux d'en apprendre un peu plus sur APT et de résoudre les problèmes de dépendance "à la main" en installant et en supprimant forfaits au cas par cas.

Pensez-y comme si vous répariez une voiture ... si vous avez le temps et que vous êtes maniable avec une clé, vous obtiendrez une tranquillité d'esprit en lisant et en réparant vous-même. Si vous vous sentez chanceux, vous pouvez déposer votre voiture avec votre cousine dist-upgradeet espérer qu'elle connaisse ses affaires.

Michael Crenshaw
la source
180
Comme il est un besoin de réponse acceptée, il a vraiment besoin de mise à jour pour avertir sur l' utilisation dist-upgraded'un système stable comme beaucoup d'autres réponses ci - dessous ont fait remarquer. Personnellement, je pense qu’il existe une solution plus simple et plus sûre qui mérite d’être promue: apt-get install <liste de pkgs>
Cas
7
Cas, devrais-je juste ajouter qu'il pourrait être dangereux d'exécuter une mise à niveau dist sur un système stable? Pourquoi est-ce si dangereux? (Honnêtement, je ne sais pas trop bien.)
Michael Crenshaw
17
Il existe une réponse Server Fault qui explique un peu plus en détail dist-upgrade. Je pense qu'il est juste de préciser (non dangereux en tant que tel) qu'il peut mettre à niveau l'ensemble du système, ce qui peut aller au-delà de ce que l'utilisateur attend / veut, c'est-à-dire qu'il se demande, dans l'exemple OP, pourquoi gimp est retenu.
Cas
19
S'il vous plaît noter que sudo apt-get dist-upgradepeut également supprimer des paquets. Par conséquent, il est préférable de toujours inspecter la liste des modifications qui seront apportées avant de les accepter, lors de l'exécution sudo apt-get dist-upgrade.
Eliah Kagan
6
@EliahKagan Puis-je ajouter que même apt-get upgradepeut supprimer des paquets? Cela se fera toujours quand il y aurait un conflit de version autrement. Pensez à llvm3.6vs llvm3.6v5(avec le "v5" signifiant qu'il a été compilé avec gcc 5). Ces deux ne peuvent pas coexister , seuls les deux peuvent être conservés dans le système. Donc oui, dist-upgradepeut supprimer certains paquets également, mais ce n’est pas seulement dist-upgradeque cela ferait cela; dans certaines circonstances, le upgradeserait également.
erreur de syntaxe
501

Chaque fois que vous recevez apt-get upgradele message de la commande

The following packages have been kept back:

puis mettre à jour un ou tous les paquets gardés en arrière, sans faire de mise à jour de distribution (c'est ce que dist-upgradefait, si je me souviens bien), est d'émettre la commande:

apt-get install <list of packages kept back>

cela résoudra les problèmes qui ont été conservés et demandera l'installation de paquets supplémentaires, etc. comme expliqué par d'autres réponses.

utilisateur88285
la source
3
Lorsque les paquets sont conservés de cette façon et que manuellement apt-get upgrade <list of packages>, si je refais apt-get upgrade, les paquets en question seront listés comme n'étant plus nécessaires et que je pourrai utiliser apt autoremovepour les supprimer, ce que je fais, puis un dernier apt-get upgradeet ils ne sont plus répertoriés comme retenu ... très bizarre. Des pensées?
cram2208
apt-get installSupprime- t-il également les packages lorsque cela est nécessaire pour résoudre les situations de dépendance gnarly, ou devrez-vous exécuter une apt-get removecommande distincte pour accomplir cette partie du processus de mise à niveau?
Michael Crenshaw
@ cram2208 Je crois que c'est le comportement attendu. Les packages "installés automatiquement et qui ne sont [...] plus nécessaires" sont les versions précédentes des packages mis à niveau, qui ne sont plus nécessaires. apt autoremovepuis supprime ces dépendances inutilisées.
Alex
3
Si la mise à niveau nécessite l'installation d'un nouveau package, celui-ci sera "conservé". sudo apt-get --with-new-pkgs upgrade
Envisagez d’
@ mac9416 oui c'est le cas.
jarno
174

apt-get dist-upgrade est dangereux pour un environnement stable,

  1. Mauvais réglage source.list et vous vous retrouvez avec ubuntu cassé.
  2. vous pouvez obtenir une application complète mise à niveau vers une version que vous ne voulez pas.

Cas d'utilisation: mise à niveau du noyau conservée, vous voulez simplement mettre à niveau le noyau, ne voulez pas mettre à niveau toute la distribution.

Meilleure façon de gérer les colis gardés:

sudo aptitude

Si vous avez conservé le paquet, vous devriez voir les paquets mis à niveau en haut de la liste.

  • Hit + sur cette liste
  • Hit g deux fois
  • Répondre à debconf si demandé
  • Appuyez sur Retour pour continuer
  • Appuyez sur Q
  • Presse oui

Votre paquet conservé est installé.

Michael Crenshaw
la source
34
apt-get dist-upgraden'est dangereux que si vous avez de mauvais référentiels dans /etc/apt/sources.list*. Il est bon de savoir que dist-upgrademet à jour tous les paquets, mais avec les référentiels par défaut, qui devrait être bien. Ne pas utiliser dist-upgradepourrait être dangereux, car vous risqueriez de manquer des mises à jour de sécurité.
Flimm
6
apt-get dist-upgradepeut supprimer ou ajouter des packages, mais ce n’est pas vraiment dangereux. Toute commande d'installation de paquet peut causer de sérieux dommages si vous rencontrez des problèmes dans votre sources.listfichier ! Une apt-get upgradecommande normale installera n'importe quel paquet de n'importe quelle source de logiciel activée. dist-upgraden'est pas unique de cette façon. De plus, utiliser aptitudepour exécuter une opération, du moins sur amd64, est beaucoup plus dangereux que de courir apt-get dist-upgrade, dans une version où le bogue 831768 n'est pas corrigé.
Eliah Kagan
Pour moi, il était plus facile (machine locale avec X en cours d'exécution) d'ouvrir simplement synaptic et de forcer la mise à niveau du paquet. Pour une raison quelconque, cela ne semble pas apparaître du tout où vous avez décrit Synaptic.
djvs
3
Aussisudo aptitude safe-upgrade
msanford
147

Pourquoi ne pas essayer cette réponse Unix SE :

sudo apt-get --with-new-pkgs upgrade

Cela permet d'installer de nouveaux packages. Il vous indiquera quels paquets seraient installés et vous indiquera comment procéder avant de procéder à l'installation.

aptcommande ( alternative amicale à apt-get) partager cette option.

Utiliser à la apt install <pkg>place marquera pkg comme "installé manuellement" !! Pour le marquer à nouveau comme "installé automatiquement", utilisez apt-mark auto <pkg>(voir aussi la sous-commande showmanual). Plus d'infos sur cette réponse .

Pablo A
la source
20
+1 car cela n'a pas pour effet secondaire de faire en sorte que les paquets soient marqués comme installés manuellement.
ctrl-alt-delor
1
Remarque à qui a déjà lu mon commentaire ci-dessus: ne pas avoir l’effet secondaire du marquage comme étant manuellement installé est une bonne chose. J'aime cette réponse.
ctrl-alt-delor
1
Oui. apt-mark auto <pkg>ne devrait être nécessaire que pour marquer un paquet comme étant installé automatiquement ( ici la page de manuel ).
Pablo Un
11
Pour une raison quelconque, sudo apt-get --with-new-pkgs upgradeaffiche toujours les paquets comme "conservés". Aucun message d'erreur.
Franklin Yu
2
Je veux juste ajouter que pour de nombreuses instances de serveur Debian 9.6 à jour, il s'agissait de la solution la plus sûre sans casser des choses. Merci, Pablo, car j’avais heureusement testé d’abord d’autres options sur les environnements de transfert, et pouvais administrer de nombreux serveurs jusqu’aux normes de sécurité grâce à l’inclusion --with-new-pkgs avec des résultats bien plus nets pour la gestion générale des paquets futurs. Vraiment, cette réponse UNIX SE devrait être votée!
Julius
34

Il y a normalement deux raisons pour lesquelles vous pouvez voir ce message.

Si la mise à niveau du programme (via sudo apt-get upgrade) entraîne l'ajout ou la suppression de packages, le programme est alors retenu. Vous pouvez utiliser sudo apt-get dist-upgradedans ce cas, qui proposera ensuite d'ajouter ou de supprimer les programmes supplémentaires.

Ceci est assez commun et généralement pas un problème. De temps en temps (en particulier lors d'une alpha d'Ubuntu), dist-upgradeil vous sera proposé de supprimer beaucoup d'autres programmes, auquel cas vous voudrez probablement l'annuler.

Si le programme dépend de packages ou de versions qui ne sont pas disponibles, le programme sera retenu. Vous ne pouvez vraiment rien faire d'autre que d'attendre dans ce cas, car le paquet est fondamentalement désinstallable. Cela peut se produire lorsque des packages sont ajoutés au référentiel dans le désordre, lorsqu'un package est renommé ou lorsqu'un package cesse de fournir un package virtuel.

cravate
la source
5
Existe-t-il un moyen de déterminer si le paquet en attente a besoin d'une dépendance qui ne peut pas être installée ou s'il est en attente, car d'autres paquets en dépendent? J'ai de nombreux packages en attente et je pense que ces deux cas peuvent s'appliquer sur mon système.
Jake
Merci, la deuxième raison était la question pour moi. Même apt-get dist-upgraderefusé de l'installer. L'inspection du paquet avec aptitude a montré que cela dépend d'un paquet qui n'est pas disponible. Je suppose que je devrai attendre.
Jlh
23

Vous pouvez aussi essayer:

sudo aptitude safe-upgrade.

C'est plus sûr que full-upgrade(nommé à l'origine dist-upgrade) car "les packages ne seront pas supprimés à moins qu'ils ne soient inutilisés".

De man aptitude:

mise à niveau sûre

Met à niveau les packages installés vers leur version la plus récente. Les packages installés ne seront supprimés que s'ils sont inutilisés /.../ Les packages qui ne sont pas actuellement installés peuvent être installés pour résoudre les dépendances, à moins que l'option de ligne de commande --no-new-installs soit fournie.

Afilu
la source
21

Très probablement, ces paquets sont conservés, car leur installation créerait des incohérences de dépendance. Cela peut se produire si vous utilisez des archives en cours de développement actif, ppas ou parce que le miroir que vous utilisez n'est pas complètement mis à jour.

Dans le dernier cas, attendez, lorsque les dépendances seront résolues, il sera installé la prochaine fois.

Modifier:

Il existe une autre possibilité: les paquets pourraient être retenus s’ils étaient suspendus ou épinglés.

txwikinger
la source
Sur quoi basez-vous cette probabilité, sans savoir quoi que ce soit, il a exécuté une mise à jour d'apt-get ou une apt-get dist-upgrade (ou l'équivalent d'aptitude)?
andol
C'est le problème le plus
fréquent
D'accord. Vous devriez probablement attendre et vérifier vos apt_preferences. Ceci est souvent causé par les archives de développement où les dépendances de paquets et disponibles changent très rapidement. Attendez qu'ils s'installent et vous n'en aurez peut-être pas besoin du dist-upgradetout. Si vous le souhaitez dist-upgrade, consultez les nouveaux packages à installer et les packages à supprimer avant de poursuivre.
Umang
C'est mon cas parce que je reçois le message "gardé en arrière" en utilisant dist-upgrade
Postadelmaga
Dans les cas où ce problème est dû à une messup avec des préférences apt (épinglage), j'ai trouvé des paquets de réinstallation gardés m'a aidé: apt-get install --reinstall <packages>.
tanius
9

Cela est généralement dû au fait que le paquet a ajouté une dépendance et que la mise à niveau ne veut pas l'ajouter pour vous sans autorisation.

Si vous courez:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Ensuite, les nouvelles versions doivent être installées avec leur nouvelle dépendance.

John Lawrence Aspden
la source
Met à niveau des packages spécifiques (et leurs dépendances) sans l'engagement (risques) d'une mise à niveau dist.
John Mee
8

Cela a fonctionné pour moi

sudo aptitude full-upgrade
Singh
la source
Même aptitude upgradetravaillé pour moi.
Bibhas
J'utilise Ubuntu 14.04et je n'ai pas de aptitudeligne de commande
ahmed hamdy
apt-get dist-upgradem'a donné le même message, mais cela l'a résolu pour moi. J'avais un paquet qui cassait la mise à jour d'un autre paquet. Je n’avais pas besoin de celui que j’avais installé, alors aptitude full-upgradej’ai eu l’option de le supprimer pour pouvoir mettre à niveau tout le reste.
f.ardelian
6

J'ai trouvé qu'aptitude faisait un meilleur travail pour mettre à jour des paquets si les versions diffèrent légèrement. J'ai eu une situation comme celle-ci:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Cela a permis à apt-get de retenir la mise à jour, mais aptitude l'a mise à jour correctement. Je ne sais pas quel algorithme est utilisé pour déterminer si un paquet doit être mis à jour ou non. Je suppose que ces deux-là avaient la même version, mais un "qualificatif" différent. Mais dans tous les cas, apt-get ne le mettrait pas à jour, mais aptitude le ferait.

Alexander Torstling
la source
4

Dans mon cas, les paquets retenus étaient ceux liés aux en -têtes linux et au noyau. J'y suis arrivé en essayant de résoudre un problème avec un point d'exclamation rouge dans la zone de notification et l'impossibilité de mettre à jour les paquets.

Pour le résoudre, je n'ai pas eu besoin d'utiliser ni dist-upgrade ni apt-get install xxx manuel .

Ce que j'ai fait et que j'ai aidé a été simple et propre :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Je devais confirmer manuellement la mise à jour de Grub et sa configuration.

Ensuite, je viens de travailler avec l'ordinateur pendant un moment, puis un dialogue de mise à jour standard est enfin apparu, y compris la section "Base Ubuntu" avec le noyau et les éléments associés. La mise à jour a été effectuée sans problème et je ne vois plus aucun paquet bloqué.

En outre, il est très important de garder à l'esprit que ces mises à jour * buntu, y compris les mises à jour du noyau, sont sensibles à l'hibernation . J'ai ce problème plusieurs fois et je le résous toujours en redémarrant l'ordinateur et en effectuant les étapes ci-dessus.

Alors peut-être que cela suffirait?!

(la situation décrite ici est liée à mon Xubuntu 15.10 fin décembre 2015)

gardien
la source
3

J'ai rencontré ce problème lorsqu'un nouveau noyau a été publié. (Peut-être parce que les mises à jour instables sont activées.) J'ai trouvé que le moyen le plus simple de procéder à l'installation était via l'installateur graphique d'Ubuntu ( update-manager).

Kazark
la source
2

Je me suis heurté à ce problème en utilisant Synaptic car il semblait se bloquer, et pour essayer de résoudre ce problème, j'ai redémarré et essayé à nouveau.

Ensuite, j'ai découvert un message informatif dans le package avec des instructions de post-installation pour moi.

J'ai dû taper " détails ", puis " q " pour quitter après avoir lu le message, puis les choses se sont déroulées normalement.

Vue elliptique
la source
2

Cela ressemble à la bonne façon de réinstaller le paquetage sauvegardé:

apt-get install --reinstall libjpeg-progs

Au moins, cela a fonctionné pour moi lorsque je suis libjpeg-progsresté bloqué après la mise à niveau d’Ubuntu 14.04 à 16.04. Je suis sûr que vous pouvez faire la même chose avec n'importe quelle autre application conservée, par exemple gimp.

Source: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Stephan Henningsen
la source
1
Vous pourriez le faire sans --reinstall, aussi.
Jarno
Ce qui est drôle, c’est qu’il supprime le paquet libjpeg-turbo-progs.
Jarno
1

En fait, le commutateur dont vous avez besoin est celui dselect-upgradequi installe / supprime les dépendances pour l’ensemble de paquets concerné.

Johnny
la source
1

J'ai lu tous les articles et découvert qu'il existe de nombreuses explications intéressantes. Je les essayais tous mais je n'ai aucun résultat complet. J'ai un problème avec mysql-utilities que je n'ai pas pu mettre à jour. La mise à jour a été proposée par le système. Donc, je veux montrer quelques étapes pour le faire. Bien sûr, je vais répéter dans quelques instants tous les messages susmentionnés. Voici mon erreur, oui je l'ai trouvé par des postes déjà existants, mais que dois-je faire ensuite? entrez la description de l'image ici

La prochaine étape est:

sudo apt-get --purge remove mysql-utilities

Les résultats que nous pouvons voir dans l'image ci-dessous. Je retire le paquet et vérifie cela par la commande:

sudo apt-get -f install

Résultats - bien! Plus tard, j'ai installé cette nouvelle version du paquet correctement. entrez la description de l'image ici

De cette façon, je pense que cela peut aider davantage de nouvelles personnes, car avec d'autres packages, nous pouvons suivre les mêmes étapes.

Une fois, je suis désolé, lorsque j'ai répété à certains endroits d'autres messages.

Vasyl Lyashkevych
la source
5
N'utilisez pas de captures d'écran pour le texte du terminal, car cela le rend illisible pour Google et illisible pour certaines personnes. Au lieu de cela, collez le texte du terminal dans votre réponse, sélectionnez ce texte et appuyez sur le {}bouton dans l'éditeur pour le formater correctement.
Chai T. Rex
@ ChaiT.Rex Merci pour vos remarques, je vais le prendre pour un avis futur.
Vasyl Lyashkevych
1

Ubuntu 18.04 fournit une syntaxe plus récente et rationalisée, aptqui peut être utilisée à la place de apt-get.

sudo apt full-upgrade

sudo apt upgradeest utilisé pour installer les mises à jour disponibles de tous les paquetages actuellement installés sur le système à partir des sources configurées via sources.list (5). De nouveaux packages seront installés si nécessaire pour satisfaire les dépendances, mais les packages existants ne seront jamais supprimés. Si une mise à niveau pour un package nécessite la suppression d'un package installé, la mise à niveau pour ce package n'est pas effectuée.

sudo apt full-upgrade remplit la fonction de mise à niveau mais supprimera les packages actuellement installés si cela est nécessaire pour mettre à niveau le système dans son ensemble.

l --marc l
la source