unattended-upgrades 不支持内核热补丁,仅能安装完整内核包并需重启生效;热补丁需依赖 canonical livepatch(ubuntu)或 kpatch(rhel)等专用机制,与包管理器解耦。

unattended-upgrades 不能实现内核热补丁——它只负责下载和安装.deb包,本质仍是传统重启式升级。所谓“自动热补”是混淆概念,Linux内核目前没有发行版原生支持通过 unattended-upgrades 完成无需重启的函数级修复。
为什么 unattended-upgrades 不等于热补丁
unattended-upgrades 是 Debian/Ubuntu 的安全更新调度工具,底层调用 apt 安装完整内核包(如 linux-image-6.1.0-24-amd64),必须重启才能加载新内核。而热补丁(Livepatch/kpatch/kGraft)依赖内核运行时替换机制,与包管理器完全解耦。
- 它不生成、不加载任何
.ko补丁模块 - 它无法访问
/sys/kernel/livepatch/接口或调用kpatch load - 配置中哪怕写上
Unattended-Upgrade::Kernel-Mode "live"也无效——该参数根本不存在
Debian/Ubuntu 上真正可行的热补丁路径
Ubuntu 官方提供 Canonical Livepatch 服务(仅限 Ubuntu 16.04+ LTS),它是唯一与 unattended-upgrades 协同工作的热补丁方案,但需单独启用:
- 注册并获取 Livepatch 令牌:
sudo canonical-livepatch enable YOUR_TOKEN - 确认状态:
sudo canonical-livepatch status --verbose,看到status: enabled且kernel: applied -
unattended-upgrades可继续用于非内核包(glibc、openssl 等)的自动更新,两者互不干扰 - 注意:Livepatch 仅覆盖 Ubuntu 官方内核(
linux-image-generic),自编译或第三方内核不支持
RHEL/CentOS/Rocky 系统如何对接热补丁
Red Hat 提供的是 kpatch(非 dnf-automatic),二者职责分离:
-
dnf-automatic可设为apply_updates = no,仅下载安全更新包(含kpatchRPM) - 真正打热补丁靠手动或脚本触发:
sudo kpatch load /var/lib/kpatch/*.ko - 检查是否生效:
ls /sys/kernel/livepatch/应有子目录;kpatch list显示 loaded 状态 - 关键限制:RHEL 8+ 默认内核已内置 Livepatch 框架,但补丁本身需订阅 Red Hat EUS 或 UA 订阅才能获取
最容易被忽略的兼容性断点
热补丁不是“开箱即用”,三个硬性前提缺一不可:
- 内核版本必须满足最低要求(如 Alibaba Cloud Linux 2 要求
kernel-4.19.24-9.al7,Ubuntu 22.04 要求5.15.0-xx) - 必须启用内核配置项:
CONFIG_LIVEPATCH=y、CONFIG_FUNCTION_TRACER=y,缺一则/sys/kernel/livepatch/根本不存在 - 若系统启用了 Secure Boot,热补丁模块必须经过签名(
kpatch-build产出的 ko 需用pesign签名,否则加载失败报Required key not available)











