Yum软件包管理详解

目录

1. Yum

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

Yum可以配置新的,额外的存储库或包源,还提供许多增强和扩展其功能的插件。百胜可以执行许多与RPM相同的任务; 此外,许多命令行选项都是类似的。Yum可以在一台计算机或一组计算机上轻松简单地进行包管理。

重要

Yum通过为所有软件包存储库(软件包源)或单个存储库启用GPG签名软件包上的GPG(Gnu Privacy Guard;也称为GnuPG)签名验证,提供安全的软件包管理。启用签名验证后,yum将拒绝安装任何未使用该存储库的正确密钥进行GPG签名的软件包。这意味着您可以相信您在系统上下载和安装的RPM软件包来自受信任的来源,例如Red Hat,并且在传输过程中未进行修改。

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

学习yum是值得的投资,因为它通常是执行系统管理任务的最快方式,它提供的功能超出了PackageKit图形包管理工具提供的功能。


1.1 检查和更新包

通过 Yum,你可以检查系统是否有等待应用的更新,你可以列出更细你的软件包并将其作为整体进行更新,也可以更新选定的单个软件包

1.1.1 查询更新

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

[root@www ~]$ yum check-update

上面输出中的包列为可用更新,列表中的第一个包是 dracut,在 dracut的情况下,示例输出中的每一行都包含多行:

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

1.1.2 更新包

你可以选择一次更新单个包,多个包或所有包,如果你更新的软件包或软件包的任何依赖本身都有可用的更新,那么它们也会更新

要更新单个程序包,请运行以下命令:

[root@www ~]$ 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. Loaded plugins ... - yum 总是告知你安装和启用了哪些 yum 插件,
  2. rpm-x86_64 - 你可以下载并安装新的 rpm 包及其依赖项,对每个包执行事务检查
  3. yum提供更新信息,然后提示你确认更新,yum 默认以交互方式运行,如果你已经知道 yum 命*执行哪些事务,则可以使用该-y选项自动回答yes yum 请求的任何问题,但是你应该始终检查 yum 计划对系统进行哪些更改,以便你可以轻松解决可能出现的任何问题,你也可以选择下载软件包而无需安装它,为此,请在下载提示中选择d该选项,这将启动所选包的后台下载

更新所有包及其依赖项

要更新所有包及和依赖项,请使用如下命令:

[root@www ~]$ yum update

更新安全相关的包

如果程序包具有可用的安全更新,则只能将这些程序包更新为最新版本:

[root@www ~]$ yum update --security

你还可以仅将包更新到包涵最新安全更新版本,键入:

[root@www ~]$ yum update-minimal --security

例如:

- 该内核 3.10.0-1软件包安装在系统上

- 该内核 3.10.0-2包发布的安全更新

- 该内核 3.10.0-3包被发布了作为一个bug修复更新



使用 `yum update-minimal --security` 将软件包更新到 Kernel-3.10.0-2,
使用 `yum update --security` 将软件包更新到 Kernel-3.10.0-3


1.1.3 使用 ISO 和 Yum 离线升级系统

对于 Internet 或 Red Hat Network 断开连接的系统,使用yum update带有 Red Hat Enterprise Linux 安装的命令,ISO 映像是将系统升级到最新次要版本的简便快捷方式,以下步骤说明升级过程:





(1)创建目标以装入 ISO 映像,安装时不会自动创建此目录,因此请在继续下一步之前创建该目录,请键入:

[root@www ~]$ mkdir mount_dir

(2)将 Red Hat Enterprise Linux 7安装ISO 映像挂载到先前床架你的目标目录,请键入:

[root@www ~]$ mount -o loop iso_name mount_dir

更换ISO_NAME与路径,以你的ISO映像,并将 mount_dir 更改为 目标目录的路径,此处,-o loop 需要该选项将文件作为块设备安装

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

[root@www ~]$ cp mount_dir/media.repo /etc/yum.repos.d/new.repo

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

baseurl = file:///mount_dir

这会将你的系统升级到安装的 ISO 映像提供的版本

(5)更新所有 yum 存储库,包括在先前步骤中创建的,键入:/etc/yum.repos.d/new.repo

[root@www ~]$ yum update

(6)成功升级后,你可以卸载 ISO 映像,请键入:

[root@www ~]$ umount mount_dir

其中 umount_dir 是 mount 目录的路径,此外,你可以删除在第一步中创建的安装目录,请键入:

[root@www ~]$ rmdir mount_dir

(7)如果你不将先前创建的配置文件用于其他安装或更新,则可以将其删除,请键入

[root@www ~]$ rm /etc/yum.repos.d/new.repo

1.2 使用包

Yum 使你能够使用软件包执行一整套操作,包括搜索,查看有关包,安装和删除的信息

1.2.1 搜索包

你可以使用以下命令搜索所有 RPM 包名称,描述和摘要:

[root@www ~]$ yum search vim gvim emacs

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
============================= N/S matched: vim ==============================
vim-X11.x86_64 : The VIM version of the vi editor for the X Window System
vim-common.x86_64 : The common files needed by any version of the VIM editor
[output truncated] ============================ N/S matched: emacs =============================
emacs.x86_64 : GNU Emacs text editor
emacs-auctex.noarch : Enhanced TeX modes for Emacs
[output truncated] Name and summary matches mostly, use "search all" for everything.
Warning: No matches found for: gvim

yum search 命令对于搜索你不知道其名称但你知道先关术语的程序包非常有用,请注意,默认情况下,yum search 返回匹配包名称和摘要,这使搜索更快,使用该 yum search all 命令可以获得更详细但更慢的搜索

过滤结果

所有 yum 的list 命令都允许你通过附加一个或多个 glob 表达式组委参数来过滤结果,Glob 表达式是正常的字符串,包含一个或多个通配符 * (扩展以匹配任何字符子集)和 ? (扩展匹配任何单个字符)



在将它们作为参数传递给 yum 命令时要小心转义 glob 表达式,否则 Bash shell 会将这些表达式解释为路径名扩展,并可能传递当前目录中与全局表达式匹配yum的所有文件,要确保将 glob 表达式按预期传递,请使用以下方法之一:

  • 通过在前面加上反斜杠字符来转义通配符
  • 双引号或单引号整个 glob 表达式

1.2.2 列出包

列出所有包

要列出有关所有已安装和可用软件包的信息,请在shell提示符下键入以下内容:

[root@www ~]$ yum list all

列出相关的包

要列出与插入的glob表达式匹配的已安装和可用的包,请使用以下命令:

[root@www ~]$ yum list abrt-addon\* abrt-plugin\*
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
abrt-addon-ccpp.x86_64 2.1.11-35.el7 @rhel-7-server-rpms
abrt-addon-kerneloops.x86_64 2.1.11-35.el7 @rhel-7-server-rpms
abrt-addon-pstoreoops.x86_64 2.1.11-35.el7 @rhel-7-server-rpms
abrt-addon-python.x86_64 2.1.11-35.el7 @rhel-7-server-rpms
abrt-addon-vmcore.x86_64 2.1.11-35.el7 @rhel-7-server-rpms
abrt-addon-xorg.x86_64 2.1.11-35.el7 @rhel-7-server-rpms

列出已安装的软件包的版本

以下示例显示如何列出以 "krb" 开头,后跟恰好一个字符和连字符的所有已安装软件包,当你要列出某些组件的所有版本时,这非常有用,因为它们通过数字区分,引用整个 glob 表达式以确保正确处理

[root@www ~]$ yum list installed "krb?-*"
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* extras: mirrors.nwsuaf.edu.cn
* updates: mirrors.neusoft.edu.cn
Installed Packages
krb5-libs.x86_64 1.10.3-10.el6_4.6 @anaconda-CentOS-201311272149.x86_64/6.

列出可用的包

要列出名称包含 'gstreamer' 然后 'plugin'的所有可用包,请运行如下命令:

[root@www ~]# yum list available gstreamer\*\plugin\*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* extras: mirrors.nwsuaf.edu.cn
* updates: mirrors.neusoft.edu.cn
Available Packages
gstreamer-plugins-bad-free.i686 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free.x86_64 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free-devel.i686 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free-devel.x86_64 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free-devel-docs.x86_64 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free-extras.i686 0.10.19-5.el6_8 base
gstreamer-plugins-bad-free-extras.x86_64 0.10.19-5.el6_8 base
gstreamer-plugins-base.i686 0.10.29-2.el6 base
gstreamer-plugins-base.x86_64 0.10.29-2.el6 base
gstreamer-plugins-base-devel.i686 0.10.29-2.el6 base
gstreamer-plugins-base-devel.x86_64 0.10.29-2.el6 base
gstreamer-plugins-base-devel-docs.noarch 0.10.29-2.el6 base
gstreamer-plugins-good.i686 0.10.23-4.el6_8 base
gstreamer-plugins-good.x86_64 0.10.23-4.el6_8 base
gstreamer-plugins-good-devel.i686 0.10.23-4.el6_8 base
gstreamer-plugins-good-devel.x86_64 0.10.23-4.el6_8 bas

列出存储库

要列出系统上每个已启用存储库的存储库ID,名称和程序包数,请使用以下命令:

[root@www ~]$ yum repolist

列出存储库详细信息

要列出有关存储库的更多信息,请添加添加该'-v'选项,启用此选项后,将为每个列出的存储库显示包括文件名,总大小,上次更新日期和基本URL的信息,你可以使用如下命令:

[root@www ~]$ yum repolist -v

列出启用或禁用的存储库

要列出所有包括启用和禁用的存储库,请输入以下语句:

[root@www ~]$ yum repolist

要列出启用的存储库,请输入以下语句:

[root@www ~]$ yum repolist enabled

要列出禁用的存储库,请输入以下语句:

[root@www ~]$ yum repolist disabled

1.2.3 显示包信息

要显示一个或多个包的信息,请使用以下命令(glob 表达式再此处也有效):

[root@www ~]$ yum info httpd

该命令与 rpm -q --info httpd 是类似的,只不过后者是要在安装后才能查看。

扩展

可以使用 yumdb 命令查看有关包的其他信息,包括包的校验和(以及用于生成它的算法,如SHA-256),在命令行上给出用于安装包的命令(如果有)以及在系统上安装软件包的原因(user 表示它是用户安装的,并且 dep 表示它是作为依赖项引入的)

1.2.4 安装包

安装单个包

要安装单个程序包及其所有未安装的依赖项,请按以下格式输入命令:

[root@www ~]$ yum install httpd

安装多个包

要安装多个包,你可以通过将其名称作为参数附加来同时安装多个软件包,为此,请键入:

[root@www ~]$ yum install httpd nginx

安装其他CPU架构的包

如果要在 multilib 系统(例如AMD64或Intel64计算机)上安装软件包,则可以通过将 .arch 附加到软件包名称指定软件包的体系结构(只要它在已启用的存储库中可用):

[root@www ~]$ yum install sqlite.i686

安装所有相似的插件

当你向安装具有相似名称的多个包时,全局表达式非常有用,要安装所有相似的插件,请使用以下格式的命令:

[root@www ~]$ yum install audacious-plugins=\*

除了glob表达式之外,你还可以提供二进制文件的路径,例如以下语句:

[root@www ~]$ yum install /usr/sbin/named

注意

如果你知道要安装包含named二进制文件的软件包,但你不知道文件安装在哪个目录中,例如bin/sbin/目录中,请使用以下语句:

[root@www ~]$ yum provides "*bin/named"

安装过程

(1)第一步, yum 加载必要的插件并运行事务检查,在这种情况下,如果软件包已安装,但由于安装的软件包比最新的当前可用版本旧,因此将进行更新,这样同样适用于该软件的依赖包,然后显示事务摘要。

(2)第二步,yum 会有几个选项,分别是,是(y),否(n)和下载(d),如果选择y,就会安装它们,如果为n,则取消安装,为d是仅下载软件包,不会安装。

安装本地的软件包

要从系统上的本地目录安装以前下载的软件包,请使用以下命令:

[root@www ~]$ yum localinstall 路径

下载包

在某个安装过程中,系统会提示你使用以下消息确认安装:

Total download size: 836 k
Installed size: 3.0 M
Is this ok [y/N]:

在这一步,你就输入d,即下载,下载的路径为/var/cache/yum/$basearch/$releasever/packages/,下载以后台模式进行, 以便你可以并行使用 yum 进行其他操作。

删除包

与软件包安装类似,yum 允许你卸载它们,要卸载特定软件包以依赖于它的任何软件包,请运行以下命令:

[root@www ~]$ yum remove httpd

当您安装多个软件包时,可以通过向命令添加更多软件包名称来一次删除多个软件包。


1.3 查看事务记录

yum history命令使用户能够查看有关yum事务的时间线,它们发生的日期和时间,受影响的包的数量,这些事务是成功还是中止以及RPM数据库是否在事务之间更改的信息。此外,此命令可用于撤消或重做某些事务。所有历史数据都存储在/var/lib/yum/history/目录中的历史DB中。

1.3.1 事务记录

[root@www ~]$ yum history list
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
4 | root <root> | 2019-01-08 23:28 | Install | 2
3 | root <root> | 2019-01-08 23:28 | Install | 2
2 | root <root> | 2019-01-08 23:08 | Install | 1
1 | System <unset> | 2019-01-08 21:27 | Install | 413
history list

所有形式的 yum history list命令都会生成表格输出,每行包含以下列:

  • ID - 表示特定事务的整数值
  • Login user - 登录会话用于启动事务的用户的名称,此信息通常以表格形式呈现,对于未由用户发布的事务(例如自动系统更新),请使用 Full Name <username> System <unset>
  • Date and time - 事务发布的日期和时间
  • Action(s) - 事务期间执行的操作列表
  • Altered - 受事务影响的软件包数量

Action(s) 字段的可能值

操作 缩写 描述
Downgrade D 至少有一个软件包已降级为旧版本
Erase E 至少有一个包已被删除
Install I 至少安装了一个新软件包
obsoleting O 至少有一个包被标记已过时
Reinstall R 至少已重新安装一个软件包
Update U 至少有一个软件包一更新为更新的版本

Altered字段的可能值

符号 描述
< 在事务完成之前,rpmdb 数据库在yum之外被更改
> 事务完成后, rpmdb 数据库在yum之外更改
* 事务未能完成
# 事务成功完成,但yum返回非零退出代码
E 事务成功完成,但现实错误或警告
P 事务已成功完成,但 rpmdb 数据库中已经存在问题
s 事务成功完成,但是用了--skip-broken命令行选项并跳过了某些包

显示20条最近事务记录

要显示最近20个事务的列表,要么在yum history没有其他参数的情况下运行,要么在 shell 提示符下键入内容:

[root@www ~]$ yum history list

显示所有事务记录

要显示所有事务记录,请添加关键字all

[root@www ~]$ yum history list all

显示指定范围的事务记录

要显示第五条到第十条事务记录,请键入:

[root@www ~]$ yum history list 5..10

同步 rpmdb 或 yumdb数据库内容

[root@www ~]$ yum history sync

显示事务使用的统计信息

[root@www ~]$ yum history stats

显示事务的摘要

[root@www ~]$ yum history summary

显示给定范围内的事务摘要

[root@www ~]$ yum history summary 5..10

显示指定软件的事务记录

[root@www ~]$ yum history package-list httpd

1.3.2 检查事务

要显示单个摘要,请使用yum history summary以下格式的命令:

[root@www ~]$ yum history summary 5

查看特定的事务详细信息

要更详细地检查特定事务,请键入:

[root@www ~]$ yum history info 5

查看特定范围的事务详细信息

[root@www ~]$ yum history info 1..5

查看特定事务的附加信息

[root@www ~]$ yum history addon-info last

Loaded plugins: fastestmirror
Transaction ID: 4
Available additional history information:
config-repos
saved_tx
config-main history addon-info

yum history addon-info 命令的输出中,有三种类型的信息:

  • config-main - 事务期间使用的全局yum选项
  • config-repos - 个人yum存储库的
  • saved_tx - yum load-transaction 命令可以使用的数据,一边在另一台机器上重复该事务

要显示所选类型的附加信息,请运行以下命令:

[root@www ~]$ yum histor addon-info 5 config-main

1.3.3 恢复和重复事务

除了查看事务历史之外,该yum history命令还提供了还原或重复所选事务的方法,要还原事务,请在shell提示符下键入以下内内容:

[root@www ~]$ yum history undo ID

要重复特定事务,请运行以下命令

[root@www ~]$ yum history redo ID

这两个命令还接受last关键字来撤销或重复最新的事务

请注意,yum history undoyum history redo命令仅还原或重复在事务期间执行的步骤,如果事务安装了一个新包,该yum history undo命令将卸载它,如果事务卸载了一个包,该命令将再次安装它,如果这些旧的软件包仍然可用,此命令还会尝试将所有更新的软件包降级到其先前的版本

在管理多个相同的系统时,yum还允许您在其中一个系统上执行事务,将事务详细信息存储在文件中,经过一段时间的测试后,在其余系统上重复相同的事务。要将事务详细信息存储到文件,请在shell提示符下键入以下内容

[root@www ~]$ yum -q history addon-info id saved_tx > file_name

将此文件复制到目标系统后,可以使用以下命令重复该事物:
```
[root@www ~]$ yum load-transaction file
```
你可以配置 `load-transaction` 为忽略缺少的软件包 romdb 版本,有关这些配置选项的更多信息,请参见 `yum.conf(5)` 手册页。

启动新的事务记录

Yum将事务历史记录存储在单个SQLite数据库文件中。要启动新的事务历史记录,请运行以下命令:

[root@www ~]$ yum history new

这将在 /var/lib/yum/history/ 目录中创建一个新的空数据库文件,旧的事务历史记录将保留,但只要目录中存在较新的数据库文件,就无法访问。


1.4 配置yum和yum存储库

yum 和相关使用程序的配置信息位于/etc/yu.conf,此文件包含一个强制的 [main] 节,允许你设置具有全局效果的 yum 选项,还可以包含一个或多个 [repository] 节,允许你设置特定于存储库的选项,但是,建议在 /etc/yum.repos.d/ 目录中的新的或现有的 .repo 文件中定义单个存储库,在 /etc/yum.conf 文件的各个 [repository] 部分中定义的值将覆盖在 [main] 部分中设置的值。

1.4.1 配置 /etc/yum.conf 文件

/etc/yum.conf 配置文件只包含一个 [main] 部分,虽然这一部分中的一些键值对会影响yum的操作方式,但其他一些会影响yum处理存储库的方式,你可以在 /etc/yum.conf[main] 部分标题下添加许多其他选项。

1.4.2 /etc/yum.conf 的[main]选项

assumeyes=value

assumeyes选项确定yum是否提示确认关键操作,用一下之一替换value:

  • 0 - yum提示确认其执行的关键操作
  • 1 - 不要提示关键行为,如果assumeyes=1,yum的行为以命令行的-y或者--assumeyes同样的方式作为命令行选项。

cachedir=dir

使用此选项可设置 yum 存储库其缓存和数据库文件的目录,将dir替换为目录的绝对路径,默认情况下,yum的缓存目录是 /var/cache/yum/$basearch/$releasever

debuglevel=value

此选项指定yum生成的调试输出的详细信息,这里,value是1和10之间的整数,设置更高的debuglevel值会导致yum显示更详细的调试输出,debuglevel=2是默认值,同时debuglevel=0禁用调试输出。

exactarch=value

使用此选项,你可以将yum设置为在更新已安装的软件包时考虑确切的体系结构,替换value:

  • 0 - 更新包时不要考虑确切的体系结构
  • 1 - 在更新包时考虑确切体系结构,使用此设置,yum不会安装32位体系结构的软件包来更新已安装在具有64位体系结构的系统上的软件包

exclude=package_name [more_package_names

exclude 选项使你可以在安装或系统更新期间按关键字排除包,列出多个要排除的包可以通过引用以空格的包列表来完成,允许使用通配符(例如,*?)的Shell glob 表达式

pgpcheck=value

使用该 gpgcheck 选项指定 yum 是否应对包执行 GPG 签名检查,替换value:

  • 0 - 禁用所有存储库中软件包的GPG签名检查,包括本地软件包安装、
  • 1 - 启用检查所有存储库中所有软件包的GPG签名,包括本地软件包安装,与gpgcheck启用,所有包的签名进行检查

如果在/etc/yum.conf文件的[main]部分中设置了此选项,则会为所有存储库设置GPG检查规则,但是,你也可以设置单个存储库设置gpgcheck=value,也就是说,你可以在一个存储库上启用GPG检查,同时另一个存储库上禁用它, 如果在 /etc/yum.conf 中存在 gpgcheck=value,则在相应的 .repo 文件中为单个存储库设置 gpgcheck=value 将覆盖默认值。

group_command=value

使用 group_command 选项指定如何 yum group installyum group upgradeyum group remove 命令处理程序包组,用一下内容替换value:

  • simple - 安装软件包组的所有成员,仅升级以前安装的软件包,但不要同时安装已添加到组中的软件包。
  • compat - 类似于simpleyum upgrade也安装自上次升级以来添加到组中的软件包
  • objects - 使用此选项,yum会跟踪以前安装的组,并区分作为组的一部分安装的软件包和单独安装的软件包。

group_package_types=package_type [more_package_types]

在这里,你可以指定在调用 yum group install 命令时安装的软件包类型,(optional,default,mandatory)默认情况下选择 defaultmandatory 的包类型。

history_record=value

使用此选项,你可以设置 yum 的记录事务历史,用一下之一值替换value:

  • 0 - yum 不应该记录事务的历史记录条目
  • 1 - yum 应该记录事务的历史记录条目,此操作占用一定数量的磁盘空间,并在事务中占用一些额外的时间,但它提供了有关过去操作的大量信息,可以使用yum history 命令显示,history_record=1是默认值

提示

Yum 使用历史记录来检测 rpmdb 已在yum之外完成的对数据库的修改,在这种情况下,yum会显示警告并自动搜索由 rpmdb 更改引起的可能问题,与 history_record 相关,是无法检测这些变化并且不执行自动检查。

installonlypkgs=space separated list of packages

在这里,你可以提供一个空间分隔的包列表, yum可以安装这些报,但不会更新这些包,请参阅yum.conf(5)手册页,了解仅在默认情况下安装的软件包列表。

如果将 installonlypkgs 指令添加到 /etc/yum.conf 中,请确保列出了所有只应安装的包,包括 yum.conf(5)installonlypkgs 部分列出的包,特别是,确保内核包始终列在 installonlypkgs 中(默认情况下是这样),并且 installobly_limit始终设置为大于某个值, 2 的值以便在默认内核无法启动时备份内核始终可用。

installonly_limit=value

此选项设置 installonlypkgs 可以同时安装指令中列出的包数,将value替换为一个整数,该整数表示可以同时为其中列出的任何单个程序包安装的最大版本数 installonlypkgs

installonlypkgs 指令的默认值包括几个不同的内核包,因此请注意,更改值 installonly_limit 也会影响任何单个内核包的最大安装半本数,列出的默认值 /etc/yum.confinstallonly_limit=3,最小可能值是installonly_limit=2

你无法设置,installonly_limit=1因为这会使yum删除正在运行的内核,这是禁止的,如果 installonly_limit=1 使用,则yum失败

使用 installonly_limit=2 确保一个备份内核可用,但是,建议保留默认设置 installonly_limit=3,以便有两个备份内核可用。

keepcache=value

keepcache选项确定yum在成功安装后是否保留标头和包的缓存,在这里,value 试一下之一:

  • 0 - 成功安装后,不要保留标头和包的缓存
  • 1 - 成功安装后保留缓存

logfile=file_name

要指定日志记录输出的位置,请将 file_name 替换为 yum 应写入其日志记录输出的文件的绝对路径,默认情况下,yum 会记录到 /var/log/yum.log

max_connections=number

此处 value 表示最大并发连接数,默认值为 5

multilib_policy=value

multilib_policy如果多个体系结构版本可用于程序包安装,则该选项会设置安装行为,这里 value 代表:

  • best - 为此系统安装最佳选择架构,例如,multilib_policy=best在AMD64系统上进行设置会导致yum安装所有软件包的64位版本
  • all - 始终未每个包安装每个可能的架构,例如,如果multilib_policy设置为all AMD64系统,yum将同时安装 i686 和 AAMD64 版本的软件包(如果两者都可用)

obsoletes=value

obsoletes 选项在更新期间其用过时的进程逻辑,当一个包在其spec文件中声明它废弃了另一个包时,后一个包在安装前一个包替换,例如,在重命名包时声明过时,用以下值替换value:

  • 0 - 执行更新时禁用yum的过时处理逻辑
  • 1 - 执行更新时启用yum的过时处理逻辑

plugins=value

这是一个启用或禁用yum插件的全局开关,value是以下之一:

  • 0 - 全局禁用所有yum插件
  • 1 - 全局启用所有yum插件,使用plugin=1,你仍然可以通过设置enable=0该插件的配置文件来禁用特定的yum插件。

reposdir=dir

此选项设置yum在返回错误之前应尝试检索文件的次数,value 是整数 0 或更大,设置值 0 使yum永远重试,默认值为 10

1.4.3 /eyc/yum.conf 的[repository]选项

[repository]部分,其中repository是唯一的repository id,例如 my_personal_repo (不允许使用空格),允许你定义单个yum存储库,为了避免冲突,自动以存储库不应使用 Red Hat 存储库使用的名称。

以下是一个部分采用的形式的最小例子:

[repository]
name = repository_name
baseurl = repository_url

每个部分包含以下指令:

name=repository_name

这里,repository_name 是描述存储看的人类可读字符串

baseurl=repository_url

将 repisitory_url 替换为存储库的 repodata 目录所在目录的URL:

  • 如果存储库可通过 HTTP 使用,请使用:http://path/to/repo
  • 如果存储库可通过 FTP 使用,请使用:ftp://path/to/repo
  • 如果存储库是计算机的本地存储库,请使用:file:///path/to/repo
  • 如果特定的在线存储库需要基本的 HTTP 身份验证,你可以通过将其作为前缀添加到 URL 来指定你的用户名和密码,例如,如果http://www.example.com/repo/上的存储库需要用户名“user”和密码“password”则可以将链接指定为。http://user:password@www.example.com/repo/

通常此 URL 是 HTTP 链接,例如:

baseurl=http://path/to/repo/releases/$releasever/server/$basearch/os/

需要注意的是 yum 始终扩展 $releasever$arch以及$basearch在URL中的变量。

enabled=value

这是告诉 yum 使用或忽略特定存储库的简单方法,value 是以下值之一:

  • 0 - 执行更新和安装时,请勿将此存储库包含为包源,这是一种快速打开和关闭存储库的简单方法,当你需要来自存储库的单个包时,这是非常有用的,你不希望为更新或安装启用。
  • 1 - 将此存储库包含为包源

打开和关闭存储库也可以通过将--enablerepo=repo-name或者--disablerepo=repo-name选项传递给yum或通过packagekit实用程序的“添加/删除软件”窗口来执行

async=value

控制存储库包的并行下载,在这里,value是以下之一:

  • auto - 如果可能,实用并行下载,这意味着 yum 会自动为插件创建的存储库禁用它,以避免出现故障
  • on - 为存储库启用了并行下载
  • off - 为存储库禁用了并行下载

存在更多选项,其中一部分具有与某些选项相同的形式和功能,有关完整列表,请参阅部分的yum.conf(5)手册页,[repository] [main] [repository] OPTIONS

使用Yum变量

你可以在yum命令和所有yum配置文件(即目中的/etc/yum.conf所有.repo文件)中使用和引用内置变量/etc/yum.repos.d/

$releasever

你可以使用此变量来引用 Red Hat Enterrpise Linux 的发行版本,Yum 从 /etc/yum.conf 配置文件的 distorvorpkg=value行中获取$releasever的值,如果/etc/yum.conf 中没有这样的行,那么yum通过从提供RedHat 发布文件的 RedHat-releaseproduct 包中派生版本号来推断正确的值。

$arch

你可以使用此变量来引用在调用Python os.uname()函数返回的系统 CPU 体系结构,$arch包含的有效值:i586,i686x86_64

$basearch

你可以使用$basearch来引用系统的基本体系结构,例如,i686和i586机器都有基本架构i386,而AMD64Intel64计算机的基本体系结构时x86_64

$YUM0-9

这十个变量每个都被替换为具有相同名称的任何 shell 环境变量的值,如果引用其中一个变量(例如/etc/yum.conf)并且不存在具有相同名称的 shell 环境变量,则不替换配置文件变量。

设置自定义变量

要定义自定义变量或覆盖现有变量的值,请在/etc/yum.conf目录中创建与变量名同名的文件(不带“$”符号),并在其第一行添加所需的值。

例如,存储库描述通常包括操作系统名称,要定义一个名为$osname的新变量,请咋第一行创建一个带有Red Hat Enterprise Linux的新文件,并将其另存为/etc/yum/vars/osname

[root@www ~]$ echo 'Red Hat Enterprise Linux 7' > /etc/yum/vars/osname

然后,你现在可以在.repo文件中使用以下内容,而不是"Red Hat Enterprise Linux 7:

name=$osname $releasever

1.4.4 yum-config-manager 的使用

查看当前配置

要显示全局 yum 选项的当前值(即文件 /etc/yum.conf[main] 部分中指定的选项),请执行 yum-config-manager 不带命令行选项的命令:

[root@www ~]$ yum-config-manager

要列出不同配置节的内容,请使用以下格式:

[root@www ~]$ yum-config-manager main

添加Yum存储库

要添加新存储库,可以在/etc/yum.conf文件中添加一个[repository]部分,也可以在/etc/yum.repo.d/目录中添加一个.repo文件,yum读取此目录具有.repo文件扩展名的所有文件,建议你在此处添加,而不是在/etc/yum.conf中定义存储库。

Yum存储库通常提供自己的.repo文件,要将此类存储库添加到系统并启用它,请运行以下命令:

[root@www ~]$ yum-config-manager --add-repo http://exaple.com/example.repo

启用Yum存储库

要启用特定存储库,请在 shell 提示符下键入以下内容:

[root@www ~]$ yum-config-manager --enable example\*

启用所有存储库

要启用/etc/yum.conf文件和/etc/yum.repos.d/目录中定义的所有存储库,请键入:

[root@www ~]$ yum-config-manager --enable \*

禁用Yum存储库

要禁用yum存储库,请运行以下命令:

[root@www ~]$ yum-config-manager --disable example\*

禁用所有存储库

要禁用/etc/yum.conf文件和/etc/yum.repos.d/目录中定义的所有存储库,请键入:

[root@www ~]$ yum-config-manager --disable \*

创建Yum存储库

要设置yum存储库:

(1)安装 createrepo

[root@www ~]$ yum install createrepo

(2)将新存储库的所有包复制到一个目录中,例如/tmp/local_repo

[root@www ~]$ cp /your/Packages/*.rpm /tmp/local_repo/

(3)要创建存储库运行:

[root@www ~]$ createrepo /tmp/local_repo/

这将yum存储库创建必要的元数据,并将元数据放在新创建的子目录repodata

现在,存储库已准备好由yum使用,此存储库可以通过HTTP和FTP协议共享,也可以直接从本地计算机引用。

注意

构建存储库的 URL 时,请参阅 /mnt/local_repo 而不是 /mnt/local_repo/repodata,因为此目录仅包含元数据,实际的yum包在 /mnt/local_repo。

要将包添加到已创建的yum存储库

(1)将新包复制到存储库目录,例如 /tmp/local_repo/

[root@www ~]$ cp /your/Packages/*.rpm /tmp/local_repo

(2)要反映元数据中新添加的包,请运行:

[root@www ~]$ createrepo --update /tmp/local_repo/

(3)可选,如果你已使用任何yum命令和新更新的存储,请运行:

[root@www ~]$ yum clean expire-cache

1.5 Yum插件

Yum 提供扩展和增强其操作的插件,默认情况下回安装某些插件,当你调用任何 yum 命令时,yum总会通知你哪些插件(如果有)已加载并处于活动状态,例如:

[root@www ~]$ yum info yum

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

请注意,Loaded plugins后面的插件名称 是你可以为该选项提供的名称,--disableplugin=plugin_name

1.5.1 启用配置和禁用Yum插件

要启用 yum 插件,请确保/etc/yum.conf文件的[main]部分中存在以plugins =开头的行,并且其值为1

plugins=1

每个已安装的插件在/etc/yum/pluginconf.d/目录中都有自己的配置文件,你可以在这些文件中设置插件特定选项,例如,以下是别名插件的aliases.conf配置文件。

[main]
enabled=1

/etc/yum.conf文件类似,插件配置文件始终包含一个[main]部分,其中该enabled=1选项控制在运行yum命令时是否启用插件,如果缺少此选项,则可以手动将其添加到文件中

如果你通过设置enabled=0禁用所有插件在/etc/yum.conf中,那么所有的插件,无论他们在各个配置文件是否启用禁用。

如果你只想为单个yum命令禁用所有yum插件,请使用该--noplugins选项。

如果要为单个yum命令禁用一个或多个yum插件,请将该选项添加到该命令,例如,要在更新系统时禁用别名插件,请键入:--disableplugin=plugin_name

[root@www ~]$ yum update --disableplugin=aliases

你为该--disableplugin=选项提供的插件名称Loaded plugins与任何yum命令输出中的行后面列出的名称相同,你可以通过用逗号分隔名称来禁用多个插件,此外,你可以使用glob表达式匹配多个插件名称或缩短长插件名称:

[root@www ~]$ yum update --disableplugin=aliases,lang*

1.5.2 安装其他Yum插件

Yum 插件通常遵循yum-plugin-plugin_name包命名约定,但并非总是如此,例如,提供kabi插件的包被命名,你可以像安装其他软件包一样安装yum插件,例如,要安装yum-aliases插件,请在shell提示符下键入以下内容:

[root@www ~]$ yun install yum-plugin-aliases

1.5.3 使用Yum插件

以下列表提供了几个有用的yum插件的说明和使用说明,插件按名称列出,括号包含包的名称。

search-disabled-repos(订阅管理员)

search-disabled-repos可以让你暂时或永久启用已禁用的存储库,以帮助解决依赖关系。启用此插件后,当Yum由于依赖项解析失败而无法安装软件包时,它会暂时启用已禁用的存储库并重试。如果安装成功,Yum还提供永久启用使用的存储库。请注意,该插件仅适用于由subscription-manager管理的存储库,而不适用于自定义存储库。

重要

如果 yum 使用 --assumeyes 或 -y选项执行,或者如何 assumeyes 启用了该指令/etc/yum.conf,则插件会暂时和永久地启用已禁用的存储库,而不会提示确认,这可能会导致问题,例如,启用你不希望启用的存储库。

要配置search-disabled-repos插件,请编辑位于/etc/yum/pluginconf.d/search-disabled-repos.conf,的配置文件,有关可在[main]中使用的指令列表,请参阅下表

指示 描述
enabled=value 允许你启用或禁用插件,该value必须是1或0,默认情况下启用插件
nitify_only=value 允许你将插件的行为限制为通知,该value必须是1(仅在不修改Yum行为的情况下通知)或0(修改Yum的行为),默认情况下,插件仅通知用户
ignored_repos=repos 允许你指定插件未启用的存储库

kabi(kabi-yum-plugins)

该 kabi 插件检查驱动程序更新包是否与官方红帽符合内核应用程序二进制接口(kabi),启用此插件后,当用户尝试安装使用不在白名单中的内核符号的程序包时,会像系统日志写入警告消息,此外,将插件配置为以强制模式运行可以防止安装此类软件包。

要配置 kabi 插件,请编辑位于/etc/yum/pluginconf.d/kabi.conf,可在该[main]部分中使用的指令列表如下表所示

指示 描述
enabled=value 允许你启用或禁用插件,该value必须是1(启用)或者0(禁用),安装后,默认情况下启用插件
whitelists=dir 允许你指定支持内核符号的文件所在的directory,默认情况下,kabi 插件使用 kernel-abi-whitelists包(即/usr/lib/modules/kabi-rhel70/目录)提供的文件
enforce=value 允许你启用或禁用强制模式,该value必须是1或0,默认情况下,此选项已注释掉,kabi插件仅显示警告信息

product-id(订阅管理员)

该 product-id 插件管理从内容分发网络安装的产品的产品表示证书,该 product-id 插件是默认安装的

langpacks(yum-langpacks)

该 langpacks 插件用于搜索对每个已安装的软件包所选语言环境软件包,该 langpacks 插件默认安装的

aliases(yum-plugin-aliases)

aliases 插件添加alias命令行选项使配置和使用别名

yum-changelog(yum-plugin-changelog)

所述yum-changelog 插件添加的--changlog使得能够更新前后观看包更改日志的命令行选项

yum-tmprepo(yum-plugin-tmprepo)

该 yum-tmprepo 插件添加的--tmprepo需要一个库文件,下载的URL并使其只有一个交易命令行选项,此插件尝试确保安全临时使用存储库,默认情况下,它不允许禁用gpg检查

yum-verify(yum-plugin-verify)

所述 yum-verify 插件添加的verifyverify-rpmverify-all用于在系统上观看的验证数据的命令行选项

yum-versionlock(yum-plugin-versionlock)

该 yum-versionlock 插件排除选定的软件包,这使得能够保护包由新版本更新的其他版本,使用versionlock命令行选项,你可以查看和编辑锁定的包列表。

1.6 自动刷新数据库并使用Yum-cron下载更新

yum-cron服务自动检查和下载更新,yum-cron安装yum-cron软件包后,服务提供的 cron 作业立即生效,该yum-cron服务还可以自动安装下载的更新。

使用默认设置,yum-cron服务:

  • 每小时更新yum缓存中的元数据一次
  • 每天下载一次对yum缓存的包更新,如果存储库中有新报,则会发送电子邮件,

yum-cron服务有两个配置文件:

/etc/yum/yum-cron.conf - 对于日常任务

/etc/yum/yum-cron-hourly.conf - 每小时任务

1.6.1 启用自动安装更新

要启用下载更新的自动安装,请通过设置以下apply_updates选项编辑每日安装的每日配置文件或每小时安装的每小时配置文件

apply_updates=yes

1.6.2 设置可选的电子邮件通知

默认情况下,该yum-cron服务用于cron发送包含已执行命令输出的电子邮件,此电子邮件根据cron配置发送,通常发送给本地超级用户并存储在/var/spool/mail/root文件中。

你可以使用影响所有cron作业的设置不同的特定电子邮件配置,但是,此电子邮件配置不支持 TLS,整体电子邮件内置逻辑非常基本。

要启用 yum-cron 内置电子邮件通知

(1)打开特定的yum-cron配置文件:

/etc/yum/yum-cron.conf - 对于日常任务

/etc/yum/yum-cron-hourly.conf - 每小时任务

(2)在该[emitters]部分中,设置以下选项

emit_via=email

(3)设置email_fromemail_toemail_host所需的选项

1.6.3 启用或禁用特定存储库

yum-cron不支持存储库的具体配置,置于启用或禁用特定仓库的解决方法,yum-cron而不是yum一般的请执行下列步骤:

(1)在系统的任何位置创建一个空的存储库配置目录

(2)将所有配置从/etc/yum.repos.d/目录复制到此新创建的目录,

(3)在其中的相应.repo配置文件中/etc/yum.repos.d/,设置enabled选项如下:

enabled=1 - 要启用存储库

enabled=0 - 要禁用存储库

(4)在所选yum-cron配置文件的末尾添加一下选项,该选项指向新创建的存储库目录

reposdir=/path/to/new/reposdir

1.6.4 测试Yum-cron设置

要在yum-cron不等待下一个计划yum-cron任务的情况下测试设置:

(1)打开选定的yum-cron`配置文件

/etc/yum/yum-cron.conf - 对于日常任务

/etc/yum/yum-cron-hourly.conf - 每小时任务

(2)random_sleep在所选配置文件中,设置选项,如下所示:

random_sleep=0

(3)运行配置文件

yum-cron /etc/yum/yum-cron.conf
yum-cron /etc/yum/yum-cron-hourly.conf

1.6.5 禁用 Yum-cron 消息

yum-cron 消息不能完全禁用,但可被限制为仅具有临界优先级的消息,限制消息:

(1)打开选定yum-cron配置文件

/etc/yum/yum-cron.conf - 对于日常任务

/etc/yum/yum-cron-hourly.conf

(2)在配置文件的[base]部分中设置以下选项

debuglevel=4

1.6.6 自动清理包

yum-cron服务不支持任何用于删除与yum clean all命令类似的包的配置新选项,要自动清理包,可以将cron 作业创建为可执行shell脚本:

(1)在/etc/cron.daily/包含以下内容的目录中创建shell脚本:

#! /bin/bash
yum clean all

(2)使脚本可执行

chmod +x /etc/cron.daily/script-name.sh

其他资源

有关如何在Red Hat Enterprise Linux上管理软件包的更多信息,请参阅下面列出的资源。

已安装的文档

  • yum(8) - yum命令行实用程序的手册页提供了支持的选项和命令的完整列表
  • yumdb(8) - yumdb 命令行使用程序的手册页记录了如何使用此工具进行查询,并在有必要时更改yum数据库
  • yum.conf(5) - 手册页命名yum.conf文档可用yum配置选项
  • yum-utils(1) - 名为yum-utils的手册页并简要描述了用于管理yum配置,操作存储库和使用yum数据库的其他使用程序

上一篇:redis教程


下一篇:Linux软件包管理