Как работать с менеджером пакетов dnf/yum в операционной системе Linux CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Статья представляет из себя небольшую шпаргалку по работе с пакетным менеджером dnf (CentOS 8) и yum (CentOS 7 и ниже). В данном руководстве мы будем использовать только команду yum, так как она работает и в CentOS 7 и в 8.

Репозитории

Команда yum/dnf использует репозитории для своей работы. Очень важно понять, как с ними работать в системе. Конфиги репозиториев CentOS описывают пути, по которым система может брать установочные файлы для пакетов, а также правила работы с самими репозиториями.

Примеры команд для управления репозиториями

1. Просмотр репозиториев.

Список включенных репозиториев:

yum repolist

Список включенных и отключенных репозиториев:

yum repolist all

Также мы можем получить подробное описание для каждого включенного репозитория:

yum repolist -v

Список отключенных репозиториев можно посмотреть отдельно командой:

yum repolist disabled

2. Добавление репозитория командой.

Для добавления репозитория мы можем воспользоваться командой yum-config-manager, для этого сначала нужно установить yum-utils:

yum install yum-utils

Теперь вводим:

yum-config-manager —add-repo <репозиторий>

Например:

yum-config-manager —add-repo https://yum.mariadb.org/10.5/centos8-amd64 

* на основе ссылки https://yum.mariadb.org/10.5/centos8-amd64 будет добавлен репозиторий.

3. Добавление репозитория через файл.

Также мы можем создать конфигурационный файл с описанием репозитория. Все файлы находятся в каталоге /etc/yum.repos.d. Например, создадим файл с добавлением репозитория mariadb:

vi /etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1

* где:

  • name — произвольное имя репозитория.
  • baseurl — путь, по которому система может забирать пакеты из репозитория.
  • gpgkey — путь до открытого gpg-ключа. Нужен для проверки цифровой подписи пакетов.
  • gpgcheck — нужно ли проверять цифровую подпись пакетов.
  • enabled — опция включает или выключает репозиторий.

4. Временное включение и отключение репозиториев во время операций (на примере репозитория EPEL).

Отключить во время обновления:

yum update —disablerepo=epel

Включить во время обновления:

yum update —enablerepo=epel

Отключить во время установки:

yum install —disablerepo=epel

Включить во время установки:

yum install —enablerepo=epel

5. Постоянное отключение/включение репозиториев.

Мы можем отключить наш репозиторий командой:

yum-config-manager —disable <имя репозитория>

* для выполнения данной команды мы должны установить в систему пакет yum-utils.

Например:

yum-config-manager —disable yum.mariadb.org_10.5_centos8-amd64

Разрешить репозиторий можно той же командой с опцией —enable:

yum-config-manager —enable yum.mariadb.org_10.5_centos8-amd64

Также мы можем выполнить настройку в конфигурационном файле, например:

vi /etc/yum.repos.d/mariadb.repo

Находим:

… и меняем на:

* в данном примере 1 разрешает репозиторий, а 0 запрещает.

6. Настройка опций.

Наши репозитории настраиваются с помощью опций, которые перечислены в конфигурационном файле. Мы можем также их задавать командой:

yum-config-manager —save —setopt=<имя репозитория>.<имя опции>=<значение>

Например:

yum-config-manager —save —setopt=mariadb.module_hotfixes=1

Обслуживание

1. Удалить кэш для списков пакетов в репозиториях, а также загруженные исходники для пакетов:

yum clean —enablerepo=* all

Также мы можем удалить кэш только для определенных репозиториев, например:

yum clean all —disablerepo=»*» —enablerepo=»epel,nginx-thirdparty»

* обязательно, сначала должен следовать disablerepo, после enablerepo.

2. Сформировать кэш списков пакетов в репозиториях:

yum makecache

Установка, обновление и получение информации о пакетах

1. Установка пакета:

yum install <имя пакета>

2. Обновление всех установленных пакетов:

yum update

3. Обнолвение конкретного пакета

yum update <имя пакета>

4. Установить пакет из определенного репозитория:

yum —disablerepo=»*» —enablerepo=thirdparty install nginx

* как говорилось выше, мы можем оперировать опциями disablerepo и enablerepo для включения и отключения репозитория во время установки. В данном примере мы запретили все и разрешили установить нужный нам пакет из репозитория thirdparty.

5. Только скачать пакет, не устанавливая его:

yum install —downloadonly —downloaddir=<куда скачать> <имя пакета>

Например:

yum install —downloadonly —downloaddir=/tmp nodejs

* скачиваем пакет nodejs в каталог /tmp.

6. Распаковать содержимое пакета RPM:

rpm2cpio <путь до файла rpm> | cpio -idmv

Просмотр информации о пакетах

1. Список установленных пакетов:

yum list —installed

2. Получение зависимостей для пакета:

yum deplist <имя пакета>

Например:

yum deplist nginx

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

3. Посмотреть список файлов внутри установочного пакета.

Мы можем посмотреть данный список для уже установленного пакета:

rpm -ql <имя установленного пакета>

Например:

rpm -ql nginx

Или из установочного файла:

rpm -qlp <путь до RPM-пакета>

Например:

rpm -qlp nginx.rpm

4. Посмотреть, какой пакет предоставляет определенный файл:

yum provides audit-libs-python

В данном примере мы получим ответ:

audit-libs-python-2.8.5-4.el7.x86_64 : Python bindings for libaudit
Repo        : base

Это значит, что audit-libs-python содержится в пакете audit-libs-python-2.8.5-4.el7.x86_64, который в свою очередь, находится в репозитории base.

Можно также выполнять поиск по маске:

yum provides audit-libs-*

Управление потоками (модулями)

Модульные репозитории позволяют установить пакеты разных версий. По сути, это группы RPM-пакетов, которые должны быть установлены вместе и представляют из себя логическую единицу для установки программного продукта нужной версии. Включить можно только одну версию модуля для репозитория.

1. Вывести список доступных модулей:

dnf module list

* обозначения:

  • [d] — значения по умолчанию.
  • [e] — включенные модули.
  • [x] — отключены.
  • [i] — установленные.

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

Мы также можем посмотреть отдельные по состоянию группы модулей:

dnf module list —enabled

* включенные.

dnf module list —disabled

* отключенные.

dnf module list —installed

* установленные.

2. Вывести список возможных модулей для конкретного пакета:

dnf module list nodejs

* в данном примере для nodejs.

3. Разрешить или запретить конкретный модуль:

dnf module enable nodejs:12

dnf module disable nodejs:14

* первая команда разрешит модуль nodejs версии 12, вторая, соответственно, запрещает использование модуля nodejs версии 14.

4. Переключение модуля.

Если мы хотим изменить активный модуль, необходимо сначала отключить текущий командой dnf module reset, например:

dnf module reset php:7.3

* если попробовать включить модуль без отключения активного мы увидим ошибку:
Error: It is not possible to switch enabled streams of a module.
It is recommended to remove all installed content from the module, and reset the module using ‘dnf module reset <module_name>’ command. After you reset the module, you can install the other stream.

После включаем новый поток:

dnf module enable php:7.4

Заблокировать установку и обновление пакетов

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

1. Во время обновления (разово)

Данный метод можно использовать при обновлении пакетов. Мы с помощью ключа -x просто указываем через запятую те, которые не должны быть обновлены, например:

yum -x postgresql*,asterisk update

* данной командой мы обновим все пакеты, кроме asterisk и тех, название которых начинается на postgresql.

2. Постоянный запрет в yum.conf

Аналогично, можно запретить как установку, так и обновление в конфигурационном файле yum.conf. Открываем его командой:

vi /etc/yum.conf

Добавляем:

exclude=postgresql* asterisk

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

3. Настройка репозитория

Ну и также мы можем заблокировать установку и обновление через конфигурационный файл репозитория. Например:

vi /etc/yum.repos.d/pgdg-redhat-all.repo

И добавим:

[pgdg12]

exclude=postgresql12*

* в данном примере мы блокируем пакет postgresql12.

Возможные ошибки

Рассмотрим примеры ошибок, с которыми мы можем столкнуться и способы их решения.

1. Curl error (60): SSL peer certificate or SSH remote key was not OK

Ошибка появляется при попытке выполнить операцию обновления или установки пакетов.

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

Решение: проблему можно решить на стороне сервера (если мы являемся его администратором), например, получив правильный сертификат у Let’s Encrypt. На стороне клиента можно отключить проверку SSL для репозитория командой:

yum-config-manager —save —setopt=<имя репозитория>.sslverify=0

Или в конфигурационном файле репозитория добавить или изменить строку с sslverify:

sslverify=0

* данная опция задает необходимость проверки SSL для репозитория.

2. Error: GPG validation FAILED

Ошибка появляется при попытке установить пакет.

Причина: система не может загрузить и импортировать gpg-ключ. Это возможно в разных сценариях, например, в настройках репозитория не указан путь до него, но при этом указано, что проверка подписи необходима или ключ не удалось загрузить и импортировать.

Решение: для некоторых пакетов идет отдельная инструкция по настройке репозитория, в частности, установки ключа GPG. Или мы можем отключить проверку gpg командой:

yum-config-manager —save —setopt=<имя репозитория>.gpgcheck=0

Или через конфигурационный файл:

gpgcheck=0