DNF - 面向基於 RPM 的系統的下一代軟體包管理工具


在基於 RPM 的發行版的世界中,保持軟體包更新對於維護系統安全性和穩定性至關重要。幸運的是,dnf 提供了一個功能強大且使用者友好的軟體包管理工具來管理軟體更新。在這篇博文中,我們將探討 dnf 的功能以及它如何改進其前身 yum。

什麼是 DNF?

DNF 是面向基於 RPM 的 Linux 發行版的下一代軟體包管理工具。它是一個現代的開源軟體包管理器,旨在簡化使用者在其系統上管理軟體包的操作。DNF 代表“Dandified Yum”,它是對它的前身 Yum 的一種引用。

DNF 最初在 Fedora 18 中推出,從那時起,它已成為許多基於 RPM 的 Linux 發行版(包括 Fedora、CentOS 8 和 RHEL 8)的預設軟體包管理器。DNF 基於與 Yum 相同的程式碼庫,但進行了許多改進,包括更好的效能、增強的安全性以及更友好的使用者介面。

為什麼需要 DNF?

在我們深入探討 DNF 的技術細節之前,讓我們花一點時間來了解它最初建立的原因。答案在於舊的 Yum 軟體包管理器的缺點。

Yum 在基於 RPM 的發行版還處於起步階段時就被設計出來。它是一個簡單的工具,可以幫助使用者管理其系統上的軟體包,但它有一些限制。例如,它速度慢,處理依賴項的能力不強,並且容易出錯。

隨著時間的推移,基於 RPM 的發行版變得越來越流行和複雜,Yum 的侷限性也變得更加明顯。開發人員和使用者都開始尋找更好的軟體包管理器來解決這些問題。

這就是 DNF 的用武之地。DNF 從一開始就被設計成一個現代化、可靠且易於使用的軟體包管理器。它使用與 Yum 相同的 RPM 軟體包格式,但進行了許多改進,使其成為一個更優秀的工具。

DNF 如何工作?

既然我們瞭解了 DNF 建立的原因,那麼讓我們看看它是如何工作的。從本質上講,DNF 是一個命令列工具,允許使用者管理其系統上的軟體包。它可用於安裝、更新和刪除軟體包,以及搜尋軟體包和列出已安裝的軟體包。

DNF 的關鍵特性之一是它支援外掛。外掛是可以以各種方式擴充套件 DNF 功能的模組。例如,有一些外掛可以幫助進行快取、效能調整和除錯。可以使用 DNF 配置檔案安裝和配置外掛。

DNF 的另一個關鍵特性是它使用了模組化儲存庫。模組化儲存庫是根據其功能組合在一起的軟體包集合。例如,可能有一個用於 Web 伺服器的模組、一個用於資料庫伺服器的模組以及一個用於開發工具的模組。每個模組都包含一組經過測試和驗證以協同工作的軟體包。

模組化儲存庫使使用者更容易管理其軟體包,因為他們可以選擇僅啟用所需的模組。這有助於降低衝突的風險,並確保系統上的軟體包是最新的和安全的。

使用 DNF

現在我們瞭解了 DNF 的工作原理,讓我們看看如何使用它。DNF 可以從命令列或透過圖形介面(例如 GNOME 軟體應用程式)使用。

要使用 DNF 安裝軟體包,只需鍵入以下命令:

dnf install package_name

例如,要安裝 Apache Web 伺服器,您將鍵入:

dnf install httpd

然後,DNF 將下載並安裝軟體包以及所需的任何依賴項。

要使用 DNF 更新軟體包,請鍵入以下命令:

dnf update package_name

例如,要更新 Apache Web 伺服器,您將鍵入:

dnf update httpd

然後,DNF 將檢查更新,並下載和安裝任何可用的更新。

要使用 DNF 刪除軟體包,請鍵入以下命令:

dnf remove package_name

例如,要刪除 Apache Web 伺服器,您將鍵入:

dnf remove httpd

然後,DNF 將刪除軟體包以及不再需要的任何依賴項。

DNF 還有許多其他命令和選項可用於管理系統上的軟體包。例如,您可以使用 search 命令搜尋軟體包,使用 info 命令獲取有關軟體包的資訊,以及使用 list 命令列出所有已安裝的軟體包。

DNF 與其他軟體包管理器的比較

DNF 是面向基於 RPM 的 Linux 發行版的幾個軟體包管理器之一。Yum、Zypper 和 Apt-RPM 是其他流行的軟體包管理器。以下是 DNF 與這些其他軟體包管理器之間的一些區別:

  • Yum - Yum 是 DNF 的前身,已經存在了十多年。DNF 的建立是為了解決 Yum 的一些限制,例如效能緩慢、缺乏依賴項解析以及有限的外掛體系結構。雖然 Yum 仍用於某些較舊版本的基於 RPM 的發行版中,但 DNF 是較新版本中推薦的軟體包管理器。

  • Zypper - Zypper 是 SUSE Linux Enterprise 和 openSUSE 發行版的預設軟體包管理器。與 DNF 一樣,它具有外掛體系結構並支援並行下載軟體包。但是,DNF 通常被認為比 Zypper 更快、更可靠,尤其是在依賴項解析方面。

  • Apt-RPM - Apt-RPM 是面向基於 RPM 的發行版的 Debian 軟體包管理器 (APT) 的移植版本。它具有與 APT 類似的命令列介面和語法,但在 RPM 特定功能(如增量 RPM 和軟體包簽名)方面存在一些限制。DNF 通常被認為是管理基於 RPM 的發行版的更好選擇。

總的來說,DNF 是一款現代化、可靠且易於使用的軟體包管理器,與其他軟體包管理器相比,它具有許多優勢。

如何安裝和配置 DNF

安裝和配置 DNF 非常簡單。以下是步驟:

  • 檢查您的系統要求 - DNF 需要至少 1GB 的 RAM 和 10GB 的可用磁碟空間。

  • 安裝 DNF - 要在基於 Fedora 的系統上安裝 DNF,請執行以下命令:

sudo dnf install dnf
  • 要安裝 Red Hat Enterprise Linux 或 CentOS 系統上的 DNF,您需要先啟用 EPEL 儲存庫:

sudo yum install epel-release
sudo yum install dnf
  • 配置 DNF - DNF 透過 /etc/dnf/dnf.conf 檔案進行配置。以下是一些基本的配置選項

    • installonly_limit - 設定系統上保留的舊版本軟體包的最大數量。預設值為 3。

    • clean_requirements_on_remove - 刪除刪除軟體包時不再需要的依賴項。預設值為 True。

    • gpgcheck - 啟用或停用軟體包簽名驗證。預設值為 True。

    • max_parallel_downloads - 設定一次下載的軟體包的最大數量。預設值為 3。

您還可以透過在 /etc/yum.repos.d/ 目錄中建立檔案來配置各個儲存庫。以下是 Fedora Updates 儲存庫的儲存庫檔案示例:

[fedora-updates]
name=Fedora $releasever - $basearch - Updates
metadata_expire=6h
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch

如何建立自己的 DNF 外掛

建立您自己的 DNF 外掛也相對容易。以下是步驟:

  • 建立外掛目錄 - 在 /usr/lib/dnf/plugins/ 中建立一個具有描述性名稱的外掛目錄。例如:

sudo mkdir /usr/lib/dnf/plugins/myplugin
  • 為您的外掛建立 Python 檔案 - 在您的外掛目錄中建立一個具有描述性名稱和 .py 副檔名的 Python 檔案。例如:

sudo nano /usr/lib/dnf/plugins/myplugin/myplugin.py
  • 定義您的外掛類 - 在您的 Python 檔案中,定義一個繼承自 dnf.Plugin 類的外掛類。以下是一個示例:

from dnf.plugins import Plugin

class MyPlugin(Plugin):
   name = 'myplugin'

   def __init__(self, base, cli):
      super(MyPlugin, self).__init__(base, cli)
  • 實現您的外掛邏輯 - 向您的類新增方法以實現外掛的功能。例如:

def posttrans(self):
   print("My plugin was called after a transaction was completed!")
  • 註冊您的外掛 - 在您的 Python 檔案中,新增對 dnf.plugin.register() 函式的呼叫以註冊您的外掛。例如:

from dnf.plugins import Plugin, plugin

class MyPlugin(Plugin):
   name = 'myplugin'

  def __init__(self, base, cli):
        super(MyPlugin, self).__init__(base, cli)

   def posttrans(self):
       print("My plugin was called after a transaction was completed!")

plugin.register(MyPlugin)
  • 測試您的外掛 - 使用 --verbose 和 --debugsolver 選項執行 DNF 以檢視是否正在呼叫您的外掛。例如:

sudo dnf update --verbose --debugsolver

您應該在輸出中看到您的外掛被載入和呼叫。

結論

DNF 是面向基於 RPM 的 Linux 發行版的下一代軟體包管理工具。與以前的軟體包管理器(如 Yum)相比,它具有許多優勢,包括更快的效能、更好的依賴項解析以及更靈活的外掛體系結構。使用 DNF,您可以輕鬆安裝、更新和刪除系統上的軟體包,以及建立自己的外掛以擴充套件其功能。

透過遵循本文件中概述的步驟,您應該能夠在系統上安裝和配置 DNF,以及建立您自己的 DNF 外掛。無論您是系統管理員、開發人員還是 Linux 愛好者,DNF 都是一個功能強大且用途廣泛的工具,可以幫助您更有效地管理系統。

更新於: 2023年6月28日

305 次瀏覽

開啟你的職業生涯

完成課程,獲得認證

開始學習
廣告