rpm包管理
rpm(RedHat Package Manager) 是RedHat公司發展的一種將軟件安裝到Linux系統的管理機制,也是一種數據庫記錄方法。
Linux系統上軟件的安裝主要分兩種方式,從廠商發布的tarball通過編譯來安裝;或者使用廠商已經在相應平臺上編譯好的二進制文件。
從源碼編譯安裝的程序,在漏洞修補以及軟件功能升級時太過麻煩,并且管理員不能清晰地知道系統上已經安裝了哪些軟件,以及相應的版本等摘要信息。
Linux發行商或者社區組織在固定的硬件平臺與操作系統上將需要安裝的軟件編譯好,然后將編譯好的軟件與相關文件打包成一個特殊格式的文件。此特殊文件中包含了預先檢測系統與依賴關系的腳本,并提供該軟件的文件信息。用戶取得該軟件后,通過特殊的命令安裝,首先會根據內部的腳本來檢測該軟件所依賴的前驅軟件是否存在,若安裝環境復合,就開始安裝。安裝完成后還會將該軟件的信息寫入軟件管理機制,以備將來進行升級、移除等動作。目前在Linux界軟件安裝方式最常見的有以下兩種:
-
dpkg,由Debian Linux社群開發,目前Debian系的Linux發行版大多使用dpkg機制來管理軟件,例如Ubuntu。
-
rpm, 由Red Hat公司開發,目前Fedora、CentOs、SuSE等發行版都使用該機制。
需要注意的是:因為rpm文件是已經編譯好的二進制文件,所以在使用時,硬件平臺和系統必須和編譯時一致。如果要用其他發行版提供的rpm軟件,可以下載srpm,也即某一rpm軟件對應的源碼(*.src.rpm命名),在使用srpm安裝軟件時,首先需要以rpm管理方式編譯程rpm文件,然后將編譯后的rpm包依照rpm包的安裝方法安裝至系統。
rpm包管理命令
-
rpm包安裝
只有root用戶有權限管理rpm包
rpm -ivh pkgs_name -i 安裝 -v 顯示詳細信息 -h 顯示安裝進度 pkgs_name 可以是單個或多個rpm包文件名,也可以是rpm包路徑(如果可以連入互聯網的話,也可以是軟件包的互聯網地址)
此外rpm包在安裝時,還額外提供安裝選項可供選擇使用
--nodeps 忽略軟件安裝所需要考慮的依賴關系問題 --replacepkgs 重新安裝 --test 測試某rpm包安裝到環境中,是否有依賴關系問題 --prefix /path/to/somewhere 執行新的安裝路徑 --nosignature 不檢查包簽名信息,不檢查包來源的合法性 --nodigest 不檢查包的完整性 --no[pre|post|preun|postun] 選擇安裝或卸載前后不執行安裝包自帶腳本
-
rpm包卸載
rpm包卸載時應注意依賴關系問題
rpm -e program_name rpm -e --nodeps program_name 強制卸載,會影響依賴此軟件的軟件的正常使用
rpm包的安裝、移除以及升級操作有時誤操作可能會導致rpm數據庫/var/lib/rpm內的文件損壞,可以使用–rebuilddb 來重建rpm數據庫
rpm --rebuilddb rpm --initdb 初始化數據庫
-
rpm包查詢
rpm查詢操作,其實查詢的/var/lib/rpm/目錄下的數據庫文件。此外也可以查詢系統上未安裝的rpm包的相關信息
rpm -q program_name 確認相應軟件是否已被安裝 -qa 列出系統上所有軟件名稱 -qi 列出軟件的相關信息 -ql 列出軟件安裝所生成的文件 -qc 指出軟件的配置文件 -qd 列出軟件包提供的文檔 -qR 列出該軟件所依賴的軟件 --whatrequites capability 查詢指定capability被哪些軟件所依賴 -qf /path/to/file 查詢指定文件為哪個軟件安裝所產生的 -qp[idclR] 查詢某個rpm文件內的信息,并非已安裝的軟件的信息 --whatprovides capability 查詢指定capability由那個軟件所提供 --script 查詢rpm程序包自帶的腳本
-
rpm安裝程序升級
升級rpm包安裝的程序
rpm -Uvh program_name 如果該軟件并未被安裝則會自動安裝 rpm -Fvh program_name 如果系統上并沒有該軟件,則不會執行相應操作
-
rpm安裝程序校驗
校驗rpm安裝程序是否被篡改過,一般configure文件在使用過程中可能被修改,但binary program被修改就需要特別注意
rpm -V program_name 檢查軟件所屬的文件是否被修改過 -Va 列出系統上rpm包安裝的程序所屬的文件中所有被修改過的 -Vp 后跟rpm包文件名,列出對應的安裝程序中被修改過的文件 -Vf 檢查某個文件是被修改過 SM5DLUGT c filename S :(file Size differs) 文件的容量大小是否被改變 M :(Mode differs) 文件的類型或文件的屬性 (rwx) 是否被改變?如是否可運行等參數已被改變 5 :(MD5 sum differs) MD5 這一種指紋碼的內容已經不同 D :(Device major/minor number mis-match) 裝置的主/次代碼已經改變 L :(readLink(2) path mis-match) Link 路徑已被改變 U :(User ownership differs) 文件的所屬人已被改變 G :(Group ownership differs) 文件的所屬群組已被改變 T :(mTime differs) 文件的創建時間已被改變 c :配置檔 (config file) d :文件數據檔 (documentation) g :鬼文件~通常是該文件不被某個軟件所包含,較少發生!(ghost file) l :授權文件 (license file) r :讀我文件 (read me)
-
rpm包來源合法性和完整性驗證
首先安裝rpm包發行組織釋出的公鑰;每次安裝rpm包時,rpm命令會讀取rpm包文件的簽名,并與公鑰比對;如果相同則順利安裝,如果不同則停止安裝(-ivh –signature 選項也是針對此處)。
rpm --import /path/to/public-key 導入公鑰 rpm -qi `rpm -qa | grep pubkey` 查看已導入的公鑰信息
原創文章,作者:N24_fynl,如若轉載,請注明出處:http://www.www58058.com/60025