- Шпаргалка по работе с менеджером пакетов в CentOS
- Репозитории
- Примеры команд для управления репозиториями
- Обслуживание
- Настройка репозитория
- Установка, обновление, удаление и другое
- Просмотр информации о пакетах
- Управление потоками (модулями)
- Заблокировать установку и обновление пакетов
- 1. Во время обновления (разово)
- 2. Постоянный запрет в yum.conf
- 3. Настройка репозитория
- Возможные ошибки
- 1. Curl error (60): SSL peer certificate or SSH remote key was not OK
- 2. Error: GPG validation FAILED
Шпаргалка по работе с менеджером пакетов в CentOS
Обновлено: 15.05.2023 Опубликовано: 01.07.2021
Статья представляет из себя небольшую шпаргалку по работе с пакетным менеджером dnf (Rocky Linux, CentOS Stream 8) и yum (CentOS 7 и ниже). В данном руководстве мы будем использовать только команду yum, так как она работает и в CentOS 7, и в более поздних версиях RPM-дистрибутивах.
Репозитории
Команда yum/dnf использует репозитории для своей работы. Очень важно понять, как с ними работать в системе. Конфиги репозиториев CentOS описывают пути, по которым система может брать установочные файлы для пакетов, а также правила работы с самими репозиториями.
Примеры команд для управления репозиториями
2. Добавление репозитория командой. Для добавления репозитория мы можем воспользоваться командой yum-config-manager, для этого сначала нужно установить yum-utils:
Важно отметить, что утилита yum-config-manager не умеет задавать красивые имена для репозитория. Это приводит к эстетической и технической проблемам. Если эстетика никак не помешает работать, то вторая проблема серьезнее — рассмотрим ее подробнее. При подключении репозитория с длинным URL адресом мы получим ошибку:
Она означает, что название идентификатора превышает допустимую длину. В итоге, репозиторий не будет использоваться системой. Проблему можно решить обходным способом. Сначала мы добавим репозиторий с неправильным адресом, но коротким и красивым, например:
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:
[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-utils.
yum-config-manager —disable yum.mariadb.org_10.5_centos8-amd64
Разрешить репозиторий можно той же командой с опцией —enable:
yum-config-manager —enable yum.mariadb.org_10.5_centos8-amd64
Также мы можем выполнить настройку в конфигурационном файле, например:
* в данном примере 1 разрешает репозиторий, а 0 запрещает.
6. Настройка опций.
Наши репозитории настраиваются с помощью опций, которые перечислены в конфигурационном файле. Мы можем также их задавать командой:
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 all —disablerepo=»*» —enablerepo=»epel,nginx-thirdparty»
* обязательно, сначала должен следовать disablerepo, после enablerepo.
2. Сформировать кэш списков пакетов в репозиториях:
Настройка репозитория
В данном разделе приведем некоторые опции, с помощью которых можно настроить репозитории. Как было сказано выше, каждый репозиторий описывается в своем файле. В нем же мы можем задавать различные опции.
Предположим, что мы будем настраивать базовый репозиторий системы РЕД ОС. Тогда открываем:
Один из основных параметров. Определяет пути расположения метаданных репозитория. Именно по нему система будет искать служебный файл со списком пакетов.
* обратите внимание, что в данном примере прописано использование нескольких адресов, разделенных запятой. Также в адресе можно указывать переменные.
Указывает, нужно ли проверять подписи пакетов.
* в данном примере мы отключаем проверку.
Определяет приоритет репозитория. Например, один и тот же пакет будет находиться в нескольких репозиториях. Будет установлен тот, версия которого выше. Но если нам нужно установить пакеты из определенного репозитория, даже, если их версия ниже. Для этого и нужен приоритет.
Чем ниже число, тем выше приоритет. Если опция priority не указана, такой репозиторий будет иметь меньших приоритет, по сравнению с тем, где он указан.
Установка, обновление, удаление и другое
В данном разделе рассмотрим команды, при помощи которых мы можем манипулировать установкой, обновлением, удалением и понижением версии пакетов.
Команда выведет на экран все действия, которые будут предприняты — установка зависимостей, обновление других пакетов, и даже (в редких случаях), удаление конфликтов. Нам необходимо согласиться с данными действиями и начнется загрузка и установка.
2. Обновление всех установленных пакетов:
3. Обновление конкретного пакета
4. Установить пакет из определенного репозитория:
yum —disablerepo=»*» —enablerepo=thirdparty install nginx
* как говорилось выше, мы можем оперировать опциями disablerepo и enablerepo для включения и отключения репозитория во время установки. В данном примере мы запретили все и разрешили установить нужный нам пакет из репозитория thirdparty.
5. Понизить версию пакета можно с помощью команды downgrade:
Например, если в нашей системе установлен пакет nginx-1.15.3, мы сможем понизить его версию так:
* в данном примере будет удален пакет nginx-1.15.3 и установлен nginx-1.13.1.
Если нам нужно удалить пакет из системы, выполняем:
7. Только скачать пакет, не устанавливая его:
yum install —downloadonly —downloaddir=
yum install —downloadonly —downloaddir=/tmp nodejs
* скачиваем пакет nodejs в каталог /tmp.
8. Распаковать содержимое пакета RPM:
Просмотр информации о пакетах
1. Список установленных пакетов.
Если нам нужно найти пакет по части его имени, можно добавить фильтр с помощью grep:
yum list —installed | grep nginx
* в данном примере команда вернет результат, если в нашей системе установлен пакет, в названии которого есть nginx.
а) для установленного пакета:
* покажет, какие пакеты или библиотеки необходимы для установки nginx. Дополнительно, могут быть указаны пакеты, которые нужны для удовлетворения зависимостей.
Выполняется с помощью утилиты rpm с добавлением опции -p:
rpm -qp nginx-1.23.1-1.el7.ngx.x86_64.rpm —requires
3. Посмотреть список файлов внутри установочного пакета.
Мы можем посмотреть данный список для уже установленного пакета:
Или из установочного файла:
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.
Можно также выполнять поиск по маске:
5. Показать постинсталляционный скрипт.
После установки некоторых пакетов может запускаться набор команд, которые выполняют дополнительную настройку системы или установленного софта. Чтобы посмотреть, что именно будет выполняться, вводим команду:
6. Показать общую информацию о пакете.
а) для установочного файла:
б) для установленного пакета:
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
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 —installed
2. Вывести список возможных модулей для конкретного пакета:
* в данном примере для nodejs.
3. Разрешить или запретить конкретный модуль:
dnf module enable nodejs:12
dnf module disable nodejs:14
* первая команда разрешит модуль nodejs версии 12, вторая, соответственно, запрещает использование модуля nodejs версии 14.
Если мы хотим изменить активный модуль, необходимо сначала отключить текущий командой dnf module reset, например:
* если попробовать включить модуль без отключения активного мы увидим ошибку:
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 ‘ command. After you reset the module, you can install the other stream.
После включаем новый поток:
Заблокировать установку и обновление пакетов
В некоторых случаях, может возникнуть необходимость запретить установку и обновление определенных пакетов. Есть несколько способов это сделать.
1. Во время обновления (разово)
Данный метод можно использовать при обновлении пакетов. Мы с помощью ключа -x просто указываем через запятую те, которые не должны быть обновлены, например:
yum -x postgresql*,asterisk update
* данной командой мы обновим все пакеты, кроме asterisk и тех, название которых начинается на postgresql.
2. Постоянный запрет в yum.conf
Аналогично, можно запретить как установку, так и обновление в конфигурационном файле yum.conf. Открываем его командой:
* в данном примере мы также запретим установку и обновление asterisk, а также пакетов, название которых начинается на postgresql.
3. Настройка репозитория
Ну и также мы можем заблокировать установку и обновление через конфигурационный файл репозитория. Например:
* в данном примере мы блокируем пакет 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:
* данная опция задает необходимость проверки SSL для репозитория.
2. Error: GPG validation FAILED
Ошибка появляется при попытке установить пакет.
Причина: система не может загрузить и импортировать gpg-ключ. Это возможно в разных сценариях, например, в настройках репозитория не указан путь до него, но при этом указано, что проверка подписи необходима или ключ не удалось загрузить и импортировать.
Решение: для некоторых пакетов идет отдельная инструкция по настройке репозитория, в частности, установки ключа GPG. Или мы можем отключить проверку gpg командой:
yum-config-manager —save —setopt=.gpgcheck=0
Или через конфигурационный файл: