目錄
- 一.關于srpm包
- 二.srpm包和rpm包的區別
- 三.不對srpm包做修改,直接安裝srpm包
- 四.對srpm包的原始碼進行修改,然后安裝srpm包
一.關于srpm包
? SRPM包是Source RPM的簡稱,SRPM包里包含有源代碼,如果想要安裝SRPM包,需要以RPM管理的方式編譯,將SRPM編譯成為
RPM檔案,然后將編譯完成的RPM檔案安裝到Linux系統中,SRPM 最大的優點就是可以讓使用者自行修改設定引數,以符合使用者自己
的 Linux 環境;
二.srpm包和rpm包的區別
| 檔案格式 | 軟體包包名格式 | 是否可直接安裝 | 內含程式型別 | 可否修改引數并編譯 |
|---|---|---|---|---|
| RPM | xxx.rpm | 可 | 已編譯的二進制檔案 | 不可 |
| SRPM | xxx.src.rpm | 不可 | 源代碼 | 可 |
三.不對srpm包做修改,直接安裝srpm包
1.當我們拿到一個srpm包的時候,我們不準備對srpm包做修改,要直接安裝的時候,有兩種安裝方法:
- ? 方法一:rpmbuild --rebuild ***.src.rpm ,這個命令將src.rpm包進行“編譯”與“打包”產生 RPM安裝包,然后我們可以使用rpm -ivh進行安裝;
- ? 方法二:rpmbuild --recompile ***.src.rpm,這個命令將src.rpm包進行“編譯”,“打包”和安裝,執行這個命令后srpm包已經安裝好了,
2.使用第一種方法安裝srpm包(rpmbuild --rebuild)
#準備一個srpm原始碼包lrzsz
[root@node5 ~]# ll lrzsz-0.12.20-27.1.el6.src.rpm
-rw-r--r-- 1 root root 290240 Oct 25 2018 lrzsz-0.12.20-27.1.el6.src.rpm
[root@node5 ~]# rpm -q lrzsz
lrzsz-0.12.20-36.el7.x86_64
#首先卸載系統中已經安裝的lrzsz程式
[root@node5 ~]# yum remove lrzsz -y
[root@node5 ~]# rpm -q lrzsz
package lrzsz is not installed
#將src.rpm包進行“編譯”與“打包”產生 RPM安裝包
[root@node5 ~]# rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm
-bash: rpmbuild: command not found
#發現沒有rpmbuild這個命令,需要先安裝一下
[root@node5 ~]# yum install rpm-build
#將src.rpm包進行“編譯”與“打包”產生 RPM安裝包
[root@node5 ~]# rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm
[root@node5 ~]# echo $?
0
[root@node5 ~]# ls rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
[root@node5 ~]# ls rpmbuild/RPMS/
x86_64
#rpmbuild --rebuild這一步產生的rpm安裝包放在了/root/rpmbuild/RPMS/x86_64/下面
[root@node5 ~]# ls rpmbuild/RPMS/x86_64/
lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm lrzsz-debuginfo-0.12.20-27.1.el7.centos.x86_64.rpm
#安裝rpm包
[root@node5 ~]# rpm -ivh /root/rpmbuild/RPMS/x86_64/lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:lrzsz-0.12.20-27.1.el7.centos ################################# [100%]
#自此,lrzsz已經重新安裝
[root@node5 ~]# rpm -q lrzsz
lrzsz-0.12.20-27.1.el7.centos.x86_64
四.對srpm包的原始碼進行修改,然后安裝srpm包
1.srpm包里含有源代碼,那肯定就有組態檔和相關目錄,下面先介紹srpm包中各個目錄的作用,解壓srpm包之后,一般會生成一個rpmbuild目錄,我們是在/root目錄下生成的,所以解壓srpm包之后,對應的檔案都在/root/rpmbuild/下面:
#解壓srpm包
[root@node5 ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm
[root@node5 ~]# ls /root/rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
| 目錄名 | 目錄作用描述 |
|---|---|
| /root/rpmbuild/SPECS | 這個目錄當中放置的是該軟體的組態檔,例如這個軟體的資訊引數、設定專案等等都放置在這里,SPECS目錄里一般有***.spec組態檔; |
| /root/rpmbuild/SOURCES | 這個目錄當中放置的是該軟體的原始檔案 (*.tar.gz 的檔案) 以及 config 這個組態檔; |
| /root/rpmbuild/BUILD | 在編譯的程序中,有些暫存的資料都會放置在這個目錄當中; |
| /root/rpmbuild/RPMS | 經過編譯之后,并且順利的編譯成功之后,將打包完成的檔案放置在這個目錄當中,里頭有包含了 x86_64, noarch…. 等等的檔案; |
| /root/rpmbuild/SRPMS | 與 RPMS 內相似的,這里放置的就是 SRPM 封裝的檔案,有時候你想要將你的軟體用 SRPM 的方式釋出時, 你的 SRPM 檔案就會放置在這個目錄中了, |
2.當我們拿到一個srpm包的時候,我們準備對srpm包做修改,一般都是修改SPECS目錄下的***.spec檔案,然后進行編譯成為rpm包或者srpm包,編譯指令有兩個:
? rpmbuild -ba rpmbuild/SPECS/***.spec #編譯產生 RPM 檔案與 SRPM 檔案
? rpmbuild -bb rpmbuild/SPECS/***.spec #僅編譯成 RPM 檔案
#首先下載我們需要的srpm包
[root@node5 ~]# wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm
#解壓srpm包,會有一堆warn,但是不影響
[root@node5 ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm
#解壓srpm包之后,檔案都在rpmbuild目錄中
[root@node5 ~]# ls rpmbuild/
SOURCES SPECS
[root@node5 ~]# ls rpmbuild/SPECS/
ntp.spec
[root@node5 ~]# ls rpmbuild/SOURCES/
ntp-4.2.4p7-getprecision.patch ntp-4.2.6p4-droproot.patch ntp-4.2.6p5-fipsmd5.patch ntp-4.2.6p5-pwcipher.patch ntp.cryptopw ntp.keys ntp.step-tickers
ntp-4.2.6p1-cmsgalign.patch ntp-4.2.6p4-htmldoc.patch ntp-4.2.6p5-hexpw.patch ntp-4.2.6p5-refreshroute.patch ntpdate.service ntpstat-0.2-clksrc.patch ntp-wait.service
ntp-4.2.6p1-linkfastmath.patch ntp-4.2.6p5-cve-2014-9293.patch ntp-4.2.6p5-identlen.patch ntp-4.2.6p5-rootdisp.patch ntpdate.sysconfig ntpstat-0.2-errorbit.patch sntp.service
ntp-4.2.6p1-retcode.patch ntp-4.2.6p5-cve-2014-9294.patch ntp-4.2.6p5-logdefault.patch ntp-4.2.6p5.tar.gz ntpdate.wrapper ntpstat-0.2-maxerror.patch sntp.sysconfig
ntp-4.2.6p1-sleep.patch ntp-4.2.6p5-cve-2014-9295.patch ntp-4.2.6p5-mlock.patch ntp-4.2.6p5-updatebclient.patch ntp.dhclient ntpstat-0.2-multipacket.patch
ntp-4.2.6p3-bcast.patch ntp-4.2.6p5-cve-2014-9296.patch ntp-4.2.6p5-multiopts.patch ntp-4.2.6p5-xleap.patch ntpd.service ntpstat-0.2-sysvars.patch
ntp-4.2.6p3-broadcastdelay.patch ntp-4.2.6p5-delaycalib.patch ntp-4.2.6p5-noservres.patch ntp.conf ntpd.sysconfig ntpstat-0.2.tgz
#假設我們已經按照要求修改過rpmbuild/SPECS/ntp.spec組態檔,下面進行編譯
[root@node5 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ntp.spec
error: Failed build dependencies:
libedit-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
perl-HTML-Parser is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
pps-tools-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
autogen is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
autogen-libopts-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
#根據報錯可知,缺少依賴包,我們先安裝一下
[root@node5 ~]# yum -y install libedit-devel perl-HTML-Parser pps-tools-devel autogen autogen-libopts-devel
#假設我們已經按照要求修改過rpmbuild/SPECS/ntp.spec組態檔,下面進行編譯
[root@node5 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ntp.spec
[root@node5 ~]# echo $?
0
[root@node5 ~]# ls /root/rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
[root@node5 ~]# ls /root/rpmbuild/RPMS/
noarch x86_64
[root@node5 ~]# ls /root/rpmbuild/RPMS/x86_64/
ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm ntpdate-4.2.6p5-19.el7.centos.1.x86_64.rpm ntp-debuginfo-4.2.6p5-19.el7.centos.1.x86_64.rpm sntp-4.2.6p5-19.el7.centos.1.x86_64.rpm
[root@node5 ~]# ls /root/rpmbuild/SRPMS/
ntp-4.2.6p5-19.el7.centos.1.src.rpm
自此我們看到已經成功編譯出了rpm包和srpm包,現在只需要按照“不對srpm包做修改,直接安裝srpm包”安裝即可,
參考鏈接:
https://www.bluestep.cc/22-4-srpm-的使用-:-rpmbuild-(optional)/
https://blog.csdn.net/huangdeijia/article/details/88953444
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/209540.html
標籤:其他
上一篇:linux原始碼編譯安裝軟體原理
