如何在 CentOS/Rocky Linux 中阻止包和内核更新如何在 CentOS/Rocky Linux 中阻止包和内核更新如何在 CentOS/Rocky Linux 中阻止包和内核更新如何在 CentOS/Rocky Linux 中阻止包和内核更新
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 CentOS/Rocky Linux 中阻止包和内核更新

在此页

  1. 先决条件
  2. 方法 1 - 永久禁用包安装/更新(使用 yum.conf)
    1. 阻止内核更新

    1. 通过其回购文件阻止存储库

    包管理器可能是对 Linux 用户最有用的工具。您可以使用一条命令从您的 Linux 系统安装、升级和删除任何软件/软件包。但有时,您需要精细控制要安装或升级的包以及要阻止自动升级的包。你为什么想做这个?有时您会发现软件包更新版本有问题。您不希望下次运行 sudo yum upgrade 时升级该软件包。单独升级每个包很痛苦。

    在本教程中,我们将介绍如何阻止安装或升级某些包,以及如何阻止安装特定版本的包或内核。

    注意:一段时间后很容易忘记您持有的软件包,即使它们的无错误版本已经发布。因此,请保持警惕,因为长时间持有包裹会带来安全问题。

    我们将在这里讨论五种方法。所有这些方法都将涉及 yum (Yellow dog Updater, Modified) 和 dnf (Dandified YUM) 包管理器。

    先决条件

    • 装有 CentOS 或 Rocky Linux 或 Alma Linux 的服务器。本教程使用了 Rocky Linux 9,但此处的命令应该也适用于其他操作系统和旧版本。
    • 具有 sudo 权限的非根用户。

    方法 1 - 永久禁用包安装/更新(使用 yum.conf)

    要永久锁定软件包以防止安装、更新或删除,我们可以使用 /etc/yum.conf 或 /etc/dnf/dnf.conf 文件。

    它应该如下所示。

    [main]
    gpgcheck=1
    installonly_limit=3
    clean_requirements_on_remove=True
    best=True
    skip_if_unavailable=False
    

    如果要阻止安装、更新或删除软件包(例如 nginx),请在文件末尾附加以下行。

    exclude=nginx
    

    如果你想停止所有的 nginx 包,那么你可以使用 * 字符。

    exclude=nginx*
    

    如果要排除多个包,可以用空格分隔它们的名称。

    exclude=nginx php
    

    即使您升级系统,锁定的软件包也将保持相同的版本。这对于阻止图形驱动程序特别有用。

    让我们尝试安装被阻止的软件包 nginx。

    $ sudo dnf install nginx
    or
    $ sudo yum install nginx
    

    您将获得类似的输出。

    Last metadata expiration check: 0:00:21 ago on Mon 05 Dec 2022 10:42:01 AM UTC.
    All matches were filtered out by exclude filtering for argument: nginx
    Error: Unable to find a match: nginx
    

    您还可以在此处通过其架构来阻止软件包。例如,如果要阻止 32 位包,可以在 /etc/yum.conf 文件中输入以下行。

    exclude=*.i?86 *i686
    

    这种方法有一个重要的警告。虽然软件包不会在使用命令 sudo yum upgrade 或在升级系统时自动升级,但您仍然可以手动删除软件包。 sudo yum remove 仍然可以处理保留的包。

    此方法仅锁定它们以防止自动更改。除非您决定手动删除它们,否则无论如何保留它们将使它们保持当前版本。

    阻止内核更新

    要阻止内核更新,请使用以下命令。

    $ sudo dmf --exclude=kernel* update
    or
    $ sudo yum --exclude=kernel* update
    

    您可以在所有其他方法中使用 kernel* 作为包名称来阻止内核更新。

    方法 2 - 暂时禁用包安装/更新

    此方法涉及使用带有附加参数的 yum 命令。

    在更新任何包时,使用 -x 开关和您的命令来阻止您不想更新的特定包。

    $ sudo dnf -x nginx update
    or
    $ sudo yum -x nginx update
    

    上面的命令将更新系统上除 nginx 包之外的所有包。要使用单个命令阻止多个包,请多次使用 -x 开关。

    $ sudo dnf -x nginx -x php update
    or
    $ sudo yum -x nginx -x php update
    

    您也可以以相同的方式使用 --exclude 开关代替 -x。

    $ sudo dnf --exclude nginx, php
    or
    $ sudo yum --exclude nginx, php
    

    方法 3 - 使用存储库(使用 .repo 文件)

    如果您通过其存储库安装了一个包,那么还有另一种方法可以阻止它升级。这是通过编辑其 .repo 文件来完成的,您可以在 /etc/yum.repos.d 目录中找到该文件。

    假设您的系统添加了 Epel 存储库并且您不想从中安装 golang 包,您可以通过添加行 exclude=certbot 来阻止它 在 /etc/yum.repos.d/epel.repo 文件中,如图所示。

    [epel]
    name=Extra Packages for Enterprise Linux 8 - $basearch
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place its address here.
    #baseurl=https://download.example/pub/epel/8/Everything/$basearch
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
    enabled=1
    gpgcheck=1
    countme=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    exclude=certbot
    ...
    

    现在,尝试安装可通过 Epel 存储库获得的 certbot 包。

    $ sudo dnf install certbot
    or
    $ sudo yum install certbot
    

    您将获得类似的输出。

    Extra Packages for Enterprise Linux 8 - x86_64                                           20 kB/s | 4.5 kB     00:00
    All matches were filtered out by exclude filtering for argument: certbot
    Error: Unable to find a match: certbot
    

    方法 4 - 阻止整个存储库更新

    或者,您可以阻止更新整个存储库。

    首先,让我们检查我们系统上的所有存储库。

    $ dnf repolist
    or
    $ yum repolist
    

    您将获得类似的输出。

    repo id                                       repo name
    appstream                                     Rocky Linux 8 - AppStream
    baseos                                        Rocky Linux 8 - BaseOS
    digitalocean-agent                            DigitalOcean Agent
    docker-ce-stable                              Docker CE Stable - x86_64
    epel                                          Extra Packages for Enterprise Linux 8 - x86_64
    extras                                        Rocky Linux 8 - Extras
    nginx-stable                                  nginx stable repo
    

    要排除更新 Epel 存储库,请使用以下命令。

    $ sudo dnf update --disablerepo=epel
    or
    $ sudo yum update --disablerepo=epel
    

    您可以通过用逗号分隔它们的 ID 来禁用多个存储库。

    $ sudo dnf update --disablerepo=epel, extras
    or
    $ sudo yum update --disablerepo=epel, extras
    

    通过他们的回购文件阻止存储库

    还有另一种阻止存储库的方法,它涉及编辑特定的存储库文件。

    让我们打开 epel.repo 文件进行编辑。

    $ sudo nano /etc/yum.repos.d/epel.repo
    

    将 enabled 变量的值从 1 更改为 0。

    [epel]
    name=Extra Packages for Enterprise Linux 8 - $basearch
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place its address here.
    #baseurl=https://download.example/pub/epel/8/Everything/$basearch
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
    enabled=0
    gpgcheck=1
    countme=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    ...
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    现在,让我们尝试安装 certbot 包,它在 epel 存储库中可用。

    $ sudo dnf install certbot
    or
    $ sudo yum install certbot
    

    您将获得类似的输出。

    Last metadata expiration check: 0:02:10 ago on Mon 05 Dec 2022 10:48:31 AM UTC.
    No match for argument: certbot
    Error: Unable to find a match: certbot
    

    方法 5 - 阻止特定版本的包(使用版本锁插件)

    Versionlock 是 Yum 包管理器的插件。此插件不允许将软件包升级到比执行锁定时安装的版本更高的版本。

    首先,安装版本锁。

    $ sudo dnf install dnf-plugin-versionlock
    or
    $ sudo yum install dnf-plugin-versionlock
    

    这还将在您的系统上创建一个文件 /etc/yum/pluginconf.d/versionlock.list。

    要锁定系统上安装的当前版本的 mariadb-server,请运行以下命令。

    $ sudo dnf versionlock mariadb-server
    or
    $ sudo yum versionlock mariadb-server
    

    您将获得类似的输出。

    Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Adding versionlock on: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    

    您可以一次添加多个包。

    $ sudo dnf versionlock evolution golang
    or
    $ sudo yum versionlock evolution golang
    

    您将获得类似的输出。

    Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Adding versionlock on: evolution-0:3.28.5-18.el8.*
    Adding versionlock on: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*
    

    让我们尝试更新 mariadb-server 包。

    $ sudo dnf update mariadb-server
    or
    $ sudo yum update mariadb-server
    

    您将获得类似的输出。

    Last metadata expiration check: 0:02:07 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Package mariadb-server available, but not installed.
    No match for argument: mariadb-server
    Error: No packages marked for upgrade.
    

    要通过 versionlock 插件检查被阻止的包列表,请使用以下命令。

    $ dnf versionlock list
    or
    $ yum versionlock list
    

    您将获得类似的输出。

    Last metadata expiration check: 0:00:05 ago on Wed 07 Dec 2022 02:36:20 AM UTC.
    elasticsearch-7.17.5-1.x86_64
    mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    evolution-0:3.28.5-18.el8.*
    golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*
    

    要从版本锁中删除包,请使用以下命令。

    $ sudo dnf versionlock delete mariadb-server
    or
    $ sudo yum versionlock delete mariadb-server
    

    您将获得以下输出。

    Deleting versionlock for: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    

    要丢弃列表并清除块,请使用以下命令。

    $ sudo dnf versionlock clear
    or
    $ sudo yum versionlock clear
    

    或者,您可以编辑文件 /etc/yum/pluginconf.d/versionlock.list 以阻止使用版本锁插件的包。

    要将已安装的包添加到文件中,请使用以下命令。

    $ sudo sh -c 'rpm -qa | grep evolution >> /etc/yum/pluginconf.d/versionlock.list'
    

    上面的命令通过将 evolution 包添加到列表来阻止它。我们使用了 rpm -qa | grep evolution 获取完整的包名。和

    sudo sh -c 命令运行一个 sudo shell,在该 shell 下运行写入文件的命令。

    结论

    这就是本教程的内容。您现在应该能够阻止您不想在 CentOS 或 Rocky Linux 系统上安装或升级的任何特定版本的软件包。

©2015-2025 艾丽卡 support@alaica.com