前言
操作系统的内核问题往往会导致系统崩溃,会对客户的业务造成中断性影响,提供稳定高效的操作系统内核是各个操作系统厂商必须解决的问题。然而,当操作系统内核出现问题或发现安全漏洞后,如何快速定位到问题,快速验证问题的解决方案是一个比较难的问题;即使定位到具体问题,如何在用户无感知(内核不重启)的前提下快速修复问题或安全漏洞也是一个技术难题。
浪潮云启操作系统(InLinux)提供了一个热补丁管理工具,可以快速定位问题,并在不重启操作系统的前提下,快速修复内核问题。
以下使用修改内存信息的补丁,讲解如何使用浪潮云启操作系统(InLinux)支持热补丁的构建、安装和升级。
浪潮云启操作系统(InLinux)版本
以下操作都是在InLinux2312-LTS-SP1版本进行
热补丁管理工具
浪潮云启操作系统(InLinux)支持syscare工具,该工具支持热补丁的构建、安装、查看等管理功能。
使用yum命令安装syscare工具:
yum install -y syscare
yum install -y syscare-build
安装完syscare后,验证syscare可用:
构建内核补丁还需要安装构建相关的包:
yum install -y kernel-source kernel-debuginfo kernel-devel
yum install -y elfutils-libelf-devel openssl-devel dwarves flex python3-devel rpm-build bison cmake make gcc g++ rust cargo --allowerasing --skip-broken --nobest
修改内存信息
查看内存信息
在操作系统中,使用cat /proc/meminfo命令可以查看内存信息:
内存显示信息中有VmallocTotal、VmallocUsed、VmallocChunk字段,以下代码修改这三个字段,用于kpatch测试。
代码修改patch
修改VmallocTotal、VmallocUsed、VmallocChunk字段为VmallocTotaltest、VmallocUsedtest、VmallocChunktest,
对应代码的patch如下:
---
fs/proc/meminfo.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index e03212ddaddf..287feea75c1f 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -116,10 +116,10 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
global_node_page_state(NR_WRITEBACK_TEMP));
show_val_kb(m, "CommitLimit: ", vm_commit_limit());
show_val_kb(m, "Committed_AS: ", committed);
- seq_printf(m, "VmallocTotal: %8lu kB\n",
+ seq_printf(m, "VmallocTotaltest: %8lu kB\n",
(unsigned long)VMALLOC_TOTAL >> 10);
- show_val_kb(m, "VmallocUsed: ", vmalloc_nr_pages());
- show_val_kb(m, "VmallocChunk: ", 0ul);
+ show_val_kb(m, "VmallocUsedtest: ", vmalloc_nr_pages());
+ show_val_kb(m, "VmallocChunktest: ", 0ul);
show_val_kb(m, "Percpu: ", pcpu_nr_pages());
#ifdef CONFIG_MEMORY_FAILURE
--
制作内核补丁(kpatch)
基于syscare build命令构建内存信息修改的kpatch
syscare build --patch-name "modify-meminfo" --source kernel-5.10.0-197.0.0.110.ile2312sp1.src.rpm --debuginfo kernel-debuginfo-5.10.0-197.0.0.110.ile2312sp1.x86_64.rpm --output ./output/ --verbose --skip-cleanup --patch 0001-modify-meminfo.patch
构建成功后,在output目录下生成kpatch文件:patch-kernel-5.10.0-197.0.0.110.ile2312sp1-modify-meminfo-1-1.x86_64.rpm
安装内核补丁
使用rpm安装命令安装kpatch
rpm -ivh patch-kernel-5.10.0-197.0.0.110.ile2312sp1-modify-meminfo-1-1.x86_64.rpm
使用syscare list命令查看补丁信息:
使用syscare apply 命令执行内核补丁:
查看热补丁运行效果
补丁处于ACTIVED状态,标识补丁已经生效,查看/proc/meminfo信息:
在不重启浪潮云启操作系统(InLinux)的前提下,内存信息的代码修改已经生效。
总结
使用浪潮云启操作系统(InLinux)可以支持内核补丁的热升级,支持内核问题或安全漏洞的快速定位和修复,降低修复内核问题对用户的影响,在用户无感知(不重启操作系统)的前提下,支持内核缺陷和安全漏洞的快速修复。