標籤:rpm
在Linux中如何安裝、升級、卸載軟體,是我們日常營運中重要的組成部分。接下來一CentOS6系統為例,講解如何使用 RPM 包管理器,yum包管理器以及源碼的方式來管理我們的軟體包。
一、相關的背景知識
許多程式的來源程式,例如使用C語言編寫的原始碼,要經過預先處理,編譯,彙編,連結才能產生真正的可執行程式(二進位),才可以使用。為了簡化這樣的過程,就出現了所謂的包管理器。它出現的目的是:將編譯好的程式打包成一個檔案或有限的幾個檔案,可用於實現安裝、卸載、升級、查詢等功能。
一個包管理器應該具有如下組成部分:
1、資料庫:這裡麵包括了 軟體名、版本、依賴關係、功能描述、安裝產生的各檔案的路徑、和校正軟體來源和資料完整性的校正碼。
2、程式的組成清單:這裡最主要的是軟體在安裝、卸載前後所啟動並執行指令碼。
安裝程式的時候為什麼會出現依賴性?
由於Linux的程式或者說是工具都是由其他小程式或小工具組成,這是Linux的特性之一。正是由於這個特性決定了我們在安裝一個軟體包的時候,可能會依賴其他程式的庫檔案和標頭檔。
# 在Linux中使用 ldd 命令來查看一個二進位程式(可執行檔)遵循EIF格式[[email protected] ~]# ldd `which pwd`linux-vdso.so.1 => (0x00007fff62df0000) # 指程式的起始入口libc.so.6 => /lib64/libc.so.6 (0x0000003508400000)/lib64/ld-linux-x86-64.so.2 (0x0000003507c00000)
程式包一般都包括:二進位程式,庫檔案,設定檔,協助檔案這些資訊。
二、RPM包管理器
在CentOS中的包管理器是RPM(RPM is Package Manager),具有上麵包管理的組成和功能。
1、RPM包命名格式
所有的RPM包檔案都是以.rpm結尾的。具體的命名格式:
name-version-relase.arch.rpm
欄位 |
含義 |
name |
程式名 |
version |
程式源碼編號。分別代表主要版本號,副版本號碼,發行號 |
release |
rpm自身的發行號,與程式源碼的發行號無關,僅用於標識對 rpm包不同製作的修訂;同時,release還包含此包適用的OS |
arch |
適用於的硬體平台,主要有:i386, i486, i586, i686,x86_64,powerpc,noarch(依賴於虛擬機器) |
例如:bash-4.2.3-3.centos6.x86_64.rpm
2、rpm包的合法性驗正
包製作者製作完成之後會附加數位簽章於包上;驗證主要包括 來源合法性、包的完整性。
具體原理:
包的製作者使用單向加密提取未經處理資料的特徵碼,而後使用自己的私密金鑰加密這段特性碼,附加未經處理資料後面。通過數位憑證的方式驗證來源合法性,通過提取驗證碼是否正確來判斷完整性問題。
驗正過程:
前提:必須有可靠機制擷取到包製作者的公開金鑰;
1、使用製作者的公開金鑰解密加密的特徵碼,能解密則意味著來源合法;
2、使用與製作者同樣的意向密碼編譯演算法提取未經處理資料的特徵碼,並與解密出來的特徵作比對,相同,則意味著完整性沒問題;
3、RPM分包管理
試想一下,例如:一個程式總共有50個小功能,難道在打包的時候都打包到一個檔案中去嗎? 如果是這樣,我們僅用到其中的5,6個功能,卻安裝了50個包,造成了空間浪費。所以,RPM包提供了分包的功能,從一定程度上解決了這個問題。
一般是有一個主包,提供準系統;其他功能分別打包成不同的包檔案來使用。
三、RPM包管理器的使用
RPM包管理器都是使用rpm命令(前端工具)來實現的,下面從不同角度介紹此命令的常用選項。
1、安裝程式包
以安裝 lftp 來樣本。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3F/74/wKioL1PJKJCDjwemAADuu4koEaY063.jpg" title="rpm -ivh.jpg" alt="wKioL1PJKJCDjwemAADuu4koEaY063.jpg" />
當然在安裝過程中沒有出現依賴關係,如果出現依賴關係,則需要安裝依賴軟體包。
--test:此時軟體是否可以安裝
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3F/74/wKiom1PJKFyxRxNSAAC8oh9QC-c192.jpg" title="rpm test.jpg" alt="wKiom1PJKFyxRxNSAAC8oh9QC-c192.jpg" />
重新安裝:--replacepkgs 如果原有設定檔作了修改,很有可能不執行替換,而是將應該安裝產生的設定檔重新命名為 .rpmnew
如果依賴於其它包:1、解決依賴關係;2、忽略依賴關係能安裝上,但有可能無法運行;使用--nodeps 參數。rpm -ivh --nodeps 軟體包檔案名稱
2、卸載程式包
常用用法:rpm -e package_name
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3F/74/wKiom1PJKrThdLorAADaxSjmdtw951.jpg" title="22222222222222222.jpg" alt="wKiom1PJKrThdLorAADaxSjmdtw951.jpg" />
如果被其它包所依賴:1、將依賴於此包的所有包一併卸載;2、忽略依賴關係能卸載,但依賴於此包程式包可能會運行不正常,使用 --nodeps 參數。
如果包的設定檔安裝後曾被改動過,卸載時,此檔案將不會卸載,而是被重新命名並保留
3、升級軟體包
用法:rpm -Uvh | -Fvh /path/to/package_file
1、升級或安裝
-Uvh:如果軟體包不存在則安裝,如果存在則升級。
2、純升級
-Fvh:如果軟體包不存在則什麼都不幹,如果存在則升級。
如果有時候升級有問題,則可以使用 --force: 強制升級。
注意:不應該對核心執行升級操作,而是安裝。因為系統允許多核心並存,所以萬一升級失敗,還可保證系統不出現問題。
4、查詢功能
rpm的查詢功能可能是我們在軟體包管理方面使用最多的。
1)對已安裝的軟體
-q:查詢軟體包是否安裝
-qa:查詢系統已安裝的包
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3F/76/wKioL1PJNTiDF52hAAH6qJmHWHw543.jpg" title="111111111111111111.jpg" alt="wKioL1PJNTiDF52hAAH6qJmHWHw543.jpg" />
-qi:查詢包的描述資訊
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3F/76/wKioL1PJN8-DL7YsAAJENh0tPyk938.jpg" title="111111111111111111111111111111111111111111111.jpg" alt="wKioL1PJN8-DL7YsAAJENh0tPyk938.jpg" />
-ql:列出軟體包所安裝的所有檔案
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/76/wKioL1PJNWCg9RwzAAKpX-s3s7w652.jpg" title="1.jpg" alt="wKioL1PJNWCg9RwzAAKpX-s3s7w652.jpg" />
-qc:列出軟體包所安裝的設定檔
-qd:列出軟體包所安裝的協助文檔
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3F/76/wKiom1PJNJCBbYU_AAIxWKJDBEc841.jpg" title="33.jpg" alt="wKiom1PJNJCBbYU_AAIxWKJDBEc841.jpg" />
-q --scripts:查詢軟體安裝時所執行的指令碼
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3F/76/wKioL1PJNdjwmka_AAEB5g6zVrs133.jpg" title="4.jpg" alt="wKioL1PJNdjwmka_AAEB5g6zVrs133.jpg" />
-qf:查詢某檔案是由哪個包安裝產生的
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/76/wKiom1PJNQaRfoSZAABvsxeLJTA142.jpg" title="444444444444444.jpg" alt="wKiom1PJNQaRfoSZAABvsxeLJTA142.jpg" />
2)對未安裝的軟體
查詢功能和已安裝的一樣,只是加入-p選項。
-pq -pqi -pql -pqd -pqc 等參數,同上述功能。
5、校正
用於檢查包安裝產生的檔案屬性是否發生變化
rpm -V package_name
[[email protected] Packages]# rpm -V lftpS.5....T. c /etc/lftp.conf# 常見屬性如下:如果某屬性無變化,則顯示為.# S file Size differs# M Mode differs (includes permissions and file type)# 5 digest (formerly MD5 sum) differs# D Device major/minor number mismatch# L readLink(2) path mismatch# U User ownership differs# G Group ownership differs# T mTime differs# P caPabilities differ
6、rpm包來源合法性及完整性檢驗:
前提:在當前系統上匯入包的製作者的公開金鑰
匯入:rpm --import /path/to/key_file
# rpm -qa gpg-pubkey*
顯示所有已經匯入的gpg格式的公開金鑰
# rpm -qi gpg-pubkey-NAME
顯示公開金鑰的詳細資料
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3F/76/wKioL1PJOyayLiyoAAYyn70ZR7k688.jpg" title="qqq.jpg" alt="wKioL1PJOyayLiyoAAYyn70ZR7k688.jpg" />
檢查包:安裝過程中會自動執行
手動檢查:
# 完整性和合法性檢查[[email protected] Packages]# rpm -K lftp-4.0.9-1.el6.x86_64.rpm lftp-4.0.9-1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK# 不檢查來源合法性:[[email protected] Packages]# rpm -K --nosignature lftp-4.0.9-1.el6.x86_64.rpmlftp-4.0.9-1.el6.x86_64.rpm: sha1 md5 OK# 不檢查包完整性[[email protected] Packages]# rpm -K --nodigest lftp-4.0.9-1.el6.x86_64.rpmlftp-4.0.9-1.el6.x86_64.rpm: rsa (md5) pgp OK
7、資料庫重建
資料庫目錄:/var/lib/rpm
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/76/wKiom1PJO_6gQhgaAALlStB-b-I140.jpg" title="qweqw.jpg" alt="wKiom1PJO_6gQhgaAALlStB-b-I140.jpg" />
rpm --initdb:初始化,如果事先沒有庫,會建立一個;如果有,則不建立;
rpm --rebuilddb: 直接重建,覆蓋原有的資料庫
總結:個人感覺RPM在安裝軟體包是使用不多,一般使用查詢功能居多。
本文出自 “逆水寒” 部落格,請務必保留此出處http://guoting.blog.51cto.com/8886857/1440066
Linux軟體包的管理--RPM包管理器