啥是RPM?
原來RPM就是redhat package manager的縮寫,這一文件格式名稱雖然打上了RedHat的標誌,但是其原始設計理念是開放式的,後來採取名稱採取了遞歸縮寫的方式,即:RPM Package Manager(RPM 軟件包管理器)。現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。注:據說RPM文件在Linux系統中的安裝最爲簡便
RPM是用來幹嘛的?
軟件包管理器嘛,聽名字就知道是管理軟件包的啊。也就是一種用於互聯網下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。主要功能呢就是:打包、安裝、卸載、升級、校驗、數據庫管理。
RPM包的名字是啥樣的?
在用之前呢,要先明白RPM包的命名格式,不然廢了半天勁下載下來的包,竟然發現不可用那就傻眼了。
name-version-relase.arch.rpm
name:就是包的名稱
version:major.minor.release 版本號
relase:RPM包自身的發行號,與程序源碼的發行號無關,僅用於標識RPM包不同製作
的修訂;同時,relase還包含此包適用的OS。例如:bash-4.2.3-3.centos5
arch:標識RPM包適用的硬件平臺
x86: i386, i486, i586, i686等;
x86_64: x86_64
powerpc: ppc
noarch: 依賴於虛擬機
例如:bash-4.2.3-3.centos5.x86_64.rpm
還有一點需要注意的是一個程序可能有很多的功能,比如常用的6個,特殊的2個,還包含二次開發的相關功能,我們需要的可能就是一些常用的功能,那些非常用的我們能不能不安裝呢?其實RPM包還有一種分包機制;
核心包(也就是主包):命名與源程序一樣
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
獲取RPM包的途徑
1、發行的光盤或站點服務器
鏡像:
http://mirrors.163.com
http://mirrors.sohu.com
2、項目的官網
源代碼
rpm包
3、很多第三方機構或個人製作並公開發布許多rpm包
http://rpmfind.net
http://rpm.pbone.net
可靠的途徑:EPEL
Fedora-EPEL
RPM包的合法性校驗
我們知道現在無聊的駭客越來越多,那怎麼保證我們從網站下載到我們PC上的數據沒有在路上遭遇埋伏呢?對頭,就是對下載到的RPM包進行合法性校驗。一般情況下包的作者製作完成之後都會附加數字簽名於包上,用於確定包的來源合法性及完整性。
包的製作者使用單向加密提取原始數據的特徵碼,而後使用自己的私鑰加密這段特性碼,附加原始數據後面。
驗正過程:
前提:必須有可靠機制獲取到包製作者的公鑰;
1、使用製作者的公鑰解密加密的特徵碼,能解密則意味着來源合法;
2、使用與製作者同樣的意向加密算法提取原始數據的特徵碼,並與解密出來的特徵作比對,相同,則意味着完整性沒問題;
RPM包的安裝
好的,經過前面的努力,我們終於拿到了我們想要的RPM包,那麼要怎麼用呢?聽俺慢慢道來~
安裝程序包:
rpm [option] /path/to/package_file
-i: install
-v:顯示安裝信息
-vv:更詳細
-vvv:更更詳細
-h: 顯示安裝進度
組合選項:-ivh 安裝時顯示安裝信息及進度條
--test: 僅作測試,沒有真正執行安裝
如果安裝時提示依賴於其它包的解決方法:
1、解決依賴關係
2、忽略依賴關係
使用 --nodeps 忽略依賴關係,但是安裝上後可能無法運行。
重新安裝:
--replacepkgs
如果原有配置文件作了修改,很有可能不執行替換,而是將應該安裝生成的配置文件重命名爲 .rpmnew
卸載程序包:
rpm [option] package_name
-e: erase
如果被其它包所依賴:
1、將依賴於此包的所有包一併卸載
2、忽略依賴關係
使用 --nodeps 忽略依賴關係,但是所有依賴於此包的程序可能會無法正常運行。
注意:如果包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave
升級程序包:
rpm [option] /path/to/package_file
1、升級或安裝
-Uvh
2、純升級
-Fvh
升級版本後可能會引起版本衝突等;
可使用 --force 強制升級
注意:不應該對內核執行升級操作,而是安裝,因爲系統允許多內核並存。
EPM包的查詢操作
1、查詢某包是否安裝
rpm -q package_name...
2、查詢所有已經安裝的包
rpm -qa
按條件過濾:rpm -qa | grep 'PATTERN'
3、查詢包的描述信息
rpm -qi package_name
4、查詢某包安裝生成了哪些文件
rpm -ql package_name
(1) 查詢某包安裝生成了哪些配置文件
rpm -qc package_name
(2) 查詢某包安裝生成了哪些幫助文件
rpm -qd package_name
(3) 查詢程序包的相關腳本
rpm -q --scripts package_name
腳本有四類:
preinstall:安裝前腳本
postinstall: 安裝後腳本
preuninstall: 卸載前腳本
postuninstall: 年前後腳本
5、查詢某文件是由哪個包安裝生成的
rpm -qf /path/to/some_file
6、對尚未安裝的包執行查詢
rpm [option] /path/to/package_file
-qpi
-qpl
-qpc
-qpd
校驗:
用於檢查包安裝生成的文件屬性是否發生變化,通過此信息可查看已安裝的程序有無被人修改過,防黑必備。
rpm -V package_name
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
某屬性無變化,顯示爲.
RPM來源合法性及完整性檢驗:
前提:在當前系統上導入包的製作者的公鑰
導入:
rpm --import /path/to/key_file
顯示所有已經導入的gpg格式的公鑰
# rpm -qa gpg-pubkey*
顯示密鑰的詳細信息
# rpm -qi gpg-pubkey-NAME
安裝過程中會自動執行可以檢查,想手動檢查當然也是可以的。
手動檢查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
不檢查包完整性:
rpm -K --nodigest
不檢查來源合法性:
rpm -K --nosignature
數據庫重建
數據庫目錄:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先沒有庫,會新建一個;如果有,則不新建;
rpm --rebuilddb: 重建
會直接重建,覆蓋原有的數據庫