最近升级到 Ubuntu 16.04 内核(4.4.0-89 和 -91)在我的笔记本电脑上失败了。幸运的是,我仍安装了以前的工作版本(4.4.0-57)。目前,我已将 Grub 配置为显示菜单,并在启动时手动选择 -57,但这似乎很脆弱,将来可能会出现问题sudo apt upgrade
。
我想我想要:
- 删除 -89 和 -91,因为它们对我没有任何好处。
- 将 -57 设为 Grub 的默认值,以便在升级后依然有效。
- 确保 -57 保持安装,即使我稍后安装内核升级
- 能够轻松尝试后续的内核更新,但如果失败则恢复到 -57。我主要担心的是 -57 会被自动删除。
- 如果我发现以后的更新可以正常运行,则可以轻松返回以撤消所有这些操作并返回到以下内核更新。
尝试删除 -91sudo apt remove linux-image-4.4.0-91-generic
需要删除 linux-generic 和 linux-headers-generic。这似乎很糟糕,所以我没有尝试过。
我可以找到有关一般问题的各种问题,但似乎没有一个能够解决我的所有目标,并且大多数问题已经过时,我认为它们不再适用。
做到这一点的最好方法是什么?
附录:这被标记为重复如何阻止特定包的更新?。这个答案可能解答了我的部分问题,但没有解决整体问题。
总的来说,问题在于内核的处理方式不同寻常。内核是通过 linux-generic 安装的,而 linux-generic 只是对 linux-image-generic 和 linux-image-headers 的依赖。反过来,它们又只是对 linux-linux-image-VERSION-generic 和 headers-VERSION-generic 的依赖,这两个软件包之所以引人注目,是因为将版本号嵌入到软件包名称中(大概是为了便于并行安装多个软件包)。
该答案中没有特别提到的是:
- 没有解决如何删除 -89 和 -91。
- 即使我安装了更高版本的更新,也没有解决如何使 -57 成为 Grub 的默认值的问题。
- 没有说明如何确保 -57 保持安装状态,即使我安装了后续更新。即使答案是保留一个或多个软件包,考虑到涉及的几个软件包,我会保留哪些?如果是保留 linux-generic,我该如何先将其降级?
答案1
通过以下方式删除最新内核
sudo apt remove linux-image-4.4.0-91-generic linux-headers-4.4.0-91-generic
这将卸载元包和linux-generic
。内核将永远不会升级。linux-image-generic
linux-headers-generic
要恢复它,你可以运行
sudo apt install linux-generic
这将安装最新的内核并且内核将得到升级。
linux-generic
是一个元包。它是空的,但依赖于其他两个元包:linux-image-generic
和linux-headers-generic
。
最后两个指向最新的内核映像和头文件。
如果您删除元软件包,Linux 中不会删除任何内容,但内核映像和标头不会获得更新。您可以随时稍后安装它们。它们将提取最新的“真实”内核软件包。
所以解决方案是手动删除您不需要的内核包和元包。
答案2
尽管 Pilot6 的解决方案可能是最好的解决方案,但您可以采取不那么激烈的措施。
我个人会从软件中心删除你不想要的内核,然后将这些软件包搁置 - 请参阅如何阻止特定包的更新?
这是一个微不足道的变化,您可以轻松地覆盖或恢复该变化。