DNF - 基于 RPM 的下一代软件包管理实用程序

linuxoperating systemopen source更新于 2026/1/28 21:52:17

在基于 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 的一些局限性,例如性能低下、缺乏依赖关系解析以及插件架构有限。虽然一些旧版本的基于 RPM 的发行版仍在使用 Yum,但新版本推荐使用 DNF 软件包管理器。

  • Zypper − Zypper 是 SUSE Linux Enterprise 和 openSUSE 发行版的默认软件包管理器。与 DNF 类似,它也采用插件架构,并支持并行下载软件包。然而,DNF 通常被认为比 Zypper 更快、更可靠,尤其是在依赖项解析方面。

  • Apt-RPM − Apt-RPM 是 Debian 软件包管理器 (APT) 针对基于 RPM 的发行版的移植版本。它具有与 APT 类似的命令行界面和语法,但在 RPM 特定功能(例如增量 RPM 和软件包签名)方面存在一些限制。 DNF 通常被认为是管理基于 RPM 的发行版的更好选择。

总的来说,DNF 是一款现代、可靠且易于使用的软件包管理器,相比其他软件包管理器具有许多优势。

如何安装和配置 DNF

安装和配置 DNF 非常简单。以下是步骤 -

  • 检查您的系统要求 - DNF 至少需要 1GB 内存和 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 更新仓库文件的示例 -

[fedora-updates]
name=Fedora $releasever - $basearch - 更新
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 文件 - 在您的插件目录中创建一个 Python 文件,并使用一个描述性名称和 .py 扩展名。例如 −

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 都是一款功能强大且用途广泛的工具,可以帮助您更有效地管理系统。


相关文章


有用资源