驅(qū)動(dòng)升級(jí)好方法---源碼包變r(jià)pm包

一、前緒

工作中我們經(jīng)常要升級(jí)某系設(shè)備的驅(qū)動(dòng),例如網(wǎng)卡驅(qū)動(dòng),raid卡驅(qū)動(dòng)等,尤其最近intel開始推售他們的新型CPU,新型網(wǎng)卡,所以驅(qū)動(dòng)升級(jí)變得越來越頻繁。
這種升級(jí)的操作給運(yùn)維帶來很多麻煩,所以在思考怎樣把工作做的簡(jiǎn)單點(diǎn)。然后找到了一個(gè)方法,制作RPM包,然后更新到y(tǒng)um源中,這樣我們使用yum install ** 就可以直接升級(jí)我們的驅(qū)動(dòng)。會(huì)變得非常方便管理。再也不怕應(yīng)用運(yùn)維來找我麻煩了。

二、制作RPM包

這里我以新型網(wǎng)卡X710的網(wǎng)卡驅(qū)動(dòng)i40e作為例子講解

  1. 準(zhǔn)備環(huán)境。
    查看現(xiàn)在的系統(tǒng)版本、加載驅(qū)動(dòng)、i40e驅(qū)動(dòng)的版本和下載相應(yīng)的網(wǎng)卡驅(qū)動(dòng)包。
[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 ~]# 
  1. 打包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

雖然有報(bào)錯(cuò),但是會(huì)自動(dòng)生成/root/rpmbuild。將相應(yīng)的源碼包和spec文件放到相應(yīng)的目錄中,最終結(jié)果如下:

[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 ~]#
  1. 編譯成為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]# 

還是報(bào)錯(cuò),這個(gè)因?yàn)槲业南到y(tǒng)沒有安裝相應(yīng)的kernel-devel,而我要安裝i40e驅(qū)動(dòng)需要依賴這個(gè)。那么下面我們來進(jìn)行安裝,這里需要注意一點(diǎn),kernel-devel要求的版本必須和當(dāng)前的內(nèi)核版本一致。

[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包都已經(jīng)編譯安裝完成,分別放到了/root/rpmbuild/RPMS和/root/rpmbuild/SRPMS文件夾里。
SRPM包也非常有用,這里我不多講解了。

三、添加YUM容器

這里我偷懶了,只是搭建的是本地YUM源,實(shí)際工作中可以使用http服務(wù),大致過程是一樣的。

[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 ~]#

四、驗(yàn)證測(cè)試

[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 ~]#

五、問題

這種方法雖然使驅(qū)動(dòng)安裝變的方便,但是有一個(gè)比較麻煩的缺點(diǎn),就是內(nèi)核版本。因?yàn)檫@個(gè)RPM是基于3.10.0-693.el7.x86_64內(nèi)核版本生成的,所以只能安裝到相應(yīng)內(nèi)核版本的系統(tǒng)上。
在實(shí)際工作環(huán)境中,內(nèi)核版本可能會(huì)因?yàn)闃I(yè)務(wù)的需求進(jìn)行升級(jí),升級(jí)完之后再用YUM更新驅(qū)動(dòng)的話,很可能會(huì)安裝不上。能想到的就是給對(duì)應(yīng)每個(gè)內(nèi)核制作一個(gè)RPM包,雖然能一勞永逸,不過這也是工作量啊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://blog.csdn.net/mathewsking/article/details/8211273 ...
    liuboxx1閱讀 6,238評(píng)論 1 1
  • Linux程序包的管理需要依賴程序包管理工具,程序包管理工具可以實(shí)現(xiàn)程序的安裝、升級(jí)、卸載、查詢和校驗(yàn),等等相關(guān)操...
    學(xué)渣角鹿白閱讀 426評(píng)論 0 1
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,346評(píng)論 0 5
  • 軟件包基礎(chǔ) 包管理器 二進(jìn)制應(yīng)用程序的組成部分:二進(jìn)制文件,庫(kù)文件,配置文件,幫助文件 程序包管理器 debian...
    毛利卷卷發(fā)閱讀 1,356評(píng)論 0 2
  • 吹走鍵盤上的灰塵,想給即將過去的2016留下點(diǎn)什么,一時(shí)不知道從何寫起。放假回家已經(jīng)十來天了,和大多數(shù)放假回家的學(xué)...
    童圓圓O_O閱讀 625評(píng)論 0 1

友情鏈接更多精彩內(nèi)容