编译RHEL 8.7 kernel 并重新安装

背景:最近遇到一个bug,需要修改 RHEL 8.7 kernel config 的配置参数,然后重新安装该kernel。踩过一些坑,复盘整理。

查询当前的kernel

uname -r
4.18.0-477.15.1.el8_8.x86_64

这是当前运行的内核版本。版本号的不同部分表示以下信息:
• 4.18.0: 内核的主版本号、次版本号和发布版本号。
• 477.15.1.el8_8: 补丁级别和发行版本信息。
• x86_64: 内核的体系结构,这里是64位

RHEL 查询当前系统已经安装的kernel

如下有三种常用的方式:

#1 rpm -qa | grep kernel | xargs rpm -qi
#2 sudo yum list installed kernel
#3 rpm -qa | grep -i kernel

RHEL 选择并切换到具体的kernel

这部分与Ubuntu 不同,不能直接sudo update-grub, RHEL/CentOS 的方式先修改 /etc/default/grub

sudo vim /etc/default/grub #更换选择的kernel
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 更新配置
sudo reboot

前面的铺垫结束,现在可以开始下载source code,修改config, 然后重编kernel。

如何安装src rpm

sudo useradd -s /sbin/nologin mockbuild
sudo rpm -ivh  kernel-4.18.0-425.3.1.el8.src.rpm
cd  /root/rpmbuild/SOURCES/
ll
-rw-rw-r-- 1 mockbuild mock 120898584 Sep 30  2022 linux-4.18.0-425.3.1.el8.tar.xz

 找到source code 包 然后mv 出来并解压缩

Compile Kernel 直接安装 (在本地compile 并安装)

make mrproper

 作用是在每次配置并重新编译内核前需要先执行make mrproper命令清理源代码树,包括过去曾经配置的内核配置文件.config都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。即检查有无不正确的.o文件和依赖关系,如果使用刚下载的完整的源程序包即第一次进行编译,那么本步可以省略。而如果你多次使用了这些源程序编译内核,则最好要先运行。

make menuconfig
使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。

sudo dnf search  ncurses
sudo dnf install ncurses-devel.x86_64
$ nproc
96
#make –j96
生成内核模块和vmlinuz,initrd.img,Symtem.map文件。
注:#make相当于分别执行#make bzImage 和#make modules,由于是本机替换内核,所以无需分开执行。
build 完之后 echo $? 看是否返回值为0

 sudo make  modules_install
编译成功后,系统会在/lib/modules目录下生成一个子目录,里面存放着新内核的所有可加载模块(即将编译好的modules拷贝到/lib/modules下)。

DEPMOD  4.18.04.18.0-425.13.1_default.el8_7

make install

Issue:

# 1  CONFIG_SYSTEM_TRUSTED_KEYS

此时需要在Kernel文件夹"linux-5.8.1"中,找到"./config"文件,禁掉"certs/rhel.pem":
将CONFIG_SYSTEM_TRUSTED_KEYS=“certs/rhel.pem”,
改成CONFIG_SYSTEM_TRUSTED_KEYS=""

# 2  提示"Try to disable CONFIG_DEBUG_INFO_BTF"

屏蔽这一条config

 

热门相关:流鱼无恙   裙上之臣   上神来了   爱人2015   最年轻的小姨子2