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