更新错误后如何降级内核(16.04)

最近升级到Ubuntu 16.04内核(4.4.0-89和-91)在我的笔记本电脑上严重失败。 令人高兴的是,我已经安装了之前的工作版本(4.4.0-57)。 现在我已经让Grub配置为向我显示一个菜单,并且我在启动时手动选择-57,但这看起来很脆弱,很可能在未来的sudo apt upgrade打破。

我想我想:

  • 要删除-89和-91,因为它们对我没有任何好处。
  • 使-57成为Grub的默认值,其方式将通过升级持续存在。
  • 确保-57保持安装,即使我稍后安装了内核升级
  • 能够轻松尝试以后的内核更新,但如果失败则还原为-57。 我主要关心的是-57被自动删除。
  • 如果我发现以后的更新正常运行,则返回撤消所有此操作的简单路径并返回到以下内核更新。

试图删除-91与sudo apt remove linux-image-4.4.0-91-generic要求我删除linux-generic和linux-headers-generic。 这看起来很糟糕,所以我没试过。

我可以找到关于一般问题的各种问题,但似乎没有一个问题可以解决我的所有目标,而且大多数问题已经足够大,以至于我认为它们不再适用。

最好的方法是什么?

附录 :这被标记为如何防止更新特定包的副本? 。 这个答案可能会解决我的一部分问题,但并没有解决更大的问题。

从广义上讲,问题是内核以不寻常的方式处理。 它是通过linux-generic安装的,它只是对linux-image-generic和linux-image-headers的依赖。 反过来,这只依赖于linux-linux-image-VERSION-generic和headers-VERSION-generic,这些软件包值得注意的是将版本号烘焙到软件包名称中(可能是为了便于多个并行安装)。

该答案中没有涉及的是:

  • 没有解决如何删除-89和-91。
  • 不解决如何使-57成为Grub的默认值,即使我安装了以后的更新。
  • 未解决如何确保-57保持安装,即使我安装以后的更新。 即使答案是持有一个或多个包,考虑到涉及的几个包,我会持哪些? 如果这是持有linux-generic的问题,我该如何首先降级它?

删除最新的内核

 sudo apt remove linux-image-4.4.0-91-generic linux-headers-4.4.0-91-generic 

那将卸载元包linux-genericlinux-image-genericlinux-headers-generic 。 内核永远不会升级。

要恢复它,你可以运行

 sudo apt install linux-generic 

那将安装最新的内核和内核将获得升级。

linux-generic是一个元包。 它是空的,但依赖于另外两个元软件包: linux-image-genericlinux-headers-generic

最后两个指向最新的内核映像和标头。

如果删除元软件包,则不会从Linux中删除任何内容,但内核映像和标头不会获得更新。 您可以随时安装它们。 他们将提取最新的“真正的”内核包。

所以解决方案是手动删除你不想要的内核包以及元包。

尽管Pilot6的解决方案可能是最佳解决方案,但您可以采取不那么激烈的措施。

我个人会从软件中心删除你不想要的内核然后把这些软件包搁置 – 请参阅如何防止更新特定软件包?

这是一个微不足道的变化,你可以轻松地过度骑行或恢复变化。