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".
-
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)
-
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])
6 votes
Quel message de merde ! Pourquoi le système d'exploitation ne peut-il pas faire ce qu'il faut ?