关于内核版本的定义:
版本性质:主分支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
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
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
[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!安装最新版做飞机直接跳到第五季.
因为linux内核放置在boot分区,先确保boot剩余空间足够
[root@k3s206 ~]# df -h /boot 文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb2 297M 171M 127M 58% /boot
源码下载网址很多!
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以上的版本才可以
不想说话,请看第三季!
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
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++等命令。
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
至此内核终于升级完毕!
[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)
默认启动项由/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