軟件安裝與升級——rpm
Linux的自由軟件非常多,爲了方便軟件的管理,目前有兩大主流軟件管理工具:
dpkg
和RPM
。本文主要介紹RPM
的相關信息。
RPM與SRPM
RPM
是RedHat Package Manager
的簡稱,是一種軟件管理機制,起初是有RedHad
公司發展出來的。RPM
是以一種數據庫記錄的方式來將我們所需的軟件安裝到Linux系統中。RPM
軟件包製作時,會將安裝軟件源碼進行編譯,並將安裝該軟件時所需的關聯軟件記錄到軟件包的數據庫中,。當開始安裝軟件時,RPM
會通過軟件包裏的數據庫數據檢查安裝環境中是否已安裝關聯軟件,若關聯軟件已安裝則開始安裝該軟件,若關聯軟件未安裝則不予安裝。安裝時,RPM
會將軟件信息寫入相關的數據庫,以便未來的查詢、驗證和刪除。通過RMP
的這些機制,我們可以發現其有以下優點:
RPM
內含已經編譯過的程序與配置文件等數據,可以讓用戶免除重新編譯的困擾RPM
在被安裝前,會先檢查系統的硬盤容量、操作系統版本等,避免文件被錯誤安裝RPM
文件本身提供軟件版本信息、關聯軟件名稱、軟件用途說明、軟件所含文件等信息,便於瞭解軟件RPM
使用數據庫記錄文件的相關參數,便於軟件升級、移除、查詢、驗證
但由於RPM
的這個機制,其在軟件管理時也有以下問題:
- 軟件安裝時的環境必須與製作軟件包時的環境一致
- 安裝之前需要安裝軟件的關聯軟件
- 刪除軟件時,與該軟件關聯的底層軟件不可先刪除,否則可能造成整個系統的問題
爲了解決以上問題,SRPM
出現了。SRPM
是Source RPM
的意思,RPM
軟件包裏含有軟件的原始碼,SPRM
軟件包提供的軟件內容並沒有經過編譯,提供的是原始碼。通常SRPM
的擴展名是以*.src.rpm
的格式命名。雖然SRPM
和Tarball
一樣只提供原始碼,但是SRPM
裏面還含有軟件所需的關聯軟件說明以及所有RPM文件所提供的數據。SRPM
和RPM
不同的是軟件包提供了參數配置文件configure
、makefile
。當我們使用SRPM
軟件包安裝軟件時,我們要執行以下步驟:
- 先將軟件以
RPM
管理的方式編譯,將SRPM
編譯成RPM
文件 - 然後將編譯完成的
RPM
文件安裝到Linux系統中
下面是RPM
和SRPM
的簡單比較。
軟件包 | 文件格式 | 直接安裝 | 程序類型 | 可否修改參數並編譯 |
---|---|---|---|---|
RPM | xxx.rpm | 是 | 已編譯 | 不可 |
SRPM | xxx.src.rpm | 否 | 原始碼,未編譯 | 可 |
軟件包名稱的命名格式
一般情況下,一個RPM
軟件包的名稱包含了軟件名稱、版本信息、編譯次數、硬件操作平臺這些信息。以軟件包rp-pppoe-3.11-7.el7.x86_64.rpm
爲例。
- 軟件名稱:每個軟件的名稱,以上軟件包的軟件名稱爲
rp-pppoe
- 版本信息:軟件的版本,版本有主版本和次版本。以上軟件包的主版本爲
3
,次版本爲11
。次版本就是在主版本的架構下改動部分原始碼的內容 - 編譯次數:由於一些bug或安全上的考慮,軟件的代碼會更新並編譯
- 硬件操作平臺:主要是指操作平臺的
CPU
,由於RPM
可以適用在不同的操作平臺上,但不同的平臺CPU設定的參數還是有所差異性。開發者可以根據不同的CPU設定不同的參數,從而充分利用CPU,讓軟件性能更好。以下是軟件包中常見的一些名稱。
平臺名稱 | 適合平臺說明 |
---|---|
i386 | 幾乎適用於所有的 x86 平臺,不論是舊的 pentum 還是新的 Intel Core 2 與 K8 系列的 CPU 等等,都可以正常工作。i 是 Intel 兼容的 CPU 的意思,386 是CPU 的等級 |
i586 | 針對586 等級的計算機進行優化編譯,586 等級的CPU 有:pentum 第一代 MMX CPU 、AMD 的 K5/K6 系列等 |
i686 | 在 pentum II 以後的 Intel 系列 CPU ,及 K7 以後等級的CPU 。目前市場上幾乎僅剩 P-II 以後的CPU |
x86_64 | 針對64 位的CPU 進行優化編譯設定,包括 Intel 的 Core 2 以上等級 CPU ,以及 AMD 的 Athlon64 以後等級的 CPU |
noarth | 沒有硬件等級限制,一般這種類型的 RPM 文件中沒有 binary program 存在,較常用於 shell script 方面的軟件 |
RPM的使用
RPM
安裝軟件時,軟件文件存放位置如下表。
目錄名稱 | 存放文件 |
---|---|
/etc | 配置文件 |
/usr/bin | 可執行文件 |
/usr/lib | 程序使用的動態函數庫 |
/usr/share/doc | 基本的軟件使用手冊與說明文件 |
/usr/share/man | man page 文件 |
RPM安裝
以下是RPM
安裝軟件時的基本語法。
# RPM安裝
rpm -ivh package_name [options]
選項與參數:
-i
:install 的意思-v
:查看詳細的安裝過程-h
:安裝時顯示安裝進度options
:安裝時的一些選項,以下是RPM
安裝時常用的一些選項
選項 | 用途 |
---|---|
–nodeps | 強制安裝,當軟件因關聯軟件未安裝而無法安裝時, 使用該選項可以安裝軟件,但安裝的軟件可能會因爲缺少關聯軟件而無法正常使用 |
–replacefiles | 覆蓋文件,當軟件安裝過程中出現 某個文件已被安裝在系統上 或版本不和(confilcting files) 的信息時,可以使用該選項來直接覆蓋文件,但覆蓋之前需要考慮清楚,因爲覆蓋後無法復原 |
–replacepkgs | 重新安裝已經安裝過的軟件,當系統提示某軟件已安裝 的信息,無法繼續安裝時,可以使用該選項來重新安裝相應的軟件 |
–force | --replacefiles 與--replacepkgs 的綜合 |
–test | 想要測試某軟件是否可以被安裝到使用者的Linux環境中,可通過該選項來進行測試,找出軟件關聯問題,如:rpm -ivh pkgname.i386.rpm --test |
–justdb | 由於RPM 數據庫破損或其他緣故產生錯誤時,可使用這個選項來更新軟件在數據庫內的相關信息 |
–nosignature | 想要忽略數字簽名的檢查時,可以使用該選項 |
–prefix new_path | 要將軟件安裝到非正規目錄時,可以使用該選項。如某軟件要安裝到/usr/local 中,而不是正規的/usr/bin 、/etc 等目錄中,就可以通過--prefix /usr/local 來處理 |
–noscripts | 不想讓某軟件在安裝時自動執行一些系統指令時,可以使用該選項。RPM 除了可以將文件放置到指定位置外,還可以自動執行一些前置作業的指令,如數據庫的初始化 |
RPM升級與更新
RPM
可以通過-Uvh
或-Fvh
來進行升級,而選項(options)的使用則和安裝時一樣。
# RPM升級
rpm -Uvh package_name [options]
或
rpm -Fvh package_name [options]
-Uvh
與-Fvh
是有一定的區別的。
指令 | 用途 |
---|---|
-Uvh | 後面接的軟件沒有安裝過,系統會予以直接安裝;後面接的軟件有安裝的舊版,系統自動更新至新版 |
-Fvh | 後面接的軟件並未安裝,系統不會安裝該軟件;後面接的軟件有安裝,軟件會被升級 |
RPM查詢
RPM
查詢的時候,實際查詢的是/var/lib/rpm
這個目錄下的數據庫文件。此外,RPM
可以查詢未安裝的軟件信息。
rpm -qa # 查詢所有已安裝軟件
rpm -q[licdR] 已安裝軟件名稱 # 查詢某一已安裝軟件
rpm -qf 存在於系統上面的某個文件名 # 查詢已安裝軟件的配置文件
rpm -qp[licdR] 未安裝的某個文件名 # 查閱RPM文件
下面是選項與參數介紹。
查詢已安裝軟件的信息:
-q
:僅查詢後面接的軟件名稱是否有安裝-qa
:列出所有已安裝在本機Linux系統上的所有軟件名稱-qi
(information):列出該軟件的詳細信息,包含開發商、版權與說明等-ql
(list):列出該軟件所有的文件與目錄所在完整文件名-qc
(configure):列出該軟件的所有配置文件,即找出在/etc
下的相關文件-qd
(document):列出該軟件的所有說明文件,找出與man
有關的文件-qR
(Required):找出與該軟件有關的關聯軟件所含的文件-qf
(filename):由後面接的文件名,找出該文件屬於哪一個已安裝的軟件-q --scripts
:列出是否含有安裝後需要執行的腳本文件
查詢某個 RPM 文件內含有的信息:
qp[icdlR]
:-qp
後面接的所有參數與上面的含義一致,但是用於找出某個RPM
文件內的信息,而不是已安裝的軟件信息
RPM驗證與數字簽名
驗證
驗證的機制就是使用/var/lib/rpm
底下的數據庫內容來比對目前Linux系統環境下的所有軟件。這可以給系統管理員提供一個有效的管理機制。當數據不小心遺失,或誤刪了某個軟件文件,或忘記修改了哪一個軟件文件內容時,就可以用這個方法來驗證比對原本的文件系統,從而找出那個文件。驗證語法如下:
rpm -Va
rpm -V 已安裝的軟件名稱
rpm -Vp 某個RPM 文件的名稱
rpm -Vf 在系統上面的的某個文件
選項與參數
-V
:後面接軟件名稱,若該軟件所含的文件被更改過,纔會被列出來-Va
:列出目前系統上面所有可能被改動過的文件-Vp
:後面接的是文件名,列出該軟件內可能被改動過的文件-Vf
:判斷某個文件是否被改動過,有被改動過則被列出來
驗證文件/etc/passwd
如下:
[root@instance-d619ad0f ~]# rpm -Vf /etc/passwd
S.5....T. c /etc/hosts.deny
S.5....T. c /etc/profile
.M....... g /var/log/lastlog
可以看到文件名稱前面有兩段字符,第一段字符有S
、M
、5
、T
,這個是對文件的一個描述,從左到右的順序如下:
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)
:文件的建立時間已被改變P(caPabilities differs)
:功能已被改變
第二段有c
、g
這些字符,代表的是文件類型。文件類型有以下這些:
c(config file)
:配置文件d(documentation)
:文件數據文件g(ghost file)
:鬼文件,通常是該文件不被某個軟件所包含,較少發生l(license file)
:許可證文件r(read me)
:字數文件
數字簽名
RPM驗證是一個非常實用的工具,但它只能驗證軟件內的信息與/var/lib/rpm
裏的數據庫信息,如果軟件文件所提供的數據本身就有問題,使用驗證是無法確定軟件的正確性的。在使用Tarball
安裝軟件時,我們可以使用md5指紋碼來檢查,但是md5指紋碼也有可能會被竄改的。此時,我們可以通過數字簽名來檢驗軟件的來源。
軟件開發商原廠推出的軟件會有一個廠商自己的簽名系統,這個簽名會被數字化。廠商可以用數字簽名系統產生一個專屬於該軟件的簽名,並將該簽名的公鑰(public key)釋出。當要安裝一個RPM文件時,會有以下的步驟:
- 首先必須要先安裝原廠釋出的公鑰文件
- 實際安裝原廠的RPM軟件時,
rpm
指令會讀取RPM文件的簽名信息,與本機系統內的簽名信息比對 - 若簽名相同則予以安裝,若找不到相關的簽名信息,則給予警告並停止安裝
CentOS
使用的數字簽名系統是GNU計劃的GnuPG(GNU Privacy Guard, GPG)
。在CentOS
中,原廠釋出的GPG數字簽名公鑰文件位於/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
,則安裝如下:
[root@instance-d619ad0f ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
安裝完之後,就可以通過數字簽名來查詢驗證軟件了。
# 列出軟件的密鑰名稱
[root@instance-d619vf0h ~]# rpm -qa | grep pubkey
gpg-pubkey-b6792c39-53c4fbdd
gpg-pubkey-8fae34bd-538f1e51
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-352c64e5-52ae6884
# 查詢軟件相關信息
[root@instance-d619vf0h ~]# rpm -qi gpg-pubkey-b6792c39-53c4fbdd
Name : gpg-pubkey
Version : b6792c39
Release : 53c4fbdd
Architecture: (none)
Install Date: Mon 04 Jun 2018 07:39:40 PM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Tue 15 Jul 2014 06:01:01 PM CST
Build Host : localhost
Relocations : (not relocatable)
Packager : CentOS-7 Debug (CentOS-7 Debuginfo RPMS) <[email protected]>
Summary : gpg(CentOS-7 Debug (CentOS-7 Debuginfo RPMS) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
省略...
-----END PGP PUBLIC KEY BLOCK-----
RPM 軟件卸載與重建數據庫
軟件卸載的過程一定要由最上層到最下層的順序移除,否則會因爲軟件關聯問題導致某些軟件無法移除。
# 語法
rpm -e 軟件名稱
RPM操作時肯能會導致RPM數據庫/var/lib/rpm
內的文件破損,此時可以用--rebuilddb
這個選項來重建數據庫。
# 語法
rpm --rebuilddb