第 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 在您的系统上安装、更新或删除软件包。本章中的所有示例都假定您已使用 su
或 sudo
命令获取了超级用户权限。
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]:
这个输出包含几个值得关注的项目:
-
加载的插件:Langpacks、products-id、subscription-manager - Yum
始终通知您已安装和启用哪些 yum 插件。有关 yum 插件的常规信息,或 第 9.6.3 节 “使用 Yum 插件” 的常规信息,请参阅 第 9.6 节 “yum 插件” 以了解特定插件的描述。 -
rpm.x86_64
- 您可以下载并安装新的 rpm 软件包及其依赖项。对每个软件包执行事务检查。 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
更新与安全相关的软件包
如果软件包有可用的安全更新,则只能将这些软件包更新至其最新版本。以 root
用户身份键入:
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-2,yum 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 映像配合使用是将系统升级到最新次要版本的一种简单快速方式。以下步骤演示了升级过程:
创建目标目录以挂载您的 ISO 映像。挂载时不会自动创建该目录,因此请在继续下一步之前创建该目录。以
root
用户身份键入:mkdir mount_dir
使用挂载目录的路径替换 mount_dir。通常,用户将其创建为
/media
目录中的子目录。将 Red Hat Enterprise Linux 7 安装 ISO 镜像挂载到之前创建的目标目录中。以
root
用户身份键入:mount -o loop iso_name mount_dir
将 iso_name 替换为您的 ISO 镜像的路径,mount_dir 替换为目标目录的路径。此处需要
-o
loop
选项,才能将文件挂载为块设备。将
media.repo
文件从 mount 目录复制到/etc/yum.repos.d/
目录。 请注意,此目录中的配置文件必须具有.repo 扩展名才能正常工作。cp
mount_dir/media.repo
/etc/yum.repos.d/new.repo
这会为 yum 存储库创建一个配置文件。使用文件名替换 new.repo,如 rhel7.repo。
编辑新配置文件,使其指向 Red Hat Enterprise Linux 安装 ISO。在
/etc/yum.repos.d/new.repo
文件中添加以下行:baseurl=file:///mount_dir
使用挂载点的路径替换 mount_dir。
更新所有 yum 存储库,包括
/etc/yum.repos.d/new.repo
。以root
用户身份键入:yum
update
这会将您的系统升级到挂载的 ISO 镜像提供的版本。
升级成功后,您可以卸载 ISO 镜像。以
root
用户身份键入:umount mount_dir
其中 mount_dir 是挂载目录的路径。此外,您可以删除在第一步中创建的挂载目录。以
root
用户身份键入:rmdir mount_dir
如果您不会将之前创建的配置文件用于另一个安装或更新,您可以将其删除。以
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 looprhel-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