内核软件包暂停的逻辑是什么?

我希望有更多知识的人能够解释一下在Ubuntu 16.04及更高版本中执行apt-get upgrade时的一些情况。
我观察到的行为是,有时apt-get upgrade不会安装新的内核包,而有时会安装:
例如,从输出中可以看出:
The following packages have been kept back:
linux-generic linux-headers-generic linux-image-generic linux-tools-generic

我知道执行 dist-upgrade 将安装这些软件包(所以不要重复给出这个答案:-)。我不知道的是谁控制了这些软件包的保留。
有时在执行apt-get upgrade时会安装新内核,有时会保留这些软件包。
这些软件包的保留是由 Canonical 自己放置的还是与其他软件包的依赖关系相关?
1个回答

不要升级你的工作内核。

apt-get upgrade 命令只会将软件包升级到它们的新版本,而不会安装新的软件包或删除任何内容来升级软件包。

当你升级内核时,实际上是在安装一个新的内核。Ubuntu 不会升级内核,而是在保留旧内核的同时安装一个新内核。

但为什么呢?为什么我们要安装一个新版本的内核而不是升级到最新版本?答案是因为稳定性。

在内核升级后,你永远无法预知会发生什么情况,可能会导致系统无法启动或使硬件无法正常工作。你应该始终保留旧版本,以防出现任何问题,这样你仍然有一个可用的机器。

从 Slackware 系统升级指南 中得出的结论。


更多信息

man apt-get

绝不会删除当前已安装的软件包,也不会获取并安装尚未安装的软件包。无法在不改变其他软件包的安装状态的情况下升级当前已安装软件包的新版本将保留其当前版本。

然而,正如您所知,您可以使用apt-get dist-upgradeapt upgrade来安装这些“被保留”的软件包。

$ apt-cache search linux-image-4.4.*-generic | tail -3
linux-image-4.4.0-75-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP
linux-image-4.4.0-77-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP
linux-image-4.4.0-78-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP

看到了吗?这些是不同的软件包,因此需要进行新安装而不是升级。

1需要注意的一点是,Ubuntu的内核包大多数都是独立的包,不能像其他包一样升级。因为内核和版本号共同构成了包的名称。 - Anwar
+1 是的,正如我所说,它将作为一个新的软件包安装 ;) - Ravexina
是的,我看过了。但即使不这样做,你也不能升级内核包,因为一个“升级”的包实际上是一个“新”的包。顺便说一句,恭喜你达到了10,000的里程碑 :) - Anwar
谢谢 ;) 我更新了答案,使其更加清晰 :-) - Ravexina