RPM 與 YUM 套件管理系統介紹

許聖泉 Michael Hsu
25 min readMay 8, 2019

--

RPM

用來操作套件檔的主要工具是 rpm,他自己會維護一個資料庫,記錄所有已安裝的套件,以及各個套件的檔案,安裝新套件時,新的資訊也會被加入此資料庫中。

而 RPM 檔名分成四個部分:名稱、版本號碼、修訂版次和架構。

RPM 基本指令

# 安裝模式
$ rpm -i
$ rpm --install
# 升級模式
$ rpm -U
$ rpm --upgrade
# 卸裝模式
$ rpm -e
$ rpm --uninstall
# 查詢模式
$ rpm -q
$ rpm --query
# 檢驗模式
$ rpm -V
$ rpm --verify

RPM 安裝 / 升級模式

用於安裝新套件,和將已安裝套件升級到更新的版本。

RPM 安裝 / 升級模式的常用選項

--force容與替換前次安裝好的檔案。

-h (--hash)用井字號顯示安裝進度。

--nodeps忽略相依性檢查,強制安裝或升級套件。

--test模擬整個過程,但不實際修改檔案。

-v列出每一個動作的訊息。

--vv更徹底的詳細訊息模式。

RPM 安裝 / 升級模式範例

# 要安裝一個新套件,必須先設法取得套件檔
$ wget http://ftp.pbone.net/mirror/archive.download.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386/gcc-2.96-113.i386.rpm
# 若安裝時,搭配的其它套件尚未安裝或版本不符,則會失敗
$ rpm -i gcc-2.96-113.i386.rpm
warning: gcc-2.96-113.i386.rpm: Header V3 DSA/SHA1 Signature, key ID db42a60e: NOKEY
error: Failed dependencies:
binutils >= 2.11.93.0.2-6 is needed by gcc-2.96-113.i386
cpp = 2.96-113 is needed by gcc-2.96-113.i386
glibc-devel is needed by gcc-2.96-113.i386
ld-linux.so.2 is needed by gcc-2.96-113.i386
libc.so.6 is needed by gcc-2.96-113.i386
libc.so.6(GLIBC_2.0) is needed by gcc-2.96-113.i386
libc.so.6(GLIBC_2.1) is needed by gcc-2.96-113.i386
# 安裝 gcc 的先決條件是 binutils、cpp 與 glibc-devel
$ rpm -i binutils-2.11.93.0.2-11.i386.rpm cpp-2.96-113.i386.rpm glibc-devel-2.2.5-44.i386.rpm
# 升級模式其實可視為安裝模式的一種,現存套件會被新版蓋過,若該套件未安裝,則 -U 的行為和 -i 一樣
$ rpm -U gcc-2.96-113.i386.rpm

RPM 卸裝模式

刪除掉已安裝套件的所有檔案,預設下,是在不破壞任何相依關係的情況下,才會卸裝掉所指定的套件。

RPM 卸裝模式的常用選項

--nodeps忽略相依性檢查,強制移除套件。

--test模擬整個過程,但不實際刪除任何檔案。

RPM 卸裝模式範例

# 卸裝動作和安裝剛好相反,考量到依存關係,若要移除的對象有其它套件用到,則無法移除。
$ rpm -e glibc-devel
error: removing these packages would break dependencies:
glibc-devel is needed by gcc-2.96-113

RPM 查詢模式

可查詢已安裝套件的狀態,也可以取得原始套件檔的資訊。

RPM 查詢模式的常用選項

-a (--all)列出已安裝在系統上的所有套件。

-f (--file) filename顯示含有特定檔案的套件。

-p package_filename查詢所指定的套件檔。

-c (--configfiles)只列出組態檔。

-d (-docfiles)只列出說明文件檔。i package

-i package特定套件的資訊,搭配 -p 一起使用則是列出該套件檔的資訊。

-l (--list) 列出所指定套件的所有檔案,搭配 -p 一起使用則是列出該套件檔的所有檔案。

-R (--requires)列出與套件相依的所有相關套件。

RPM 查詢模式範例

# 想知道 rpm 檔所含軟體的版本,可合併使用查詢 -q 與套件資訊 -pi,若是已安裝的檔案則省略 -p
$ rpm -qpi gcc-2.96-113.i386.rpm | grep Version
Version : 2.96
# 列出套件裡所含的檔案,若是已安裝的檔案則省略 -p
$ pm -qlp gcc-2.96-113.i386.rpm
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
/usr/bin/i386-redhat-linux-gcc
(...以下略...)
# 列出套件所含的文件檔,若是已安裝的檔案則省略 -p
$ rpm -qdp gcc-2.96-113.i386.rpm
/usr/share/doc/gcc-2.96/ChangeLog
/usr/share/doc/gcc-2.96/ChangeLog.0
/usr/share/doc/gcc-2.96/ChangeLog.1
/usr/share/doc/gcc-2.96/ChangeLog.2
(...以下略...)
# 查詢特定檔案來自哪個套件
$ rpm -qf /etc/aliases
setup-2.12.1-1.fc29.noarch
# 列出已安裝在系統上的所有套件
$ rpm -qa | grep python
python-pip-wheel-18.1-1.fc29.noarch
python3-setuptools-40.4.3-1.fc29.noarch
python3-3.7.2-4.fc29.x86_64
python3-six-1.11.0-6.fc29.noarch
(...以下略...)

RPM 檢核模式

檢驗已安裝的套件的檔案是否符合 RPM 資料庫的紀錄。

RPM 檢核模式的常用選項

--nofiles忽略遺失的檔案。

--nomd5忽略 MD5 查核碼特偵。

--nopgp忽略 PGP 簽章錯誤。

YUM

YUM 可以說是 RPM 的加強版,除了保有原本基本功能外,操作介面更簡單,最厲害的是他可以幫使用者處理好套件依存關係,當一個套件安裝時缺少某些依賴套件時,他將會自動找出缺少的套件並且自動安裝。

YUM 支援多個套件庫,只需要一個簡單的組態檔,位置在 /etc/yum.conf,若要增加或修改套件庫也可以在 /etc/yum.repos.d/ 目錄下進行。

YUM 基本指令

# 安裝套件
$ yum install
# 移除套件
$ yum erase
# 完整移除套件(包含相依檔)
$ yum remove
# 更新套件
$ yum update
# 列出系統指定的套件以及狀態
$ yum list
# 搜尋特定套件的細節
$ yum search
# 檢查更新
$ yum check-update

YUM 安裝套件

YUM 強大在於只要告訴他需要安裝的套件名稱,所有相依問題和檔案下載都會處理,並且照正確的順序安裝。

# 利用 YUM 安裝 Samba
$ yum install samba
Last metadata expiration check: 1:36:44 ago on Wed 08 May 2019 08:09:08 AM UTC.
Dependencies resolved.
===============================================================
Package Arch Version Repo Size
===============================================================
Installing:
samba x86_64 2:4.9.6-0.fc29 updates 605 k
Installing dependencies:
cups-libs x86_64 1:2.2.8-10.fc29 updates 323 k
libldb x86_64 1.4.6-1.fc29 updates 152 k
libwbclient x86_64 2:4.9.6-0.fc29 updates 42 k
lmdb-libs x86_64 0.9.23-1.fc29 updates 56 k
samba-client-libs x86_64 2:4.9.6-0.fc29 updates 4.8 M
samba-common noarch 2:4.9.6-0.fc29 updates 140 k
samba-common-libs x86_64 2:4.9.6-0.fc29 updates 97 k
samba-common-tools x86_64 2:4.9.6-0.fc29 updates 378 k
samba-libs x86_64 2:4.9.6-0.fc29 updates 101 k
avahi-libs x86_64 0.7-16.fc29 fedora 59 k
jansson x86_64 2.11-2.fc29 fedora 43 k
libtalloc x86_64 2.1.14-2.fc29 fedora 42 k
libtdb x86_64 1.3.16-2.fc29 fedora 50 k
libtevent x86_64 0.9.37-2.fc29 fedora 42 k
Transaction Summary
===============================================================
Install 15 Packages
Total download size: 6.9 M
Installed size: 26 M
Is this ok [y/N]: y
Downloading Packages:
(1/15): libwbclient-4.9.6-0.fc 34 kB/s | 42 kB 00:01
(2/15): cups-libs-2.2.8-10.fc2 199 kB/s | 323 kB 00:01
(3/15): lmdb-libs-0.9.23-1.fc2 77 kB/s | 56 kB 00:00
(4/15): libldb-1.4.6-1.fc29.x8 78 kB/s | 152 kB 00:01
(5/15): samba-4.9.6-0.fc29.x86 923 kB/s | 605 kB 00:00
(6/15): samba-common-4.9.6-0.f 299 kB/s | 140 kB 00:00
(7/15): samba-common-libs-4.9. 509 kB/s | 97 kB 00:00
(8/15): samba-libs-4.9.6-0.fc2 593 kB/s | 101 kB 00:00
(9/15): samba-common-tools-4.9 1.1 MB/s | 378 kB 00:00
(10/15): avahi-libs-0.7-16.fc2 39 kB/s | 59 kB 00:01
(11/15): libtalloc-2.1.14-2.fc 51 kB/s | 42 kB 00:00
(12/15): jansson-2.11-2.fc29.x 15 kB/s | 43 kB 00:02
(13/15): libtdb-1.3.16-2.fc29. 55 kB/s | 50 kB 00:00
(14/15): libtevent-0.9.37-2.fc 135 kB/s | 42 kB 00:00
(15/15): samba-client-libs-4.9 1.2 MB/s | 4.8 MB 00:04
---------------------------------------------------------------
Total 761 kB/s | 6.9 MB 00:09
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : libtalloc-2.1.14-2.fc29.x86_64 1/15
Installing : libtdb-1.3.16-2.fc29.x86_64 2/15
Running scriptlet: libtdb-1.3.16-2.fc29.x86_64 2/15
Installing : libtevent-0.9.37-2.fc29.x86_64 3/15
Running scriptlet: samba-common-2:4.9.6-0.fc29.noarc 4/15
Installing : samba-common-2:4.9.6-0.fc29.noarc 4/15
Running scriptlet: samba-common-2:4.9.6-0.fc29.noarc 4/15
Installing : avahi-libs-0.7-16.fc29.x86_64 5/15
Installing : cups-libs-1:2.2.8-10.fc29.x86_64 6/15
Installing : jansson-2.11-2.fc29.x86_64 7/15
Installing : lmdb-libs-0.9.23-1.fc29.x86_64 8/15
Running scriptlet: lmdb-libs-0.9.23-1.fc29.x86_64 8/15
Installing : libldb-1.4.6-1.fc29.x86_64 9/15
Installing : libwbclient-2:4.9.6-0.fc29.x86_64 10/15
Installing : samba-common-libs-2:4.9.6-0.fc29. 11/15
Running scriptlet: samba-common-libs-2:4.9.6-0.fc29. 11/15
Installing : samba-client-libs-2:4.9.6-0.fc29. 12/15
Running scriptlet: samba-client-libs-2:4.9.6-0.fc29. 12/15
Installing : samba-libs-2:4.9.6-0.fc29.x86_64 13/15
Running scriptlet: samba-libs-2:4.9.6-0.fc29.x86_64 13/15
Installing : samba-common-tools-2:4.9.6-0.fc29 14/15
Installing : samba-2:4.9.6-0.fc29.x86_64 15/15
Running scriptlet: samba-2:4.9.6-0.fc29.x86_64 15/15
Running scriptlet: libwbclient-2:4.9.6-0.fc29.x86_64 15/15
Running scriptlet: samba-2:4.9.6-0.fc29.x86_64 15/15
Verifying : cups-libs-1:2.2.8-10.fc29.x86_64 1/15
Verifying : libldb-1.4.6-1.fc29.x86_64 2/15
Verifying : libwbclient-2:4.9.6-0.fc29.x86_64 3/15
Verifying : lmdb-libs-0.9.23-1.fc29.x86_64 4/15
Verifying : samba-2:4.9.6-0.fc29.x86_64 5/15
Verifying : samba-client-libs-2:4.9.6-0.fc29. 6/15
Verifying : samba-common-2:4.9.6-0.fc29.noarc 7/15
Verifying : samba-common-libs-2:4.9.6-0.fc29. 8/15
Verifying : samba-common-tools-2:4.9.6-0.fc29 9/15
Verifying : samba-libs-2:4.9.6-0.fc29.x86_64 10/15
Verifying : avahi-libs-0.7-16.fc29.x86_64 11/15
Verifying : jansson-2.11-2.fc29.x86_64 12/15
Verifying : libtalloc-2.1.14-2.fc29.x86_64 13/15
Verifying : libtdb-1.3.16-2.fc29.x86_64 14/15
Verifying : libtevent-0.9.37-2.fc29.x86_64 15/15
Installed:
samba-2:4.9.6-0.fc29.x86_64
cups-libs-1:2.2.8-10.fc29.x86_64
libldb-1.4.6-1.fc29.x86_64
libwbclient-2:4.9.6-0.fc29.x86_64
lmdb-libs-0.9.23-1.fc29.x86_64
samba-client-libs-2:4.9.6-0.fc29.x86_64
samba-common-2:4.9.6-0.fc29.noarch
samba-common-libs-2:4.9.6-0.fc29.x86_64
samba-common-tools-2:4.9.6-0.fc29.x86_64
samba-libs-2:4.9.6-0.fc29.x86_64
avahi-libs-0.7-16.fc29.x86_64
jansson-2.11-2.fc29.x86_64
libtalloc-2.1.14-2.fc29.x86_64
libtdb-1.3.16-2.fc29.x86_64
libtevent-0.9.37-2.fc29.x86_64
Complete!Complete!

YUM 卸除套件

# 利用 YUM 移除 Samba
$ yum remove samba
Dependencies resolved.
===============================================================
Package Arch Version Repo Size
===============================================================
Removing:
samba x86_64 2:4.9.6-0.fc29 @updates 2.1 M
Removing unused dependencies:
avahi-libs x86_64 0.7-16.fc29 @fedora 162 k
cups-libs x86_64 1:2.2.8-10.fc29 @updates 960 k
jansson x86_64 2.11-2.fc29 @fedora 86 k
libldb x86_64 1.4.6-1.fc29 @updates 505 k
libtalloc x86_64 2.1.14-2.fc29 @fedora 86 k
libtdb x86_64 1.3.16-2.fc29 @fedora 103 k
libtevent x86_64 0.9.37-2.fc29 @fedora 87 k
libwbclient x86_64 2:4.9.6-0.fc29 @updates 76 k
lmdb-libs x86_64 0.9.23-1.fc29 @updates 114 k
samba-client-libs x86_64 2:4.9.6-0.fc29 @updates 20 M
samba-common noarch 2:4.9.6-0.fc29 @updates 128 k
samba-common-libs x86_64 2:4.9.6-0.fc29 @updates 292 k
samba-common-tools x86_64 2:4.9.6-0.fc29 @updates 1.1 M
samba-libs x86_64 2:4.9.6-0.fc29 @updates 372 k
Transaction Summary
===============================================================
Remove 15 Packages
Freed space: 26 M
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: samba-2:4.9.6-0.fc29.x86_64 1/1
Running scriptlet: samba-2:4.9.6-0.fc29.x86_64 1/15
Erasing : samba-2:4.9.6-0.fc29.x86_64 1/15
Running scriptlet: samba-2:4.9.6-0.fc29.x86_64 1/15
Erasing : samba-common-tools-2:4.9.6-0.fc29 2/15
Erasing : samba-libs-2:4.9.6-0.fc29.x86_64 3/15
Running scriptlet: samba-libs-2:4.9.6-0.fc29.x86_64 3/15
Erasing : samba-common-libs-2:4.9.6-0.fc29. 4/15
Running scriptlet: samba-common-libs-2:4.9.6-0.fc29. 4/15
Erasing : samba-client-libs-2:4.9.6-0.fc29. 5/15
Running scriptlet: samba-client-libs-2:4.9.6-0.fc29. 5/15
Running scriptlet: libwbclient-2:4.9.6-0.fc29.x86_64 6/15
Erasing : libwbclient-2:4.9.6-0.fc29.x86_64 6/15
Erasing : samba-common-2:4.9.6-0.fc29.noarc 7/15
Erasing : libldb-1.4.6-1.fc29.x86_64 8/15
Erasing : libtevent-0.9.37-2.fc29.x86_64 9/15
Erasing : cups-libs-1:2.2.8-10.fc29.x86_64 10/15
Erasing : avahi-libs-0.7-16.fc29.x86_64 11/15
Erasing : libtalloc-2.1.14-2.fc29.x86_64 12/15
Erasing : lmdb-libs-0.9.23-1.fc29.x86_64 13/15
Running scriptlet: lmdb-libs-0.9.23-1.fc29.x86_64 13/15
Erasing : libtdb-1.3.16-2.fc29.x86_64 14/15
Running scriptlet: libtdb-1.3.16-2.fc29.x86_64 14/15
Erasing : jansson-2.11-2.fc29.x86_64 15/15
Running scriptlet: jansson-2.11-2.fc29.x86_64 15/15
Verifying : avahi-libs-0.7-16.fc29.x86_64 1/15
Verifying : cups-libs-1:2.2.8-10.fc29.x86_64 2/15
Verifying : jansson-2.11-2.fc29.x86_64 3/15
Verifying : libldb-1.4.6-1.fc29.x86_64 4/15
Verifying : libtalloc-2.1.14-2.fc29.x86_64 5/15
Verifying : libtdb-1.3.16-2.fc29.x86_64 6/15
Verifying : libtevent-0.9.37-2.fc29.x86_64 7/15
Verifying : libwbclient-2:4.9.6-0.fc29.x86_64 8/15
Verifying : lmdb-libs-0.9.23-1.fc29.x86_64 9/15
Verifying : samba-2:4.9.6-0.fc29.x86_64 10/15
Verifying : samba-client-libs-2:4.9.6-0.fc29. 11/15
Verifying : samba-common-2:4.9.6-0.fc29.noarc 12/15
Verifying : samba-common-libs-2:4.9.6-0.fc29. 13/15
Verifying : samba-common-tools-2:4.9.6-0.fc29 14/15
Verifying : samba-libs-2:4.9.6-0.fc29.x86_64 15/15
Removed:
samba-2:4.9.6-0.fc29.x86_64
avahi-libs-0.7-16.fc29.x86_64
cups-libs-1:2.2.8-10.fc29.x86_64
jansson-2.11-2.fc29.x86_64
libldb-1.4.6-1.fc29.x86_64
libtalloc-2.1.14-2.fc29.x86_64
libtdb-1.3.16-2.fc29.x86_64
libtevent-0.9.37-2.fc29.x86_64
libwbclient-2:4.9.6-0.fc29.x86_64
lmdb-libs-0.9.23-1.fc29.x86_64
samba-client-libs-2:4.9.6-0.fc29.x86_64
samba-common-2:4.9.6-0.fc29.noarch
samba-common-libs-2:4.9.6-0.fc29.x86_64
samba-common-tools-2:4.9.6-0.fc29.x86_64
samba-libs-2:4.9.6-0.fc29.x86_64
Complete!

YUM 檢查已安裝的套件

# 透過 more 逐頁檢視套件
$ audit.x86_64 3.0-0.7.20190326git03e7489.fc29 updates
audit-libs.i686 3.0-0.7.20190326git03e7489.fc29 updatesaudit-libs.x86_64 3.0-0.7.20190326git03e7489.fc29 updatesaudit-libs-devel.i686 3.0-0.7.20190326git03e7489.fc29 updatesaudit-libs-devel.x86_64 3.0-0.7.20190326git03e7489.fc29 updatesaudit-libs-static.i686 3.0-0.4.20180831git0047a6c.fc29 fedoraaudit-libs-static.x86_64 3.0-0.4.20180831git0047a6c.fc29 fedoraaudit-viewer.x86_64 0.7.4-15.fc29 fedora(...以下略...)# 查詢 Samba 是否安裝
$ yum list samba
Last metadata expiration check: 1:16:34 ago on Wed 08 May 2019 08:09:08 AM UTC.Installed Packagessamba.x86_64 2:4.9.6-0.fc29 @updates# 查詢 Samba 的詳細資訊
$ yum info samba
Last metadata expiration check: 1:17:29 ago on Wed 08 May 2019 08:09:08 AM UTC.Installed PackagesName : sambaEpoch : 2Version : 4.9.6Release : 0.fc29Architecture : x86_64Size : 2.1 MSource : samba-4.9.6-0.fc29.src.rpmRepository : @SystemFrom repo : updatesSummary : Server and Client software to interoperate with Windows machinesURL : http://www.samba.org/License : GPLv3+ and LGPLv3+Description : Samba is the standard Windows interoperability suite of programs for Linux and: Unix.

--

--