Virtuell软件包在更新时保留

当使用apt时,这个或那个可能看到了这个消息:

The following packages have been kept back: some-package 

通常的解决scheme是手动安装软件包:

 apt-get install some-package 

但是,为什么apt会阻止给定的软件包呢?

对于我目前的情况,我能够重现这个消息:如果some-package是一个虚拟包(所以它不包含任何数据,但是包含一个依赖的控制文件),每次都会发生这种情况,所以会在虚拟包中添加一个依赖项。 例子:some-package是一个虚拟包,版本1.0.0,依赖于package-A和package-B

安装一些软件包1.0.0也会安装软件包A和软件包B。 如果我现在创build一个依赖于包A,包B和包C的some-package 1.1.0的新版本,并尝试

 apt-get update && apt-get upgrade 

结果是上面提到的消息:

 The following packages have been kept back: some-package 

任何人有一个想法,为什么要把这样的软件包拿回来?

默认情况下,apt-get升级只会升级没有对其依赖项进行任何更改的软件包。 通过这种方式可以保证没有安装其他软件包,或者更重要的是,删除其他软件,而不受apt控制。 换句话说,apt正在试图为您的系统提供最大的稳定性。

为了升级这些额外的软件包,运行

 apt-get dist-upgrade 

这将首先显示所有将作出的更改。 然后,您可以放弃这一点,并使用显示的软件包列表来确定这些更改是否对您的系统是安全的。 一旦您满意自己所做的更改,请运行dist-upgrade。