Linux управление · 7 min read · Dec 01, 2025

Как заблокировать обновления пакетов и ядра в CentOS / Rocky Linux

Менеджер пакетов, вероятно, является самым полезным инструментом для пользователя 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
или
$ sudo yum install nginx

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:00:21 назад в Пн 05 Дек 2022 10:42:01 AM UTC.
Все совпадения были отфильтрованы исключающей фильтрацией для аргумента: nginx
Ошибка: Невозможно найти совпадение: nginx

Вы также можете блокировать пакеты по их архитектуре здесь. Например, если вы хотите заблокировать 32-битные пакеты, вы можете ввести следующую строку в файл /etc/yum.conf.

exclude=*.i?86 *i686

Существует важное предостережение с этим методом. Хотя пакет не будет автоматически обновлен при использовании команды sudo yum upgrade или при обновлении системы, вы все равно можете удалить пакет вручную. sudo yum remove все равно будет работать с заблокированными пакетами.

Этот метод только блокирует их от автоматических изменений. Удержание их на месте сохранит их на текущих версиях, независимо от того, что произойдет, если вы не решите удалить их вручную.

Блокировка обновлений ядра

Чтобы заблокировать обновление ядра, используйте следующую команду.

$ sudo dmf --exclude=kernel* update
или
$ sudo yum --exclude=kernel* update

Вы можете использовать kernel* в качестве имени пакета во всех других методах, чтобы блокировать обновления ядра.

Метод 2 - Временно отключить установку/обновления пакетов

Этот метод включает использование команды yum с дополнительным параметром.

Во время обновления любого пакета используйте переключатель -x с вашей командой, чтобы заблокировать конкретные пакеты, которые вы не хотите обновлять.

$ sudo dnf -x nginx update
или
$ sudo yum -x nginx update

Вышеуказанная команда обновит все пакеты, кроме пакета nginx в вашей системе. Чтобы заблокировать несколько пакетов одной командой, используйте переключатель -x несколько раз.

$ sudo dnf -x nginx -x php update
или
$ sudo yum -x nginx -x php update

Вы также можете использовать переключатель –exclude вместо -x тем же образом.

$ sudo dnf --exclude nginx, php
или
$ 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
# Использовать металинк гораздо безопаснее, но если вы хотите использовать локальное зеркало
# поместите его адрес сюда.
#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
...

Теперь попробуйте установить пакет certbot, который доступен через репозиторий Epel.

$ sudo dnf install certbot
или
$ sudo yum install certbot

Вы получите аналогичный вывод.

Дополнительные пакеты для корпоративного Linux 8 - x86_64                                           20 kB/s | 4.5 kB     00:00
Все совпадения были отфильтрованы исключающей фильтрацией для аргумента: certbot
Ошибка: Невозможно найти совпадение: certbot

Метод 4 - Блокировка целого репозитория от обновления

В качестве альтернативы вы можете заблокировать целый репозиторий от обновления.

Сначала давайте проверим все репозитории на нашей системе.

$ dnf repolist
или
$ 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
или
$ sudo yum update --disablerepo=epel

Вы можете отключить несколько репозиториев, разделив их идентификаторы запятыми.

$ sudo dnf update --disablerepo=epel, extras
или
$ 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
# Использовать металинк гораздо безопаснее, но если вы хотите использовать локальное зеркало
# поместите его адрес сюда.
#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
или
$ sudo yum install certbot

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:02:10 назад в Пн 05 Дек 2022 10:48:31 AM UTC.
Нет совпадений для аргумента: certbot
Ошибка: Невозможно найти совпадение: certbot

Метод 5 - Блокировка пакетов на определенной версии (Используя плагин versionlock)

Versionlock - это плагин для менеджера пакетов Yum. Этот плагин не позволяет пакетам обновляться до версии, превышающей ту, которая была установлена на момент блокировки.

Сначала установите versionlock.

$ sudo dnf install dnf-plugin-versionlock
или
$ sudo yum install dnf-plugin-versionlock

Это также создаст файл /etc/yum/pluginconf.d/versionlock.list на вашей системе.

Чтобы заблокировать текущую версию mariadb-server, установленную на вашей системе, выполните следующую команду.

$ sudo dnf versionlock mariadb-server
или
$ sudo yum versionlock mariadb-server

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:01:05 назад в Пн 05 Дек 2022 12:14:16 PM UTC.
Добавление блокировки версии на: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

Вы можете добавить несколько пакетов сразу.

$ sudo dnf versionlock evolution golang
или
$ sudo yum versionlock evolution golang

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:01:05 назад в Пн 05 Дек 2022 12:14:16 PM UTC.
Добавление блокировки версии на: evolution-0:3.28.5-18.el8.*
Добавление блокировки версии на: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*

Давайте попробуем обновить пакет mariadb-server.

$ sudo dnf update mariadb-server
или
$ sudo yum update mariadb-server

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:02:07 назад в Пн 05 Дек 2022 12:14:16 PM UTC.
Пакет mariadb-server доступен, но не установлен.
Нет совпадений для аргумента: mariadb-server
Ошибка: Нет пакетов, помеченных для обновления.

Чтобы проверить список заблокированных пакетов через плагин versionlock, используйте следующую команду.

$ dnf versionlock list
или
$ yum versionlock list

Вы получите аналогичный вывод.

Последняя проверка истечения метаданных: 0:00:05 назад в Ср 07 Дек 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
или
$ sudo yum versionlock delete mariadb-server

Вы получите следующий вывод.

Удаление блокировки версии для: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

Чтобы отменить список и очистить блокировки, используйте следующую команду.

$ sudo dnf versionlock clear
или
$ sudo yum versionlock clear

В качестве альтернативы вы можете отредактировать файл /etc/yum/pluginconf.d/versionlock.list, чтобы блокировать пакеты с помощью плагина versionlock.

Чтобы добавить установленный пакет в файл, используйте следующую команду.

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

Вышеуказанная команда блокирует пакет evolution, добавляя его в список. Мы использовали rpm -qa | grep evolution, чтобы получить полное имя пакета. А команда sudo sh -c запускает оболочку sudo, в которой выполняются команды для записи в файл.

Заключение

На этом все для этого руководства. Теперь вы должны уметь блокировать любые конкретные версии любых пакетов, которые вы не хотите устанавливать или обновлять в вашей системе CentOS или Rocky Linux.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.