linux使用rpm升级内核,linux 驱动升级好方法---源码包变rpm包安装

一、前绪

工作中我们经常要升级某系设备的驱动,例如网卡驱动,raid卡驱动等,尤其最近intel开始推售他们的新型CPU,新型网卡,所以驱动升级变得越来越频繁。

这种升级的操作给运维带来很多麻烦,所以在思考怎样把工作做的简单点。然后找到了一个方法,制作RPM包,然后更新到yum源中,这样我们使用yum install ** 就可以直接升级我们的驱动。会变得非常方便管理。再也不怕应用运维来找我麻烦了。

二、制作RPM包

这里我以新型网卡X710的网卡驱动i40e作为例子讲解

准备环境。

查看现在的系统版本、加载驱动、i40e驱动的版本和下载相应的网卡驱动包。

[root@test01 ~]# cat /etc/centos-release

CentOS Linux release 7.4.1708 (Core)

[root@test01 ~]# wget https://downloadmirror.intel.com/24411/eng/i40e-2.4.10.tar.gz

[root@test01 ~]# ls

bak i40e-2.4.10.tar.gz

[root@test01 ~]# lsmod |grep i40e

[root@test01 ~]# modinfo i40e |grep version

version: 1.6.27-k

[root@test01 ~]#

打包SRPM和RPM

解压源码包,查找*.spec文件,然后打包。

[root@test01 ~]# tar -xvf i40e-2.4.10.tar.gz

[root@test01 ~]# cd i40e-2.4.10/

[root@test01 i40e-2.4.10]# ls

COPYING i40e.7 i40e.spec pci.updates README scripts src SUMS

[root@test01 i40e-2.4.10]# rpmbuild -ba i40e.spec

-bash: rpmbuild: command not found

[root@test01 i40e-2.4.10]# yum install rpm-build

[root@test01 i40e-2.4.10]# rpmbuild -ba i40e.spec

error: File /root/rpmbuild/SOURCES/i40e-2.4.10.tar.gz: No such file or directory

[root@test01 i40e-2.4.10]# cp ~/i40e-2.4.10.tar.gz /root/rpmbuild/SOURCES/

[root@test01 i40e-2.4.10]# cp ~/i40e-2.4.10/i40e.spec /root/rpmbuild/SPECS/

[root@test01 i40e-2.4.10]# cd

虽然有报错,但是会自动生成/root/rpmbuild。将相应的源码包和spec文件放到相应的目录中,最终结果如下:

[root@test01 ~]# tree /root/rpmbuild/

/root/rpmbuild/

├── BUILD

├── BUILDROOT

├── RPMS

├── SOURCES

│ └── i40e-2.4.10.tar.gz

├── SPECS

│ └── i40e.spec

└── SRPMS

6 directories, 2 files

[root@test01 ~]#

编译成为RPM和SRPM

[root@test01 ~]# cd /root/rpmbuild/SPECS/

[root@test01 SPECS]# rpmbuild -ba i40e.spec

...

make: Entering directory `/root/rpmbuild/BUILD/i40e-2.4.10/src'

common.mk:101: *** Kernel header files not in any of the expected locations.

common.mk:102: *** Install the appropriate kernel development package, e.g.

common.mk:103: *** kernel-devel, for building kernel modules and try again. Stop.

make: Leaving directory `/root/rpmbuild/BUILD/i40e-2.4.10/src'

error: Bad exit status from /var/tmp/rpm-tmp.ZM26sO (%build)

RPM build errors:

Bad exit status from /var/tmp/rpm-tmp.ZM26sO (%build)

[root@test01 SPECS]#

还是报错,这个因为我的系统没有安装相应的kernel-devel,而我要安装i40e驱动需要依赖这个。那么下面我们来进行安装,这里需要注意一点,kernel-devel要求的版本必须和当前的内核版本一致。

[root@test01 SPECS]# uname -r

3.10.0-693.el7.x86_64

[root@test01 SPECS]# rpm -ivh http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm

Retrieving http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:kernel-devel-3.10.0-693.el7 ################################# [100%]

[root@test01 SPECS]# rpmbuild -ba i40e.spec

...

+ rm -rf /root/rpmbuild/BUILDROOT/i40e-2.4.10-1.x86_64

+ exit 0

[root@test01 SPECS]# tree /root/rpmbuild/

/root/rpmbuild/

├── BUILD

│ └── i40e-2.4.10

│ ├── ...

├── BUILDROOT

├── RPMS

│ └── x86_64

│ └── i40e-2.4.10-1.x86_64.rpm

├── SOURCES

│ └── i40e-2.4.10.tar.gz

├── SPECS

│ └── i40e.spec

└── SRPMS

└── i40e-2.4.10-1.src.rpm

10 directories, 77 files

至此,我们要的RPM和SRPM包都已经编译安装完成,分别放到了/root/rpmbuild/RPMS和/root/rpmbuild/SRPMS文件夹里。

SRPM包也非常有用,这里我不多讲解了。

三、添加YUM容器

这里我偷懒了,只是搭建的是本地YUM源,实际工作中可以使用http服务,大致过程是一样的。

[root@test01 ~]# cat /etc/yum.repos.d/CentOS-Test.repo

[c7-Test]

name=CentOS-$releasever - Test

baseurl=file:///data/Test

gpgcheck=0

enabled=1

[root@test01 ~]# mkdir -p /data/Test

[root@test01 ~]# cp /root/rpmbuild/RPMS/x86_64/i40e-2.4.10-1.x86_64.rpm /data/Test/

[root@test01 ~]# createrepo /data/Test/

[root@test01 ~]# createrepo --update /data/Test/

[root@test01 ~]# yum clean all

[root@test01 ~]# yum repolist

Loaded plugins: fastestmirror, langpacks

c7-Test

(1/1): c7-Test/primary_db

repo id repo name status

c7-Test CentOS-7 - Test 1

repolist: 11,321

[root@test01 ~]#

四、验证测试

[root@test01 ~]# yum install i40e

...

Installed:

i40e.x86_64 0:2.4.10-1

Complete!

[root@test01 ~]# lsmod |grep i40e

[root@test01 ~]# modprobe i40e

[root@test01 ~]# lsmod |grep i40e

i40e 365712 0

ptp 19231 1 i40e

[root@test01 ~]# modinfo i40e |grep version

version: 2.4.10

rhelversion: 7.4

srcversion: 3977C21019A3C4865FF253A

vermagic: 3.10.0-693.el7.x86_64 SMP mod_unload modversions

[root@test01 ~]#

五、问题

这种方法虽然使驱动安装变的方便,但是有一个比较麻烦的缺点,就是内核版本。因为这个RPM是基于3.10.0-693.el7.x86_64内核版本生成的,所以只能安装到相应内核版本的系统上。

在实际工作环境中,内核版本可能会因为业务的需求进行升级,升级完之后再用YUM更新驱动的话,很可能会安装不上。能想到的就是给对应每个内核制作一个RPM包,虽然能一劳永逸,不过这也是工作量啊。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值