Шпаргалка по работе с менеджером пакетов в CentOS

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

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

Репозитории

Команда 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 будет добавлен репозиторий.

Важно отметить, что утилита yum-config-manager не умеет задавать красивые имена для репозитория. Это приводит к эстетической и технической проблемам.  Если эстетика никак не помешает работать, то вторая проблема серьезнее — рассмотрим ее подробнее.

При подключении репозитория с длинным URL адресом мы получим ошибку:

Bad id for repo: <имя репозитория>, byte = $ 42

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

Проблему можно решить обходным способом. Сначала мы добавим репозиторий с неправильным адресом, но коротким и красивым, например:

yum-config-manager --add-repo http://repo-name

Потом уже зададим правильный URL с помощью setopt (о нем рассказано ниже):

yum-config-manager --save --setopt=repo-name.baseurl=https://yum.mariadb.org/10.5/centos8-amd64/yum/redhat/\$releasever/mariadb/1.7/x86_64

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

Находим:

enabled=1

... и меняем на:

enabled=0

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

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

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

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

Например:

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

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

yum-config-manager --save --setopt=mirror-yandex.gpgcheck=1

yum-config-manager --save --setopt=mirror-yandex.gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

* в данном примере мы указываем на необходимость проверки gpg-ключа (gpgcheck) и путь до него (gpgkey). Само собой, по данному пути (/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7) у нас должен быть загружен сам ключ.

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

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

yum clean --enablerepo=* all

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

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

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

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

yum makecache

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

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

Предположим, что мы будем настраивать базовый репозиторий системы РЕД ОС. Тогда открываем:

vi /etc/yum.repos.d/RedOS-Base.repo

1. baseurl

Один из основных параметров. Определяет пути расположения метаданных репозитория. Именно по нему система будет искать служебный файл со списком пакетов.

baseurl=https://repo1.red-soft.ru/redos/7.3/$basearch/os,https://mirror.yandex.ru/redos/7.3/$basearch/os,http://repo.red-soft.ru/redos/7.3/$basearch/os

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

2. gpgcheck

Указывает, нужно ли проверять подписи пакетов.

gpgcheck=0

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

3. priority

Определяет приоритет репозитория. Например, один и тот же пакет будет находиться в нескольких репозиториях. Будет установлен тот, версия которого выше. Но если нам нужно установить пакеты из определенного репозитория, даже, если их версия ниже. Для этого и нужен приоритет.

priority=1

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

Установка, обновление, удаление и другое

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

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

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

Команда выведет на экран все действия, которые будут предприняты — установка зависимостей, обновление других пакетов, и даже (в редких случаях), удаление конфликтов. Нам необходимо согласиться с данными действиями и начнется загрузка и установка.

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

yum update

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

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

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

yum --disablerepo="*" --enablerepo=thirdparty install nginx

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

5. Понизить версию пакета можно с помощью команды downgrade:

yum downgrade <имя пакета и версию, которые нужно установить>

Например, если в нашей системе установлен пакет nginx-1.15.3, мы сможем понизить его версию так:

yum downgrade nginx-1.13.1

* в данном примере будет удален пакет nginx-1.15.3 и установлен nginx-1.13.1.

6. Удаление пакета.

Если нам нужно удалить пакет из системы, выполняем:

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

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

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

Например:

yum install --downloadonly --downloaddir=/tmp nodejs

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

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

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

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

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

а) для Rocky Linux:

yum list --installed

б) для CentOS 7:

rpm -qa

Если нам нужно найти пакет по части его имени, можно добавить фильтр с помощью grep:

yum list --installed | grep nginx

rpm -qa | grep nginx

* в данном примере команда вернет результат, если в нашей системе установлен пакет, в названии которого есть nginx.

2. Получение зависимостей.

а) для установленного пакета:

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

Или с помощью rpm:

rpm -q httpd --requires

Например:

yum deplist nginx

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

б) из установочного файла.

Выполняется с помощью утилиты rpm с добавлением опции -p:

rpm -qp <путь до пакета> --requires

Например:

rpm -qp nginx-1.23.1-1.el7.ngx.x86_64.rpm --requires

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-*

5. Показать постинсталляционный скрипт.

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

rpm -qp --scripts <путь до RPM-файла>

6. Показать общую информацию о пакете.

а) для установочного файла:

rpm -qip <путь до RPM-файла>

б) для установленного пакета:

rpm -qi <имя пакета>

Например:

rpm -qi libcurl-devel

Name        : libcurl-devel
Version     : 7.29.0
Release     : 59.el7_9.1
Architecture: x86_64
Install Date: Mon 01 Aug 2022 02:02:29 PM MSK
Group       : Development/Libraries
Size        : 638991
License     : MIT
Signature   : RSA/SHA256, Wed 18 Nov 2020 05:18:23 PM MSK, Key ID 24c6a8a7f4a80eb5
Source RPM  : curl-7.29.0-59.el7_9.1.src.rpm
Build Date  : Mon 16 Nov 2020 07:36:11 PM MSK
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://curl.haxx.se/
Summary     : Files needed for building applications with libcurl
Description :
The libcurl-devel package includes header files and libraries necessary for
developing programs which use the libcurl library. It contains the API
documentation of the library, too.

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

Модульные репозитории позволяют установить пакеты разных версий. По сути, это группы 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

# Ubuntu # Безопасность # Серверы # Сети
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет