在 CentOS / Red Hat 中为 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 存储库(与上述禁用选项结合使用时)
- 点赞
- 收藏
- 关注作者
评论(0)