Contents

Linux - RPM 套件管理工具

在 RHEL 家族系列的 (Redhat、Fedora、CentOS、Rocky Linux、 Oracle Linux 等) 都是使用 RPM 來做套件管理,具體是怎麼一回事呢?

RPM 軟體套件管理工具

RPM 套件管理員(簡稱RPM,全稱為The RPM Package Manager),由 RedHat 公司所開發並開源,傳統要安裝套件非常麻煩,需要自行下載原始碼,再進行編譯,RPM主要由大廠(例如 RedHat)或第三方所編譯過後打包好的軟體,開箱集用, Red Hat 企業版 Linux 主要訂閱服務也是提供穩定的 RPM 工使用者安裝使用。

Note
詳細 RedHat RPM訊息, 官方文件請點我RedHat PACKAGING SOFTWARE.

RPM 使用方式

RPM 在 RHEL 紅帽系列家族 (Fedora、CentOS、Rocky Linux、 Oracle Linux等)都已經內建好了,可以直接使用,最常使用來查看某個套件是不是已經安裝了、套件相關內容有哪些及安裝


1. RPM 查詢

1
rpm  -q  [query-options]

1.1. 查詢已經安裝的套件

1
2
[root@serverb ~]# rpm -qa httpd
httpd-2.4.37-43.module+el8.5.0+727+743c5577.1.x86_64

1.2. 查詢套件清單

1
2
3
4
5
[root@serverb ~]# rpm -ql  httpd
/etc/httpd/conf 
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf 
...

1.3. 查詢套件資訊

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@serverb ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.37
Release     : 43.module+el8.5.0+727+743c5577.1
Architecture: x86_64
Install Date: Mon 28 Feb 2022 07:02:18 PM CST
Group       : System Environment/Daemons
Size        : 4494315
License     : ASL 2.0
Signature   : RSA/SHA256, Wed 26 Jan 2022 12:34:48 AM CST, Key ID 15af5dac6d745a60
Source RPM  : httpd-2.4.37-43.module+el8.5.0+727+743c5577.1.src.rpm
Build Date  : Wed 26 Jan 2022 12:27:31 AM CST
Build Host  : ord1-prod-x86build003.svc.aws.rockylinux.org
Relocations : (not relocatable)
Packager    : [email protected]
Vendor      : Rocky
URL         : https://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

1.4. 查詢套件文件

1
2
3
4
5
[root@serverb ~]# rpm -qd httpd
/usr/share/doc/httpd/ABOUT_APACHE
/usr/share/doc/httpd/CHANGES
/usr/share/doc/httpd/LICENSE
...

1.5. 查詢套件設定檔

1
2
3
4
5
[root@serverb ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
...

1.6. 查詢套件安裝腳本內容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@serverb ~]# rpm -q --scripts httpd
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then 
        # Initial installation 
        systemctl --no-reload preset httpd.service htcacheclean.service httpd.socket &>/dev/null || : 
fi
preuninstall scriptlet (using /bin/sh):

...
Note
  • 上述均只能查詢已經安裝在系統內,如果要查詢下載的 package ,需要帶 -p 參數並指定 package 位置

1.7. 查詢機器內某檔案是哪個套件安裝的

1
2
[root@serverb ~]# rpm -qf /var/www/html/
httpd-filesystem-2.4.37-43.module+el8.5.0+727+743c5577.1.noarch

2. RPM 安裝

1
rpm  -i  [install-options]
Note
-h 及 -v 顯示更多詳細安裝訊息及進度
1
2
3
4
5
[root@serverb ~]# rpm -ihv zsh-5.5.1-6.el8_1.2.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.5.1-6.el8_1.2              ################################# [100%]

3. RPM 移除

1
rpm  -e 
Note
-v 顯示更多詳細移除訊息
1
2
3
[root@serverb ~]# rpm -ev zsh 
Preparing packages...
zsh-5.5.1-6.el8_1.2.x86_64

4. RPM 優缺點

從上述操作可以看到 RPM 無論是管理套件或是安裝都是好用且方便的好工具,但是一旦遇到該套件安裝是需要額外相依性套件時,就會安裝失敗。需要手動一步一步把相依性套件補齊,結果如下:

1
2
3
4
5
6
[root@serverb ~]# rpm -ivh php-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64.rpm 
error: Failed dependencies:
	httpd-filesystem is needed by php-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64
	httpd-mmn = 20120211x8664 is needed by php-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64
	php-cli(x86-64) = 7.2.24-1.module+el8.4.0+413+c9202dda is needed by php-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64
	php-common(x86-64) = 7.2.24-1.module+el8.4.0+413+c9202dda is needed by php-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64

後來就有好心人針對 RPM 這個管理套件工具開發更進階的 YUM (Yellow dog Updater, Modified) ,可以從指定的伺服器自動下載套件及處理相關相依性套件一併安裝。

Note
在 RHEL 8 系列版本之後已經改成 DNF 優化版的 YUM 套件管理工具 ( 還是可以使用 yum 指令,透過軟連結指向 DNF)

附錄 - 1. 小測驗

測驗一 :

查看 firewalld 套件的 Summary 及 URL

測驗二 :

wget 下載 http://mirror01.idc.hinet.net/rockylinux/8.5/BaseOS/x86_64/os/Packages/z/zsh-5.5.1-6.el8_1.2.x86_64.rpm 套件後,使用 RPM 套件管理工具安裝

測驗三 :

上述題目安裝的 zsh 套件,有哪些 config 相關設定檔案?

1
2
3
- [ ] 測驗一檢視
- [ ] 測驗二檢視
- [ ] 測驗三檢視 

測驗解答

  1. 測驗一解答 :

查看 firewalld 套件的 Summary 及 URL

1
2
3
4
5
[root@serverb ~]# rpm -qi firewalld
...
Summary     : A firewall daemon with D-Bus interface providing a dynamic firewall
URL         : http://www.firewalld.org
...
  1. 測驗二解答 :

wget 下載 http://mirror01.idc.hinet.net/rockylinux/8.5/BaseOS/x86_64/os/Packages/z/zsh-5.5.1-6.el8_1.2.x86_64.rpm 套件後,使用 RPM 套件管理工具安裝

1
2
3
4
5
[root@serverb ~]# rpm -ivh zsh-5.5.1-6.el8_1.2.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.5.1-6.el8_1.2              ################################# [100%]
  1. 測驗三解答 :

上述題目安裝的 zsh 套件,有哪些 config 相關設定檔案?

1
2
3
4
5
6
7
[root@serverb ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc


如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!