Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 9 章 yum

yum 是红帽软件包管理器,可以查询有关可用软件包的信息,从存储库获取软件包,安装和卸载它们,并将整个系统更新至最新可用版本。yum 在更新、安装或删除软件包时执行自动依赖项解析,因此能够自动确定、获取和安装所有可用的依赖软件包。

yum 可使用新的、额外的存储库或软件包来源进行配置,也可提供许多插件来增强和扩展其功能。yum 可以执行 RPM 可以执行的许多相同任务;此外,许多命令行选项类似。yum 可以在一台机器或一组机器上轻松、简单的软件包管理。

以下部分假设您的系统在安装过程中注册了红帽订阅管理,如 Red Hat Enterprise Linux 7 安装指南所述。如果您的系统没有订阅,请参阅 第 7 章 注册系统管理并管理订阅

重要

yum 通过启用 GPG(Gnu Privacy Guard)对 GPG 签名包(软件包源)或单个存储库打开的签名验证来提供安全软件包管理。启用签名验证后,yum 将拒绝安装任何未使用该存储库的正确密钥签名的 GPG 软件包。这意味着,您可以信任在您的系统上下载和安装的 RPM 软件包来自红帽等可信源,并在传输过程中不会被修改。有关使用 yum 启用签名检查的详情,请查看 第 9.5 节 “配置 Yum 和 Yum 存储库”

yum 还可让您轻松设置自己的 RPM 软件包存储库,以便在其他计算机上下载和安装。yum 尽可能使用 并行下载 多个软件包和元数据来加快下载。

学习 yum 是一项合理的投资,因为它通常是执行系统管理任务的最快方法,而且除了 PackageKit 图形包管理工具提供的功能之外。

注意

您必须具有超级用户权限,才能使用 yum 在您的系统上安装、更新或删除软件包。本章中的所有示例都假定您已使用 susudo 命令获取了超级用户权限。

9.1. 检查和更新软件包

yum 可让您检查您的系统是否有等待应用的更新。您可以列出需要更新的软件包,并整体更新它们,也可以更新选定的单个软件包。

9.1.1. 检查更新

要查看系统中安装的软件包有可用的更新,请使用以下命令:

yum check-update

例 9.1. yum check-update 命令的输出示例

yum check-update 的输出结果如下:

~]# yum check-update
Loaded plugins: product-id, search-disabled-repos, subscription-manager
dracut.x86_64             033-360.el7_2   rhel-7-server-rpms
dracut-config-rescue.x86_64      033-360.el7_2   rhel-7-server-rpms
kernel.x86_64             3.10.0-327.el7   rhel-7-server-rpms
rpm.x86_64              4.11.3-17.el7   rhel-7-server-rpms
rpm-libs.x86_64            4.11.3-17.el7   rhel-7-server-rpms
rpm-python.x86_64           4.11.3-17.el7   rhel-7-server-rpms
yum.noarch              3.4.3-132.el7   rhel-7-server-rpms

以上输出中的软件包列为具有可用的更新。列表中的第一个软件包是 dracut。示例输出中的每一行都由多个行组成,如果是 dracut

  • dracut - 软件包的名称,
  • x86_64 - 构建软件包的 CPU 架构,
  • 033 - 要安装的更新软件包的版本,
  • 360.el7 - 更新软件包的发布,
  • _2 - 构建版本,作为 z-stream 更新的一部分添加.
  • rhel-7-server-rpms - 更新软件包所在的存储库。

输出中还显示,我们可以更新内核( 内核 包)、yum 和 RPM(yum rpm 包),以及它们的依赖项(如 rpm -libs 和 rpm- python 软件包),所有这些都使用 yum 命令。

9.1.2. 更新软件包

您可以选择更新单个软件包、多个软件包或所有软件包。如果您更新的软件包或软件包的任何依赖项都有可用更新,则它们也会更新。

更新单个软件包

要更新单个软件包,以 root 用户身份运行以下命令:

yum update package_name

例 9.2. 更新 rpm 软件包

要更新 rpm 软件包,请输入:

~]# yum update rpm
Loaded plugins: langpacks, product-id, subscription-manager
Updating Red Hat repositories.
INFO:rhsm-app.repolib:repos updated: 0
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package rpm.x86_64 0:4.11.1-3.el7 will be updated
--> Processing Dependency: rpm = 4.11.1-3.el7 for package: rpm-libs-4.11.1-3.el7.x86_64
--> Processing Dependency: rpm = 4.11.1-3.el7 for package: rpm-python-4.11.1-3.el7.x86_64
--> Processing Dependency: rpm = 4.11.1-3.el7 for package: rpm-build-4.11.1-3.el7.x86_64
---> Package rpm.x86_64 0:4.11.2-2.el7 will be an update
--> Running transaction check
...
--> Finished Dependency Resolution

Dependencies Resolved
=============================================================================
 Package          Arch    Version     Repository    Size
=============================================================================
Updating:
 rpm            x86_64   4.11.2-2.el7  rhel      1.1 M
Updating for dependencies:
 rpm-build         x86_64   4.11.2-2.el7  rhel      139 k
 rpm-build-libs      x86_64   4.11.2-2.el7  rhel       98 k
 rpm-libs         x86_64   4.11.2-2.el7  rhel      261 k
 rpm-python        x86_64   4.11.2-2.el7  rhel       74 k

Transaction Summary
=============================================================================
Upgrade 1 Package (+4 Dependent packages)

Total size: 1.7 M
Is this ok [y/d/N]:

这个输出包含几个值得关注的项目:

  1. 加载的插件:Langpacks、products-id、subscription-manager - Yum 始终通知您已安装和启用哪些 yum 插件。有关 yum 插件的常规信息,或 第 9.6.3 节 “使用 Yum 插件” 的常规信息,请参阅 第 9.6 节 “yum 插件” 以了解特定插件的描述。
  2. rpm.x86_64 - 您可以下载并安装新的 rpm 软件包及其依赖项。对每个软件包执行事务检查。
  3. yum 显示更新信息,然后提示您确认更新;yum 默认以交互方式运行。如果您知道 yum 命令计划执行 哪些事务,您可以使用 -y 选项自动 回答 yum 询问的任何问题(在这种情况下,它以非交互方式运行)。但是,您应该始终检查 yum 计划对系统做出哪些更改,以便您可以轻松地对可能出现的任何问题进行故障排除。您也可以选择下载软件包而不进行安装。为此,请在下载提示符处选择 d 选项。这将启动所选软件包的背景下载。

    如果事务失败,您可以使用 yum history 命令查看 yum 事务 历史记录,如 第 9.4 节 “使用事务历史记录” 所述。

重要

无论您使用 yum update 或 yum install 命令,yum 始终都会 安装 新内核。

另一方面,使用 RPM 时,务必使用 rpm -i 内核命令来 安装新内核,而不是 rpm -u 内核 (替换 当前内核)。

同样,也可以更新软件包组。以 root 用户身份键入:

yum group update group_name

在这里,使用您要更新的软件包组的名称替换 group_name。有关软件包组的详情请参考 第 9.3 节 “使用软件包组”

yum 还 提供与 启用 的过时 配置选项相同的 升级 命令(请参阅 第 9.5.1 节 “设置 [main] 选项”)。默认情况下,/etc/yum.conf 中打开了过时的 功能,这使得这两个命令具有同等性。

更新所有软件包及其依赖项

要更新所有软件包及其依赖项,请使用不带任何参数的 yum update 命令:

yum update
yum update --security

您还可以仅将软件包更新为包含最新安全更新的版本。以 root 用户身份键入:

yum update-minimal --security

例如,假设:

  • kernel-3.10.0-1 软件包安装在您的系统中;
  • kernel-3.10.0-2 软件包已作为安全更新发布;
  • kernel-3.10.0-3 软件包已作为程序错误修复更新发布。

然后 yum update-minimal --security 将软件包更新至 kernel-3.10.0-2yum update --security 将软件包更新为 kernel-3.10.0-3

自动更新软件包

要刷新软件包数据库并自动下载更新,您可以使用 yum-cron 服务。如需更多信息,请参阅 第 9.7 节 “使用 Yum-cron 自动刷新软件包数据库和下载更新”

9.1.3. 使用 ISO 和 Yum 升级系统离线

对于与互联网或红帽网络断开连接的系统,将 yum update 命令与 Red Hat Enterprise Linux 安装 ISO 映像配合使用是将系统升级到最新次要版本的一种简单快速方式。以下步骤演示了升级过程:

  1. 创建目标目录以挂载您的 ISO 映像。挂载时不会自动创建该目录,因此请在继续下一步之前创建该目录。以 root 用户身份键入:

    mkdir mount_dir

    使用挂载目录的路径替换 mount_dir。通常,用户将其创建为 /media 目录中的子目录。

  2. 将 Red Hat Enterprise Linux 7 安装 ISO 镜像挂载到之前创建的目标目录中。以 root 用户身份键入:

    mount -o loop iso_name mount_dir

    iso_name 替换为您的 ISO 镜像的路径,mount_dir 替换为目标目录的路径。此处需要 -o loop 选项,才能将文件挂载为块设备。

  3. media.repo 文件从 mount 目录复制到 /etc/yum.repos.d/ 目录。 请注意,此目录中的配置文件必须具有.repo 扩展名才能正常工作。

    cp mount_dir/media.repo /etc/yum.repos.d/new.repo

    这会为 yum 存储库创建一个配置文件。使用文件名替换 new.repo,如 rhel7.repo

  4. 编辑新配置文件,使其指向 Red Hat Enterprise Linux 安装 ISO。在 /etc/yum.repos.d/new.repo 文件中添加以下行:

    baseurl=file:///mount_dir

    使用挂载点的路径替换 mount_dir

  5. 更新所有 yum 存储库,包括 /etc/yum.repos.d/new.repo。以 root 用户身份键入:

    yum update

    这会将您的系统升级到挂载的 ISO 镜像提供的版本。

  6. 升级成功后,您可以卸载 ISO 镜像。以 root 用户身份键入:

    umount mount_dir

    其中 mount_dir 是挂载目录的路径。此外,您可以删除在第一步中创建的挂载目录。以 root 用户身份键入:

    rmdir mount_dir
  7. 如果您不会将之前创建的配置文件用于另一个安装或更新,您可以将其删除。以 root 用户身份键入:

    rm /etc/yum.repos.d/new.repo

例 9.3. 从 Red Hat Enterprise Linux 7.0 升级到 7.1

如果需要,需要使用带有较新版本的系统(如 rhel-server-7.1-x86_64-dvd.iso)的 ISO 映像来升级不能访问互联网的系统,请创建用于挂载的目标目录,如 /media/rhel7/。以 root 用户身份,使用您的 ISO 镜像更改到 目录并键入:

~]# mount -o loop
    rhel-server-7.1-x86_64-dvd.iso /media/rhel7/

然后通过从挂载目录中复制 media.repo 文件来为您的镜像设置 yum 存储库:

~]# cp /media/rhel7/media.repo /etc/yum.repos.d/rhel7.repo

要将 yum 识别挂载点为仓库,请在上一步中复制的 /etc/yum.repos.d/rhel7.repo 中添加以下行:

baseurl=file:///media/rhel7/

现在,更新 yum 存储库会将您的系统升级到 rhel-server-7.1-x86_64-dvd.iso 提供的版本。以 root 用户身份执行:

~]# yum update

成功升级您的系统时,您可以卸载镜像,删除目标目录和配置文件:

~]# umount /media/rhel7/
~]# rmdir /media/rhel7/
~]# rm
     /etc/yum.repos.d/rhel7.repo