如何通过Landscape软件包配置文件确保内核版本与Livepatching的兼容性?
如何通过Landscape软件包配置文件确保内核版本与Livepatching的兼容性?
我之前维护Ubuntu 22.04服务器时也碰到过一模一样的问题——Livepatching只认5.15内核,但系统老是自动更新到5.19,用Landscape的包配置文件时通配符又不好使。折腾一阵后,总结出几个靠谱的方案,分享给你:
方案一:用APT包固定(Pinning)配合Landscape冲突规则
Landscape的包配置文件支持APT的Pin规则,咱们可以通过设置优先级强制系统只保留5.15系列内核,同时把5.19系列设为冲突包拒绝安装。
具体操作:
- 在Landscape里创建或编辑你的软件包配置文件,添加以下规则:
这里Pin-Priority设为1001是因为它高于APT默认的500优先级,系统会优先选用符合版本规则的包;而-1的优先级会直接拒绝安装对应的包。# 强制优先选择5.15系列的内核相关包 Package: linux-image-generic linux-headers-generic linux-image-*-generic linux-headers-*-generic Pin: version 5.15.* Pin-Priority: 1001 # 拒绝安装5.19系列的内核包 Package: linux-image-5.19.*-generic linux-headers-5.19.*-generic Pin: release * Pin-Priority: -1
方案二:锁定内核元包,阻止HWE升级
Ubuntu 22.04的HWE(硬件启用栈)元包会自动拉取更新的内核系列(比如5.19),如果不需要新内核的硬件支持,咱们可以直接移除这些HWE元包,改用固定的5.15内核元包,再通过Landscape锁定。
步骤如下:
- 先在目标机器上执行命令,移除HWE元包并安装固定内核元包:
sudo apt remove linux-generic-hwe-22.04 linux-image-generic-hwe-22.04 linux-headers-generic-hwe-22.04 sudo apt install linux-generic linux-image-generic linux-headers-generic - 回到Landscape的包配置文件,添加冲突规则阻止HWE元包被安装:
这样系统就不会再自动切换到HWE的新内核了。Package: linux-generic-hwe-22.04 linux-image-generic-hwe-22.04 linux-headers-generic-hwe-22.04 Pin-Priority: -1
方案三:配合定时任务做双重保障(可选)
如果担心偶尔有漏网的非5.15内核,可以加个cron定时任务定期清理,和Landscape的规则形成双重保险。
比如写个简单的脚本:
#!/bin/bash # 获取当前正在运行的内核版本,避免误删 CURRENT_KERNEL=$(uname -r | cut -d'-' -f1-2) # 移除所有非5.15且非当前运行的内核镜像 dpkg -l | grep linux-image | grep -v "5.15" | grep -v "$CURRENT_KERNEL" | awk '{print $2}' | xargs sudo apt remove -y # 移除对应内核头文件 dpkg -l | grep linux-headers | grep -v "5.15" | grep -v "$CURRENT_KERNEL" | awk '{print $2}' | xargs sudo apt remove -y
把这个脚本保存为clean-unwanted-kernels.sh,赋予执行权限后,添加到cron每周运行一次,就能自动清理不符合要求的内核了。
最后提醒一句:每次调整内核后,记得用sudo canonical-livepatch status检查一下Livepatching的状态,确保服务正常运行。
备注:内容来源于stack exchange,提问作者Andrea Pancrazi
相关产品推荐
相关产品推荐

