Kernel live patching (简体中文)
内核热补丁 (Kernel Live Patching, KLP) 允许在不重启整个操作系统的前提下进行内科的快速修复。从 4.0 版本开始,这个功能被加入内核 [1][2][3],用户可以配置他们的的内核来启用这项功能。通常来讲,内核热补丁通过以下的步骤实现:
- 获取正在运行的源代码树
- 准备针对内核的补丁
- 使用一些工具(随后)来修正并应用补丁
在内核热补丁被官方支持前,一些项目提供了热补丁工具。如甲骨文的ksplice,SuSE的#kGraft,和红帽的#kpatch。他们用不同的方法实现了内核热补丁。而内核加入的最基础的功能是从kGraft和kpatch派生出来的。
kpatch
安装
从 kpatchAUR 安装 一个适当的内核,和 kpatch-gitAUR 对应的用户界面工具。
你也可以通过启用CONFIG_LIVEPATCH
, CONFIG_DEBUG_INFO
, 和 CONFIG_KALLSYMS
,来手动编译支持kpatch的内核。
注意: 安装特定的内核后需要更新 启动加载器。
使用方法
两个包都安装好、并重启后,你可以执行
$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y $ cd $ROOTDIR
假设你已经完成了一些修改,并在工作目录下生成了一个some.patch补丁 (是执行makepkg -o
后针对您自己的源代码树的补丁,而不是针对x.y版本的原始内核补丁)。启动kpatch实用工具:
$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux some.patch
这个命令涉及原始的和修改后的内核的编译,因此可能会多花一些时间。编译结束后,同目录下会出现一个kpatch-some.ko模块。现在,
# insmod kpatch-some.ko
就可以为内核打上补丁了。
更多信息,请查阅手册页或GitHub存储库。
kGraft
KGraft没有在Arch linux环境下经过测试。