centos7物理机升级内核

一、源码安装gcc12.2.0

1、先安装wget

[root@localhost ~]# yum -y install wget

2、下载gcc12.2.0

[root@localhost ~]# wget http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz

3、安装gcc所需的编译环境

安装gcc-c++编译环境,要不然后面make gcc 12.2.0会报错

[root@localhost ~]# yum -y install gcc-c++

4、安装gcc所需的依赖包

执行下面这条命令,获取安装gcc所需要的依赖项,当然你也可以在这里:https://ftp.gnu.org/gnu/找到gmp mpfr mpc这几个包,下载后解压放入gcc根目录下:

当运行./contrib/download_prerequisites这个命令后,可能会报bzip2找不到,这是因为没有安装bzip的解压,安装即可。

[root@localhost ~]# tar -zxf gcc-12.2.0.tar.gz
[root@localhost ~]# yum -y install bzip2
[root@localhost ~]# cd gcc-12.2.0
[root@localhost gcc-12.2.0]# ./contrib/download_prerequisites

5、开始编译gcc源码

[root@localhost gcc-12.2.0]# ./configure --prefix=/usr/local/gcc-12.2.0 --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
[root@localhost gcc-12.2.0]# make -j 4
[root@localhost gcc-12.2.0]# make install
# 这里解释下各参数代表的意思

# –-enable-languages表示你要让你的gcc支持哪些编程语言

# -–disable-multilib表示编译器不编译成其他平台的可执行代码;

# -–disable-checking表示生成的编译器在编译过程中不做额外检查

# –-enable-checking=xxx 表示编译过程中增加XXX检查

# –prefix=/usr/local/gcc-12.2.0 指定安装路径

# –enable-bootstrap 表示用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。
# 编译时间安装大约2小时左右,慢慢等吧…

6、设置环境变量

[root@localhost ~]# touch /etc/profile.d/gcc.sh
[root@localhost ~]# chmod 777 /etc/profile.d/gcc.sh
[root@localhost ~]# vi /etc/profile.d/gcc.sh
#加入以下代码:
export PATH=/usr/local/gcc-12.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# source /etc/profile.d/gcc.sh

其实到这一步就可以编译网卡驱动了,但是本着全套的原则,完成全步骤。

7、设置头文件

[root@localhost ~]# ls -sv /usr/local/gcc-12.2.0/include/ /usr/include/gcc

8、设置库文件

[root@localhost ~]# touch /etc/ld.so.conf.d/gcc.conf
[root@localhost ~]# chmod 777 /etc/ld.so.conf.d/gcc.conf
[root@localhost ~]# vi /etc/ld.so.conf.d/gcc.conf
#加入下列内容:
/usr/local/gcc/lib64

9、加载动态链接库

[root@localhost ~]# ldconfig -v
[root@localhost ~]# ldconfig -p | grep gcc

10、配置完成,测试版本号

[root@localhost ~]# gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-12.2.0/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:./configure --prefix=/usr/local/gcc-12.2.0 --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 12.2.0 (GCC)

二、查看网卡型号,并下载网卡驱动

1、安装lspci查看网卡型号

[root@localhost ~]# yum -y install pciutils
[root@localhost ~]# lspci -v

03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)
        Subsystem: Gigabyte Technology Co., Ltd Onboard Ethernet
        Flags: bus master, fast devsel, latency 0, IRQ 129
        I/O ports at 3000 [size=256]
        Memory at a1104000 (64-bit, non-prefetchable) [size=4K]
        Memory at a1100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [70] Express Endpoint, MSI 01
        Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Virtual Channel
        Capabilities: [160] Device Serial Number be-89-c6-5e-d5-e0-00-00
        Capabilities: [170] Latency Tolerance Reporting
        Capabilities: [178] L1 PM Substates
        Kernel driver in use: r8169
        Kernel modules: r8169

从这里可以看出网卡的型号是RTL8111/8168/8411,但是centos7 3.10内核识别为8169,所以导致升级完内核后会丢失网卡,所以我们要下载网卡驱动,然后上传到centos7。官网链接为:Realtek PCIe FE / GBE / 2.5G / Gaming Ethernet Family Controller Software - 瑞昱半导体

2、上传驱动到centos7

[root@localhost ~]# yum -y install lrzsz
[root@localhost ~]# rz
#这时会弹出对话框,找到下载的驱动,我这里是r8168-8.050.03,上传!
[root@localhost ~]# tar -jxf r8168-8.050.03.tar.bz2

三、升级内核

1.查看内核版本

[root@localhost ~]# uname -r

2.下载ELRepo软件仓库包

[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3.安装ELRepo软件仓库的yum源

[root@localhost ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-6.el7.elrepo.noarch.rpm

4.查询可用内核版本

[root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

5.启用 elrepo 软件源并下载安装最新稳定版内核

#lt为长期稳定版,ml为主线产品,这里我们选lt版;
#Linux内核版本大致可以分为以下几类:
#mainline:主线版本。
#stable:稳定版。主线版本在时机成熟时会发布稳定版。由于内核社区人力有限,因此较老版本会停止维护,标记为EOL(End of Life)的版本表示不再支持。
#longterm:长期支持版(Long Term Support)。长期支持版的内核版本停止维护后会标记EOL。
#linux-next:代码提交周期结束之前生成的快照版本(snapshot),用于给Linux代码贡献者们做测试。
#比如我在CentOS 7系统上可以查看内核版本号为:
#3.10.0-1160.15.2.el7.x86-64
#第一个数字:3, 主版本号
#第二个数字:10, 次版本号,偶数表示是稳定版本
#第三个数字:0, 修订版本号
#第四组数字:1160.15.2,表示发行版本的补丁版本
#el7:表示正在使用的内核是 RedHat / CentOS 系列发行版专用内核
#x86_64:表示采用的是64位的CPU
[root@localhost ~]# yum --enablerepo=elrepo-kernel install kernel-lt -y

6.查看系统可用内核,并设置内核启动顺序

[root@localhost ~]# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2-efi.cfg

7.生成 grub 配置文件

机器上存在多个内核,我们要使用最新版本,可以通过 grub2-set-default 0 命令生成 grub 配置文件

[root@localhost ~]# grub2-set-default 0					#初始化页面的第一个内核将作为默认内核
[root@localhost ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg		#重新创建内核配置

8、安装内核编译环境

[root@localhost ~]# yum --disablerepo=’*’ --enablerepo=elrepo-kernel install kernel-lt-devel
[root@localhost ~]# yum remove kernel-headers
[root@localhost ~]# yum --disablerepo=’*’ --enablerepo=elrepo-kernel install kernel-lt-headers

这步如果不做就会报/lib/modules/xxx/kernel/build No such file or directory。错误

# --disablerepo=\* 忽略所有的源

# --enablerepo=media-baseos 使用media-baseos源

9.重启系统并进入新内核,安装网卡驱动

[root@localhost ~]# reboot
[root@localhost ~]# cd r8168-8.050.03
[root@localhost r8168-8.050.03]# ./autorun.sh

10.删除旧内核

[root@localhost ~]# yum -y remove kernel kernel-tools