標籤:封裝 版本號碼
環境說明:Win7+Vmware11+Centos6.6,使用CentOS6.6安裝光碟片
RPM全名是“RedHat Package Manager”,RPM最大優點是將要安裝的軟體先編譯過,並且打包成為RPM機制的安裝包,通過封裝好的軟體裡頭預設的資料庫記錄這個軟體要安裝的時候必須具備的相依性屬性軟體,當安裝在你的Linux主機是,RPM會先依照軟體裡頭的資料查詢Linux主機的相依性屬性軟體是否滿足,若滿足則予以安裝,若不滿足則不予以安裝。
在執行rpm包管理之前,我們首先將CentOS6.6光碟片掛載到本機中:
#mount /dev/cdrom /media/mnt
其次,進入到rpm包目錄中,在此目錄中我們會看到很多rpm包。
#cd /media/mnt/Packages
下面我們就從rpm包的格式開始說起。下面就是一個典型的rpm包,從此包我們可查詢到包的包名、版本號碼、發行號、適用平台等;
rp-pppoe-3.1-5.x86_64.rpm
rp-pppoe為包名;
3.1為版本資訊;
5為發布次數;
x86_64為適合的硬體平台;
rpm為副檔名;
RPM預設的安裝路徑
/etc |
一些設定檔案放置的目錄 |
/usr/bin |
一些可執行檔 |
/usr/lib |
一些程式使用的動態函數庫 |
/usr/share/doc |
一些基本的軟體使用手冊與協助文檔 |
/usr/share/man |
一些man page 檔案 |
在對rpm包的管理過程中,我們主要從安裝、升級、卸載、查詢、校正等幾個方面進行。
1、安裝(install)
安裝軟體是root的工作,因此要獲得root身份才能操作rpm命令,用rpm安裝軟體很簡單。例如我們要安裝xvattr-1.3-18.el6.x86_64.rpm 的檔案,我們可以這樣操作如。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5E/00/wKiom1UooxKA9EXnAACW26FiMx4856.jpg" title="映像 1.png" alt="wKiom1UooxKA9EXnAACW26FiMx4856.jpg" />
通過的操作我們可以知道安裝rpm的簡單用法,不過,我們無法顯示安裝的進度,因此我們通常會使用一些組合命令來執行安裝。
-i:install安裝的意思
-v:查看更詳細的安裝資訊畫面,每增加一個v,顯示的安裝資訊會更加詳細
-h:以#號資訊顯示安裝進度
例如如:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/FC/wKioL1UopkXANVLEAAEFS4siab8790.jpg" title="映像 2.png" width="740" height="59" border="0" hspace="0" vspace="0" style="width:740px;height:59px;" alt="wKioL1UopkXANVLEAAEFS4siab8790.jpg" />
在安裝rpm包時,我們還可以同時安裝多個rpm包,例如如:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5E/00/wKiom1Uopf2jH6x6AAFQbzXwZ9s318.jpg" title="映像 3.png" width="735" height="62" border="0" hspace="0" vspace="0" style="width:735px;height:62px;" alt="wKiom1Uopf2jH6x6AAFQbzXwZ9s318.jpg" />
在安裝rpm之前,我們可以使用--test測試該軟體是否可以安裝到使用者的Linux環境當中,可找出是否有屬性的依賴的問題。第一張圖是可以正常安裝軟體,第二張圖不能正常安裝軟體。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/FC/wKioL1UoqsXSovTjAAC1xM-z3nY202.jpg" title="映像 4.png" width="735" height="40" border="0" hspace="0" vspace="0" style="width:735px;height:40px;" alt="wKioL1UoqsXSovTjAAC1xM-z3nY202.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5E/01/wKiom1UorOuQwaBlAAEx2DrNeXM765.jpg" title="映像 5.png" width="735" height="71" border="0" hspace="0" vspace="0" style="width:735px;height:71px;" alt="wKiom1UorOuQwaBlAAEx2DrNeXM765.jpg" />
如果我們在安裝的過程中發現問題,或者已經知道會發生的問題,而還是要安裝軟體時,可以使用如下參數"強制"安裝。
--nodeps:軟體存在屬性依賴問題而無法安裝時使用,但會造成軟體無法正常運行
--replacefiles:如果某軟體已安裝或版本資訊不符合是,可以使用這個參數直接覆蓋檔案,但覆蓋的文 件是無法恢複的
--replacepkgs:重新安裝並覆蓋原有的檔案
--force:強制安裝
--oldpackage:進階版本的包無法使用,因此降級用的
--relocate:修改安裝路徑
在安裝過程中,建議使用-ivh參數進行安裝就行,如果安裝過程中發現問題,一個一個去將問題找出來,不要使用"暴力安裝方法",即--force去強制安裝。
2、升級(upgrade/freshen)
RPM安裝升級也比較簡單,就是用-Uvh或-Fvh升級即可,不過-U和-F的意義不太一樣。
-Uvh:後面接的軟體即使沒有安裝過,則系統將予以直接安裝;若後面接的軟體有安裝過舊的版本,則系統自動更新至新版,如,已經安裝了舊版本,執行-Uvh,則系統自動更新。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/FC/wKioL1Uos4nj9vwcAAJuV5ScWBI685.jpg" title="映像 6.png" width="735" height="191" border="0" hspace="0" vspace="0" style="width:735px;height:191px;" alt="wKioL1Uos4nj9vwcAAJuV5ScWBI685.jpg" />
-Fvh:如果後面接的軟體並未安裝到你的Linux系統上,則該軟體不會被安裝;即只有已安裝到Linux系統內的軟體會被升級,如,沒有安裝舊版本,則系統不會自動升級。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/FC/wKioL1UotEqgTBrQAACC7fGB_Mg514.jpg" title="映像 7.png" alt="wKioL1UotEqgTBrQAACC7fGB_Mg514.jpg" />
在使用升級時,也可以使用test、force等特殊參數。
3、查詢(query)
RPM在查詢的時候,其實查詢的地方是/var/lib/rpm這個目錄下的資料庫檔案。查詢就是查看某包是否已經安裝,以及檢查安裝的所有包,還可以查看某包的詳細資料等。
(1)查詢某包或某些包是否安裝,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5E/01/wKiom1UotVXjkeb1AACsHNmDUnc136.jpg" title="映像 8.png" width="318" height="100" border="0" hspace="0" vspace="0" style="width:318px;height:100px;" alt="wKiom1UotVXjkeb1AACsHNmDUnc136.jpg" />
(2)查詢已經安裝的所有包,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5E/01/wKiom1UotdnwFNOvAAHg4xLkoOU727.jpg" title="映像 9.png" alt="wKiom1UotdnwFNOvAAHg4xLkoOU727.jpg" />
(3)查詢某檔案是由哪個包安裝產生,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5E/01/wKiom1UotrqCYMbIAABXAiA2FbM315.jpg" title="映像 10.png" alt="wKiom1UotrqCYMbIAABXAiA2FbM315.jpg" />
(4)尚未安裝的包檔案的相關資訊,
-p:注意-p選項可以同一下(5)-(12)的參數配合使用,但-p是用於尋找某個RPM內部的資訊,而非已安裝的軟體資訊。例如-qil
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/FD/wKioL1UovjKgzN6aAADn_K5cpIE571.jpg" title="映像 18.png" alt="wKioL1UovjKgzN6aAADn_K5cpIE571.jpg" />
(5)查詢某包的簡要說明資訊,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/FC/wKioL1UoudPQ_dHWAASoXySg4UA373.jpg" title="映像 11.png" width="735" height="277" border="0" hspace="0" vspace="0" style="width:735px;height:277px;" alt="wKioL1UoudPQ_dHWAASoXySg4UA373.jpg" /> (6)查詢某包安裝產生的檔案清單,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5E/01/wKiom1UouQfigxdUAAI54d7NBC4786.jpg" title="映像 12.png" alt="wKiom1UouQfigxdUAAI54d7NBC4786.jpg" />
(7)查詢某包安裝完成後產生的所有設定檔,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5E/01/wKiom1UouaGwoCfVAACOFFmPlK4069.jpg" title="映像 13.png" alt="wKiom1UouaGwoCfVAACOFFmPlK4069.jpg" />
(8)查詢某包安裝完成後產生的所有協助檔案
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5E/01/wKiom1UoufSTgHcLAAEy_nJH1x8237.jpg" title="映像 14.png" alt="wKiom1UoufSTgHcLAAEy_nJH1x8237.jpg" />
(9)查看某包製作時隨版本變化的changelog資訊
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5E/01/wKiom1UounuxIacmAADotuutOSw476.jpg" title="映像 15.png" alt="wKiom1UounuxIacmAADotuutOSw476.jpg" />
(10)查詢某包提供的capabilities;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/FC/wKioL1UovByCIEpxAACri4r3XI8150.jpg" title="映像 16.png" alt="wKioL1UovByCIEpxAACri4r3XI8150.jpg" />
(11)查詢某包所依賴的capabilities;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5E/01/wKiom1Uou4zAt59pAAC3RhXjxKI481.jpg" title="映像 17.png" alt="wKiom1Uou4zAt59pAAC3RhXjxKI481.jpg" />
(12)查詢某包安裝或卸載時執行指令碼
rpm -q --scripts PACKAGE_NAME
指令碼有四類:
preinstall:安裝過程開始之前執行的指令碼
postinstall:安裝過程完成之後執行的指令碼
preuninstall:卸載開始之前執行的指令碼
postinstall:卸載過程完成之後執行的指令碼
4、驗證與數位憑證(Verify/Signature)
驗證:查詢包安裝之後產生的檔案是否發生了改變,我們使用-V選項,常用選項:
-Vf:列出某個檔案是否被改動過
-Vp:後面加的是檔案名稱、列出該軟體內可能被改動過的檔案
-Va:列出目前系統上面所有被改動過的檔案
例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5E/01/wKiom1Uov1yRouujAABQgJuwMN8084.jpg" title="映像 19.png" alt="wKiom1Uov1yRouujAABQgJuwMN8084.jpg" />
在中我們發現字母c前面有一串字串,c前面的8個資訊是:
S file Size differs:檔案的容量大小是否被改變
M Mode differs :檔案的類型或檔案的屬性是否被改變
5 digest (formerly MD5 sum) differs:MD5這一種指紋碼的內容已經不同
D Device major/minor number mismatch:裝置的主/次代碼是否改變
L readLink(2) path mismatch:Link路徑已被改變
U User ownership differs:檔案所有者已被改變
G Group ownership differs:檔案使用者組已被改變
T mTime differs:檔案的建立時間已被改變
c代表的是"Configfile"的意思,也就是檔案類型,包括
c:設定檔案
d:文檔
g:"鬼"檔案
l:授權檔案
r:讀我檔案
數位憑證:可以驗證rpm包的來源合法性和資料完整性。在本文中使用的是Centos6.6的光碟片,所以介紹一下驗證光碟片中程式包的來源及完整性。
#rpm --import RPM-GPG-KEY-CentOS-6
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5E/01/wKiom1Uow4_gDmMwAACytpRsrpI305.jpg" title="映像 20.png" alt="wKiom1Uow4_gDmMwAACytpRsrpI305.jpg" />
如果顯示OK,則rpm包可以使用和安裝。
數位憑證其它常用選項:
--nosignature:不檢查來源合法性
--nodigest:不檢查完整性
5、卸載與重建資料庫(erase/rebuilddb)
卸載:移除已經安裝的包,例如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5E/02/wKiom1UoxbqzL_HxAACspQ2tDIE036.jpg" title="映像 21.png" alt="wKiom1UoxbqzL_HxAACspQ2tDIE036.jpg" />
卸載的常用選項
--nodeps:忽略依賴關係
--allmatches:如果一個程式包同時安裝多個版本,則此選項一次全部卸載之
--test:測試卸載,dry-run模式;
注意:如果程式包的設定檔安裝後曾被修改,卸載時,此檔案通常不會被刪除,而是被重新命名(加尾碼.rpmsave)後留存
重建資料庫:由於RPM檔案經常會安裝、刪除、升級等,某些操作或許可能會導致RPM資料庫/var/lib/rpm/內的檔案損壞,因此我們有時需要對資料庫進行重建。
--initdb:初始化資料庫,即資料庫完全不存在時,可建立之
--rebuilddb:無論當前資料存在與否,都會直接重建此庫(這個操作很危險)
本文出自 “Linux學習” 部落格,謝絕轉載!
CentOS中rpm包管理詳解