使用 dnf 透過 module 安裝指定版本套件

這是從過去使用 yum 時發現的問題:安裝套件時多是執行 yum install -y {套件名稱},如此一來會直接安裝該套件的最新版本,對於日常使用或是全新開發上是正確的,但這個動作對於正在運作的系統,這個直接動作會造成原本的套件升級至最新版,可能出現不可預期的問題,所以之前筆記 yum 安裝指定版本套件 就紀錄了該如何使用 yum 來安裝指定版本套件的做法 (指定版本並不一定是舊版,有可能指定的版本正好是最新版,只是確保版本是固定的),最近正在將 yum 改為 dnf,在 dnf module 安裝時沒辦法直接套用相同技巧,立馬簡單紀錄一下

基本環境說明

  1. Azure VM Standard_B2s (CentOS-based 8.2 - Gen1)
  2. Linux (centos 8.2.2004)
  3. Linux Kernel 4.18.0-193.19.1.el8_2.x86_64
  4. Redis 6.0.7

操作步驟

這邊以 redis 為例,想多了解如何使用 dnf 安裝 redis 可以參考之前筆記 使用 dnf 安裝 Redis 6

  1. 確保目標 package 的 repo rpm 已安裝

    dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    
  2. 依 module 列出可用的 package 與 stream

    dnf module list redis
    

    1dnflist

  3. 檢視目標 package 的詳細資訊

    確認是否有無不同版本的 artifacts

    • 語法

      如果只有一個 profile 可以忽略不寫

      dnf module info {package Name}:{Stream}/{profile}
      

      2dnfinfo

    • 範例

      dnf module info redis:remi-6.0
      

      3noprofile

      dnf module info redis:remi-6.0/common
      

      4withprofile

  4. 啟用 module stream

    • 範例

      dnf module enable -y {package name}:{stream name}
      
    • 語法

      dnf module enable -y redis:remi-6.0
      

      5enablestream

  5. 指定舊版的 artifact 安裝套件

    可以安裝非最新版的套件

    • 語法

      dnf install -y --enablerepo={repo name} {artifact name}
      
    • 範例

      dnf install -y --enablerepo=remi redis-0:6.0.7-1.el8.remi.x86_64
      

      6installredis

心得

想不到 dnf 多了個 module 讓安裝不同版本變得複雜不少XD,不過這是我個人感受,我找了好幾個小時的資料都沒找到明確的解決方式,不知道是我關鍵字下得不好、我太不了解 dnf 或是只有我有這個需求

不論如何,就快速紀錄一下,我相信這樣的流程跟語法我覺得我不會一直都記得@@”

參考資訊

  1. yum 安裝指定版本套件
  2. 使用 dnf 安裝 Redis 6
  3. CentOS 78 yum安装指定版本Redis