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 次浏览

开启你的职业生涯

完成课程,获得认证

开始学习
广告