解决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会带上thermald
和usbmuxd
等虚拟机上不需要的依赖。
进一步研究,在另一台运行官方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
,内核自动升级到了最新版本,问题解决。
总结
若因为某些原因(如依赖被破坏、手贱错卸载等等)导致kernel相关的meta package没有正确安装,手动重新安装后自动更新即可恢复。
在KVM环境中运行Ubuntu Server虚拟机更推荐直接使用官方提供的Cloud Image,而不是自己使用Live CD安装。用Live CD安装的虚拟机默认会安装
linux-generic
包,可能会带上一些不需要的依赖。