DNF(Dandified Yum)是YUM(Yellowdog Updater Modified)的下一代版本,它是基于Red Hat的Linux发行版的一个开源的默认包管理器,用于从官方软件库和第三方库获取、安装、升级、删除以及查询Package(包)。
在更新系统时,有时候我们不希望更新某些软件包,例如Apache Server ( HTTP )、MySQL、PHP或任何其它主要应用程序,因为更新此类软件可能会破坏服务器上当前正在运行的Web应用程序并导致重大问题。因此,建议停止此类软件的更新,直到应用程序获得最新的更新补丁。
在本文中,小编将简单介绍如何在基于RPM发行版(如RHEL、CentOS、Fedora、Rocky Linux和AlmaLinux)上使用YUM和DNF包管理器排除(禁用)某些包更新。此外,还可以从任何第三方存储库中排除或禁用某些包的更新。
排除语法如下:
exclude=package package1 packages*
上述exclude指令可在/etc/yum.conf或/etc/dnf/dnf.conf配置文件中定义,其中包含要从更新或安装中排除的软件包列表。
上述语法将排除“ package ”、“ package1 ”和“ package ”更新或安装列表。每个关键字应该用空格分隔以排除包。
如何排除YUM或DNF中的包
要排除(禁用)特定的软件包更新,可以使用编辑器打开名为/etc/yum.conf或/etc/dnf/dnf.conf的文件。
# vi /etc/yum.conf 或者 # vi /etc/dnf/dnf.conf
使用exclude关键字在文件底部添加以下行,如下所示。
[main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1
[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=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
## Exclude following Packages Updates ##
exclude=httpd php mysql
在上面的例子中,排除行将禁用“ httpd ”“ php ”和“ mysql ”包的更新。接下来使用YUM命令安装或更新其中之一,如下所示。
# yum update httpd 或者 # dnf update httpd
样本输出如下
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.01link.hk * extras: centos.01link.hk * updates: mirrors.hns.net.in base | 3.7 kB 00:00 extras | 3.0 kB 00:00 updates | 3.5 kB 00:00 updates/primary_db | 2.7 MB 00:16 Setting up Update Process No Packages marked for Update
如何从EPEL Repo中排除包
要从EPEL存储库中排除软件包安装或更新,请打开名为/etc/yum.repos.d/epel.repo的文件。
# vi /etc/yum.repos.d/epel.repo
通过指定要从更新中排除的包来添加排除行。
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 ## Exclude following Packages Updates ## exclude=perl php python
现在尝试使用yum/dnf命令从EPEL存储库更新上面指定的文件,如下所示。
# dnf update perl php python 或者 # yum update perl php python
样本输出如下
Last metadata expiration check: 0:00:37 ago on Wednesday 17 November 2021 03:41:28 AM EST. Package perl available, but not installed. No match for argument: perl No match for argument: php No match for argument: python Error: No packages marked for upgrade.
此外,你还可以使用yum/dnf命令行选项来排除包,而无需将它们添加到存储库文件中。
# yum --exclude=httpd update 或者 # dnf --exclude=httpd update
要排除软件包列表,请使用以下命令。
# yum --exclude=mysql\* --exclude=httpd\* update 或者 # dnf --exclude=mysql\* --exclude=httpd\* update
通过以上这种方式,你可以排除所需的任何软件包的更新。当然,还有很多其它方法可以做到以上的效果,本文就不在赘述了。