軟件安裝與升級——rpm

軟件安裝與升級——rpm

Linux的自由軟件非常多,爲了方便軟件的管理,目前有兩大主流軟件管理工具:dpkgRPM。本文主要介紹RPM的相關信息。

RPM與SRPM

RPMRedHat Package Manager的簡稱,是一種軟件管理機制,起初是有RedHad公司發展出來的。RPM是以一種數據庫記錄的方式來將我們所需的軟件安裝到Linux系統中。RPM軟件包製作時,會將安裝軟件源碼進行編譯,並將安裝該軟件時所需的關聯軟件記錄到軟件包的數據庫中,。當開始安裝軟件時,RPM會通過軟件包裏的數據庫數據檢查安裝環境中是否已安裝關聯軟件,若關聯軟件已安裝則開始安裝該軟件,若關聯軟件未安裝則不予安裝。安裝時,RPM會將軟件信息寫入相關的數據庫,以便未來的查詢、驗證和刪除。通過RMP的這些機制,我們可以發現其有以下優點:

  • RPM內含已經編譯過的程序與配置文件等數據,可以讓用戶免除重新編譯的困擾
  • RPM在被安裝前,會先檢查系統的硬盤容量、操作系統版本等,避免文件被錯誤安裝
  • RPM文件本身提供軟件版本信息、關聯軟件名稱、軟件用途說明、軟件所含文件等信息,便於瞭解軟件
  • RPM使用數據庫記錄文件的相關參數,便於軟件升級、移除、查詢、驗證

但由於RPM的這個機制,其在軟件管理時也有以下問題:

  • 軟件安裝時的環境必須與製作軟件包時的環境一致
  • 安裝之前需要安裝軟件的關聯軟件
  • 刪除軟件時,與該軟件關聯的底層軟件不可先刪除,否則可能造成整個系統的問題

爲了解決以上問題,SRPM出現了。SRPMSource RPM的意思,RPM軟件包裏含有軟件的原始碼,SPRM軟件包提供的軟件內容並沒有經過編譯,提供的是原始碼。通常SRPM的擴展名是以*.src.rpm的格式命名。雖然SRPMTarball一樣只提供原始碼,但是SRPM裏面還含有軟件所需的關聯軟件說明以及所有RPM文件所提供的數據。SRPMRPM不同的是軟件包提供了參數配置文件configuremakefile。當我們使用SRPM軟件包安裝軟件時,我們要執行以下步驟:

  • 先將軟件以RPM管理的方式編譯,將SRPM編譯成RPM文件
  • 然後將編譯完成的RPM文件安裝到Linux系統中

下面是RPMSRPM的簡單比較。

軟件包 文件格式 直接安裝 程序類型 可否修改參數並編譯
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 2K8 系列的 CPU 等等,都可以正常工作。iIntel 兼容的 CPU 的意思,386CPU的等級
i586 針對586等級的計算機進行優化編譯,586等級的CPU有:pentum 第一代 MMX CPUAMDK5/K6 系列等
i686 pentum II 以後的 Intel 系列 CPU,及 K7 以後等級的CPU。目前市場上幾乎僅剩 P-II以後的CPU
x86_64 針對64位的CPU進行優化編譯設定,包括 IntelCore 2 以上等級 CPU,以及 AMDAthlon64 以後等級的 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

可以看到文件名稱前面有兩段字符,第一段字符有SM5T,這個是對文件的一個描述,從左到右的順序如下:

  • 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):功能已被改變

第二段有cg這些字符,代表的是文件類型。文件類型有以下這些:

  • c(config file):配置文件
  • d(documentation):文件數據文件
  • g(ghost file):鬼文件,通常是該文件不被某個軟件所包含,較少發生
  • l(license file):許可證文件
  • r(read me):字數文件

數字簽名

RPM驗證是一個非常實用的工具,但它只能驗證軟件內的信息與/var/lib/rpm裏的數據庫信息,如果軟件文件所提供的數據本身就有問題,使用驗證是無法確定軟件的正確性的。在使用Tarball安裝軟件時,我們可以使用md5指紋碼來檢查,但是md5指紋碼也有可能會被竄改的。此時,我們可以通過數字簽名來檢驗軟件的來源。
軟件開發商原廠推出的軟件會有一個廠商自己的簽名系統,這個簽名會被數字化。廠商可以用數字簽名系統產生一個專屬於該軟件的簽名,並將該簽名的公鑰(public key)釋出。當要安裝一個RPM文件時,會有以下的步驟:

  1. 首先必須要先安裝原廠釋出的公鑰文件
  2. 實際安裝原廠的RPM軟件時,rpm指令會讀取RPM文件的簽名信息,與本機系統內的簽名信息比對
  3. 若簽名相同則予以安裝,若找不到相關的簽名信息,則給予警告並停止安裝

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章