centos8 内核热补丁kpatch制作详解

0x00 测试环境

发行版:CentOS Linux release 8.0.1905 (Core)

内核版本:4.18.0-305.10.2.el8_4.x86_64

0x01. 准备kpatch

1.先从github上把kpatch工具下载一下

git clone GitHub - dynup/kpatch: kpatch - live kernel patching

2.进入到kpacth目录执行买这一步会安装好kpatch所需的依赖:

source test/integration/lib.sh

# Will request root privileges

kpatch_dependencies

3. 执行make && make install,编译和安装kpatch

0x02. 准备内核编译环境

kpatch制作需要编译内核和内核模块,所以需要内核源码包以及编译内核所需的依赖。

1.下载centos debuginfo包

wget http://debuginfo.centos.org/8/x86_64/Packages/kernel-debuginfo-4.18.0-305.3.1.el8.x86_64.rpm

wget http://debuginfo.centos.org/8/x86_64/Packages/kernel-debuginfo-common-x86_64-4.18.0-305.3.1.el8.x86_64.rpm

这俩全部装上

还需要一个内核源码包:kernel-4.18.0-305.10.2.el8_4.src.rpm

网上也能找到,安装上之后就可以有内核源码编译环境了。内核源码位置在/root/rpmbuild/SOURCES/linux-4.18.0-305.10.2.el8_4

2.更新gcc版本

这一步是因为内核编译的 gcc版本和你系统安装的可能不是一个版本。所以需要讲系统安装的gcc更新到内核编译的那个版本。一般都是低的版本,所以这里不是做升级哦。先把系统安装的gcc卸载掉(如果有的话),从网上找对应的gcc版本。一般需要安装cpp、gcc、libgomp 三个包

3.安装内核编译需要的包

yum install patch bison flex openssl openssl-devel

这几个是我编译过程需要安装的

4.修改内核配置

还需要修改一下内核配置,要不然编译报错:

vim /boot/config-xxxxx

找到这个CONFIG_SYSTEM_TRUSTED_KEYS,修改为:

CONFIG_SYSTEM_TRUSTED_KEYS=“”

这里可以先备份一下,然后修改备份文件比较好。到时候制作补丁的时候就可以直接指定备份的文件

0x03. 准备制作patch

patch不是随便做的,首先必须在当前内核的代码基础上进行修改的补丁。

我们安装好kernel-debuginfo-common包之后,已经再/usr/src/debug目录下生成了相应的内核源码。我们可以把代码打包复制到其他目录进行修改。

补丁的制作方法很多,推荐使用git来做。我的方法是:

1.进入内核根目录,执行git init

2.git add .

3.git commit

4. 修改代码

5. git diff > xxx.patch生成补丁文件

4.热补丁制作

有了前面的准备工作,就可以开始制作热补丁了。热补丁制作就一个命令

kpatch-build -s /root/rpmbuild/SOURCES/linux-4.18.0-305.10.2.el8_4 -c /boot/config-4.18.0-305.10.2.el8_4.x86_64 -v /usr/lib/debug/lib/modules/4.18.0-305.10.2.el8_4.x86_64/vmlinux bfq.patch

解释一下三个参数:

-s 内核源码路径

-c vmlinux文件路径

第三个参数释patch文件,可以跟多个文件

不指定参数的话会使用默认的路径,建议还是跟上参数比较好。这样心里有数。

第一次制作过程时间会久,我的2核虚拟机几个小时==!后面再做就快很多了,十几分钟就可以了。

制作完成之后会生成一个livepatch_xx.ko文件

0x05.加载和卸载内核热补丁

insmod livepatch_xxx.ko 像加载驱动模块一样加载就行

或者使用kpatch load livepatch_xx.ko

卸载补丁则需要用kpatch unload livepatch_xx

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值