写在前面的废话
自2024年官方彻底抛弃CentOS 7后,CentOS 7的默认Linux内核版本便永远定格在了3.10。
即使本人是一个“能用就行”主义者,但3.x的内核再怎么说也太老了。就比如BBR拥塞控制算法(2016年发布),支持的最低内核版本都是4.9。
许久之前,升级内核还可以用过yum install这种简单粗暴的方式,然而原先用来安装内核的仓库已经删库跑路。所以本文带你直接下载Linux内核的源码,并用编译源码的方式将内核版本升级至6.6.52。
为什么是6.6?
CentOS 7的glibc 2.17和内核工具链已经十分老旧,能稳定编译的最高内核版本大约是6.6 LTS。
据说6.7~6.9也能编译,但某些功能会自动禁用。而从6.10开始大量功能依赖新工具链,CentOS 7几乎无法完整编译。
同时6.6似乎也是最后一个不依赖Rust的LTS内核。老旧的工具链对Rust并不友好。
事前准备
如果你还没有安装编译所需的工具,且没有更新CentOS官方仓库地址,请先阅读这篇文章 完成仓库更新。
然后通过YUM安装编译工具:
yum groupinstall -y "Development Tools"
yum install -y ncurses-devel openssl-devel elfutils-libelf-devel bc flex bison
还有就是最重要的:为避免悲剧,更换内核前请注意备份系统!
接下来看我操作
- 在你觉得合适的目录创建脚本文件
compile-kernal.sh,内容如下:
#!/bin/bash
set -e
KVER=${KVER:-6.6.52}
JOBS=${JOBS:-$(nproc)}
echo "[1/4] 下载内核源码..."
cd /usr/src
curl -LO https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$KVER.tar.xz
tar -xf linux-$KVER.tar.xz
cd linux-$KVER
echo "[2/4] 生成配置..."
cp -v /boot/config-$(uname -r) .config || true
yes "" | make oldconfig
echo "[3/4] 编译内核 + 模块..."
make -j"$JOBS"
make -j"$JOBS" modules
echo "[4/4] 安装内核..."
make modules_install
make install
grub2-mkconfig -o /boot/grub2/grub.cfg
注意:该脚本执行的任务包括了内核安装。如果希望仅编译不安装,请删除脚本的最后4行(“[4/4] 安装内核”部分),并跳过以下步骤3~5。
- 用
chmod +x ./compile-kernal.sh为脚本文件添加执行权限,然后root执行compile-kernal.sh。 -
用以下命令查看内核列表,确定新内核在列表中的位置:
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
- 设置内核启动顺序并重启
# 如果在上一步中新内核显示在列表第一位,那么这里的数字就是0。以此类推:
grub2-set-default 0
reboot
- 重启完成后,用
uname -a命令确认内核升级完成。
写在最后的废话
有人说,换成更加现代操作系统不行吗?
还真不一定行。一个典型的例子就是阿里云那个最便宜的t6突发实例。
CentOS 7在上面稳定运行了将近一坤年。前几天本人将其OS更换为RockyLinux 10。
谁曾想以前从未感觉到,这服务器性能低到令人发指。dnf update级别的命令可以让它直接宕机(就是连后台VNC进去都无法操作的那种),突发实例的CPU积分更是瞬间清零。
最后还是老老实实换回了CentOS 7,依旧能平稳运行。看来这古董系统还要再战半个世纪。
