Запретить обновление ядра linux

Как заблокировать обновления пакетов и ядра в 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, вы можете использовать символ * .

Если вы хотите исключить более одного пакета, вы можете разделить их имена пробелом.

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

Читайте также:  Linux var lib directory

Попробуем установить заблокированный пакет 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 — блокировка всего репозитория от обновления

Кроме того, вы можете заблокировать обновление всего репозитория.

Читайте также:  Linux file execute permissions

Во-первых, давайте проверим все репозитории в нашей системе.

$ 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. Этот плагин не позволяет обновлять пакеты до версии выше той, которая была установлена на момент выполнения блокировки.

Читайте также:  Включить в линуксе ssh

Во-первых, установите блокировку версии.

$ 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.

Источник

Оцените статью
Adblock
detector