有人可能会在使用 apt 时看到过这样的消息:
The following packages have been kept back:
some-package
对此的通常解决方法问题是手动安装包:
apt-get install some-package
但是,为什么 apt 首先会阻止给定的包呢?
就我目前的情况而言,我能够重现此消息:如果一些包是一个虚拟包(因此它不包含任何数据,但包含具有依赖项的控制文件)每次发生这种情况时,都会向虚拟包添加依赖项。例如:some-package 是一个虚拟包,版本 1.0.0,依赖于 package-A 和 package-B
安装 some-package 1.0.0 也会安装 package-A 和 package-B。如果我现在创建一个依赖于 package-A、package-B 和 package-C 的 some-package 1.1.0 的新版本,并尝试
apt-get update && apt-get upgrade
结果就是上面提到的消息:
The following packages have been kept back:
some-package
谁知道为什么 apt 会保留这样的包?
答案1
默认情况下,apt-get upgrade 只会升级依赖项未发生任何变化的软件包。这样可以保证不会安装其他软件包,或者更重要的是,不会删除不受 apt 控制的其他软件所依赖的软件包。换句话说,apt 正在尝试为您的系统提供最大的稳定性。
为了升级这些附加软件包,请运行
apt-get dist-upgrade
首先,这将显示将要进行的所有更改。然后,您可以中止此操作并使用显示的软件包列表来确定这些更改在您的系统上是否安全。一旦您确信这些更改是可以的,就可以运行 dist-upgrade 了。