C/C++教程

centos7---升级内核到任意版本(rpm+源码)

本文主要是介绍centos7---升级内核到任意版本(rpm+源码),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

有需求需要升级内核到指定版本,在网上搜索n多资源都只是升级到了当时的稳定版本ml,有时效性,特记录完整操作流程,希望能帮助到大家.

第一季 安装内核

1、内核版本:

关于内核版本的定义:
版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)
版本命名格式为 “A.B.C”:
A是内核版本号:只有在代码和内核的概念有重大改变的时候才会改变.
B是内核主版本号:根据传统的奇-偶系统版本编号来分配:奇数为开发版,偶数为稳定版.
C是内核次版本号:在内核增加安全补丁、修复bug、实现新的特性或者驱动时都会改变.
目标版本:

[root@k3s205 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@k3s205 ~]# uname -r
5.12.7-1.el7.elrepo.x86_64

当前版本:

[root@k3s206 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@k3s206 ~]# uname  -r
3.10.0-1160.el7.x86_64
2、备份好数据防止服务器爆炸
3、配置ali源:
yum install wget -y
yum install perl -y
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
3、配置elrepo源:
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
4、查看可用的版本内核:
[root@k3s206 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
可安装的软件包
kernel-lt.x86_64                                                              5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-devel.x86_64                                                        5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-doc.noarch                                                          5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-headers.x86_64                                                      5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools.x86_64                                                        5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools-libs.x86_64                                                   5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                             5.4.124-1.el7.elrepo                                              elrepo-kernel
kernel-ml-devel.x86_64                                                        5.12.9-1.el7.elrepo                                               elrepo-kernel
kernel-ml-doc.noarch                                                          5.12.9-1.el7.elrepo                                               elrepo-kernel
kernel-ml-headers.x86_64                                                      5.12.9-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools.x86_64                                                        5.12.9-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools-libs.x86_64                                                   5.12.9-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                             5.12.9-1.el7.elrepo                                               elrepo-kernel
perf.x86_64                                                                   5.12.9-1.el7.elrepo                                               elrepo-kernel
python-perf.x86_64                                                            5.12.9-1.el7.elrepo                                               elrepo-kernel

突然懵逼,不妙...
https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
官网只显示最近两个版本8和9,就是没有目标5.12.7,good!
http://rpm.pbone.net/
继续找...
https://www.kernel.org/
...
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/tags?h=v5.12.9
终于发现了所有版本,源码,泪目...
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/snapshot/linux-5.12.7.tar.gz
PS:当然你们要是想安装最新版本的话执行下面命令

yum --enablerepo=elrepo-kernel install kernel-ml
#离线下载可以下载好rpm包安装即可
rpm -ivh kernel-ml-5.12.8-1.el7.elrepo.x86_64.rpm

congratulations!安装最新版做飞机直接跳到第五季.

第二季 源码编译

1、磨拳:

因为linux内核放置在boot分区,先确保boot剩余空间足够

[root@k3s206 ~]# df -h /boot
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb2       297M  171M  127M   58% /boot
2、编译

源码下载网址很多!

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.12.7.tar.xz
tar xvJf linux-5.12.7.tar.xz -C /usr/src/
cd /usr/src/linux-5.12.7

#基于文本菜单的配置界面,用这个命令更多是查看漏掉的依赖
make menuconfig
/bin/sh: gcc: 未找到命令

yum install -y gcc

make menuconfig
Unable to find the ncurses package.

yum install ncurses-devel.x86_64 -y

make menuconfig
/bin/sh: flex: command not found
yum install flex -y

/bin/sh: bison: 未找到命令
yum install bison -y

make menuconfig
fatal error: openssl/opensslv.h: No such file or directory:使用sudo not-get install libssl-dev解决。
include/config/auto.conf: No such file or directory:使用make oldconfig解决。

make oldconfig
Compiler is too old.
#必须要GCC version 4.9.0以上的版本才可以

不想说话,请看第三季!

第三季 更新gcc

1、安装基本工具
yum install -y bzip2 gcc gcc-c++ make

wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz

tar xvJf gcc-10.2.0.tar.xz -C /usr/src/

cd /usr/src/gcc-10.2.0

./contrib/download_prerequisites

mkdir /usr/src/gcc-10.2.0/gcc-build-10.2.0

cd /usr/src/gcc-10.2.0/gcc-build-10.2.0

../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

make  -j4
注意:根据及其性能,性能差的节点可能会需要一个小时或者更长
我的跑了近两个小时---微笑,以后再编译安装我就是dog.
make install
2、替换旧版本
which gcc
/usr/local/bin/gcc
/usr/local/bin/gcc -v
gcc version 10.2.0 (GCC)
gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
#重新登录即可
[root@db1 ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/10.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (GCC)

#如果想保留原来旧版本
# cd /usr/bin
# ln -s ${destdir}/bin/gcc gcc102
# ln -s ${destdir}/bin/g++ g++102
# ln -s ${destdir}/bin/gcj gcj102
这样,就可以分别使用gcc102、g++102、gcj102来调用GCC 10.2.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

第四季 继续编译内核

1、编译
cd /usr/src/linux-5.12.7
make menuconfig
OK!出现图形界面,没有遗漏依赖!
yum install elfutils-libelf-devel -y
make -j4

openssl/opensslv.h: No such file or directory
yum install openssl-devel -y

make -j4
make modules_install
make install

至此内核终于升级完毕!

第五季 应用内核

1、查看系统上的所有的内核
[root@k3s206 5.12.8]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.12.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-1ac2c5ff63894534b3eda60cfa75eeea) 7 (Core)
2、修改默认启动项

默认启动项由/etc/default/grub中的GRUB_DEFAULT控制。
如果GRUB_DEFAULT=saved,则该参数将存储在/boot/grub2/grubenv中。
可使用grub2-editenv list查看:

[root@localhost ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
原有内核建议不删除,centos也支持多内核,防止服务器爆炸
grub2-set-default 0
# 设置新内核为grub2的默认版本
#grub2-set-default 'CentOS Linux (5.12.7-1.el7.elrepo.x86_64) 7 (Core)'
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

#有时候会有重启网卡丢失情况出现
查看使用的网卡驱动: # lspci -v
重新加载下r8169驱动即可解决。
1. #rmmod r8169 
2. #modprobe r8169
3. #systemctl restart network

注意:yum update会升级内核
如果不想升级内核及系统版本,则在执行 yum update之前在 /etc/yum.conf 的 [main] 后面添加以下配置
exclude=kernel*
exclude=centos-release*

#内核删除---谨慎操作
rpm -qa | grep kernel
yum remove kernel-ml-5.12.7-1.el7.elrepo.x86_64

#方法2、yum remove 删除旧内核的 RPM 包
$ yum remove kernel-3.10.0-514.el7.x86_64 \
kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \
kernel-tools-3.10.0-862.11.6.el7.x86_64 \
kernel-3.10.0-862.11.6.el7.x86_64
这篇关于centos7---升级内核到任意版本(rpm+源码)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!