使用 DNF 工具管理软件

Red Hat Enterprise Linux 9

使用 DNF 软件管理工具管理 RPM 存储库中的内容

Red Hat Customer Content Services

摘要

使用 DNF 工具查找、安装和使用通过 RPM 存储库分发的内容。了解如何与软件包、模块、流和配置文件一起工作。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 点顶部导航栏中的 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您对改进的建议。包括文档相关部分的链接。
  5. 点对话框底部的 Create

第 1 章 Red Hat Enterprise Linux 9 中的软件管理工具

在 Red Hat Enterprise Linux (RHEL) 9 中,使用 DNF 工具来管理软件。出于与之前的主 RHEL 版本的兼容性原因,您仍然可以使用 yum 命令。但是,在 RHEL 9 中,yumdnf 的一个别名,它提供了与 yum 的一定程度的兼容性。

注意

虽然 RHEL 8 和 RHEL 9 基于 DNF,但它们与 RHEL 7 中使用的 YUM 兼容。

第 2 章 RHEL 9 发布的内容

在以下部分中,了解软件是如何在 Red Hat Enterprise Linux 9 中分发的:

2.1. 软件仓库

Red Hat Enterprise Linux (RHEL)通过不同的存储库分发内容,例如:

BaseOS
BaseOS 存储库中的内容由底层操作系统功能的核心组件组成,其为所有安装提供基础。此内容以 RPM 格式提供,它的支持条款与 RHEL 早期版本中的条款类似。
AppStream
AppStream 仓库的内容包括额外的用户空间应用程序、运行时语言和数据库来支持各种工作负载和使用案例。
重要

RHEL 需要 BaseOS 和 AppStream 内容集,它们在所有 RHEL 订阅中都提供。

CodeReady Linux Builder
CodeReady Linux Builder 存储库在所有 RHEL 订阅中可用。它为开发人员提供了额外的软件包。红帽不支持 CodeReady Linux Builder 存储库中包含的软件包。

其它资源

2.2. 应用程序流

红帽提供多个用户空间组件的版本作为应用程序流,它们比核心操作系统软件包的更新更频繁。这为自定义 Red Hat Enterprise Linux (RHEL)提供了更多的灵活性,而不影响底层平台或特定部署的稳定性。

提供以下格式的应用程序流:

  • RPM 格式
  • 模块,它们是 RPM 格式的扩展
  • Software Collections

RHEL 9 通过提供初始应用程序流版本作为 RPM 来提高应用程序流体验,您可以使用 dnf install 命令安装它们。

从 RHEL 9.1 开始,红帽提供额外的应用程序流版本作为模块,其具有较短的生命周期。

重要

每个应用程序流都有自己的生命周期,它可能与 RHEL 9 的生命周期相同或更短。请参阅 Red Hat Enterprise Linux 应用程序流生命周期

始终决定您要安装应用程序流的哪个版本,并确保首先查看 RHEL 应用程序流生命周期。

2.3. 模块

模块是代表一个组件的一组 RPM 软件包。典型的模块包含以下软件包类型:

  • 带有应用程序的软件包
  • 带有特定于应用程序依赖项库的软件包
  • 带有应用程序文档的软件包
  • 带有助手工具的软件包

2.4. 模块流

模块流是可以作为 AppStream 物理存储库中的虚拟存储库的过滤器。AppStream 组件的模块流版本。每个流都独立接收更新,它们可以依赖于其他模块流。

模块流可以是活跃的或者不活跃的。活跃的流可让系统访问特定模块流中的 RPM 软件包,允许安装相应的组件版本。

在以下情况下,流处于活跃状态:

  • 如果管理员明确启用了它。
  • 如果流是启用的模块的依赖项。
  • 如果流是默认流。每个模块都可以有一个默认流,但在 Red Hat Enterprise Linux 9 中,没有定义默认流。如果需要,您可以配置默认流,如 定义自定义默认模块流和配置文件 中所述。

给定时间点上只能激活一个特定模块的流。因此,只有特定流中的软件包可用。

在为运行时用户应用程序或开发人员应用程序选择特定流前,请考虑以下几点:

  • 所需功能以及哪个组件版本支持该功能
  • 与应用程序或用例的兼容
  • 应用程序流的 生命周期 和您的更新计划

有关所有可用模块和流的列表,请查看软件包清单。有关每个组件的更改,请查看 发行注记

2.5. 模块配置集

模块配置文件是为特定用例要一起安装的推荐的软件包列表,如服务器、客户端、开发、最小安装或其他。这些软件包列表可以包含模块流以外的软件包,通常是来自 BaseOS 存储库或流依赖项的软件包。

使用配置集安装软件包是为方便用户提供的一次性操作。您还可以使用同一模块流的多个配置集安装软件包,而无需进一步准备步骤。

每个模块流可以有任何数量的配置集,包括没有。对于任何给定的模块流,其配置文件的某些部分可以被标记为 default,然后在您没有明确指定配置文件时用于配置文件安装操作。但是,模块流的默认配置文件的存在不是必需的。

例 2.1. nodejs 模块配置集

提供 Node.js 运行时环境的 nodejs 模块为安装提供以下配置集:

# dnf module list nodejs
Name 	   Stream	Profiles                                Summary
nodejs   18    	common [d], development, minimal, s2i   Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

在本例中,提供了以下配置文件:

  • common :生产就绪软件包。这是默认的配置文件([d])。
  • development :生产就绪软件包,包括 Node.js 开发标头。
  • minimal :提供 Node.js 运行时环境的最小软件包集合。
  • s2i: 创建 Node.js 源-到-镜像 (S2I) Linux 容器所需的软件包。

第 3 章 配置 DNF

DNF 及相关工具的配置存储在 /etc/dnf/dnf.conf 文件的 [main] 部分中。

在以下部分中,了解如何使用 /etc/dnf/dnf.conf 配置文件配置 DNF

3.1. 查看当前的 DNF 配置

/etc/dnf/dnf.conf 文件中的 [main] 部分仅包含已明确设置的设置。但是,您可以显示 [main] 部分的所有设置,包括尚未设置的部分,因此请使用它们的默认值。

流程

  • 显示全局 DNF 配置:

    # dnf config-manager --dump

其它资源

  • dnf.conf(5) 手册页

3.2. 设置 DNF 主选项

/etc/dnf/dnf.conf 文件包含一个 [main] 部分。本节中的键-值对会影响 DNF 如何操作及对待存储库。

流程

  1. 编辑 /etc/dnf/dnf.conf 文件。
  2. 根据您的要求更新 [main] 部分。
  3. 保存更改。

其它资源

  • dnf.conf (5) 手册页中的 [main] OPTIONSOPTIONS FOR BOTH [main] AND REPO 部分。

3.3. 管理 DNF 插件

每个安装的插件都可以在 /etc/dnf/plugins/ 目录中有自己的配置文件。在此目录中命名插件配置文件 <plug-in_name>.conf。默认情况下,插件通常是启用的。要在其中一个配置文件中禁用插件,请在文件中添加以下内容:

[main]
enabled=False

3.4. 启用和禁用 DNF 插件

DNF 工具中,插件会被默认加载。但是,您可以影响 DNF 加载哪个插件。

警告

禁用所有插件只用于诊断潜在的问题。DNF 需要某些插件,如 product-idsubscription-manager,禁用它们会导致 Red Hat Enterprise Linux 无法从 Content Delivery Network (CDN)安装或更新软件。

流程

  • 使用以下方法之一会影响 DNF 如何使用插件:

    • 要在全局范围内启用或禁用 DNF 插件加载,请将 plugins 参数添加到 /etc/dnf/dnf.conf 文件的 [main] 部分中。

      • 设置 plugins=1(默认)以启用加载所有 DNF 插件。
      • 设置 plugins=0 以禁用加载所有 DNF 插件。
    • 要禁用特定的插件,请将 enabled=False 添加到 /etc/dnf/plugins/<plug-in_name>.conf 文件的 [main] 部分中。
    • 要禁用特定命令的所有 DNF 插件,请在命令中附加 --noplugins 选项。例如,要为单个 update 命令禁用 DNF 插件,请输入:

      # dnf --noplugins update
    • 要为单个命令禁用某些 DNF 插件,请在命令中附加 --disableplugin=plugin-name 选项。例如,要为单个 update 命令禁用某个 DNF 插件,请输入:

      # dnf update --disableplugin=<plugin_name>
    • 要为单个命令启用某些 DNF 插件,请在命令中附加 --enableplugin=plugin-name 选项。例如,要为单个 update 命令启用某个 DNF 插件,请输入:

      # dnf update --enableplugin=<plugin_name>

第 4 章 搜索 RHEL 9 内容

在以下部分中,了解如何使用 DNF 查找和检查 Red Hat Enterprise Linux 9 中 AppStream 和 BaseOS 存储仓库中的内容:

4.1. 搜索软件包

要识别哪个软件包提供您需要的软件,您可以使用 DNF 搜索存储库。

流程

  • 根据您的场景,使用以下选项之一来搜索存储库:

    • 要在软件包的名称或摘要中搜索术语,请输入:

      $ dnf search <term>
    • 要在软件包的名称、概述或描述中搜索术语,请输入:

      $ dnf search --all <term>

      请注意,在描述中使用 --all 选项进行额外搜索比普通搜索操作要慢。

    • 要搜索软件包名称,并在输出中列出软件包名称及其版本,请输入:

      $ dnf repoquery <package_name>
    • 要搜索哪个软件包提供了文件,请指定文件名或文件的路径:

      $ dnf provides <file_name>

4.2. 列出软件包

您可以使用 DNF 显示存储库中提供的软件包及其版本列表。如果需要,您可以过滤此列表,例如,只列出提供更新的软件包。

流程

  • 列出所有可用软件包的最新版本,包括构架、版本号以及从其中安装的存储库:

    $ dnf list --all
    ...
    zlib.x86_64         1.2.11-39.el9   @rhel-9-for-x86_64-baseos-rpms
    zlib.i686           1.2.11-39.el9   rhel-9-for-x86_64-baseos-rpms
    zlib-devel.i686     2.11-39.el9     rhel-9-for-x86_64-appstream-rpms
    zlib-devel.x86_64   1.2.11-39.el9   rhel-9-for-x86_64-appstream-rpms
    ...

    存储库前面的 @ 符号表示此行中的软件包当前已安装。

    另外,要显示所有可用的软件包,包括版本号和架构,请输入:

    $ dnf repoquery
    ...
    zlib-0:1.2.11-35.el9_1.i686
    zlib-0:1.2.11-35.el9_1.x86_64
    zlib-0:1.2.11-39.el9.i686
    zlib-0:1.2.11-39.el9.x86_64
    zlib-devel-0:1.2.11-39.el9.i686
    zlib-devel-0:1.2.11-39.el9.x86_64
    ...

    另外,您可以使用其他选项而不是 --all 来过滤输出,例如:

    • 使用 --installed 仅列出已安装的软件包。
    • 使用 --available 列出所有可用软件包。
    • 使用 --upgrades 列出新版本提供的软件包。
    注意

    您可以通过将全局表达式附加为参数来过滤结果。如需了解更多详细信息,请参阅 在 DNF 输入中指定全局表达式

4.3. 列出软件仓库

要获得系统上启用和禁用的存储库的概述,您可以列出它们。

流程

  1. 列出系统上所有启用的存储库:

    $ dnf repolist

    要只显示某些存储库,请在命令中附加以下选项之一:

    • 附加 --disabled 只列出禁用的存储库。
    • 附加 --all 列出启用和禁用的存储库。
  2. 可选:列出存储库的额外信息:

    $ dnf repoinfo <repository_name>
    注意

    您可以使用全局表达式过滤结果。详情请参阅 在 DNF 输入中指定全局表达式

4.4. 显示软件包信息

您可以查询 DNF 存储库来显示软件包的详情,如下所示:

  • 版本
  • 发布
  • 架构
  • 软件包大小
  • 描述

流程

  • 显示一个或多个可用软件包的信息:

    $ dnf info <package_name>

    这个命令显示当前安装的软件包的信息,如果有的话,显示存储库中的较新版本。另外,使用以下命令显示存储库中具有指定名称的所有软件包的信息:

    $ dnf repoquery --info <package_name>
    注意

    您可以通过将全局表达式附加为参数来过滤结果。详情请参阅 在 DNF 输入中指定全局表达式

4.5. 列出软件包组和它们提供的软件包

软件包组捆绑多个软件包,您可以使用软件包组在一个步骤中安装分配给组的所有软件包。但是,在安装前必须识别所需软件包组的名称。

流程

  1. 列出已安装的和可用的组:

    $ dnf group list

    请注意,您可以通过在 dnf group list 命令中附加 --installed--available 选项来过滤结果。通过使用 --hidden 选项,您可以在输出中显示隐藏的组。

  2. 列出特定组中包含的强制的、可选的和默认的软件包:

    $ dnf group info "<group_name>"
    注意

    您可以通过将全局表达式附加为参数来过滤结果。如需了解更多详细信息,请参阅 在 DNF 输入中指定全局表达式

  3. 可选:查看已安装和可用的组的数量:

    $ dnf group summary

4.6. 列出可用模块及其内容

通过搜索模块并使用 DNF 显示有关它们的信息,您可以识别存储库中提供了哪些模块,并在安装模块前选择合适的流。

流程

  1. 使用以下方法之一列出模块信息:

    • 列出所有可用模块:

      $ dnf module list
      Name        Stream   Profiles                               Summary
      ...
      nodejs      18       common [d], development, minimal, s2i  Javascript runtime
      postgresql  15       client, server                         PostgreSQL server and client module
      ...
      Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

      使用 dnf module list <module_name> 命令列出相同的信息,但只用于特定的模块。

    • 搜索哪个模块提供了某个软件包:

      $ dnf module provides <package_name>

      例如,要显示哪些模块和配置文件提供了 npm 软件包,请输入:

      # dnf module provides npm
      npm-1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697.x86_64
      Module   : nodejs:18:9010020221009220316:rhel9:x86_64
      Profiles : common development s2i
      Repo     : rhel-9-for-x86_64-appstream-rpms
      Summary  : Javascript runtime
      ...
  2. 使用以下方法之一列出模块详情:

    • 列出模块的所有详情,包括描述、所有配置文件的列表以及模块提供的所有软件包的列表:

      $ dnf module info <module_name>

      例如,要显示 nodejs 软件包的详细信息,请输入:

      $ dnf module info nodejs
      Name             : nodejs
      Stream           : 18
      Version          : 9010020221009220316
      Context          : rhel9
      Architecture     : x86_64
      Profiles         : common [d], development, minimal, s2i
      Default profiles : common
      Repo             : rhel-9-for-x86_64-appstream-rpms
      Summary          : Javascript runtime
      Description      : Node.js is a platform built on Chrome's JavaScript runtime...
      Requires         : platform:[el9]
      Artifacts        : nodejs-1:18.10.0-3.module+el9.1.0+16866+0fab0697.src
                       : nodejs-1:18.10.0-3.module+el9.1.0+16866+0fab0697.x86_64
                       : npm-1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697.x86_64
      ...
    • 列出每个模块配置文件安装了哪些软件包:

      $ dnf module info --profile <module_name>

      例如,要显示 nodejs 模块的此信息,请输入:

      $ dnf module info --profile nodejs
      Name        : nodejs:18:9010020221009220316:rhel9:x86_64
      common      : nodejs
                  : npm
      development : nodejs
                  : nodejs-devel
                  : npm
      minimal     : nodejs
      s2i         : nodejs
                  : nodejs-nodemon
                  : npm
      ...

4.7. 在 DNF 输入中指定全局表达式

您可以通过将一个或多个全局表达式附加为参数来过滤 dnf 命令的结果。

流程

  • 如果您在 dnf 命令中使用全局表达式,请使用以下方法之一:

    • 将整个全局表达式用单引号或双引号括起来:

      # dnf provides "*/<file_name>"

      请注意,如果完整路径未知,您必需在 <file_name> 前加上/用于绝对路径或加上*/使用通配符。

    • 在它们前面使用反斜杠(\)字符转义通配符字符:

      # dnf provides \*/<file_name>

第 5 章 安装 RHEL 9 内容

在以下部分中,了解如何在 Red Hat Enterprise Linux 9 中安装内容:

5.1. 安装软件包

如果软件不是默认安装的一部分,您可以手动安装它。DNF 会自动解析和安装依赖项。

先决条件

流程

  • 使用以下方法之一安装软件包:

    • 要从存储库安装软件包,请输入:

      # dnf install <package_name_1> <package_name_2> ...

      如果您在支持多个构架的系统上安装软件包,如 i686x86_64,您可以通过将其附加到软件包名称来指定软件包的架构:

      # dnf install <package_name>.<architecture>
    • 如果您只知道软件包提供的文件的路径,但知道软件包名称,您可以使用此路径安装相应的软件包:

      # dnf install <path_to_file>
    • 要安装本地 RPM 文件,请输入:

      # dnf install <path_to_RPM_file>

      如果软件包有依赖项,还要指定到这些 RPM 文件的路径。否则,DNF 会从存储库下载依赖项,如果存储库中没有,则会失败。

其它资源

5.2. 安装软件包组

软件包组捆绑多个软件包,您可以使用软件包组在一个步骤中安装分配给组的所有软件包。

流程

  • 安装软件包组:

    # dnf group install <group_name_or_ID>

5.3. 安装模块化内容

对于某些软件,红帽提供了模块。您可以使用模块安装特定版本(流)和一组软件包(配置文件)。

流程

  1. 列出提供您要安装的软件包的模块:

    # dnf module list <module_name>

    例如,要列出 nodejs 模块的详细信息,请输入:

    # dnf module list nodejs
    Name     Stream   Profiles                                Summary
    nodejs   18       common [d], development, minimal, s2i   Javascript runtime
    nodejs   ...      common [d], development, minimal, s2i   Javascript runtime
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  2. 安装模块:

    # dnf module install <module_name>:<stream>/<profile>

    如果定义了流的默认配置文件,您可以在命令中省略/<profile> 来安装流的这个默认配置文件。

    注意

    在 Red Hat Enterprise Linux 9 中,没有预定义默认的模块流。但是,如果您在模块安装过程中指定了流,则不必提前手动启用流。

    例如,要从 nodejs 模块的流 18 安装默认配置文件(common),请输入:

    # dnf module install nodejs:18
    =====================================================================================================
     Package                            Architecture   Version   Repository                          Size
    =====================================================================================================
    Installing group/module packages:
     nodejs                             x86_64         ...       rhel-9-for-x86_64-appstream-rpms    12 M
     npm                                x86_64         ...       rhel-9-for-x86_64-appstream-rpms   2.5 M
    Installing weak dependencies:
     nodejs-docs                        noarch         ..        rhel-9-for-x86_64-appstream-rpms   7.6 M
     nodejs-full-i18n                   x86_64         ..        rhel-9-for-x86_64-appstream-rpms   8.4 M
    Installing module profiles:
     nodejs/common
    Enabling module streams:
     nodejs                                            18

验证

  • 验证是否启用了正确的模块流([e]),并且安装了所需的配置文件([i]):

    # dnf module list nodejs
    Updating Subscription Management repositories.
    Last metadata expiration check: 0:33:24 ago on Mon 24 Jul 2023 04:59:01 PM CEST.
    Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)
    Name     Stream   Profiles                                    Summary
    nodejs   18 [e]   common [d] [i], development, minimal, s2i   Javascript runtime
    ...
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

5.4. 定义自定义默认模块流和配置文件

Red Hat Enterprise Linux 9 不会在 AppStream 存储库中定义默认流。但是,您可以配置默认模块流和默认模块配置文件。在这种情况下,您可以在安装模块的默认流和配置文件时忽略此信息。

流程

  1. 使用 dnf module list <module_name> 命令显示可用的流及其配置文件,例如:

    # dnf module list nodejs
    Name     Stream   Profiles                                Summary
    nodejs   18       common [d], development, minimal, s2i   Javascript runtime

    在本例中,nodejs:18 没有被设置为默认流,此流中的默认配置文件是 common

  2. /etc/dnf/modules.defaults.d/ 目录中创建一个 YAML 文件,以定义模块的默认流和配置文件。

    例如,使用以下内容创建 /etc/dnf/modules.defaults.d/nodejs.yaml 文件,来将 18 定义为 nodejs 模块的默认流,将minimal 定义为默认配置文件:

    document: modulemd-defaults
    version: 1
    data:
      module: nodejs
      stream: "18"
      profiles:
          '18': [minimal]

验证

  • 使用 dnf module list <module_name> 命令来验证新的默认流和配置文件设置,例如:

    # dnf module list nodejs
    Name     Stream   Profiles                                Summary
    nodejs   18 [d]   common, development, minimal [d], s2i   Javascript runtime

第 6 章 更新 RHEL 9 内容

DNF 允许您检查您的系统是否有待处理的更新。您可以列出需要更新的软件包,并选择更新单个软件包、多个软件包或者所有软件包。如果您选择更新的软件包有依赖项,它们也会被更新。

在以下部分中,了解如何使用 DNF 更新 Red Hat Enterprise Linux 9 中的内容:

6.1. 检查更新

要使用 dnf check-update 命令检查系统上已安装的软件包的可用更新,请完成以下步骤。

流程

  • 运行以下命令,以查看系统中安装的软件包是否有可用更新:

    # dnf check-update

    输出返回有可用更新的软件包及其依赖项列表。

6.2. 更新软件包

要使用 dnf upgrade 命令更新单个软件包、软件包组或所有软件包及其依赖项,请完成以下步骤。

流程

  • 要更新所有软件包及其依赖项,请使用:

    # dnf upgrade
  • 要更新单个软件包,请使用:

    # dnf upgrade package-name

    使用软件包名称替换 package-name

  • 要更新软件包组,请使用:

    # dnf group upgrade group-name

    使用软件包组的名称替换 group-name

重要

当对内核应用更新时,无论是否使用了 dnf updatednf install 命令,dnf 总会安装一个新内核。

第 7 章 在 RHEL 9 中自动化软件更新

要自动检查并下载软件包更新,您可以使用 dnf-automatic 软件包提供的 DNF Automatic 工具。

DNF AutomaticDNF 的替代命令行界面,它适用于使用 systemd 计时器、cron 作业和其他此类工具自动和定期执行。

DNF Automatic 根据需要同步软件包元数据,检查可用的更新,然后根据您配置工具的方式执行以下操作之一:

  • Exit
  • 下载更新的软件包
  • 下载并应用更新

然后,通过所选的机制(如标准输出或电子邮件)报告操作的结果。

在以下部分中,了解如何在 Red Hat Enterprise Linux 9 中自动化软件更新:

7.1. 安装 DNF Automatic

要在您的系统上安装 DNF Automatic 工具,请完成以下步骤。

流程

  • 安装 dnf-automatic 软件包:

    # dnf install dnf-automatic

验证

  • 通过确认 dnf-automatic 软件包是否存在,来验证安装是否成功:

    # rpm -qi dnf-automatic

7.2. DNF Automatic 配置文件

默认情况下,DNF Automatic 使用 /etc/dnf/automatic.conf 作为其配置文件来定义其行为。

配置文件被分隔为以下主题部分:

  • [commands] 部分

    设置 DNF Automatic 的操作模式。

  • [emitters] 部分

    定义如何报告 DNF Automatic 的结果。

  • [command_email] 部分

    为用来发送电子邮件的外部命令提供电子邮件发布程序配置。

  • [email] 部分

    提供电子邮件发布程序配置。

  • [base] 部分

    覆盖 DNF 的主要配置文件中的设置。

通过 /etc/dnf/automatic.conf 文件的默认设置,DNF Automatic 检查可用更新,下载它们,并将结果报告为标准输出。

警告

[commands] 部分中的操作模式设置会被 systemd 定时器单元用于除 dnf-automatic.timer 之外的所有计时器单元使用的设置覆盖。

7.3. 启用 DNF Automatic

要运行 DNF Automatic,必须始终启用并启动特定的 systemd 计时器单元。您可以使用 dnf-automatic 软件包提供的一个计时器单元,也可以根据自己的需要写入您自己的计时器单元。

要在您的系统上启用 DNF Automatic,请完成以下步骤。

先决条件

  • 您可以通过修改 /etc/dnf/automatic.conf 配置文件来指定 DNF Automatic 的行为。

流程

  • 要选择、启用并启动 下载 可用更新的 systemd 计时器单元,请使用:

    # systemctl enable dnf-automatic-download.timer
    
    # systemctl start dnf-automatic-download.timer
  • 要选择、启用并启动一个用来 下载并安装 可用更新的 systemd 计时器单元,请使用:

    # systemctl enable dnf-automatic-install.timer
    # systemctl start dnf-automatic-install.timer
  • 要选择、启用并启动 报告 可用更新的 systemd 计时器单元,请使用:

    # systemctl enable dnf-automatic-notifyonly.timer
    # systemctl start dnf-automatic-notifyonly.timer
  • 要选择、启用并启动一个 systemd 计时器单元,该单元 下载下载并安装,或者 报告 可用更新,请使用:

    # systemctl enable dnf-automatic.timer
    # systemctl start dnf-automatic.timer
  • (可选)使用 --now 选项在一个命令中选择、启用并启动 systemd 计时器单元。例如:

    # systemctl enable --now dnf-automatic-download.timer
注意

您还可以从命令行或自定义脚本直接执行 /usr/bin/dnf-automatic 文件来运行 DNF Automatic

验证

  • 验证计时器是否已启用:

    # systemctl status <systemd timer unit>

7.4. dnf-automatic 软件包中包含的 systemd 计时器单元概述

systemd 定时器单元具有优先权,并在下载和应用更新时覆盖 /etc/dnf/automatic.conf 配置文件中的设置。

例如,如果您在 /etc/dnf/automatic.conf 配置文件中设置了 download_updates = yes,但您已激活了 dnf-automatic-notifyonly.timer 单元,则不会下载软件包。

dnf-automatic 软件包包括以下 systemd 计时器单元:

表 7.1. dnf-automatic 软件包中包含的 systemd 计时器

计时器单元功能覆盖 /etc/dnf/automatic.conf 文件中的设置?

dnf-automatic-download.timer

下载软件包以便进行更新。

注: 这个计时器单元没有安装更新的软件包。要执行安装,您必须运行 dnf update 命令。

dnf-automatic-install.timer

下载并安装更新的软件包。

dnf-automatic-notifyonly.timer

只下载存储库数据,以保持存储库缓存最新状态,并通知您是否有可用的更新。

注:这个计时器单元没有下载或安装更新的软件包。

dnf-automatic.timer

此计时器在下载和应用更新时的行为是由 /etc/dnf/automatic.conf 配置文件中的设置指定。

默认行为与 dnf-automatic-download.timer 单元相同:它会下载软件包,但不安装它们。

其它资源

第 8 章 删除 RHEL 9 内容

在以下部分中,了解如何使用 DNF 删除 Red Hat Enterprise Linux 9 中的内容:

8.1. 删除安装的软件包

要使用 dnf remove 命令删除系统上安装的软件包,请完成以下步骤。

流程

  • 要删除某个软件包以及所有未使用的依赖软件包,请使用:

    # dnf remove package-name

    使用软件包名称替换 package-name

  • 要同时删除多个软件包及其未使用的依赖项,请使用:

    # dnf remove package-name-1 package-name-2

    使用软件包名称替换 package-name-1package-name-2

注意

dnf 命令将软件包与其他依赖软件包一起删除。

8.2. 删除软件包组

要使用 dnf group remove 命令按组名称或 groupID 删除软件包组,请完成以下步骤。

流程

  • 要根据组群名称删除软件包组,请使用:

    # dnf group remove group-name

    使用组群的全名替换 group-name

  • 要通过 groupID 删除软件包组,请使用:

    # dnf group remove groupID

    使用组 ID 替换 groupID

8.3. 删除安装的模块内容

当删除安装的模块内容时,您可以从 所选配置集整个流中删除软件包

重要

DNF 会尝试删除所有名称与安装配置集或流的软件包对应的软件包,包括其依赖软件包。在进行操作前,务必检查要删除的软件包列表,特别是您是否在系统中启用了自定义软件仓库。

8.3.1. 从安装的配置集中删除软件包

当您删除安装有配置集的软件包时,所有名称与配置集安装的软件包相对应的软件包都会被删除。这包括其依赖项,但被其他配置集所需的软件包除外。

要从所选配置文件中删除软件包,请完成以下步骤。

先决条件

  • 已使用 dnf module install module-name:stream/profile 命令安装了所选配置文件,或使用 dnf install module-name:stream 命令 安装为默认配置文件。
  • 您了解模块化依赖关系的解析

流程

  1. 卸载属于所选配置集的软件包:

    # dnf module remove module-name:stream/profile

    module-namestreamprofile 替换为您要卸载的模块、流和配置集。

    或者,从流中的所有安装配置集中卸载软件包:

    # dnf module remove module-name:stream

    这些操作不会从不属于任何配置集的流中删除软件包。

  2. 在进行删除事务前,请检查 Removing:Removing unused dependencies: 中的软件包列表。

要从所选流中删除所有软件包,请按照 8.3.2 节 "删除模块流中的所有软件包" 中的说明操作。

例 8.1. 从所选配置集中删除软件包

以下是如何删除属于 nodejs:18 模块流的 development 配置文件的软件包及其依赖项的一个示例。

注意

本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。

  1. 安装 nodejs:18 模块流,包括所有可用的配置集:

    # dnf module install nodejs:18/*
    (...)
    Dependencies resolved.
    ===================================================================================
    Package          Architecture   Version
      Repository       Size
    ===================================================================================
    Installing group/module packages:
    nodejs           x86_64         1:18.7.0-1.module+el9.1.0+16284+4fdefb2f
      rhel-AppStream   12 M
    nodejs-devel     x86_64         1:18.7.0-1.module+el9.1.0+16284+4fdefb2f
      rhel-AppStream   202 k
    nodejs-nodemon   noarch         2.0.15-1.module+el9.1.0+15718+e52ec601
      rhel-AppStream   762 k
    npm              x86_64         1:8.15.0-1.18.7.0.1.module+el9.1.0+16284+4fdefb2f
      rhel-AppStream   2.2 M
    Installing dependencies:
    brotli           x86_64         1.0.9-6.el9
      rhel-AppStream   314 k
    brotli-devel     x86_64         1.0.9-6.el9
      rhel-AppStream   36 k
    ...
    Installing weak dependencies:
    nodejs-docs      noarch         1:18.7.0-1.module+el9.1.0+16284+4fdefb2f
      rhel-AppStream   7.2 M
    nodejs-full-i18n x86_64         1:18.7.0-1.module+el9.1.0+16284+4fdefb2f
      rhel-AppStream   8.2 M
    Installing module profiles:
    nodejs/common
    nodejs/development
    nodejs/minimal
    nodejs/s2i
    
    Transaction Summary
    ===================================================================================
    Install  31 Packages
    
    Total download size: 36 M
    Installed size: 165 M
    Is this ok [y/N]: y
    (...)
    Complete!
  2. 检查安装的配置集:

    $ dnf module info nodejs
    ...
    Name             : nodejs
    Stream           : 18 [e] [a]
    Version          : 9010020221009220316
    Context          : rhel9
    Architecture     : x86_64
    Profiles         : common [d] [i], development [i], minimal [i], s2i [i]
    Default profiles : common
    Repo             : rhel-AppStream
    ...
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive

    所有配置集都如输出中显示。

  3. development 配置集及其依赖软件包中删除软件包:

    # dnf module remove nodejs:18/development
    (...)
    Dependencies resolved.
    ========================================================================
    Package          Architecture   Version
      Repository       Size
    ========================================================================
    Removing:
    nodejs-devel     x86_64         1:18.7.0-1.module+el9.1.0+16284+4fdefb2f
      @rhel-AppStream  950 k
    Removing unused dependencies:
    brotli           x86_64         1.0.9-6.el9
      @rhel-AppStream  754 k
    brotli-devel     x86_64         1.0.9-6.el9
      @rhel-AppStream  55 k
    ...
    Disabling module profiles:
    nodejs/development
    
    Transaction Summary
    ========================================================================
    Remove  26 Packages
    
    Freed space: 8.3 M
    Is this ok [y/N]: y
  4. 在移除后检查安装的配置集:

    $ dnf module info nodejs
    ...
    Name             : nodejs
    Stream           : 18 [e] [a]
    Version          : 9010020221009220316
    Context          : rhel9
    Architecture     : x86_64
    Profiles         : common [d] [i], development, minimal [i], s2i [i]
    Default profiles : common
    Repo             : rhel-AppStream
    Summary          : Javascript runtime
    ...
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive

    除当前安装 development 外的所有配置集。

8.3.2. 从模块流中删除所有软件包

当您删除使用模块流安装的软件包时,所有名称与流安装的软件包对应的软件包都会被删除。这包括其依赖项,但其他模块所需的软件包除外。

要从所选模块流中删除所有软件包,请完成以下步骤。

先决条件

流程

  1. 从所选流中删除所有软件包:

    # dnf module remove --all module-name:stream

    使用您要卸载的模块和流替换 module-namestream

  2. 在进行删除事务前,请检查 Removing:Removing unused dependencies: 中的软件包列表。
  3. (可选)重置或禁用流。

如果您只想从所选配置集中删除软件包,请参阅 Section 8.3.1."从已安装的配置集中移动软件包"

例 8.2. 从整个流中删除软件包

以下是如何从 nodejs:18 模块流中删除所有软件包的一个示例。

注意

本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。

  1. 安装 nodejs:18 模块流,包括所有可用的配置集:

    # dnf module install nodejs:18/*
    (...)
    Dependencies resolved.
    ===================================================================================
    Package          Architecture   Version
      Repository       Size
    ===================================================================================
    Installing group/module packages:
    nodejs           x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      rhel-AppStream   13 M
    nodejs-devel     x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      rhel-AppStream   203 k
    nodejs-nodemon   noarch         2.0.15-1.module+el9.1.0+15718+e52ec601
      rhel-AppStream   762 k
    npm              x86_64         1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697
      rhel-AppStream   2.2 M
    Installing dependencies:
    brotli           x86_64         1.0.9-6.el9
      rhel-AppStream   314 k
    brotli-devel     x86_64         1.0.9-6.el9
      rhel-AppStream   36 k
    ...
    Installing weak dependencies:
    nodejs-docs      noarch         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      rhel-AppStream   7.3 M
    nodejs-full-i18n x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      rhel-AppStream   8.2 M
    Installing module profiles:
    nodejs/common
    nodejs/development
    nodejs/minimal
    nodejs/s2i
    Enabling module streams:
    nodejs                        18
    
    Transaction Summary
    ===================================================================================
    Install  31 Packages
    
    Total download size: 37 M
    Installed size: 167 M
    Is this ok [y/N]: y
  2. nodejs:18 模块流中删除所有软件包:

    # dnf module remove --all nodejs:18
    (...)
    Dependencies resolved.
    ===================================================================================
    Package          Architecture   Version
      Repository       Size
    ===================================================================================
    Removing:
    nodejs           x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      @rhel-AppStream  43 M
    nodejs-devel     x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      @rhel-AppStream  953 k
    nodejs-docs      noarch         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      @rhel-AppStream  78 M
    nodejs-full-i18n x86_64         1:18.10.0-3.module+el9.1.0+16866+0fab0697
      @rhel-AppStream  29 M
    nodejs-nodemon   noarch         2.0.15-1.module+el9.1.0+15718+e52ec601
      @rhel-AppStream  2.0 M
    nodejs-packaging noarch         2021.06-4.module+el9.1.0+15718+e52ec601
      @rhel-AppStream  41 k
    npm              x86_64         1:8.19.2-1.18.10.0.3.module+el9.1.0+16866+0fab0697
      @rhel-AppStream  6.9 M
    Removing unused dependencies:
    brotli           x86_64         1.0.9-6.el9
      @rhel-AppStream  754 k
    brotli-devel     x86_64         1.0.9-6.el9
      @rhel-AppStream  55 k
    ...
    Disabling module profiles:
    nodejs/common
    nodejs/development
    nodejs/minimal
    nodejs/s2i
    
    
    Transaction Summary
    ===================================================================================
    Remove  31 Packages
    
    Freed space: 167 M
    Is this ok [y/N]: y
  3. 在移除后检查 nodejs 模块:

    $ dnf module info nodejs
    ...
    Name             : nodejs
    Stream           : 18 [e] [a]
    Version          : 9010020221009220316
    Context          : rhel9
    Architecture     : x86_64
    Profiles         : common [d], development, minimal, s2i
    Default profiles : common
    ...
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive

    当前没有安装 Node.js 模块流。

8.4. 其它资源

第 9 章 处理软件包管理历史记录

使用 dnf history 命令,您可以查看以下信息:

  • DNF 事务的时间线
  • 事务发生的日期和时间
  • 受事务影响的软件包数量
  • 事务是成功还是被中止
  • 如果在事务间更改了 RPM 数据库

您还可以使用 dnf history 命令来撤销或重做事务。

在以下部分中,了解如何使用 dnf history 命令处理软件包管理历史记录:

9.1. 列出事务

要列出最新的 DNF 事务、所选软件包的最新操作以及特定事务的详情,请完成以下步骤。

流程

  • 要显示所有最新的 DNF 事务列表,请使用:

    # dnf history
    注意

    输出中的 Action (s) 列显示在事务期间执行的操作的类型,如 Install (I)、Upgrade (U)、Remove(E)和其他操作。Altered 列显示事务期间执行的操作数。操作数也可以后跟事务的结果。有关 Action (s)Altered 列的值的更多信息,请参阅 dnf (8) 手册页。

  • 要显示所选软件包的最新操作列表,请使用:

    # dnf history list package-name

    使用软件包名称替换 package-name

  • 要显示特定事务的详情,请使用:

    # dnf history info transactionID

    用事务的 ID 替换 transactionID

注意

您可以通过附加全局表达式来过滤命令输出。如需了解更多详细信息,请参阅 dnf 输入中指定全局表达式

其它资源

  • dnf(8) man page

9.2. 恢复 DNF 事务

在 RHEL 9 中,您可以以两种方式恢复 DNF 事务:

  • 使用 dnf history undo 命令恢复单个 DNF 事务。
  • 使用 dnf history rollback 命令恢复在指定事务和最后一个事务之间执行的所有 DNF 事务。
重要

请谨慎使用 dnf history undodnf history rollback 命令。不支持将 RHEL 软件包,特别是selinux, selinux-policy-*, kernel, glibc (glibc 的依赖项,如 gcc) 软件包,降级到旧版本。因此,不建议将系统降级为次版本(例如,从 RHEL 9.1 到 RHEL 9.0),因为这可能会使系统处于不irsired 状态。

9.2.1. 使用 dnf history undo 恢复单个 DNF 事务

您可以使用 dnf history undo 命令恢复在单个事务中执行的步骤。

如果事务安装了新的软件包,dnf history undo 会卸载它。如果事务卸载了软件包,dnf history undo 会将其重新安装。如果旧的软件包可用,dnf history undo 命令还会尝试将所有更新的软件包降级到之前的版本。

注意

如果旧的软件包版本不可用,则使用 dnf history undo 命令降级会失败。

要使用 dnf history undo 命令恢复单个事务,请完成以下步骤。

流程

  1. 确定您要恢复的事务的 ID:

    # dnf history
  2. 可选:通过显示其详情来验证您要恢复的事务:

    # dnf history info transaction_id

    使用您要恢复的事务的 ID 替换 transaction_id

  3. 恢复事务:

    # dnf history undo transaction_id

    使用您要恢复的事务的 ID 替换 transaction_id

例 9.1. 使用 dnf history undo 命令恢复单个 DNF 事务

以下是如何使用 dnf history undo 命令恢复 unzip 软件包的安装事务的一个示例。

  1. 安装 unzip 软件包:

    # dnf install unzip
    Dependencies resolved.
    ==========================================================================
     Package          Architecture      Version          Repository      Size
    ==========================================================================
    Installing:
     unzip            x86_64            6.0-56.el9       rhel            186 k
    
    Transaction Summary
    ==========================================================================
    Install  1 Package
    
    Total download size: 186 k
    Installed size: 392 k
    Is this ok [y/N]: y
  2. 确定您要恢复的事务 ID:

    # dnf history
    ID | Command line     | Date and time     | Action(s)      | Altered
    --------------------------------------------------------------------
    13 | install zip      | 2022-11-03 10:49  | Install        |    1
    12 | install unzip    | 2022-11-03 10:49  | Install        |    1
  3. 恢复事务:

    # dnf history undo 12

9.2.2. 使用 dnf history rollback 恢复多个 DNF 事务

您可以使用 dnf history rollback 命令恢复在指定事务和最后一个事务之间执行的所有 DNF 事务。请注意,事务 ID 指定的事务将保持不变。

要使用 dnf history rollback 命令恢复多个事务,请完成以下步骤。

流程

  1. 确定您要恢复到的状态的事务 ID:

    # dnf history
  2. 恢复指定的事务:

    # dnf history rollback transaction_id

    使用您要恢复到的状态的事务 ID 替换 transaction_id

    或者,要恢复事务历史记录中的所有事务,请使用事务 ID 1

    # dnf history rollback 1

例 9.2. 使用 dnf history rollback 命令恢复多个 DNF 事务

以下是如何使用 dnf history rollback 命令回滚 unzipzip 软件包的两个安装事务的一个示例。

  1. 安装 unzip 软件包:

    # dnf install unzip
    Dependencies resolved.
    ========================================================================
     Package          Architecture      Version         Repository     Size
    ========================================================================
    Installing:
     unzip            x86_64            6.0-56.el9      rhel           186 k
    
    Transaction Summary
    ========================================================================
    Install  1 Package
    
    Total download size: 186 k
    Installed size: 392 k
    Is this ok [y/N]: y
  2. 安装 wget 软件包:

    # dnf install wget
    Dependencies resolved.
    ========================================================================
     Package        Architecture      Version           Repository     Size
    ========================================================================
    Installing:
     wget           x86_64            1.21.1-7.el9      rhel           794 k
    
    Transaction Summary
    ========================================================================
    Install  1 Package
    
    Total download size: 794 k
    Installed size: 3.1 M
    Is this ok [y/N]: y
  3. 确定您要恢复到的状态的事务 ID:

    # dnf history 
    ID | Command line     | Date and time     | Action(s)   | Altered
    ------------------------------------------------------------------
    14 | install wget     | 2022-11-03 10:49  | Install     |    1
    13 | install unzip    | 2022-11-03 10:49  | Install     |    1
    12 | install vim-X11  | 2022-11-03 10:20  | Install     |  171 EE
  4. 恢复最后两个事务:

    # dnf history rollback 12

    此操作卸载 wgetunzip 软件包,但会保留 vim-X11 软件包。

9.3. 重复事务

您可以使用 dnf history redo 命令在事务期间重复执行的步骤。

要重复所选事务或最后一个 DNF 事务,请完成以下步骤。

流程

  • 要重复特定的事务,请使用:

    # dnf history redo transactionID

    用事务的 ID 替换 transactionID

  • 要重复最后的事务,请使用:

    # dnf history redo last

第 10 章 管理自定义软件存储库

您可以在 /etc/dnf/dnf.conf 文件或 /etc/yum.repos.d/ 目录中的 .repo 文件中配置软件仓库。

DNF 及相关工具的配置信息保存在 /etc/dnf/dnf.conf 文件中。此文件包含 [main] 部分,可以包含一个或多个 [repository] 部分,可用于设置特定存储库的选项。您在 /etc/dnf/dnf.conf 文件的单独 [repository] 部分定义的值会覆盖 [main] 部分中设置的值。

但是,建议在 /etc/yum.repos.d/ 目录中的新或现有 .repo 文件中定义单独的软件仓库。

在以下部分中,了解如何使用 DNF 管理自定义软件存储库:

10.1. 设置 DNF 软件仓库选项

/etc/dnf/dnf.conf 配置文件包含 [repository] 部分,其中 repository 是唯一的存储库 ID。[repository] 部分允许您定义独立的 DNF 软件仓库。

注意

不要给出红帽软件仓库使用的自定义软件仓库名称以避免冲突。

有关可用 [repository] 选项的完整列表,请查看 dnf.conf(5) man page 的 [repository] OPTIONS 部分。

10.2. 添加 DNF 软件仓库

要定义新存储库,您可以:

  • /etc/dnf/dnf.conf 文件中添加 [repository] 部分。
  • /etc/yum.repos.d/ 目录中的 .repo 文件中添加 [repository] 部分。

    安装 RPM 或软件管理工具(例如,订阅管理器)可以提供自己的 .repo 文件。

注意

.repo 文件中定义您的仓库而不是 /etc/dnf/dnf.conf,因为此目录中具有 .repo 文件扩展名的所有文件都可由 dnf 读取。

要使用 dnf config-manager 命令将一个 DNF 存储库添加到系统中,请完成以下步骤。

流程

  • 在您的系统中添加软件仓库:

    # dnf config-manager --add-repo repository_URL

    使用指向库的 URL 替换 repository_url

警告

从基于证书的 Content Delivery Network (CDN)以外的未验证或不信任的源获取并安装软件包具有潜在的安全风险,并可能导致安全性、稳定性、兼容性和可维护性问题。

10.3. 启用 DNF 软件仓库

要使用 dnf config-manager 命令启用添加到您系统中的 DNF 存储库,请完成以下步骤。

流程

  • 启用存储库:

    # dnf config-manager --enable repositoryID

    使用唯一的存储库 ID 替换 repositoryID

其它资源

列出软件仓库

10.4. 禁用 DNF 软件仓库

要使用 dnf config-manager 命令禁用添加到您系统中的 DNF 存储库,请完成以下步骤。

流程

  • 禁用软件仓库:

    # dnf config-manager --disable repositoryID

    使用唯一的存储库 ID 替换 repositoryID

其它资源

列出软件仓库

第 11 章 管理应用程序流内容版本

AppStream 仓库的内容可以在多个版本中提供,对应于模块流。

在以下部分中,了解更改现有启用的模块流时必须执行的操作:

11.1. 模块依赖关系和流更改

传统上,提供内容的软件包依赖于其他软件包,并且通常指定所需的依赖项版本。对于模块中包含的软件包,此机制也会应用这个机制,但将软件包及其特定版本分组到模块和流中可以进一步的限制。另外,模块流可以声明与其他模块流的依赖关系,独立于其包含的软件包并提供它们。

在使用软件包或模块操作后,所有底层已安装软件包的所有依赖项树都必须满足软件包声明的所有条件。另外,必须满足所有模块流依赖项。

因此:

  • 启用模块流可能需要启用更多模块流。
  • 安装模块流配置集或从流安装软件包需要启用更多模块流并安装其他软件包。
  • 禁用模块流可能需要禁用其他模块流。不会自动删除任何软件包。
  • 删除软件包可能需要删除其他软件包。如果模块提供了这些软件包,则模块流仍然启用,以准备进一步安装,即使这些流中没有安装这些软件包。这会镜像未使用的 DNF 存储库的行为。

11.2. 模块化和非模块化依赖项的交互

模块依赖关系 是常规 RPM 依赖项之上的额外层。模块依赖关系与存储库间可能存在的依赖关系的行为相似。这意味着安装不同的软件包需要同时解析 RPM 依赖项和模块依赖关系。

系统将始终保留模块和流选择,除非明确指示要更改它们。模块软件包将接收目前启用的模块流中包含的提供此软件包的更新,但不会升级到另一流中包含的版本。

11.3. 重置模块流

重置模块是一种操作,它会将所有流返回至初始状态(不启用或禁用)。如果模块有一个配置的默认流,则此流会因为重置模块而变为活动状态。

要使用 dnf module reset 命令将模块流重置为其初始状态,请完成以下步骤。

流程

  • 重置模块状态:

    # dnf module reset module-name

    模块返回到初始状态。已启用的流和安装的配置集的信息会被清除,但没有删除安装的内容。

11.4. 禁用一个模块的所有流

具有默认流的模块始终会激活一个流。当无法访问所有模块流中的内容时,可以禁用整个模块。

要使用 dnf module disable 命令禁用模块的所有流,请完成以下步骤。

先决条件

流程

  • 禁用模块:

    # dnf module disable module-name

    dnf 命令要求确认,然后禁用该模块及其所有流。所有模块流都不再活跃。没有安装的内容被删除。

11.5. 切换到更新的流

当您切换到后期模块流时,所有对应的软件包都被后期版本替代。

重要

备份您的数据,并按照特定于组件的迁移说明进行操作。

先决条件

  • 这个系统已被完全更新。

流程

  • 将安装的组件切换到新版本,并选择模块(组件)和流(版本):

    # dnf module switch-to module:stream
  • 可选:将已安装的组件切换到新版本,然后选择要安装的配置文件:

    # dnf module switch-to module:stream/profile

例 11.1. 从非模块化内容切换到模块流

以下是一个如何从非模块化 PHP 8.0 切换到模块化 PHP 8.1 的示例。

注意

本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。

  1. 验证是否安装了带有 PHP 8.0php-common 软件包:

    $ rpm -q php-common
    php-common-8.0.27-1.el9_1.x86_64
  2. 从非模块化 PHP 8.0 切换到模块化 PHP 8.1

    # dnf module switch-to php:8.1
    ...
    Dependencies resolved.
    ========================================================================================
     Package      Arch     Version                                   Repository        Size
    ========================================================================================
    Upgrading:
     php-common   x86_64   8.1.14-1.module+el9.2.0+17911+b059dfc2    rhel-AppStream   687 k
    Enabling module streams:
     php                   8.1
    
    Transaction Summary
    ========================================================================================
    Upgrade  1 Package
    
    Total download size: 687 k
    Is this ok [y/N]: y
    Downloading Packages:
    ...
    Upgraded:
      php-common-8.1.14-1.module+el9.2.0+17911+b059dfc2.x86_64
    
    Complete!
  3. 验证 php:8.1 模块流是否已启用:

    $ dnf module list php
    ...
    rhel-AppStream
    Name        Stream         Profiles                         Summary
    php         8.1 [e]        common [d], devel, minimal       PHP scripting language
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  4. 检查安装的 php-common 软件包的版本:

    $ rpm -q php-common
    php-common-8.1.14-1.module+el9.2.0+17911+b059dfc2.x86_64

例 11.2. 从较早模块流切换到后期模块流

以下是一个如何从 nodejs:18 模块流切换到 nodejs:20 流的示例。

注意

本例中的输出已被编辑为 brevity。实际输出可能包含比这里显示的更多的信息。

  1. 验证是否安装了 nodejs:18 模块流:

    $ dnf module list nodejs
    ...
    rhel-AppStream
    Name       Stream     Profiles                                     Summary
    nodejs     18 [e]     common [d] [i], development, minimal, s2i    Javascript runtime
    nodejs     20         common [d], development, minimal, s2i        Javascript runtime
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  2. 切换到后期 nodejs:20 模块流:

    # dnf module switch-to nodejs:20
    ...
    Dependencies resolved.
    ========================================================================================
     Package          Arch   Version                                   Repository      Size
    ========================================================================================
    Upgrading:
     nodejs           x86_64 1:20.5.1-1.module+el9.3.0+19646+9a702805  rhel-AppStream  14 M
     nodejs-docs      noarch 1:20.5.1-1.module+el9.3.0+19646+9a702805  rhel-AppStream 8.0 M
     nodejs-full-i18n x86_64 1:20.5.1-1.module+el9.3.0+19646+9a702805  rhel-AppStream 8.5 M
     npm              x86_64 1:9.8.0-1.20.5.1.1.module+el9.3.0+19646+9a702805
                                                                       rhel-AppStream 2.6 M
    Switching module streams:
     nodejs                  18 -> 20
    
    Transaction Summary
    ========================================================================================
    Upgrade  4 Packages
    
    Total download size: 33 M
    Is this ok [y/N]: y
    Downloading Packages:
    ...
    Upgraded:
      nodejs-1:20.5.1-1.module+el9.3.0+19646+9a702805.x86_64
      nodejs-docs-1:20.5.1-1.module+el9.3.0+19646+9a702805.noarch
      nodejs-full-i18n-1:20.5.1-1.module+el9.3.0+19646+9a702805.x86_64
      npm-1:9.8.0-1.20.5.1.1.module+el9.3.0+19646+9a702805.x86_64
    
    Complete!
  3. 验证 nodejs:20 模块流是否已启用:

    $ dnf module list nodejs
    ...
    rhel-AppStream
    Name       Stream     Profiles                                     Summary
    nodejs     18         common [d], development, minimal, s2i        Javascript runtime
    nodejs     20 [e]     common [d] [i], development, minimal, s2i    Javascript runtime
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  4. 检查已安装的 nodejs 版本:

    $ rpm -q nodejs
    nodejs-20.5.1-1.module+el9.3.0+19646+9a702805.x86_64

附录 A. DNF 命令列表

在以下部分中,检查用于列出、安装和删除 Red Hat Enterprise Linux 9 上内容的 DNF 命令。

A.1. 在 RHEL 9 中列出内容的命令

以下是在 Red Hat Enterprise Linux 9 中查找内容及其详情的常用 DNF 命令:

命令描述

dnf search term

使用与软件包相关的术语搜索软件包。

dnf repoquery package

为所选软件包及其版本搜索启用的 DNF 存储库。

dnf list

列出所有已安装的和可用的软件包信息。

dnf list --installed

dnf repoquery --installed

列出系统上安装的所有软件包。

dnf list --available

dnf repoquery

列出用于安装的所有已启用的存储库中的所有软件包。

dnf repolist

列出系统上所有启用的存储库。

dnf repolist --disabled

列出系统上所有禁用的存储库。

dnf repolist --all

列出启用和禁用的存储库。

dnf repoinfo

列出有关存储库的其他信息。

dnf info package-name

dnf repoquery --info package_name

显示可用软件包的详细信息。

dnf repoquery --info --installed package_name

显示系统上安装的软件包的详情。

dnf module list

列出模块及其当前状态。

dnf module info module-name

显示模块的详细信息。

dnf module list module-name

显示模块的当前状态。

dnf module info --profile module-name

显示与所选模块的可用配置文件关联的软件包。

dnf module info --profile module-name:stream

使用指定流显示与模块的可用配置为念关联的软件包。

dnf module provides package

确定哪些模块、流和配置集提供软件包。

请注意,如果软件包在任何模块外可用,这个命令的输出为空。

dnf group summary

查看已安装的和可用的组的数量。

dnf group list

列出所有已安装的和可用的组。

dnf group info group-name

列出特定组中包含的强制的和可选的软件包。

A.2. 在 RHEL 9 中安装内容的命令

以下是在 Red Hat Enterprise Linux 9 中安装内容的常用 DNF 命令:

命令描述

dnf install package-name

安装软件包。

如果软件包由模块流提供,dnf 将解析所需的模块流,并在安装此软件包时自动启用它。这也会以递归方式对所有软件包依赖项进行。如果更多模块流满足要求,则使用默认模块流。

dnf install package-name-1 package-name-2

同时安装多个软件包及其依赖项。

dnf install package-name.arch

multilib 系统(AMD64、Intel 64 机器)上安装软件包时,通过将其追加到软件包名称来指定软件包的架构。

dnf install /usr/sbin/binary-file

通过将二进制路径用作参数来安装二进制文件。

dnf install /path/

从本地目录安装之前下载的软件包。

dnf install package-url

使用软件包 URL 安装远程软件包。

dnf module enable module-name:stream

使用特定流启用模块。

请注意,运行这个命令不会安装任何 RPM 软件包。

dnf module install module-name:stream

dnf install @module-name:stream

从特定的模块流安装默认配置集。

请注意,运行这个命令还会启用指定的流。

dnf module install module-name:stream/profile

dnf install @module-name:stream/profile

使用特定流安装所选配置文件。

dnf group install group-name

按组名称安装软件包组。

dnf group install groupID

按 groupID 安装软件包组。

A.3. 在 RHEL 9 中删除内容的命令

以下是删除 Red Hat Enterprise Linux 9 中内容的常用 DNF 命令:

命令描述

dnf remove package-name

删除特定软件包以及所有依赖的软件包。

dnf remove package-name-1 package-name-2

同时删除多个软件包及其未使用的依赖项。

dnf group remove group-name

按组名称删除软件包组。

dnf group remove groupID

按 groupID 删除软件包组。

dnf module remove --all module-name:stream

从指定的流中删除所有软件包。

请注意,运行此命令可从系统中删除关键软件包。

dnf module remove module-name:stream/profile

从安装的配置文件删除软件包。

dnf module remove module-name:stream

从指定流中的所有安装的配置文件删除软件包。

dnf module reset module-name

将模块重置为初始状态。

请注意,运行此命令不会从指定的模块中删除软件包。

dnf module disable module-name

禁用一个模块及其所有流。

请注意,运行此命令不会从指定的模块中删除软件包。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.