注意:
- Oracle 提供的免费实验室环境中提供了此教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成实验室时,请将这些值替换为特定于云环境的值。
在 Oracle Linux 上使用 DNF
简介
Oracle Linux 提供基于 Dandified Yum (DNF) 的 dnf 实用程序作为用于安装和管理系统软件包的客户机软件。这些软件包可以来自 Unbreakable Linux Network (ULN) 或 Oracle Linux yum 服务器。软件包使用标准 dnf 命令安装在系统上,并且依赖于启用了相应 ULN 通道订阅或 yum 系统信息库的系统。安装或升级软件包时,dnf 会自动处理软件包相关项和要求。
DNF 显著提高了功能和性能,并带来了许多新功能,包括模块化内容和更稳定和记录的 API,与传统的 yum 命令相比。
目标
在本教程中,您将学习如何:
- 使用 DNF 存储库
- 管理程序包和模块
- 安装安全更新
- 利用程序包组
- 使用 DNF 历史记录功能
- 自动升级补丁
先决条件
-
最少一个 Oracle Linux 系统
-
每个系统都应安装 Oracle Linux 并进行以下配置:
- 具有 sudo 访问权限的非 root 用户帐户
- 访问 Internet
部署 Oracle Linux
注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs GitHub 项目 README.md 并完成先决条件。
-
在 Luna Desktop 上打开一个终端。
-
克隆
linux-virt-labsGitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git -
转到工作目录。
cd linux-virt-labs/ol -
安装所需集合。
ansible-galaxy collection install -r requirements.yml -
部署实验室环境。
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 资料档案库
-
打开终端并通过 SSH 连接到 ol-node-01 实例。
ssh oracle@<ip_address_of_instance> -
获取已启用的系统信息库的列表。
dnf repolistDNF 在
/etc/yum.repos.d目录中搜索以.repo结尾的文件。可以通过all选项查看已启用和已禁用的系统信息库的列表。系统信息库文件可以定义一个或多个系统信息库,并考虑在enabled=1时启用系统信息库,在enabled=0时禁用系统信息库。 -
启用资料档案库。
Oracle Linux 10:
sudo dnf config-manager --enable ol10_codeready_builderOracle Linux 9:
sudo dnf config-manager --enable ol9_codeready_builderOracle Linux 8:
sudo dnf config-manager --enable ol8_codeready_builder -
禁用资料档案库。
Oracle Linux 10:
sudo dnf config-manager --disable ol10_codeready_builderOracle Linux 9:
sudo dnf config-manager --disable ol9_codeready_builderOracle Linux 8:
sudo dnf config-manager --disable ol8_codeready_builder -
安装系统信息库。
Oracle Linux 以软件包格式提供各种产品的预构建系统信息库。您可以搜索它们,然后安装并启用它们。
dnf search oracle*release*Oracle Linux 10:
sudo dnf install -y oracle-instantclient-release-el10Oracle Linux 9:
sudo dnf install -y oracle-instantclient-release-el9Oracle Linux 8:
sudo dnf install -y oracle-instantclient-release-el8虽然不首选,但也可以通过以下方式安装系统信息库:
- 直接在
/etc/yum.repos.d中创建新.repo文件 - 使用
dnf config-manager --add-repo <repo_file>,允许安装本地或 URL 中存储的存储库文件
- 直接在
-
删除 DNF 高速缓存。
为了提高性能,DNF 将数据缓存到
/var/cache/dnf中。有时,此缓存的数据可能会过时并导致dnf命令失败。要解决此问题,可以删除所有高速缓存的项。dnf clean allDNF 在您运行各种命令时会随着时间的推移自动重新生成此高速缓存。要对命令故障进行故障排除,可以清除高速缓存,然后重试失败的命令。
管理程序包和模块
Oracle Linux 10 说明: DNF 模块化(模块和流)在 Oracle Linux 10 上不可用。可以从 AppStream 系统信息库安装标准软件包,但不能像在早期发行版中那样启用或安装模块或流。
在提供的使用 DNF 模块化的步骤中,说明仅适用于 Oracle Linux 8 和 Oracle Linux 9。
-
从启用的系统信息库获取可用软件包的列表。
dnf list您可以通过使用
installed或available选项甚至请求特定的软件包名称(例如dnf list available git)来缩小返回的输出范围。 -
列出可用的模块。
dnf module list输出显示可供系统使用的模块、关联的流和配置文件,其中:
Name:模块名称Stream:流版本Profiles:可用配置文件及其状态common:增强的生产就绪部署,是默认配置文件development:安装对模块进行修改所需的软件包minimal:安装提供工作应用程序的最小软件包集
使用输出末尾的 Hint 可确定哪些流和配置文件是 enabled 、 disabled 、 installed 或 default 。
与软件包类似,您可以将模块名称传递到
list选项,以便仅查看该模块的状态。 -
获取有关软件包或模块的信息。
dnf info zsh在这种情况下,
zsh是软件包名称。对模块执行相同操作,但添加module命令并附加特定模块(如dnf module info php)。如果需要有关特定模块流的信息,请将--profile与 module:stream 一起传递,而不是传递模块名称。dnf module info --profile php:8.2 -
搜索可用或已安装的软件包。
dnf search php -
搜索提供特定文件名或命令的软件包。
provides命令的别名为whatprovides,用于查找与文件名匹配的软件包。如果未提供完整路径,则 DNF 将在文件名后面附加/usr/sbin和/usr/bin。出于传统目的,它还附加/sbin和/bin。dnf provides sudo -
安装一个软件包。
sudo dnf install tmux回答
y以确认软件包安装。通过传递-y选项,避免将来执行此额外步骤。默认情况下,DNF 仅从启用的系统信息库安装软件包。但是,您可以通过传递--enablerepo=<repo name>选项绕过该缺省行为。 -
重新安装软件包。
sudo dnf reinstall -y tmux此命令实质上先执行
dnf remove,然后执行dnf install。关键的区别在于,使用重新安装会保留与软件包关联的任何文件的定制配置。 -
启用模块。
在从模块安装软件包之前,需要启用它。
Oracle Linux 9:
sudo dnf module -y enable nginx:1.22Oracle Linux 8:
sudo dnf module -y enable nginx -
安装一个模块。
Oracle Linux 9:
sudo dnf module install -y nginx:1.22Oracle Linux 8:
sudo dnf module install -y nginx:1.14安装软件包后,运行
sudo dnf module list nginx时会在 1.22 流的 common [d] 配置文件旁边显示[i]。 -
删除软件包或模块。
sudo dnf remove -y tmux同样,可以使用相同的语法删除模块,方法是将软件包名称替换为 module:stream/profile 。
-
切换模块。
切换模块流会导致将内容升级或降级到与系统上的当前版本不同的版本。它还处理其他依赖项的安装或不再需要的软件包的删除。
sudo dnf module -y switch-to nginx:1.24/common -
禁用模块。
sudo dnf module -y disable nginx通过禁用模块,可以确保删除已安装的配置文件,所有相关模块流变为不可用状态,模块化 RPMS 不属于软件包集。如果 DNF 检测到任何冲突,则该操作将被拒绝。禁用模块的一个原因是缺省系统信息库和 appstream 中存在较新的软件包。
-
重置模块。
此操作将设置模块状态,使其不再处于启用或禁用状态。DNF 将删除所有配置文件,并且只有缺省配置文件中的软件包可用。
sudo dnf module -y reset nginx
安装安全更新
-
列出所有可用的勘误表。
dnf updateinfo list输出显示启用的系统信息库,后跟每个更新。DNF 按其 ID 的顺序对可用的勘误表进行排序,并根据其类型进一步标识它们。
Severity/Sec:优先级/安全补丁程序bugfix:错误修复enhancement:功能增强
您可以将 cves 、 bugfix 或 security 附加到命令,以将输出范围缩小到仅该特定的勘误表类型。您还可以通过
--installed获取主机上安装的这些安全修复程序的列表。 -
显示可用勘误表的汇总。
dnf updateinfo summary -
根据严重性获取安全升级列表。
可以将 Critical 、 Important 、 Moderate 或 Low 传递给
--sec-severity选项。dnf updateinfo list --sec-severity=ImportantDNF 允许您将其他选项传递到
list命令。您可以使用--advisory <Advisory ID>获取特定建议,也可以使用--cve <CVD ID获取特定 CVE。使用info命令而不是list和确切选项提供有关特定指导或 CVE 的详细信息。 -
将每个软件包更新到其最新版本。
sudo dnf upgrade -y您可以选择从升级中排除特定软件包,其中包含
-x选项,后跟软件包名称。虽然 Oracle Linux 建议应用所有勘误表,但upgrade命令采用以下选项:--cve:更新单个 CVE ID--advisory:更新单个指导 ID--security:更新所有与安全相关的勘误表
或者,用户可以运行
sudo dnf upgrade-minimal以仅对提供错误修复、增强或安全问题修复的软件包应用更新。重要提示:任何 kernel 更新后,确保重新引导系统。如果运行重新引导不可行的系统,则建议使用 Oracle Ksplice 来应用内核修补程序。
管理程序包组
DNF 允许安装、更新或删除软件包组。这些组是用于通用目的的依赖软件包的集合。
-
列出可用组。
dnf group list -
获取组包含的组的列表。
dnf group info "Server with GUI"Server with GUI 安装 GNOME 图形桌面。
-
显示组包含的各个软件包。
dnf group info Core -
安装组。
sudo dnf group install "Server with GUI" --assumeno--assumeno选项将自动回答“no(否)”并跳过安装,以节省本教程中的时间。将此选项保留在命令之外,然后将其替换为-y选项以自动安装该选项。DNF 提供了用于更新和删除组的dnf group update和dnf group remove命令。
使用 DNF 历史记录功能
DNF 历史记录功能显示 dnf 命令执行的所有操作。历史记录功能允许撤消、重做和回滚特定 DNF 事务处理。除了 DNF 历史记录外,软件包安装、更新和删除也会记录在 /var/log/dnf.log 文件中。
-
列出所有 DNF 事务处理。
dnf history您可以通过运行
dnf history info <transaction ID>获取与其中一个事务处理相关的信息。 -
回退特定事务处理。
rollback选项将撤消指定<transaction ID>之后的所有事务。如果只希望冲销单个事务处理,请改用undo。sudo dnf history rollback <transaction ID>DNF
history rollback命令将递增事务处理 ID 并将回退记录为唯一的事务处理。 -
重复特定事务处理。
您可以
redo特定事务处理并重复其每个步骤。sudo dnf history redo <transaction ID>
自动打补丁
手动运行 dnf upgrade 的替代方法是使用 DNF 自动工具。此工具使用 systemd 计时器自动提供升级通知,下载这些通知,并自动安装软件包。
-
安装所需的软件包并启用计时器。
sudo dnf install dnf-automatic -ysudo systemctl enable --now dnf-automatic.timer -
查看缺省 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 帮助中心。