iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

使用 dnf 管理套件

比起 dnf 指令,更多人知道的是 yum 套件管理指令,其實 dnfyum 未來取代版本,提供了如下功能:

  • 更有效率的解決套件相依問題。
  • 支援模組架構。
  • 自動移除不需要的套件。
  • 相容於 yum 指令。

因此,本小節將以 dnf 指令為主。

在 Enterprise Linux 8 開始正式使用 dnf 做為套件管理的程式,但為了相下相容,以目前的版本使用 yum 也是可以的,但為了面對未來的趨勢,學習 dnf 能夠讓自己瞭解系統套件的安裝狀態。

套件安裝來源

dnf 預設會從網路上取得可用套件,因此要使用 dnf 安裝套件之前必須讓主機可以連通網路。具體上 dnf 是會先讀取套件來源的設定檔,再從這些設定檔案的來源位置尋找可安裝套件。

這些設定檔被存放在 /etc/yum.repos.d/ 目錄中,是以 .repo 做為副檔名。

我們可以查看作業系統安裝好之後,有哪些套件設定檔:

student$ ls /etc/yum.repos.d/
Rocky-AppStream.repo         Rocky-NFV.repo
Rocky-BaseOS.repo            Rocky-Plus.repo
Rocky-Debuginfo.repo         Rocky-PowerTools.repo
Rocky-Devel.repo             Rocky-RT.repo
Rocky-Extras.repo            Rocky-ResilientStorage.repo
Rocky-HighAvailability.repo  Rocky-Sources.repo
Rocky-Media.repo

每一個 .repo 檔案都是一個安裝設定檔,而設定檔裡可能有 1 個或多個安裝來源的描述,但大抵上每個描述都是下列的架構:

[baseos]
name=Rocky Linux $releasever - BaseOS
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

下表說明參數用意:

參數 解釋
[baseos] Repository 的識別名稱。這是一個唯一的名稱,用於區分不同的 repository。
name 供操作者辨識的說明。
mirrorlist 指定安裝來源的列表 (list),dnf 會從中選擇合適的位置當作安裝來源。
#baseurl 明確指定套件安裝來源位置,加入 # 代表不使用這個設定 (註解)。
gpgcheck 是否檢查 GPG 簽名。用來確認套件的封裝者是否正確。
enabled 是否啟用這個 repository(1 表示是,0 表示否)。
gpgkey GPG 公鑰的存放位置,用於驗證下載的套件是否和指定的公鑰相符,這會和 gpgcheck 一同使用。

這些設定指示 dnf 如何從這個 repository 下載和驗證套件。一般來說,我們會看到 mirrorlistbaseurl 兩者只有一個會被使用(即只有一個沒有被註解掉),而 gpgcheckgpgkey 通常會一起使用,以確保套件的完整性和安全性。

dnf 常用指令

dnf 提供很多副指令供管理員使用,其中常用的項目如下:

功能/指令 說明
install <package> 安裝指定的套件。
update <package> 更新指定的套件,如果不指定更新所有已安裝的套件。
remove <package> 移除指定的套件,預設會一併刪除不再使用的相依套件。
list <package> 列出所有可用的和已安裝的版本,也可以指定套件名稱。
history 查看 dnf 操作的歷史紀錄。
clean all 清除快取資料,包括套件安裝檔 (rpm) 和套件相關資訊。
provides 查詢指令收錄在哪一個套件裡。

以下示範常用的 dnf 操作:

  • 查詢 httpd 套件

    student$ sudo dnf list httpd
    
  • 安裝 httpd 套件

    安裝 httpd 套件的同時,也會把相依性一併安裝。

    root# dnf install httpd
    
    Last metadata expiration check: 0:00:16 ago on Tue 12 Sep 2023 10:07:15 PM CST.
    Dependencies resolved.
    ===============================================================================
     Package               Arch       Version                  Repository     Size
    ===============================================================================
    Installing:
     httpd                 x86_64     2.4.53-11.el9_2.5        appstream      47 k
    Installing dependencies:
     apr                   x86_64     1.7.0-11.el9             appstream     123 k
     apr-util              x86_64     1.6.1-20.el9_2.1         appstream      94 k
     apr-util-bdb          x86_64     1.6.1-20.el9_2.1         appstream      12 k
     httpd-core            x86_64     2.4.53-11.el9_2.5        appstream     1.4 M
     httpd-filesystem      noarch     2.4.53-11.el9_2.5        appstream      14 k
     httpd-tools           x86_64     2.4.53-11.el9_2.5        appstream      81 k
     mailcap               noarch     2.1.49-5.el9             baseos         32 k
     rocky-logos-httpd     noarch     90.14-1.el9              appstream      24 k
    Installing weak dependencies:
     apr-util-openssl      x86_64     1.6.1-20.el9_2.1         appstream      14 k
     mod_http2             x86_64     1.15.19-4.el9_2.4        appstream     149 k
     mod_lua               x86_64     2.4.53-11.el9_2.5        appstream      61 k
    
    Transaction Summary
    ===============================================================================
    Install  12 Packages
    
    Total download size: 2.0 M
    Installed size: 6.0 M
    Is this ok [y/N]: y (這邊輸入 "y")
    Downloading Packages:
    (1/12): mailcap-2.1.49-5.el9.noarch.rpm        297 kB/s |  32 kB     00:00    
    (2/12): mod_lua-2.4.53-11.el9_2.5.x86_64.rpm   457 kB/s |  61 kB     00:00    
    (3/12): httpd-tools-2.4.53-11.el9_2.5.x86_64.r 1.2 MB/s |  81 kB     00:00    
    (4/12): rocky-logos-httpd-90.14-1.el9.noarch.r 136 kB/s |  24 kB     00:00    
    (5/12): httpd-2.4.53-11.el9_2.5.x86_64.rpm     672 kB/s |  47 kB     00:00    
    (6/12): httpd-filesystem-2.4.53-11.el9_2.5.noa 324 kB/s |  14 kB     00:00    
    (7/12): apr-util-openssl-1.6.1-20.el9_2.1.x86_ 298 kB/s |  14 kB     00:00    
    (8/12): apr-util-bdb-1.6.1-20.el9_2.1.x86_64.r 156 kB/s |  12 kB     00:00    
    (9/12): apr-util-1.6.1-20.el9_2.1.x86_64.rpm   949 kB/s |  94 kB     00:00    
    (10/12): mod_http2-1.15.19-4.el9_2.4.x86_64.rp 1.3 MB/s | 149 kB     00:00    
    (11/12): apr-1.7.0-11.el9.x86_64.rpm           852 kB/s | 123 kB     00:00    
    (12/12): httpd-core-2.4.53-11.el9_2.5.x86_64.r 7.2 MB/s | 1.4 MB     00:00    
    -------------------------------------------------------------------------------
    Total                                          1.2 MB/s | 2.0 MB     00:01     
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                       1/1 
      Installing       : apr-1.7.0-11.el9.x86_64                              1/12 
      Installing       : apr-util-bdb-1.6.1-20.el9_2.1.x86_64                 2/12 
      Installing       : apr-util-1.6.1-20.el9_2.1.x86_64                     3/12 
      Installing       : apr-util-openssl-1.6.1-20.el9_2.1.x86_64             4/12 
      Installing       : httpd-tools-2.4.53-11.el9_2.5.x86_64                 5/12 
      Running scriptlet: httpd-filesystem-2.4.53-11.el9_2.5.noarch            6/12 
    useradd warning: apache's uid 48 outside of the SYS_UID_MIN 201 and SYS_UID_MAX 999 range.
    
      Installing       : httpd-filesystem-2.4.53-11.el9_2.5.noarch            6/12 
      Installing       : rocky-logos-httpd-90.14-1.el9.noarch                 7/12 
      Installing       : mailcap-2.1.49-5.el9.noarch                          8/12 
      Installing       : httpd-core-2.4.53-11.el9_2.5.x86_64                  9/12 
      Installing       : mod_lua-2.4.53-11.el9_2.5.x86_64                    10/12 
      Installing       : mod_http2-1.15.19-4.el9_2.4.x86_64                  11/12 
      Installing       : httpd-2.4.53-11.el9_2.5.x86_64                      12/12 
      Running scriptlet: httpd-2.4.53-11.el9_2.5.x86_64                      12/12 
      Verifying        : mailcap-2.1.49-5.el9.noarch                          1/12 
      Verifying        : rocky-logos-httpd-90.14-1.el9.noarch                 2/12 
      Verifying        : mod_lua-2.4.53-11.el9_2.5.x86_64                     3/12 
      Verifying        : httpd-tools-2.4.53-11.el9_2.5.x86_64                 4/12 
      Verifying        : httpd-2.4.53-11.el9_2.5.x86_64                       5/12 
      Verifying        : httpd-filesystem-2.4.53-11.el9_2.5.noarch            6/12 
      Verifying        : apr-util-openssl-1.6.1-20.el9_2.1.x86_64             7/12 
      Verifying        : apr-util-bdb-1.6.1-20.el9_2.1.x86_64                 8/12 
      Verifying        : apr-util-1.6.1-20.el9_2.1.x86_64                     9/12 
      Verifying        : mod_http2-1.15.19-4.el9_2.4.x86_64                  10/12 
      Verifying        : apr-1.7.0-11.el9.x86_64                             11/12 
      Verifying        : httpd-core-2.4.53-11.el9_2.5.x86_64                 12/12 
    
    Installed:
      apr-1.7.0-11.el9.x86_64                                                      
      apr-util-1.6.1-20.el9_2.1.x86_64                                             
      apr-util-bdb-1.6.1-20.el9_2.1.x86_64                                         
      apr-util-openssl-1.6.1-20.el9_2.1.x86_64                                     
      httpd-2.4.53-11.el9_2.5.x86_64                                               
      httpd-core-2.4.53-11.el9_2.5.x86_64                                          
      httpd-filesystem-2.4.53-11.el9_2.5.noarch                                    
      httpd-tools-2.4.53-11.el9_2.5.x86_64                                         
      mailcap-2.1.49-5.el9.noarch                                                  
      mod_http2-1.15.19-4.el9_2.4.x86_64                                           
      mod_lua-2.4.53-11.el9_2.5.x86_64                                             
      rocky-logos-httpd-90.14-1.el9.noarch                                         
    
    Complete!
    
  • 移除 httpd 套件

    student$ sudo dnf remove httpd
    
    Dependencies resolved.
    ===============================================================================
     Package               Arch       Version                 Repository      Size
    ===============================================================================
    Removing:
     httpd                 x86_64     2.4.53-11.el9_2.5       @appstream      59 k
    Removing unused dependencies:
     apr                   x86_64     1.7.0-11.el9            @appstream     289 k
     apr-util              x86_64     1.6.1-20.el9_2.1        @appstream     211 k
     apr-util-bdb          x86_64     1.6.1-20.el9_2.1        @appstream      15 k
     apr-util-openssl      x86_64     1.6.1-20.el9_2.1        @appstream      23 k
     httpd-core            x86_64     2.4.53-11.el9_2.5       @appstream     4.6 M
     httpd-filesystem      noarch     2.4.53-11.el9_2.5       @appstream     400  
     httpd-tools           x86_64     2.4.53-11.el9_2.5       @appstream     198 k
     mailcap               noarch     2.1.49-5.el9            @baseos         78 k
     mod_http2             x86_64     1.15.19-4.el9_2.4       @appstream     385 k
     mod_lua               x86_64     2.4.53-11.el9_2.5       @appstream     142 k
     rocky-logos-httpd     noarch     90.14-1.el9             @appstream      24 k
    
    Transaction Summary
    ===============================================================================
    Remove  12 Packages
    
    Freed space: 6.0 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: httpd-2.4.53-11.el9_2.5.x86_64                       1/12 
      Erasing          : httpd-2.4.53-11.el9_2.5.x86_64                       1/12 
      Running scriptlet: httpd-2.4.53-11.el9_2.5.x86_64                       1/12 
      Erasing          : mod_lua-2.4.53-11.el9_2.5.x86_64                     2/12 
      Erasing          : mod_http2-1.15.19-4.el9_2.4.x86_64                   3/12 
      Erasing          : rocky-logos-httpd-90.14-1.el9.noarch                 4/12 
      Erasing          : httpd-core-2.4.53-11.el9_2.5.x86_64                  5/12 
      Erasing          : httpd-tools-2.4.53-11.el9_2.5.x86_64                 6/12 
      Erasing          : mailcap-2.1.49-5.el9.noarch                          7/12 
      Erasing          : httpd-filesystem-2.4.53-11.el9_2.5.noarch            8/12 
      Erasing          : apr-util-1.6.1-20.el9_2.1.x86_64                     9/12 
      Erasing          : apr-util-bdb-1.6.1-20.el9_2.1.x86_64                10/12 
      Erasing          : apr-1.7.0-11.el9.x86_64                             11/12 
      Erasing          : apr-util-openssl-1.6.1-20.el9_2.1.x86_64            12/12 
      Running scriptlet: apr-util-openssl-1.6.1-20.el9_2.1.x86_64            12/12 
      Verifying        : apr-1.7.0-11.el9.x86_64                              1/12 
      Verifying        : apr-util-1.6.1-20.el9_2.1.x86_64                     2/12 
      Verifying        : apr-util-bdb-1.6.1-20.el9_2.1.x86_64                 3/12 
      Verifying        : apr-util-openssl-1.6.1-20.el9_2.1.x86_64             4/12 
      Verifying        : httpd-2.4.53-11.el9_2.5.x86_64                       5/12 
      Verifying        : httpd-core-2.4.53-11.el9_2.5.x86_64                  6/12 
      Verifying        : httpd-filesystem-2.4.53-11.el9_2.5.noarch            7/12 
      Verifying        : httpd-tools-2.4.53-11.el9_2.5.x86_64                 8/12 
      Verifying        : mailcap-2.1.49-5.el9.noarch                          9/12 
      Verifying        : mod_http2-1.15.19-4.el9_2.4.x86_64                  10/12 
      Verifying        : mod_lua-2.4.53-11.el9_2.5.x86_64                    11/12 
      Verifying        : rocky-logos-httpd-90.14-1.el9.noarch                12/12 
    
    Removed:
      apr-1.7.0-11.el9.x86_64                                                      
      apr-util-1.6.1-20.el9_2.1.x86_64                                             
      apr-util-bdb-1.6.1-20.el9_2.1.x86_64                                         
      apr-util-openssl-1.6.1-20.el9_2.1.x86_64                                     
      httpd-2.4.53-11.el9_2.5.x86_64                                               
      httpd-core-2.4.53-11.el9_2.5.x86_64                                          
      httpd-filesystem-2.4.53-11.el9_2.5.noarch                                    
      httpd-tools-2.4.53-11.el9_2.5.x86_64                                         
      mailcap-2.1.49-5.el9.noarch                                                  
      mod_http2-1.15.19-4.el9_2.4.x86_64                                           
      mod_lua-2.4.53-11.el9_2.5.x86_64                                             
      rocky-logos-httpd-90.14-1.el9.noarch                                         
    
    Complete!
    

    dnf 在移除時,也會一併把沒有在使用的相依套件一併刪除。

  • 查看套件安裝歷程。

    student$ sudo history
    dnf history
    ID     | Command line             | Date and time    | Action(s)      | Altered
    -------------------------------------------------------------------------------
         4 | remove httpd             | 2023-09-12 22:09 | Removed        |   12   
         3 | install httpd            | 2023-09-12 22:08 | Install        |   12 EE
         2 | install -y mariadb-serve | 2023-05-12 00:43 | I, U           |   89 E<
         1 |                          | 2023-02-16 16:28 | Install        |  336 >E
    
  • 查詢 awk 指令在哪個套件裡。

    若想查出 awk 指令被收錄到哪個套件,則可以使用 provides 達成:

    student$ sudo dnf provides '*bin/awk'
    gawk-5.1.0-6.el9.x86_64 : The GNU version of the AWK text processing utility
    Repo        : @System
    Matched from:
    Provide    : /bin/awk
    

上一篇
Day 26: 套件管理需求
下一篇
Day 28: systemd 開機機制
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言