kpatch制作内核热补丁步骤总结

news/2024/7/8 2:27:40 标签: linux, 运维, 服务器

零、原理及参考

kpatch入门实践教程-CSDN博客

Kpatch 使用过程及其原理-CSDN博客

一、准备工作

  1. 安装对应版本的kpatch-build.rpm并解决依赖
  2. diff -Naur dir1 dir2 > hot.patch 拿到补丁文件
  3. 下载对应内核版本的src.rpm
  4. 安装好对应的开发包kernel-debuginfo,kernel-debuginfo-common,并可在/lib/debug/lib/modules/xxx-xxx.el7.x86_64/下找到vmlinux内核映像文件
  5. mkdir -p /usr/share/kpatch/patch提前创建好目录(不然也是~/.kpatch/build.log报错后建)
  6. kpatch-build -r kernel-bek-4.19.25-200.el7.bclinux.src.rpm -v /lib/debug/lib/modules/4.19.25-200.el7.x86_64/vmlinux  Unexpected_TXQ_queue_failure.patch --skip-gcc-check

在当前目录编译出内核热补丁ko后,尝试打入补丁

1.查看已安装的热补丁

# kpatch list (或者 lsmod)

2.加载kpatch热补丁模块

# kpatch load xxx.ko (或者 insmod xxx)

# kpatch list 查看加载情况 (或者 lsmod | grep xxx)

3.卸载某个kpatch热补丁模块

# kpatch unload xxx.ko

rmmod报错是因为该热补丁正在use,不能直接卸载,可以试着用配置取消热补丁:

# echo 0 > /sys/kernel/livepatch/livepatch_xxx/enabled

彻底移除该kpatch热补丁模块可以使用uninstall

# kpatch uninstall xxx.ko

# kpatch list 查看卸载情况

如果仅仅移除kpatch热补丁模块不会卸载运行内核已加载的热补丁模块,除非使用上面描述的kpatch upload命令。

二、制作热补丁时遇到问题及解决方式

  1. kpatch-build比较占磁盘空间,所以最开始要df -h 确保至少有16G空间
  2. fatal error: openssl/opensslv.h: No such file or directory

        A:缺少包,直接yum -y install openssl-devel即可(apt-get install libssl-dev)

     3.

A:有时发现报错“No targets, No makefile”确实离谱,可能是版本不匹配,最后换了个kpatch-build.rpm版本的包就可以了。

三、其它参考笔记

本次热补丁patch如下,本来不应该用热补丁去调试一个功能,而是去修改一个功能。但本次是线上产品,无法本地复现所以就加打印探查一下:

如果是纯学习的话,其实可以用下面这个源码提供的补丁,直接cat /proc/meminfo就能看出区别了

diff -Nupr src.orig/fs/proc/meminfo.c src/fs/proc/meminfo.c
--- src.orig/fs/proc/meminfo.c	2017-09-22 15:27:21.699056179 -0400
+++ src/fs/proc/meminfo.c	2017-09-22 15:27:41.274137239 -0400
@@ -99,7 +99,7 @@ static int meminfo_proc_show(struct seq_
 		"Committed_AS:   %8lu kB\n"
 		"VmallocTotal:   %8lu kB\n"
 		"VmallocUsed:    %8lu kB\n"
-		"VmallocChunk:   %8lu kB\n"
+		"VMALLOCCHUNK:   %8lu kB\n"
 #ifdef CONFIG_MEMORY_FAILURE
 		"HardwareCorrupted: %5lu kB\n"
 #endif


http://www.niftyadmin.cn/n/5536083.html

相关文章

AI学习指南机器学习篇-K均值聚类(K-Means Clustering)简介

AI学习指南机器学习篇-K均值聚类(K-Means Clustering)简介 1. 引言 在机器学习领域中,无监督学习是一种常见的技术,其通过对未标记的数据进行学习,从中发现数据的模式和结构。K均值聚类(K-Means Clusteri…

LangChain 入门上篇:模型 I/O 封装

LangChain 是面向大模型的开发框架,是 AGI 时代软件工程的探索和原型。学习 LangChain 需要关注接口的变更。 LangChain 的核心组件 1.模型 I/O 封装 LLMS 大语言模型Chat Models 一套基于 LLMS,但按对话结构重新封装PromptTemplate 提示词模板Output…

React、JSX简介、渲染列表、基础和复杂的条件渲染

目录 一、简介 1、搭建环境 2、回到项目(VScode) 3、项目核心渲染路径 4、网站资料(启动项目的方法) 二、JSX 三、实现渲染列表 四、实现条件渲染 五、实现复杂条件渲染 一、简介 1、搭建环境 npx creat-react-app reac…

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天,我们继续学习Linux线程本分,在Linux条件变量中,我们对条件变量的做了详细的说明,今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…

生态共建 | 华宇TAS应用中间件与新华三服务器完成兼容互认证

近日,华宇TAS应用中间件完成与新华三技术有限公司的R4930系列和R4970 G7服务器的兼容适配,认证测试报告显示,双方产品兼容性良好,运行稳定、安全,可以满足用户对双方功能的要求。 新华三技术有限公司 新华三技术有限公…

UE5 07-给物体添加一个拖尾粒子

添加一个(旧版粒子系统)cascade粒子系统组件 ,在模板中选择一个开发学习初始包里的粒子

等保测评——云计算测评项2

安全计算环境-身份鉴别 当远程管理云计算平台中设备时,管理终端和云计算平台之间应建立双向身份验证机制; 远程管理云计算平台中的设备时,双向身份验证机制确保了管理终端和对端服务器的真实性,有效防止了重放攻击和DoS攻击,大大…

WebKit中Websockets的全面支持:实现高效实时通信

WebKit中Websockets的全面支持:实现高效实时通信 Websockets是一种网络通信协议,它允许在单个TCP连接上进行全双工通信,从而实现服务器与客户端之间的实时数据交换。WebKit作为许多流行浏览器的底层引擎,对Websockets提供了全面的…