注意:

在 Oracle Linux 上使用 DNF

简介

Oracle Linux 提供基于 Dandified Yum (DNF) 的 dnf 实用程序作为用于安装和管理系统软件包的客户机软件。这些软件包可以来自 Unbreakable Linux Network (ULN) 或 Oracle Linux yum 服务器。软件包使用标准 dnf 命令安装在系统上,并且依赖于启用了相应 ULN 通道订阅或 yum 系统信息库的系统。安装或升级软件包时,dnf 会自动处理软件包相关项和要求。

DNF 显著提高了功能和性能,并带来了许多新功能,包括模块化内容和更稳定和记录的 API,与传统的 yum 命令相比。

目标

在本教程中,您将学习如何:

先决条件

部署 Oracle Linux

注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs GitHub 项目 README.md 并完成先决条件。

  1. 在 Luna Desktop 上打开一个终端。

  2. 克隆 linux-virt-labs GitHub 项目。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
  3. 转到工作目录。

    cd linux-virt-labs/ol
  4. 安装所需集合。

    ansible-galaxy collection install -r requirements.yml
  5. 部署实验室环境。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6"

    免费的实验环境需要额外的变量 local_python_interpreter,该变量为在 localhost 上运行的播放设置 ansible_python_interpreter。此变量是必需的,因为环境安装了适用于 Python 的 Oracle Cloud Infrastructure SDK 的 RPM 程序包,该程序包位于 python3.6 模块下。

    默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9 或 10,请将 -e instance_shape="VM.Standard3.Flex" 或设置 -e os_version="10"-e os_version="9"-e os_version="8" 添加到部署命令。

    重要提示:等待手册成功运行并到达暂停任务。在手册的这一阶段,Oracle Linux 安装已完成,实例已准备就绪。记下之前的剧集,其中输出其部署的节点的公共和专用 IP 地址,以及运行实验时所需的任何其他部署信息。

使用 DNF 资料档案库

  1. 打开终端并通过 SSH 连接到 ol-node-01 实例。

    ssh oracle@<ip_address_of_instance>
  2. 获取已启用的系统信息库的列表。

    dnf repolist

    DNF 在 /etc/yum.repos.d 目录中搜索以 .repo 结尾的文件。可以通过 all 选项查看已启用和已禁用的系统信息库的列表。系统信息库文件可以定义一个或多个系统信息库,并考虑在 enabled=1 时启用系统信息库,在 enabled=0 时禁用系统信息库。

  3. 启用资料档案库。

    Oracle Linux 10:

    sudo dnf config-manager --enable ol10_codeready_builder

    Oracle Linux 9:

    sudo dnf config-manager --enable ol9_codeready_builder

    Oracle Linux 8:

    sudo dnf config-manager --enable ol8_codeready_builder
  4. 禁用资料档案库。

    Oracle Linux 10:

    sudo dnf config-manager --disable ol10_codeready_builder

    Oracle Linux 9:

    sudo dnf config-manager --disable ol9_codeready_builder

    Oracle Linux 8:

    sudo dnf config-manager --disable ol8_codeready_builder
  5. 安装系统信息库。

    Oracle Linux 以软件包格式提供各种产品的预构建系统信息库。您可以搜索它们,然后安装并启用它们。

    dnf search oracle*release*

    Oracle Linux 10:

    sudo dnf install -y oracle-instantclient-release-el10

    Oracle Linux 9:

    sudo dnf install -y oracle-instantclient-release-el9

    Oracle Linux 8:

    sudo dnf install -y oracle-instantclient-release-el8

    虽然不首选,但也可以通过以下方式安装系统信息库:

    1. 直接在 /etc/yum.repos.d 中创建新 .repo 文件
    2. 使用 dnf config-manager --add-repo <repo_file>,允许安装本地或 URL 中存储的存储库文件
  6. 删除 DNF 高速缓存。

    为了提高性能,DNF 将数据缓存到 /var/cache/dnf 中。有时,此缓存的数据可能会过时并导致 dnf 命令失败。要解决此问题,可以删除所有高速缓存的项。

    dnf clean all

    DNF 在您运行各种命令时会随着时间的推移自动重新生成此高速缓存。要对命令故障进行故障排除,可以清除高速缓存,然后重试失败的命令。

管理程序包和模块

Oracle Linux 10 说明: DNF 模块化(模块和流)在 Oracle Linux 10 上不可用。可以从 AppStream 系统信息库安装标准软件包,但不能像在早期发行版中那样启用或安装模块或流。

在提供的使用 DNF 模块化的步骤中,说明仅适用于 Oracle Linux 8 和 Oracle Linux 9。

  1. 从启用的系统信息库获取可用软件包的列表。

    dnf list

    您可以通过使用 installedavailable 选项甚至请求特定的软件包名称(例如 dnf list available git)来缩小返回的输出范围。

  2. 列出可用的模块。

    dnf module list

    输出显示可供系统使用的模块、关联的流和配置文件,其中:

    • Name:模块名称
    • Stream:流版本
    • Profiles:可用配置文件及其状态
      • common:增强的生产就绪部署,是默认配置文件
      • development:安装对模块进行修改所需的软件包
      • minimal:安装提供工作应用程序的最小软件包集

    使用输出末尾的 Hint 可确定哪些流和配置文件是 enableddisabledinstalleddefault

    与软件包类似,您可以将模块名称传递到 list 选项,以便仅查看该模块的状态。

  3. 获取有关软件包或模块的信息。

    dnf info zsh

    在这种情况下,zsh 是软件包名称。对模块执行相同操作,但添加 module 命令并附加特定模块(如 dnf module info php)。如果需要有关特定模块流的信息,请将 --profilemodule:stream 一起传递,而不是传递模块名称。

    dnf module info --profile php:8.2
  4. 搜索可用或已安装的软件包。

    dnf search php
  5. 搜索提供特定文件名或命令的软件包。

    provides 命令的别名为 whatprovides,用于查找与文件名匹配的软件包。如果未提供完整路径,则 DNF 将在文件名后面附加 /usr/sbin/usr/bin。出于传统目的,它还附加 /sbin/bin

    dnf provides sudo
  6. 安装一个软件包。

    sudo dnf install tmux

    回答 y 以确认软件包安装。通过传递 -y 选项,避免将来执行此额外步骤。默认情况下,DNF 仅从启用的系统信息库安装软件包。但是,您可以通过传递 --enablerepo=<repo name> 选项绕过该缺省行为。

  7. 重新安装软件包。

    sudo dnf reinstall -y tmux

    此命令实质上先执行 dnf remove,然后执行 dnf install。关键的区别在于,使用重新安装会保留与软件包关联的任何文件的定制配置。

  8. 启用模块。

    在从模块安装软件包之前,需要启用它。

    Oracle Linux 9:

    sudo dnf module -y enable nginx:1.22

    Oracle Linux 8:

    sudo dnf module -y enable nginx
  9. 安装一个模块。

    Oracle Linux 9:

    sudo dnf module install -y nginx:1.22

    Oracle Linux 8:

    sudo dnf module install -y nginx:1.14

    安装软件包后,运行 sudo dnf module list nginx 时会在 1.22 流的 common [d] 配置文件旁边显示 [i]

  10. 删除软件包或模块。

    sudo dnf remove -y tmux

    同样,可以使用相同的语法删除模块,方法是将软件包名称替换为 module:stream/profile

  11. 切换模块。

    切换模块流会导致将内容升级或降级到与系统上的当前版本不同的版本。它还处理其他依赖项的安装或不再需要的软件包的删除。

    sudo dnf module -y switch-to nginx:1.24/common
  12. 禁用模块。

    sudo dnf module -y disable nginx

    通过禁用模块,可以确保删除已安装的配置文件,所有相关模块流变为不可用状态,模块化 RPMS 不属于软件包集。如果 DNF 检测到任何冲突,则该操作将被拒绝。禁用模块的一个原因是缺省系统信息库和 appstream 中存在较新的软件包。

  13. 重置模块。

    此操作将设置模块状态,使其不再处于启用或禁用状态。DNF 将删除所有配置文件,并且只有缺省配置文件中的软件包可用。

    sudo dnf module -y reset nginx

安装安全更新

  1. 列出所有可用的勘误表。

    dnf updateinfo list

    输出显示启用的系统信息库,后跟每个更新。DNF 按其 ID 的顺序对可用的勘误表进行排序,并根据其类型进一步标识它们。

    • Severity/Sec:优先级/安全补丁程序
    • bugfix :错误修复
    • enhancement :功能增强

    您可以将 cvesbugfixsecurity 附加到命令,以将输出范围缩小到仅该特定的勘误表类型。您还可以通过 --installed 获取主机上安装的这些安全修复程序的列表。

  2. 显示可用勘误表的汇总。

    dnf updateinfo summary
  3. 根据严重性获取安全升级列表。

    可以将 CriticalImportantModerateLow 传递给 --sec-severity 选项。

    dnf updateinfo list --sec-severity=Important

    DNF 允许您将其他选项传递到 list 命令。您可以使用 --advisory <Advisory ID> 获取特定建议,也可以使用 --cve <CVD ID 获取特定 CVE。使用 info 命令而不是 list 和确切选项提供有关特定指导或 CVE 的详细信息。

  4. 将每个软件包更新到其最新版本。

    sudo dnf upgrade -y

    您可以选择从升级中排除特定软件包,其中包含 -x 选项,后跟软件包名称。虽然 Oracle Linux 建议应用所有勘误表,但 upgrade 命令采用以下选项:

    • --cve:更新单个 CVE ID
    • --advisory:更新单个指导 ID
    • --security:更新所有与安全相关的勘误表

    或者,用户可以运行 sudo dnf upgrade-minimal 以仅对提供错误修复、增强或安全问题修复的软件包应用更新。

    重要提示:任何 kernel 更新后,确保重新引导系统。如果运行重新引导不可行的系统,则建议使用 Oracle Ksplice 来应用内核修补程序。

管理程序包组

DNF 允许安装、更新或删除软件包组。这些组是用于通用目的的依赖软件包的集合。

  1. 列出可用组。

    dnf group list
  2. 获取组包含的组的列表。

    dnf group info "Server with GUI"

    Server with GUI 安装 GNOME 图形桌面。

  3. 显示组包含的各个软件包。

    dnf group info Core
  4. 安装组。

    sudo dnf group install "Server with GUI" --assumeno

    --assumeno 选项将自动回答“no(否)”并跳过安装,以节省本教程中的时间。将此选项保留在命令之外,然后将其替换为 -y 选项以自动安装该选项。DNF 提供了用于更新和删除组的 dnf group updatednf group remove 命令。

使用 DNF 历史记录功能

DNF 历史记录功能显示 dnf 命令执行的所有操作。历史记录功能允许撤消、重做和回滚特定 DNF 事务处理。除了 DNF 历史记录外,软件包安装、更新和删除也会记录在 /var/log/dnf.log 文件中。

  1. 列出所有 DNF 事务处理。

    dnf history

    您可以通过运行 dnf history info <transaction ID> 获取与其中一个事务处理相关的信息。

  2. 回退特定事务处理。

    rollback 选项将撤消指定 <transaction ID> 之后的所有事务。如果只希望冲销单个事务处理,请改用 undo

    sudo dnf history rollback <transaction ID>

    DNF history rollback 命令将递增事务处理 ID 并将回退记录为唯一的事务处理。

  3. 重复特定事务处理。

    您可以 redo 特定事务处理并重复其每个步骤。

    sudo dnf history redo <transaction ID>

自动打补丁

手动运行 dnf upgrade 的替代方法是使用 DNF 自动工具。此工具使用 systemd 计时器自动提供升级通知,下载这些通知,并自动安装软件包。

  1. 安装所需的软件包并启用计时器。

    sudo dnf install dnf-automatic -y
    sudo systemctl enable --now dnf-automatic.timer
  2. 查看缺省 upgrade_type 配置。

    DNF 自动工具的配置文件为 /etc/dnf/automatic.conf。默认情况下,自动升级适用于所有可用的升级。可以将 upgrade_type 参数更改为 security,以仅使用安全升级。

    grep upgrade_type /etc/dnf/automatic.conf

后续步骤

本教程讲授如何在 Oracle Linux 系统上管理软件包,并确保及时更新最新的安全修复程序。因此,请更新您的系统,然后查看“相关链接”部分,了解有关 Oracle Linux 的更多详细信息和培训。

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心