网站搜索

使用 Yum 命令禁用/锁定某些软件包更新的 4 种方法


软件包管理器是一种软件,允许用户安装新软件、升级系统或更新任何特定软件等。在基于 Linux 的系统中,一个软件具有许多依赖项,需要在系统上存在这些依赖项才能完整安装该软件,此类软件(如包管理器)成为每个系统上急需的工具。

每个 Linux 发行版都附带了用于上述功能的默认包管理器,但其中最常见的是:RHELFedora 系统上的 yum (目前从 Fedora 22+ 开始被 DNF 取代)和 Debian 的 apt

如果您正在寻找 APT 工具来阻止或禁用某些特定的软件包更新,那么您应该阅读本文。

DnfDanified yum 正在取代 Fedora 系统上的 yum,这是我们列表中的另一个系统。如果探索得当,这些包管理器可用于以下功能:

  1. 从存储库安装新软件。
  2. 在安装软件之前通过安装这些依赖项来解决软件的依赖项。
  3. 维护每个软件的依赖关系数据库。
  4. 降级任何现有软件的版本。
  5. 升级内核版本。
  6. 列出可供安装的软件包。

我们已经通过实际示例分别介绍了有关每个包管理器的详细文章,您应该阅读它们来控制和管理各自 Linux 发行版中的包管理。

另请阅读:

  1. 通过这 20 个实例掌握 Yum 命令
  2. 在 Fedora 22+ 版本中管理软件包的 27 个 DNF 命令
  3. 学习 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 软件包管理器禁用/锁定软件包更新。如果您还有其他技巧可以完成相同的事情,可以与我们评论。