在 CentOS / Red Hat 中为 Yum 更新排除特定存储库

举报
Tiamo_T 发表于 2022/10/14 08:35:19 2022/10/14
【摘要】 我的系统上有多个 yum 存储库。例如 centos、epel、docker、mongo 等。当我执行 yum update 命令时,所有存储库中安装的包都会更新。如何在 yum 更新期间排除特定存储库?

我的系统上有多个 yum 存储库。例如 centos、epel、docker、mongo 等。当我执行 yum update 命令时,所有存储库中安装的包都会更新。如何在 yum 更新期间排除特定存储库?

那么在 yum 更新期间,要排除属于特定存储库的软件包,请使用本教程中介绍的两种方法中的任何一种。

另外,请记住,除了排除整个存储库之外,您还可以排除特定包:10 Yum Exclude Examples to Skip Packages for Linux Yum Update (How to Yum Exclude Kernel Updates)

1. 获取仓库列表

要查看系统上所有可用的存储库,请执行 yum repolist,如下所示。

# yum repolist
repo id                repo name              status
base                   CentOS-6 - Base        6,575
extras                 CentOS-6 - Extras         62
updates                CentOS-6 - Updates     1,622
dockerrepo             Docker Repository          2
mongodb-org-3.0        MongoDB Repository        75
repolist: 8,336

在上面的示例中,我们有以下内容:

  • 上面列出的前三个软件库是主要的 CentOS 软件库:基础、附加和更新
  • dockerrepo 是一个包含 Docker 容器相关包的第三方存储库
  • mongodb-org-3.0 是一个包含 MongoDB 相关包的第三方存储库。

当您执行如下所示的 yum update 时,它​​会将系统上已安装的所有软件包升级到上述所有存储库中可用的最新版本。

yum update

如果您的系统上已经安装了 mongodb,并且当您执行上述“yum update”时,它也会将 mongodb 包升级到最新版本。

如果您不想在执行“yum update”时升级 mongodb,则应在 yum update 期间将其排除,如下节所述。


此外,如果您想知道特定包属于哪个存储库,以便您可以排除该存储库升级,请使用 yum info 命令,如下所示。

yum info package-name | grep -i repo

如果您不熟悉 yum 命令:15 个 Linux Yum 命令示例 – 安装、卸载、更新包

2. 从 Yum 更新中排除存储库(方法 1)

您可以将选项 –disablerepo=repository-name 与 yum update 一起使用。这不会升级属于给定存储库名称的包。

在以下示例中,yum update 将升级所有已安装的软件包,但属于 MongoDB 存储库的任何已安装软件包除外。

yum --disablerepo=mongodb-org-3.0 update

您还可以在 yum 更新后指定 –disablerepo 选项。以下将在 yum 更新期间排除属于 Docker 存储库的软件包。

yum update --disablerepo=dockerrepo

您可以通过查看“yum repolist”命令输出的第一列来获取要排除的确切存储库名称。

3. 使用 Enabled 参数从 Yum 更新中排除存储库(方法 2)

您可以通过在存储库配置文件中将 enabled 参数设置为 0 来从 yum 更新中永久排除软件包,而不是从 yum update 命令行中排除特定存储库。

存储库配置文件位于 /etc/yum.repos.d 目录下,如下所示。

# ls -l /etc/yum.repos.d/
-rw-r--r--. 1 root root 1926 Jan 30  2016 CentOS-Base.repo
-rw-r--r--  1 root root  166 Feb 18  2016 docker.repo
-rw-r--r--  1 root root  142 Feb  5  2016 mongodb-org-3.0.repo

要排除 mongodb 存储库,请打开 mongodb 存储库文件,并将启用的值更改为 0,如下所示。

# vi /etc/yum.repos.d/mongodb-org-3.0.repo 
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=0

现在,如果您执行 yum repolist,您将不会在输出中看到 MongoDB 存储库。

# yum repolist
repo id           repo name              status
base              CentOS-6 - Base        6,575
extras            CentOS-6 - Extras         62
updates           CentOS-6 - Updates     1,622
dockerrepo        Docker Repository          2
repolist: 8,261

这也意味着即使你的系统上安装了 mongodb 相关的包,当你执行以下“yum update”时,mongodb 包也不会再升级了。

yum update

4. 从 Yum 更新命令行中排除多个存储库

您还可以在 yum 更新期间通过指定以逗号分隔的存储库来排除多个存储库,如下所示。

以下示例将在 yum 更新期间排除 MongoDB、Docker 和 EPEL 存储库。

yum update --disablerepo=mongodb-org-3.0,dockerrepo,epel

5. 为 Yum 更新启用存储库

如果您通过在存储库配置文件中设置“enabled=0”来禁用存储库,您仍然可以在“yum 更新”期间使用–enablerepo 选项将其包括在内,如下所示。

以下示例将在“yum update”期间包含来自 MongoDB 存储库的包,即使此存储库在 /etc/yum.repos.d/ 目录下的存储库文件中被禁用。

yum update --enablerepo=mongodb-org-3.0

6. 在 Yum 更新中结合 EnableRepo 和 DisableRepo

您还可以通过组合 enablerepo 和 disablerepo 选项来获得创意。

例如,以下 yum update 命令将只升级 MongoDB 存储库中的包。

yum update --disablerepo=* --enablerepo=mongodb-org-3.0


  • –disablerepo=* 这表示首先应禁用所有存储库,并且不考虑进行 yum 更新
  • --enablerepo=mongo 这表示在 yum 更新期间只应考虑 MongoDB 存储库(与上述禁用选项结合使用时)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。