1258 votes

"Les paquets suivants ont été retenus :" Pourquoi et comment le résoudre ?

Je viens d'ajouter un dépôt PPA pour la version de développement de GIMP, mais je reçois 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 résoudre ce problème afin de pouvoir utiliser la dernière version au lieu de celle que j'ai actuellement ?

6 votes

Quel message de merde ! Pourquoi le système d'exploitation ne peut-il pas faire ce qu'il faut ?

11voto

bernie Points 491

J'ajoute cette réponse parce que je ne suis pas satisfait de la façon dont les autres réponses gèrent l'option pourquoi de la question pour comprendre ce qui se passe et choisir la ligne de conduite appropriée.

J'espère que cela aidera quelqu'un à éviter de courir aveuglément. apt dist-upgrade au désespoir !

Pourquoi un paquet est-il retenu ?

À ma connaissance, il y a 2 catégories de raisons pour lesquelles les paquets sont retenus pendant la durée de l'opération. apt upgrade .

Il est marqué comme étant retenu

apt-mark puede faites ceci :

sudo apt-mark hold <package>

hold est utilisé pour marquer un paquet comme étant retenu, ce qui empêchera le paquet d'être automatiquement installé, mis à jour ou supprimé.

Pour lister tous les paquets marqués en attente ou pour savoir si un paquet est en attente, utilisez :

apt-mark showhold
apt-mark showhold <package>

Pour lever le blocage d'un paquet et permettre sa mise à niveau :

sudo apt-mark unhold <package>

apt détecte un changement de dépendance

Le meilleur source d'information faisant autorité J'ai pu trouver concernant cela est marqué comme obsolète, mais il dit :

[Kept back] signifie qu'il existe de nouvelles versions de ces paquets qui ne seront pas installées pour une raison quelconque. Les raisons possibles sont des dépendances brisées (un paquet dont il dépend n'a pas de version disponible pour le téléchargement) ou de nouvelles dépendances (le paquet dépend de nouveaux paquets depuis la dernière version).

Cela vous indiquera la version actuelle et la version candidate à la mise à jour du paquet :

$ apt list <package>

# example output:
vim/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.4 amd64 [upgradable from: 2:8.0.1453-1ubuntu1.3]
N: There are 2 additional versions. Please use the '-a' switch to see them.

Avec la version actuelle (par exemple 2:8.0.1453-1ubuntu1.3 ) et la nouvelle version (par exemple 2:8.0.1453-1ubuntu1.4 ), nous pouvons déterminer les dépendances modifiées avec apt show :

apt show <package>=<old version> <package>=<new version>

# example:
apt show vim=2:8.0.1453-1ubuntu1.3 vim=2:8.0.1453-1ubuntu1.4

(ou utilisez simplement apt show -a pour voir toutes les versions directement, mais cela rend la comparaison des versions plus difficile à mon avis)

Les parties importantes sont les suivantes Depends y Recommends les listes de colis. S'il y a de nouveaux paquets dans ces listes dans la nouvelle version du paquet retenu, apt ne le mettra pas automatiquement à niveau.

À ce stade, il y a deux options pour mettre à niveau le paquet de maintien. Notez que les deux solutions ci-dessous ont les arguments appropriés pour éviter de faire passer par erreur un paquet de "installé automatiquement" à "installé manuellement".

  1. Pour mettre à jour le paquet et installer tout nouveau paquet "recommandé" (c'est-à-dire comme s'il était nouvellement installé avec apt install <package> utiliser --only-upgrade :

    sudo apt install --only-upgrade <package>

    (Conseil : ajoutez --dry-run pour voir ce qui va se passer avant de le faire)

  2. Pour mettre à jour le paquet sans installer les paquets "recommandés" nouvellement ajoutés utiliser --with-new-pkgs .

    sudo apt upgrade --with-new-pkgs <package>

Étude de cas : mise à niveau du docker-ce paquet

Mise à niveau du docker-ce sur Ubuntu 18.04 est ce qui m'a amené ici en premier lieu, alors j'ai pensé qu'il serait intéressant d'avoir un exemple concret complet.

$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  docker-ce
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

$ apt list docker-ce
Listing... Done
docker-ce/bionic 5:20.10.3~3-0~ubuntu-bionic amd64 [upgradable from: 5:19.03.12~3-0~ubuntu-bionic]
N: There are 34 additional versions. Please use the '-a' switch to see them.

Ok, voyons ce qui nous retient. docker-ce :

$ apt show docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce=5:20.10.3~3-0~ubuntu-bionic
Package: docker-ce
Version: 5:19.03.12~3-0~ubuntu-bionic
Priority: optional
Section: admin
Maintainer: Docker <support@docker.com>
Installed-Size: 107 MB
Depends: docker-ce-cli, containerd.io (>= 1.2.2-3), iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, xz-utils, libltdl7, apparmor
Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Replaces: docker-engine
Homepage: https://www.docker.com
Download-Size: 22.5 MB
APT-Manual-Installed: yes
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Description: Docker: the open-source application container engine
 Docker is a product for you to build, ship and run any application as a
 lightweight container
 .
 Docker containers are both hardware-agnostic and platform-agnostic. This means
 they can run anywhere, from your laptop to the largest cloud compute instance and
 everything in between - and they don't require you to use a particular
 language, framework or packaging system. That makes them great building blocks
 for deploying and scaling web apps, databases, and backend services without
 depending on a particular stack or provider.

Package: docker-ce
Version: 5:20.10.3~3-0~ubuntu-bionic
Priority: optional
Section: admin
Maintainer: Docker <support@docker.com>
Installed-Size: 121 MB
Depends: containerd.io (>= 1.4.1), docker-ce-cli, iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Recommends: apparmor, ca-certificates, docker-ce-rootless-extras, git, libltdl7, pigz, xz-utils
Suggests: aufs-tools, cgroupfs-mount | cgroup-lite
Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Replaces: docker-engine
Homepage: https://www.docker.com
Download-Size: 24.8 MB
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Description: Docker: the open-source application container engine
 Docker is a product for you to build, ship and run any application as a
 lightweight container
 .
 Docker containers are both hardware-agnostic and platform-agnostic. This means
 they can run anywhere, from your laptop to the largest cloud compute instance and
 everything in between - and they don't require you to use a particular
 language, framework or packaging system. That makes them great building blocks
 for deploying and scaling web apps, databases, and backend services without
 depending on a particular stack or provider.

Version 5:20.10.3~3-0~ubuntu-bionic a ajouté docker-ce-rootless-extras comme nouvelle dépendance recommandée. J'aimerais qu'apt soit plus utile et suggère simplement de l'installer au lieu de me laisser avec une ancienne version... Quoi qu'il en soit, voici les 2 correctifs possibles (avec --dry-run à titre d'illustration) :

$ sudo apt upgrade --with-new-pkgs --dry-run docker-ce
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  docker-ce
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])

$ sudo apt install --only-upgrade --dry-run docker-ce
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  docker-ce-rootless-extras
Recommended packages:
  slirp4netns
The following NEW packages will be installed:
  docker-ce-rootless-extras
The following packages will be upgraded:
  docker-ce
1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Inst docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])

7voto

J'ai découvert qu'aptitude fait un meilleur travail de mise à jour des paquets si les versions ne diffèrent que 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 fait qu'apt-get a retardé la mise à jour, mais aptitude l'a mise à jour sans problème. 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 paquets avaient la même version, avec seulement un "qualificateur" différent. Mais dans tous les cas, apt-get ne l'a pas mis à jour, mais aptitude l'a fait.

5voto

crysman Points 482

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

Pour le résoudre, je n'ai eu à utiliser ni l'un ni l'autre dist-upgrade ni manuel apt-get install xxx .

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

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

J'ai dû confirmer manuellement la mise à jour de Grub et sa configuration.

Ensuite, j'ai travaillé avec l'ordinateur pendant un certain temps et le dialogue de mise à jour standard est réapparu, incluant finalement la section "Ubuntu base" avec le noyau et les éléments connexes. La mise à jour a été effectuée sans aucun problème et je ne vois plus aucun paquet retenu.

De plus, il est très important de garder à l'esprit que ces mises à jour *buntu incluant les mises à jour du noyau sont sensibles à l'hibernation - J'ai eu ce problème plusieurs fois et je l'ai toujours résolu en redémarrant la machine 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 de fin décembre 2015).

4voto

Kazark Points 688

J'ai rencontré ce problème lors de la sortie d'un nouveau noyau. (Peut-être parce que j'ai activé les mises à jour instables). J'ai trouvé que la façon la plus simple de faire l'installation était de passer par l'installateur graphique d'Ubuntu ( update-manager ).

3voto

Elliptical view Points 969

J'ai rencontré ce problème en utilisant synaptic parce qu'il semblait se bloquer, et pour essayer de le résoudre, j'ai redémarré et réessayé.

SOLUTION : J'ai ensuite découvert un message informatif faisant partie du paquet et contenant quelques instructions post-installation à mon intention.

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

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