Skip to main content

解决Ubuntu内核版本不自动升级的问题

今日维护http418集群时,发现某些机器的kernel版本不是最新版本,但apt update && apt upgrade却显示全部包均已升级到最新版本。这令我感到诧异,于是开始探究其中的原因。

手动更新?

遇到这个问题,第一反应就是先手动把最新版本的kernel安装上:

apt install linux-image-5.15.0-102-generic

安装完成以后是用上新版本了,但是这似乎没有从根本解决问题:如果下次内核更新到5.15.0-103了,不还得再手动操作一遍?

发现曙光

在Google搜索解决方案的时候,无意中看到这个askubuntu问题的问答,眼前一亮。置顶的回答说,如果Linux kernel相关的meta package没有正确安装就会出现无法升级的问题。虽然他解决的是HWE内核的升级问题,但这提醒了我:会不会是我的机器上内核不升级的原因也是没有装上meta package?

带着这个疑问,我去查询了Ubuntu官方提供的内核相关的meta packages。可以看到,我们似乎应该安装linux-generic这个包。在安装过程中,我发现这个meta package会带上thermaldusbmuxd等虚拟机上不需要的依赖。

进一步研究,在另一台运行官方Cloud Image的机器上找到了应当使用的包:linux-virtual

root@proxy:~# dpkg --get-selections | grep linux
binutils-x86-64-linux-gnu                       install
console-setup-linux                             install
libselinux1:amd64                               install
linux-base                                      install
linux-headers-5.15.0-101                        install
linux-headers-5.15.0-101-generic                install
linux-headers-5.15.0-102                        install
linux-headers-5.15.0-102-generic                install
linux-headers-generic                           install
linux-headers-virtual                           install
linux-image-5.15.0-101-generic                  install
linux-image-5.15.0-102-generic                  install
linux-image-virtual                             install
linux-modules-5.15.0-101-generic                install
linux-modules-5.15.0-102-generic                install
linux-virtual                                   install
util-linux                                      install

最后在这些不会自动升级内核的虚拟机上,运行apt install linux-virtual,内核自动升级到了最新版本,问题解决。

总结

  1. 若因为某些原因(如依赖被破坏、手贱错卸载等等)导致kernel相关的meta package没有正确安装,手动重新安装后自动更新即可恢复。

  2. 在KVM环境中运行Ubuntu Server虚拟机更推荐直接使用官方提供的Cloud Image,而不是自己使用Live CD安装。用Live CD安装的虚拟机默认会安装linux-generic包,可能会带上一些不需要的依赖。