使用 Yum 命令禁用/锁定某些软件包更新的 4 种方法
软件包管理器是一种软件,允许用户安装新软件、升级系统或更新任何特定软件等。在基于 Linux 的系统中,一个软件具有许多依赖项,需要在系统上存在这些依赖项才能完整安装该软件,此类软件(如包管理器)成为每个系统上急需的工具。
每个 Linux 发行版都附带了用于上述功能的默认包管理器,但其中最常见的是:RHEL 和 Fedora 系统上的 yum (目前从 Fedora 22+ 开始被 DNF 取代)和 Debian 的 apt 。
如果您正在寻找 APT 工具来阻止或禁用某些特定的软件包更新,那么您应该阅读本文。
Dnf 或 Danified yum 正在取代 Fedora 系统上的 yum,这是我们列表中的另一个系统。如果探索得当,这些包管理器可用于以下功能:
- 从存储库安装新软件。
- 在安装软件之前通过安装这些依赖项来解决软件的依赖项。
- 维护每个软件的依赖关系数据库。
- 降级任何现有软件的版本。
- 升级内核版本。
- 列出可供安装的软件包。
我们已经通过实际示例分别介绍了有关每个包管理器的详细文章,您应该阅读它们来控制和管理各自 Linux 发行版中的包管理。
另请阅读:
- 通过这 20 个实例掌握 Yum 命令
- 在 Fedora 22+ 版本中管理软件包的 27 个 DNF 命令
- 学习 25 个 APT 命令来管理 Ubuntu 软件包
在本文中,我们将了解如何在 RHEL/CentOS 和 Fedora 系统中使用 Yum 软件包管理器锁定/禁用某些软件包更新(适用于Fedora 21以及更新的 Fedora 版本)附带 dnf 作为默认包管理器)。
使用 Yum 禁用/锁定软件包更新
Yellowdog Updater, Modified (yum) 是基于 RedHat 的发行版(例如 CentOS 和 Fedora)中的包管理工具。下面讨论使用 Yum 锁定/禁用包更新的各种策略:
1. 永久禁用软件包安装或更新
1. 打开并编辑 yum.conf
文件,该文件位于 /etc/yum.conf 或 /etc/ yum/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=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
...
在这里,要从安装或升级中排除某些包,您只需添加排除变量以及要排除的包的名称。例如,如果我想排除所有 python-3
软件包的更新,那么我只需将以下行附加到 yum.conf
中:
exclude=python-3*
对于要排除的多个包,只需用空格分隔它们的名称即可。
exclude=httpd php
[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=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
exclude=python-3* [Exclude Single Package]
exclude=httpd php [Exclude Multiple Packages]
...
注意:要包含这些软件包,请忽略 yum.conf
中的条目,使用“-disableexcludes”并设置它到 all|main|repoid,其中 'main' 是在 yum.conf 和 'repoid' 中输入的内容> 是那些在 repos.d 目录中指定排除的内容,稍后将对此进行解释。
现在让我们尝试安装或更新指定的软件包,看看 yum 命令将禁用它们安装或更新。
# yum install httpd php
Loaded plugins: fastestmirror, langpacks, versionlock
Loading mirror speeds from cached hostfile
* base: mirror.nbrc.ac.in
* epel: mirror.wanxp.id
* extras: mirror.nbrc.ac.in
* updates: mirror.nbrc.ac.in
Nothing to do
# yum update httpd php
Loaded plugins: fastestmirror, langpacks, versionlock
Loading mirror speeds from cached hostfile
* base: mirror.nbrc.ac.in
* epel: mirror.wanxp.id
* extras: mirror.nbrc.ac.in
* updates: mirror.nbrc.ac.in
No packages marked for update
2. 暂时禁用软件包安装或更新
2. 以上是排除包的永久解决方案,因为除非编辑文件,否则该包不会更新。这也是一个临时解决方案。当您进行任何更新时,请在 yum 命令中使用 -x
开关来排除您不想更新的软件包,例如:
yum -x python-3 update
上述命令将更新系统上所有可用更新的软件包,不包括 python-3
。
此处,要排除多个包,请多次使用 -x
,或在单个开关中使用 ','
分隔包名称。
yum -x httpd -x php update
OR
yum -x httpd,php update
3.使用--exclude
开关与-x作用相同,只需将-x替换为 >–exclude 并将 ','
分隔的包名称列表传递给它。
yum --exclude httpd,php
3. 使用存储库禁用包更新
4. 对于通过添加存储库从任何外部源安装的任何软件包,还有另一种方法可以在将来停止其升级。这可以通过编辑在 /etc/yum/repos.d/ 或 /etc/yum.repos.d< 中创建的 .repo
文件来完成。 目录。
在存储库中添加包含包名称的排除选项。例如:要从 epel repo 中排除任何 wine 包,请在 epel.repo
文件中添加以下行:
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
exclude=wine
现在尝试更新wine包,你会得到如下所示的错误:
# yum update wine
Loaded plugins: fastestmirror, langpacks, versionlock
epel/x86_64/metalink | 5.6 kB 00:00
Loading mirror speeds from cached hostfile
* base: mirror.nbrc.ac.in
* epel: mirror.wanxp.id
* extras: mirror.nbrc.ac.in
* updates: mirror.nbrc.ac.in
No Match for argument: wine
No package wine available.
No packages marked for update
4. 使用版本锁选项禁用软件包更新
5. yum 中屏蔽任何软件包版本从而使其无法升级的另一种方法是使用 yum 的 versionlock
选项,但要做到这一点,您必须在系统上安装 yum-plugin-versionlock 软件包。
yum -y install yum-versionlock
例如,要将 httpd 包的版本锁定为 2.4.6,只需以 root 身份编写以下命令即可。
yum versionlock add httpd
样本输出
Loaded plugins: fastestmirror, langpacks, versionlock
Adding versionlock on: 0:httpd-2.4.6-40.el7.centos
versionlock added: 1
要查看锁定的软件包,使用以下命令将列出已被版本锁定的软件包。
yum versionlock list httpd
样本输出
Loaded plugins: fastestmirror, langpacks, versionlock
0:httpd-2.4.6-40.el7.centos.*
versionlock list done
结论
这些是一些提示,可帮助您使用 yum 软件包管理器禁用/锁定软件包更新。如果您还有其他技巧可以完成相同的事情,可以与我们评论。