searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何给内核打livepatch

2023-05-16 07:49:04
72
0

       如果内核有bug需要修复, 一般的流程是把内核升级到问题修复的版本, 但升级内核需要重启机器, 这样如果线上服务的机器就需要先停服在升级内核再重启机器重启服务, 会影响服务且升级周期太长, 所以应对一些小修复我们可以利用livepatch 热补丁的方式修复, 可以做到不停服不停机来修复问题, 且修复周期小成本低。

 

  1. 在centos自带内核上打热补丁使用示例

    • 下载源码编译
    • 安装相应rpm
      • kernel-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-debuginfo-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-debuginfo-common-x86_64-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm
    • 解压kernel-3.10.0-957.21.3.el7.x86_64.src.rpm
      • rpm –ivh kernel-3.10.0-957.21.3.el7.x86_64.src.rpm   执行rpm安装命令  
      • cd /root/rpmbuild/SPECS 切换目录到/root/rpmbuild/SPECS  
      • rpmbuild –bp kernel.spec 执行rpmbuild会生成源码包  
      • /root/rpmbuild/BUILD/kernel-3.10.0-957.21.3.el7   这就是源码包 
    • 在上面解压出来的源码上生成要修复的patch
    •  切换gcc版本, gcc版本最好和编译内核的版本一致, 但比较难做到一致, 如果不一致需要用--skip-gcc-check这个选项, gcc用高版本
      • source /opt/rh/devtoolset-7/enable
    •  使用kpatch-build编译出livepatch
      • /kpatch-build/kpatch-build -v /usr/lib/debug/lib/modules/3.10.0-957.21.3.el7.x86_64/vmlinux -s /root/rpmbuild/BUILD/kernel-3.10.0-957.21.3.el7 /tmp/0001-kpatch-test.patch --skip-gcc-check
      • 最终会生成livepatch-0001-kpatch-test.ko这个模块
    • kpatch 使用
      • 打patch
        • kpatch load livepatch-0001-kpatch-test.ko
        • 或者直接insmod livepatch-0001-kpatch-test.ko
      • 卸载patch
        • kpatch unload livepatch-0001-kpatch-test.ko
  2. livepatch一些问题

0条评论
0 / 1000
lll
4文章数
0粉丝数
lll
4 文章 | 0 粉丝
原创

如何给内核打livepatch

2023-05-16 07:49:04
72
0

       如果内核有bug需要修复, 一般的流程是把内核升级到问题修复的版本, 但升级内核需要重启机器, 这样如果线上服务的机器就需要先停服在升级内核再重启机器重启服务, 会影响服务且升级周期太长, 所以应对一些小修复我们可以利用livepatch 热补丁的方式修复, 可以做到不停服不停机来修复问题, 且修复周期小成本低。

 

  1. 在centos自带内核上打热补丁使用示例

    • 下载源码编译
    • 安装相应rpm
      • kernel-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-debuginfo-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-debuginfo-common-x86_64-3.10.0-957.21.3.el7.x86_64.rpm
      • kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm
    • 解压kernel-3.10.0-957.21.3.el7.x86_64.src.rpm
      • rpm –ivh kernel-3.10.0-957.21.3.el7.x86_64.src.rpm   执行rpm安装命令  
      • cd /root/rpmbuild/SPECS 切换目录到/root/rpmbuild/SPECS  
      • rpmbuild –bp kernel.spec 执行rpmbuild会生成源码包  
      • /root/rpmbuild/BUILD/kernel-3.10.0-957.21.3.el7   这就是源码包 
    • 在上面解压出来的源码上生成要修复的patch
    •  切换gcc版本, gcc版本最好和编译内核的版本一致, 但比较难做到一致, 如果不一致需要用--skip-gcc-check这个选项, gcc用高版本
      • source /opt/rh/devtoolset-7/enable
    •  使用kpatch-build编译出livepatch
      • /kpatch-build/kpatch-build -v /usr/lib/debug/lib/modules/3.10.0-957.21.3.el7.x86_64/vmlinux -s /root/rpmbuild/BUILD/kernel-3.10.0-957.21.3.el7 /tmp/0001-kpatch-test.patch --skip-gcc-check
      • 最终会生成livepatch-0001-kpatch-test.ko这个模块
    • kpatch 使用
      • 打patch
        • kpatch load livepatch-0001-kpatch-test.ko
        • 或者直接insmod livepatch-0001-kpatch-test.ko
      • 卸载patch
        • kpatch unload livepatch-0001-kpatch-test.ko
  2. livepatch一些问题

文章来自个人专栏
oio
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0