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.
Get new posts in your inbox
No spam. Unsubscribe anytime.