- Как заблокировать обновления пакетов и ядра в CentOS/Rocky Linux
- Предпосылки
- Способ 1 — навсегда отключить установку/обновление пакетов (с помощью yum.conf)
- Блокировать обновления ядра
- Способ 2 — временно отключить установку/обновление пакетов
- Способ 3 — использование репозитория (использование файлов .repo)
- Способ 4 — блокировка всего репозитория от обновления
- Блокировка репозиториев через их файл репо
- Способ 5 — Блокировка пакетов в определенной версии (с помощью плагина versionlock)
- Заключение
Как заблокировать обновления пакетов и ядра в CentOS/Rocky Linux
Менеджер пакетов, вероятно, самый полезный инструмент для пользователя Linux. Вы можете установить, обновить и удалить любое программное обеспечение/пакет из вашей системы Linux с помощью одной команды. Но иногда вам нужен детальный контроль над тем, какой пакет вы хотите установить или обновить, а какой пакет заблокировать от автоматического обновления. Почему вы хотите это сделать? Иногда вы обнаруживаете, что обновленная версия пакетов содержит ошибки. Вы не хотите, чтобы этот пакет обновлялся при следующем запуске sudo yum upgrade . И обновлять каждый пакет по отдельности очень сложно.
В этом руководстве мы расскажем, как заблокировать установку или обновление определенных пакетов и как заблокировать установку определенных версий пакетов или ядер.
Примечание. Через некоторое время легко забыть, какие пакеты у вас были, даже если их версии без ошибок вышли. Так что будьте начеку, так как длительное хранение пакетов может привести к проблемам с безопасностью.
Здесь мы обсудим пять методов. Все эти методы будут включать менеджер пакетов yum (обновление Yellow dog, Modified) и dnf (Dandified YUM).
Предпосылки
- Сервер с CentOS, Rocky Linux или Alma Linux. Для этого руководства использовался Rocky Linux 9, но приведенные здесь команды должны хорошо работать и с другими операционными системами, а также с более ранними выпусками.
- Пользователь без полномочий root с привилегиями 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, добавьте следующую строку в конец файла.
Если вы хотите остановить все пакеты nginx, вы можете использовать символ * .
Если вы хотите исключить более одного пакета, вы можете разделить их имена пробелом.
Заблокированный пакет останется в той же версии, даже если вы обновите свою систему. Это особенно полезно для сдерживания графических драйверов.
Попробуем установить заблокированный пакет 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 .
В этом методе есть важная оговорка. Хотя пакет не будет автоматически обновляться при использовании команды 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 .
Теперь попробуйте установить пакет certbot , доступный в репозитории Epel.
$ 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
Вы можете отключить несколько репозиториев, разделив их идентификаторы запятыми.
$ 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)
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 , чтобы заблокировать пакеты с помощью плагина 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.