更新:此特定方法仅适用于某些重要内核版本,特别是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内核上也可能发生。我已相应地更新了上面的正则表达式。