如何防止Ubuntu内核版本升级和通知?

如何防止Ubuntu内核版本升级和通知?
我想阻止系统进行内核升级和DIST升级,并且不再提示我进行升级。
但是,我仍然希望获取所有软件包更新和安全更新。
我看过几篇文章,但它们都是关于软件包的“保留”,这对我来说太细致了。我只想阻止Ubuntu升级到导致问题的新分布版(如16.10),以及更高版本的内核,因为进入恢复模式后,我的鼠标和键盘都无法正常工作。
我希望保持现有的分布版本不变,并获取任何新的软件包更新或安全更新。 我不想禁用所有的更新,但如果这是最简单的选择,我可以考虑禁用所有更新。

软件包保持正是你对内核更新所“渴望”的。至于发行版升级,只需在软件属性中禁用它即可。这方面有很多相关问题在这里讨论过。 - mikewhatever
2个回答

谢谢Mikewhatever澄清我需要使用包裹保持。
我参考了这个post,并运行了以下命令:
uname -r

找到我的内核版本。 它给出了输出:
4.10.0-27-generic

然后我运行了命令:
sudo apt-mark hold 4.10.0-27-generic

并且它产生了输出:
linux-cloud-tools-4.10.0-27-generic set on hold.
linux-headers-4.10.0-27-generic set on hold.
linux-image-4.10.0-27-generic set on hold.
linux-image-extra-4.10.0-27-generic set on hold.
linux-signed-image-4.10.0-27-generic set on hold.
linux-tools-4.10.0-27-generic set on hold.

我相信这应该是我想要实现的目标。

是的,但你想要实现的目标毫无意义且可能不安全。让操作系统完全更新,包括内核,这是每个人都应该做的。除非在某些特定情况下需要特定软件版本(甚至更少的情况下需要内核版本),必须暂停内核和/或安全更新,否则这样做真的很愚蠢。在面向互联网的机器上,这是相当不安全的,不仅对于拒绝更新的用户而言,也对其他人造成了社会责任。请记住,你像其他人一样,有社会责任。 - user692175
2不要阻止内核升级,你可以通过从GRUB菜单中选择早期的内核版本来启动,像这样:https://askubuntu.com/questions/955020/ubuntu-wont-boot-kernel-error/955130#955130,并且在每次新的内核升级后正常启动一次,等待满足所有要求的内核升级。 - karel
你不需要拿着那么多的包裹。只需要拿着元包:https://askubuntu.com/a/678633/705736 - FarO
1谢谢你的回答。对我来说非常有用,因为我有一个只能在特定内核版本下工作的模块,而且更新起来很困难。 - Joshua
3这是否意味着内核版本会在 apt upgrade 后保留?现在是2020年12月,Ubuntu 20.04似乎意识到有一个新的内核可用,并最终安装它。 - tishma
@tishma:我对此事感到好奇,所以我暂停了我的内核,但新的内核仍然显示在升级列表中。所以我不认为它会阻止安装升级。 - Daniel
$ sudo apt-mark hold $(uname -r) - Miha_x64

更新:此特定方法仅适用于某些重要内核版本,特别是5.4.0-xx。(使用更高级的apt-mark hold规则可能可以保持在例如5.8.0-xx内核上)

在最近一段时间内尝试多次解决原始问题的略微修改版本时,我经常遇到这个问题:

如何冻结Ubuntu内核(例如,专为Ubuntu 20.04)的5.4.0-x版本,以便仍然获得次要升级,但不会升级到另一个"重大"版本,如5.8.0-x

在这种特定情况下的诀窍是执行以下操作:

# This prevents installation of, or further upgrades of the package that results in a 5.8 kernel being installed
sudo apt-mark hold linux-generic-hwe-20.04

# This will pull in the latest 5.4 Ubuntu kernel, and receive subsequent 5.4.0-x patches too
sudo apt install linux-generic-hwe-18.04

我不确定这是否完全适用于所有情况,但至少在2021年1月,这对Ubuntu 20.04有效。(在我的情况下,触发事件是在2021年1月的第一周,我的5.4机器开始自动更新到5.8)。还请注意,我不是专家,但已经进行了相当多的测试。可能有一些重要的细微差别我理解错误...
但是,如果您已经安装了较新的主版本内核(例如通过无人值守升级),您可能也希望卸载它。对于以下命令/正则表达式,我没有遇到任何问题,可以识别出在此命令之后将被删除的软件包:
dpkg -l | grep -o -P "^ii\s+linux-[\S]*-5.(8|11|13).0[\d\S]+"

而且删除命令非常相似:
sudo apt remove -y $(dpkg -l | grep -o -P "linux-[\S]*-5.(8|11|13).0[\d\S]+")

最后,您需要在执行任何其他操作之前重新启动计算机,包括执行任何apt upgrade。特别是如果您已卸载当前运行的内核软件包,则其他软件包的安装后脚本在重启之前可能无法正常运行!
有关Ubuntu内核选择的更多信息,即要大致了解即将到来的内容,请参阅此页面:https://ubuntu.com/about/release-cycle 请注意,在所有三个软件包linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04上放置apt-mark hold以确保稳定性,但实际上只需保留第一个软件包即可。
请注意,在我的情况下,虽然在大多数情况下您不需要执行此帖子所述的操作,但我需要坚持使用旧版本的主要内核版本,以使某些硬件正常工作。
请注意2:在Ubuntu 20.04中,这种“删除5.8内核方法”后来在5.11内核上出现了问题,并且在5.13内核上也可能发生。我已相应地更新了上面的正则表达式。

你的grep命令给我返回了以下错误:grep: conflicting matchers specified - Benjamin Bray
@BenjaminBray 我猜你可能为grep设置了一个别名,该别名添加了一个与-P标志冲突的标志。例如,执行grep -E -P something将会失败。也许你可以检查一下你的.bashrc文件或者运行alias命令的输出? - Gertlex