阿威十八式 发表于 2024-4-27 07:17
  
打卡学习,感谢大佬分享!
guhui 发表于 2024-5-28 09:33
  
非常好的实践教程,谢谢分享
武汉智云韩俊波 发表于 2024-6-4 10:15
  
非常好的实践教程,谢谢分享
火影忍者 发表于 2024-9-20 09:31
  
感谢分享,学习一下~
#原创分享#CentOS 7 编译安装最新版内核 Linux Kernel 6.5.2
  

ling218cn 277013人觉得有帮助

{{ttag.title}}
本帖最后由 ling218cn 于 2023-9-14 12:51 编辑

实验环境
- CentOS 7.9
- Linux Kernel 6.5.2

实验需求
为我的 CentOS7.9 虚拟机编译安装最新内核版本
CentOS7.9 升级前的内核版本:
[root@localhost ~]# uname -r
3.10.0-1160.95.1.el7.x86_64

CentOS7.9 升级后的内核版本:
[root@localhost ~]# uname -sr
Linux 6.5.2

实验解法

1、安装编译环境
yum groupinstall "Development Tools" -y && \
yum install -y \
        openssl-devel \
        rpm-build \
        redhat-rpm-config \
        asciidoc \
        hmaccalc \
        perl-ExtUtils-Embed \
        pesign \
        xmlto \
        audit-libs-devel \
        binutils-devel \
        elfutils-devel \
        elfutils-libelf-devel \
        ncurses-devel \
        newt-devel \
        numactl-devel \
        pciutils-devel \
        python-devel \
        zlib-devel \
        rpm-build

2、更新GCC版本
CentOS7 自带的 GCC 是 4.8.5 版本,编译内核会导致报错
以下是安装新的GCC操作:(多GCC版本共存)
yum install scl-utils centos-release-scl devtoolset-8-gcc* -y
scl enable devtoolset-8 bash  # 该操作允许GCC多版本共存

以下是永久替换旧的GCC操作:(只使用GCC新版本)
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc

mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++

3、下载内核源代码并解压内核源代码
从清华大学镜像源下载 Linux Kernel 6.5.2 的源代码包。
注意:一定要执行 `cd linux-6.5.2` 命令,因为接下的操作默认都是这该目录下操作的。
tar -zxvf linux-6.5.2.tar.gz
cd linux-6.5.2

4、配置 config
方法一:执行以下这个命令,会进入一个配置界面,如果看不懂就保持默认配置,Tab键选定 `save` 然后回车,根据提示保存 `.config` 文件。
make menuconfig

方法二:根据现有内核参数去生成新的配置参数文件 `.config`
`3.10.0-1160.95.1.el7.x86_64` 这个文件在你的机器里可能并不相符,可以执行 `ls -l /boot/` 命令查看你的这个文件名称。
cp /boot/config-3.10.0-1160.95.1.el7.x86_64 .config
make oldconfig # 一路回车

5、编译安装内核
`-j 12` 参数是因为我给虚拟机CPU分配了12核心,根据自己的机器情况修改。
`make INSTALL_MOD_STRIP=1 modules_install > /dev/null` 把内核模块的 debug 信息去掉,节约磁盘空间
make -j 12 all
make INSTALL_MOD_STRIP=1 modules_install > /dev/null && make modules_install && make install

6、设置以后默认从新的 Kernel 启动
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg && sudo grub2-set-default 0 && sudo grub2-mkconfig -o /boot/grub2/grub.cfg

7、编译成 rpm 包
编译出的 rpm 包可以在其他的 CeonOS7.9 机器上直接安装升级内核。
如果需要压缩体积,可以将 `make rpm-pkg -j 12` 换成 `make INSTALL_MOD_STRIP=1 rpm-pkg -j 12`
命令执行完成后,会在当前目录的 `~/rpmbuild/RPMS/x86_64/` 下出现三个 rpm 安装包
在其他CentOS7机器上安装这三个 rpm 包,就可以更新内核了。
make rpm-pkg -j 12
make INSTALL_MOD_STRIP=1 rpm-pkg -j 12
yum localinstall kernel* -y

安装这三个 rpm 包后,还需要更新一下启动项。
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg && sudo grub2-set-default 0 && sudo grub2-mkconfig -o /boot/grub2/grub.cfg

8、删除多余内核
使用 `uname -a` 查看当前使用的内核
[root@localhost ~]# uname -a
Linux localhost.localdomain 6.5.2 #1 SMP PREEMPT_DYNAMIC Fri Sep  8 13:10:46 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

使用 `rpm -qa|grep kernel` 查看通过 `rpm` 安装的内核
[root@localhost ~]# rpm -qa | grep kernel
kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64
kernel-3.10.0-1160.95.1.el7.x86_64
kernel-tools-3.10.0-1160.95.1.el7.x86_64
kernel-debug-devel-3.10.0-1160.95.1.el7.x86_64
kernel-headers-3.10.0-1160.95.1.el7.x86_64
kernel-3.10.0-1160.el7.x86_64

使用 `yum remove [多余内核]` 删除多余内核,执行多次删除多余的 kernel
[root@localhost ~]# yum remove kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package kernel-tools-libs.x86_64 0:3.10.0-1160.95.1.el7 will be erased
--> Processing Dependency: kernel-tools-libs = 3.10.0-1160.95.1.el7 for package: kernel-tools-3.10.0-1160.95.1.el7.x86_64
--> Processing Dependency: libcpupower.so.0()(64bit) for package: kernel-tools-3.10.0-1160.95.1.el7.x86_64
--> Running transaction check
---> Package kernel-tools.x86_64 0:3.10.0-1160.95.1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
Package                         Arch                 Version                              Repository              Size
========================================================================================================================
Removing:
kernel-tools-libs               x86_64               3.10.0-1160.95.1.el7                 @updates                18 k
Removing for dependencies:
kernel-tools                    x86_64               3.10.0-1160.95.1.el7                 @updates               337 k

Transaction Summary
========================================================================================================================
Remove  1 Package (+1 Dependent package)

Installed size: 355 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : kernel-tools-3.10.0-1160.95.1.el7.x86_64                                                             1/2
  Erasing    : kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64                                                        2/2
  Verifying  : kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64                                                        1/2
  Verifying  : kernel-tools-3.10.0-1160.95.1.el7.x86_64                                                             2/2

Removed:
  kernel-tools-libs.x86_64 0:3.10.0-1160.95.1.el7

Dependency Removed:
  kernel-tools.x86_64 0:3.10.0-1160.95.1.el7

Complete!


使用 `grub2-mkconfig -o /boot/grub2/grub.cfg` 更新引导配置

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.5.2
Found initrd image: /boot/initramfs-6.5.2.img
Found linux image: /boot/vmlinuz-0-rescue-0197527dc1e0e34ab25e04d6402a7388
Found initrd image: /boot/initramfs-0-rescue-0197527dc1e0e34ab25e04d6402a7388.img
done

打赏鼓励作者,期待更多好文!

打赏
25人已打赏

发表新帖
热门标签
全部标签>
有一说一
纪元平台
功能体验
存储
新版本体验
每日一问
专家分享
迁移
标准化排查
信服课堂视频
GIF动图学习
虚拟机
每周精选
项目案例
地址转换
追光者计划
技术笔记
安全攻防
问题分析处理
流量管理
终端接入
「智能机器人」
专家说
声音值千金
工具体验官
日志审计
答题自测
上网策略
资源访问
排障笔记本
产品预警公告
技术晨报
升级
解决方案
设备维护
技术争霸赛
以战代练
场景专题
社区新周刊
全能先锋系列
产品连连看
VPN 对接
功能咨询
秒懂零信任
文档捉虫
齐鲁TV
高频问题集锦
【 社区to talk】
云化安全能力
产品解析
2025年技术争霸赛
安装部署配置
测试报告
SDP百科
华北区交付直播
行业实践
MVP
每日一记
运维工具
原创分享
sangfor周刊
SANGFOR资讯
授权
玩转零信任
山东区技术晨报
故障笔记
排障那些事
升级&主动服务
产品知识周周练
畅聊IT
专家问答
技术圆桌
在线直播
信服故事
卧龙计划
平台使用
技术盲盒
北京区每日一练
产品动态
用户认证
技术顾问
POC测试案例
安全效果
关键解决方案
S豆商城资讯
2023技术争霸赛专题
天逸直播
产品体验官
VMware替换
网络基础知识
华北区拉练
西北区每日一问
热门活动
高手请过招
2024年技术争霸赛

本版版主

5
2
0

发帖

粉丝

关注

本版热帖

本版达人