Red Hat Training

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

9.5. 配置 Yum 和 Yum 存储库

yum 及相关实用程序的配置信息位于 /etc/yum.conf。此文件包含一个必填 [main] 部分,它允许您设置具有全局效果的 yum 选项,还可包含一个或多个 [repository] 部分,供您设置特定于存储库的选项。但是,建议您在 /etc/yum.repos.d/ 目录中的新或现有. repo 文件中定义单独的仓库。您在 /etc/yum.conf 文件的单独 [repository] 部分中 定义的值会覆盖 [main] 部分中设置的值。

本节演示了如何:

  • 通过编辑 /etc/yum.conf 配置文件的 [main] 部分来设置全局 yum 选项;
  • 通过编辑 /etc/yum .conf 和 /etc/yum. repos.d/ 目录中的 [repository ] 部分 为单个仓库设置选项;
  • 使用 /etc/yum.conf 中的 yum 变量以及 /etc/yum.repos.d/ 目录中的文件,以便正确处理动态版本和体系结构值;
  • 在命令行中添加、启用和禁用 yum 存储库;和
  • 设置您自己的自定义 yum 存储库。

9.5.1. 设置 [main] 选项

/etc/yum.conf 配置文件正好包含一个 [main] 部分,本节中的一些键值对会影响 yum 的运行方式,另一些则影响 yum 如何处理存储库。

您可以在 /etc/yum.conf 中的 [main] 部分标题下添加多个附加选项。

/etc/yum.conf 配置文件示例类似如下:

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3

[comments abridged]

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

以下是 [main] 部分中最常用的选项:

assumeyes=value

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

0默认)- yum 提示确认其执行的关键操作。

1 - 不提示确认重要的 yum 操作.如果设置了 assumeyes=1,yum 的行为与命令行选项 -y--assumeyes 相同。

cachedir=directory

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

有关 $basearch 和 $ releasever yum 变量的描述,请参阅 第 9.5.3 节 “使用 Yum 变量”

debuglevel=value
这个选项指定 yum 生成的输出调试详情。在这里,值是 110 之间的整数。设置更高的 调试级别 值会导致 yum 显示更详细的调试输出。debuglevel=2 是默认值,而 debuglevel=0 禁用调试输出。
exactarch=value

使用这个选项时,您可以将 yum 设置为在更新已安装的软件包时考虑正确的架构。将 value 替换为:

0 - 在更新软件包时不考虑确切的架构。

1默认)- 在更新包时考虑确切的架构。使用这个设置时,yum 不会安装 32 位体系结构的软件包,以更新已在具有 64 位体系结构的系统中安装的软件包。

exclude=package_name more_package_names
exclude 选项允许您在安装或系统更新期间按关键字排除软件包。通过引用以空格分隔的软件包列表,可实现用于排除的多个软件包列表。允许使用通配符的 shell glob 表达式(如 *?)。
gpgcheck=value

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

0 - 禁止对所有存储库中的软件包进行 GPG 签名检查,包括本地软件包安装.

1默认)- 启用检查所有存储库中所有包的 GPG 签名,包括本地包安装.启用 gpgcheck 后,将检查所有包的签名。

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

group_command=value

使用 group_command 选项指定 yum group install、yum group upgradeyum group remove 命令如何处理软件包组。在以下位置替换 value

simple - 安装软件包组的所有成员.仅升级之前安装的软件包,但不要安装在此期间添加到组中的软件包。

compat - 类似于 simple,但 yum 升级 也会安装自上一次升级以来添加到组中的软件包。

对象 - (默认.) 使用这个选项,yum 跟踪之前安装的组,并区分作为组一部分安装的软件包和单独安装的软件包。请查看 例 9.15 “查看 LibreOffice 软件包组的信息”

group_package_types=package_type more_package_types
您可以在调用 yum group install 命令时,指定安装哪些类型的包(可选默认必需)。默认选择默认 和强制软件包类型
history_record=value

使用这个选项,您可以将 yum 设置为记录事务历史记录。使用以下之一替换 value

0 - yum 不应该 记录事务的历史记录条目。

1默认)- yum 应记录事务的历史记录条目.此操作需要一定数量的磁盘空间,并在事务中额外花费一些时间,但它提供了有关过去操作的许多信息,这些信息可通过 yum history 命令显示。history_record=1 是默认值。

有关 yum history 命令的详情请参考 第 9.4 节 “使用事务历史记录”

注意

yum 使用历史记录来检测对 yum 之外已完成的 rpmdb 数据源的修改。在这种情况下,yum 显示警告并自动搜索更改 rpmdb 导致的问题。当 history_record 关闭后,yum 无法检测到这些更改并且不执行自动检查。

installonlypkgs=空格 分隔 的软件包 列表

您可以在此处提供一个以空格分隔的软件包列表,供 yum 安装 ,但不会更新。有关默认仅安装的软件包列表,请参阅 yum.conf(5)手册页。

如果将 installonlypkgs 指令添加到 /etc/yum.conf,请确保列出应仅安装 的所有 包,包括 yum.conf(5)的 installonlypkgs 部分下列出的任何包。特别是,请确保内核软件包始终在 installonlypkgs 中列出(默认情况下,当它们是一样),并且 installonly_limit 始终设置为大于 2 的值,以便在默认软件包无法引导时始终可用备份内核。

installonly_limit=value

此选项设置 installonlypkgs 指令中列出的软件包数量,可以同时安装。使用代表 installonlypkgs 中列出的任意单个软件包的最大版本数的整数替换

installonlypkgs 指令的默认值包含多个不同的内核软件包,因此请注意,更改 installonly_limit 的值也会影响单个内核软件包安装版本的最大数量。/etc/yum.conf 中列出的默认值是 installonly_limit=3,最小可能的值为 installonly_limit=2

您无法设置 installonly_limit=1,因为这会阻止 yum 删除正在运行的内核。如果使用 installonly_limit=1,yum 将失败。

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

keepcache=value

keepcache 选项决定 yum 在安装成功后是否保留标头和软件包的缓存。在这里,值是

0默认)- 在成功安装后,请勿保留标头和软件包的缓存。

1 - 在成功安装后保留缓存.

logfile=file_name
要指定日志输出的位置,请将 file_name 替换为 yum 应在其中写入其日志输出的文件的绝对路径。默认情况下,yum logs to /var/log/yum.log
max_connenctions=number
此处的值代表并发连接的最大数量,默认为 5。
multilib_policy=value

如果有多个架构版本可用于软件包安装,则 multilib_policy 选项会设置安装行为。在这里,值代表

最佳 - 为这个系统安装最佳选择架构.例如:在 AMD64 系统中设置 multilib_policy=best 会导致 yum 安装 64 位软件包版本。

all - 始终为每个软件包安装所有可能的架构.例如:当 AMD64 系统中将 multilib_policy 设置为 all 时,yum 会安装软件包的 i686 和 AMD64 版本(如果两者都可用)。

obsoletes=value

obsoletes 选项在更新过程中启用过时的进程逻辑。When 在其 spec 文件中声明它弃用 另一个软件包,在安装了前一个软件包时,前一个软件包会被替换掉。例如,当软件包被重命名时,会声明过时的项。使用以下之一替换 value

0 - 在执行更新时禁用 yum 的过时处理逻辑。

1默认)- 在执行更新时启用 yum 的过时处理逻辑。

plugins=value

这是一个全局交换机来启用或禁用 yum 插件,value 是:

0 - 全局禁用所有 yum 插件.

重要

不建议禁用所有插件,因为某些插件提供重要的 yum 服务。特别是 product-idsubscription-manager 插件,它支持基于证书 的内容交付网络 (CDN)。全局禁用插件作为方便选项,通常仅在诊断 yum 潜在问题时才建议使用。

1默认)- 全局启用所有 yum 插件.使用 plugins=1 时,您仍然可以通过在该插件配置文件中设置 enabled=0 来禁用特定的 yum 插件。

有关各种 yum 插件的详情请参考 第 9.6 节 “yum 插件”。有关控制插件的详情请参考 第 9.6.1 节 “启用、配置和禁用 Yum 插件”

reposdir=directory
此处,目录 是指向其中 .repo 文件的 目录的绝对路径。all .repo 文件包含存储库信息(类似于 /etc/yum.conf 的 [ repository] 部分 )。yum 从 .repo 文件和 /etc/yum.conf 文件的 [repository] 部分 收集所有存储库信息,以创建要用于事务的存储库的主列表。如果没有设置 reposdir,yum 将使用默认目录 /etc/yum.repos.d/
retries=value
此选项设置 yum 在返回错误之前应尝试检索文件的次数。 是一个整数 0 或更高。将值设为 0 时,yum 会永久重试。默认值为 10

有关可用 [main] 选项的完整列表,请查看 yum.conf(5)手册页中的 [main] OPTIONS 部分。

9.5.2. 设置 [repository] 选项

[repository] 部分,其中 repository 是唯一存储库 ID,如 my_personal_repo (不允许空间),允许您定义单独的 yum 存储库。为避免冲突,自定义存储库不应使用红帽存储库使用的名称。

以下是 [repository] 部分 采用的形式的最小示例:

[repository]
name=repository_name
baseurl=repository_url

每个 [repository ] 部分必须包含以下指令:

name=repository_name
此处 repository_name 是描述存储库的人类可读字符串。
baseurl=repository_url

使用存储库数据目录所在目录的 URL 替换 repository_url

  • 如果存储库可以通过 HTTP 提供,请使用: http://path/to/repo
  • 如果可以通过 FTP 获取软件仓库,请使用: ftp://path/to/repo
  • 如果仓库对机器而言是本地的,请使用: file:///path/to/local/repo
  • 如果特定的在线存储库需要基本的 HTTP 身份验证,您可以通过将用户名和密码放在 URL 中作为 用户名密码@链接 来指定您的用户名和密码。例如:如果 http://www.example.com/repo/ 上的存储库需要用户名"user"和密码"password",则可将 baseurl 链接指定为 http://user:/repo/

    这个 URL 通常是一个 HTTP 链接,例如:

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

    请注意,yum 总是扩展 URL 中的 $releasever、$arch$basearch 变量。有关 yum 变量的详情请参考 第 9.5.3 节 “使用 Yum 变量”

其他有用的 [repository] 指令包括:

enabled=value

这是告诉 yum 使用或忽略特定库的简单方法,value 是:

0 - 在执行更新和安装时,不要将此存储库作为软件包源包含在内。这是快速打开和关闭存储库的一种简单方法,当您希望从不需要启用更新或安装的仓库中单个软件包时,这很有用。

1 - 将此仓库作为包源包含在内.

也可以通过将 --enablerepo=repo_name 或 --disablerepo=repo_name 选项传递到 yum,或通过 PackageKit 程序的 Add/Remove Software 窗口来执行打开和关闭存储库。

async=value

控制存储库软件包的并行下载。在这里,值是

auto默认)- 如果可能,将使用并行下载,这意味着 yum 会自动为插件创建的存储库禁用它,以避免故障。

on - 为存储库启用并行下载。

off - 禁止并行下载。

还有 [存储库] 选项,其中一部分具有与特定 [main] 选项 相同的形式和功能。有关完整列表,请查看 yum.conf(5)手册页中的 [repository] OPTIONS 部分。

例 9.25. /etc/yum.repos.d/redhat.repo 文件示例

以下是 /etc/yum.repos.d/redhat.repo 文件示例:

#
# Red Hat Repositories
# Managed by (rhsm) subscription-manager
#

[red-hat-enterprise-linux-scalable-file-system-for-rhel-6-entitlement-rpms]
name = Red Hat Enterprise Linux Scalable File System (for RHEL 6 Entitlement) (RPMs)
baseurl = https://cdn.redhat.com/content/dist/rhel/entitlement-6/releases/$releasever/$basearch/scalablefilesystem/os
enabled = 1
gpgcheck = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
sslverify = 1
sslcacert = /etc/rhsm/ca/redhat-uep.pem
sslclientkey = /etc/pki/entitlement/key.pem
sslclientcert = /etc/pki/entitlement/11300387955690106.pem

[red-hat-enterprise-linux-scalable-file-system-for-rhel-6-entitlement-source-rpms]
name = Red Hat Enterprise Linux Scalable File System (for RHEL 6 Entitlement) (Source RPMs)
baseurl = https://cdn.redhat.com/content/dist/rhel/entitlement-6/releases/$releasever/$basearch/scalablefilesystem/source/SRPMS
enabled = 0
gpgcheck = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
sslverify = 1
sslcacert = /etc/rhsm/ca/redhat-uep.pem
sslclientkey = /etc/pki/entitlement/key.pem
sslclientcert = /etc/pki/entitlement/11300387955690106.pem

[red-hat-enterprise-linux-scalable-file-system-for-rhel-6-entitlement-debug-rpms]
name = Red Hat Enterprise Linux Scalable File System (for RHEL 6 Entitlement) (Debug RPMs)
baseurl = https://cdn.redhat.com/content/dist/rhel/entitlement-6/releases/$releasever/$basearch/scalablefilesystem/debug
enabled = 0
gpgcheck = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
sslverify = 1
sslcacert = /etc/rhsm/ca/redhat-uep.pem
sslclientkey = /etc/pki/entitlement/key.pem
sslclientcert = /etc/pki/entitlement/11300387955690106.pem

9.5.3. 使用 Yum 变量

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

$releasever
您可以使用这个变量来引用 Red Hat Enterprise Linux 的发行版本。yum 从 /etc/yum.conf 配置文件中的 distroverpkg=value 行获取 $releasever 的值。如果 /etc/yum.conf 中没有此类行,那么 yum 会从提供 redhat-release 文件的 redhat-release产品 包中获得版本号来推断正确的值。
$arch
您可以在调用 Python 的s os.uname() 功能时,使用此变量指代系统的 CPU 架构。$arch 的有效值包括: i586i686x86_64
$basearch
您可以使用 $basearch 来引用系统基本架构。例如,i686 和 i586 机器都具有 i386 基本架构,AMD64 和 Intel 64 机器基本架构为 x86_64
$YUM0-9
这些十个变量各自替换为同名任何 shell 环境变量的值。如果其中一个变量被引用(例如在 /etc/yum.conf 中)和一个具有相同名称的 shell 环境变量不存在,则不会替换配置文件变量。

要定义自定义变量或覆盖现有变量的值,请在 /etc/yum/vars/ 目录中创建一个名称与变量相同的文件(不含 "$" 符号),并在第一行中添加所需的值。

例如,存储库描述通常包含操作系统名称。要定义名为 $osname 的新变量,请在第一行中创建一个带有"Red Enterprise Linux"的新文件,并将它保存为 /etc/yum/vars/osname:

~]# echo "Red Hat Enterprise Linux 7" > /etc/yum/vars/osname

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

name=$osname $releasever

9.5.4. 查看当前配置

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

yum-config-manager

要列出不同配置部分或部分的内容,请使用以下格式的命令:

yum-config-manager section…

您还可以使用 glob 表达式显示所有匹配部分的配置:

yum-config-manager glob_expression…

例 9.26. 查看主部分的配置

要列出所有配置选项及其主部分对应的值,在 shell 提示符后输入以下内容:

~]$ yum-config-manager main \*
Loaded plugins: langpacks, product-id, subscription-manager
================================== main ===================================
[main]
alwaysprompt = True
assumeyes = False
bandwith = 0
bugtracker_url = https://bugzilla.redhat.com/enter_bug.cgi?product=Red%20Hat%20Enterprise%20Linux%206&component=yum
cache = 0
[output truncated]

9.5.5. 添加、启用和禁用 Yum 存储库

第 9.5.2 节 “设置 [repository] 选项” 描述用来定义 yum 存储库的各种选项。本节介绍如何使用 yum-config-manager 命令添加、启用和禁用存储库。

重要

使用红帽订阅管理注册到基于证书 的内容交付网络 (CDN)时,Red Hat Subscription Manager 工具 用于管理 /etc/yum.repos.d/redhat.repo 文件中的存储库。

添加 Yum 存储库

要定义新存储库,您可以将 [repository] 部分 添加到 /etc/yum.conf 文件,也可以添加到 /etc/yum.repos.d/ 目录中的 a. repo 文件。此目录中带有 .repo 文件扩展名的所有文件都由 yum 读取,建议您在此处定义您的程序库,而不是在 /etc/yum.conf 中定义。

警告

从红帽 的内容交付网络 (CDN)之外的不受验证或不受信任的软件来源获取和安装软件包会带来潜在的安全风险,并可能导致安全性、稳定性、兼容性和可维护性问题。

Yum 存储库通常提供自己的 .repo 文件。要在您的系统中添加此类存储库并启用它,以 root 用户身份运行以下命令:

yum-config-manager --add-repo repository_url

repository_url 是指向 .repo 文件的链接。

例 9.27. 添加 example.repo

要添加位于 http://www.example.com/example.repo 的软件仓库,在 shell 提示符后输入以下内容:

~]# yum-config-manager --add-repo http://www.example.com/example.repo
Loaded plugins: langpacks, product-id, subscription-manager
adding repo from: http://www.example.com/example.repo
grabbing file http://www.example.com/example.repo to /etc/yum.repos.d/example.repo
example.repo                       | 413 B   00:00
repo saved to /etc/yum.repos.d/example.repo

启用 Yum 存储库

要启用特定的存储库或存储库,以 root 用户身份在 shell 提示符后输入以下内容:

yum-config-manager --enable repository…

…其中 repository 是唯一的存储库 ID(使用 yum repolist all 列出可用的存储库 ID)。或者,您可以使用 glob 表达式启用所有匹配的软件仓库:

yum-config-manager --enable glob_expression…

例 9.28. 启用 /etc/yum.conf 的自定义部分中定义的仓库.

要启用 [example]、[example -debuginfo][example-source]部分中定义的软件仓库,请输入:

~]# yum-config-manager --enable example\*
Loaded plugins: langpacks, product-id, subscription-manager
============================== repo: example ==============================
[example]
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7Server
baseurl = http://www.example.com/repo/7Server/x86_64/
cache = 0
cachedir = /var/cache/yum/x86_64/7Server/example
[output truncated]

例 9.29. 启用所有软件仓库

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

~]# yum-config-manager --enable \*
Loaded plugins: langpacks, product-id, subscription-manager
============================== repo: example ==============================
[example]
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7Server
baseurl = http://www.example.com/repo/7Server/x86_64/
cache = 0
cachedir = /var/cache/yum/x86_64/7Server/example
[output truncated]

成功后,yum-config-manager --enable 命令显示当前的存储库配置。

禁用 Yum 存储库

要禁用 yum 存储库,以 root 用户身份运行以下命令:

yum-config-manager --disable repository…

…其中 repository 是唯一的存储库 ID(使用 yum repolist all 列出可用的存储库 ID)。与 yum-config-manager --enable 类似,您可以使用 glob 表达式同时禁用所有匹配的存储库:

yum-config-manager --disable glob_expression…

例 9.30. 禁用所有软件仓库

要禁用在 /etc/yum.conf 文件和 /etc/yum. repos.d/ 目录中定义的所有软件仓库,请输入:

~]# yum-config-manager --disable \*
Loaded plugins: langpacks, product-id, subscription-manager
============================== repo: example ==============================
[example]
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7Server
baseurl = http://www.example.com/repo/7Server/x86_64/
cache = 0
cachedir = /var/cache/yum/x86_64/7Server/example
[output truncated]

成功后,yum-config-manager --disable 命令显示当前配置。

9.5.6. 创建 Yum 存储库

设置 yum 存储库:

  1. 安装 createrepo 软件包:

    # yum install createrepo
  2. 将新存储库的所有软件包复制到一个目录中,如 /tmp/local_repo/

    cp /your/packages/*.rpm /tmp/local_repo/
  3. 创建存储库运行:

    createrepo /tmp/local_repo/

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

    现在,该程序库可以被 yum 使用。此存储库可以通过 HTTP 或 FTP 协议共享,或者直接从本地计算机引用。有关如何配置 yum 软件仓库的详情,请查看 第 9.5.2 节 “设置 [repository] 选项” 部分。

    注意

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

9.5.6.1. 将软件包添加到已创建的 yum 软件仓库

将软件包添加到已创建的 yum 存储库:

  1. 将新软件包复制到您的仓库目录中,如 /tmp/local_repo/:

    cp /your/packages/*.rpm /tmp/local_repo/
  2. 要反映元数据中新添加的软件包,请运行:

    createrepo --update /tmp/local_repo/
  3. 可选:如果您已经使用任何 yum 命令用于新更新的存储库,请运行:

    yum clean expire-cache

9.5.7. 添加 Optional 和 Supplementary 存储库

可选和补充订阅频道为 Red Hat Enterprise Linux 提供了额外的软件包,包括开源许可软件(在可选频道中)和专有许可软件(在 Supplementary 频道中)。

在订阅 Optional 和 Supplementary 频道前,请查看覆盖范围详情如果您决定从这些频道安装软件包,请按照红帽客户门户网站中名为 How to access Optional 和 Supplementary 频道以及 -devel 软件包(RHSM)中的步骤进行操作