Kernel live patching (简体中文)

From ArchWiki
翻译状态:本文是 Kernel live patching翻译。上次翻译日期:2020-07-17。如果英文版本有所更改,则您可以帮助同步翻译。

内核热补丁 (Kernel Live Patching, KLP) 允许在不重启整个操作系统的前提下进行内科的快速修复。从 4.0 版本开始,这个功能被加入内核 [1][2][3],用户可以配置他们的的内核来启用这项功能。通常来讲,内核热补丁通过以下的步骤实现:

  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环境下经过测试。

参考