Назад | Перейти на главную страницу

Почему приоритет репозитория не работает в yum / dnf в Centos 8?

Я пытаюсь установить RPM MariaDB, предоставленный MariaDB, а не Centos. Поскольку DNF изначально поддерживает приоритет, это должно быть так же просто, как создание файла .repo, аналогичного следующему:

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

Однако, когда я перечисляю доступные пакеты, я ПОЛУЧАЮ пакеты из недавно введенного репозитория MariaDB, но приоритет = 1, похоже, игнорируется, и пакеты из CentOS AppStream с похожими (но разными регистрами) именами преобладают над ним.

sudo yum list |grep -i mariadb-server
MariaDB-server-debuginfo.x86_64                      10.4.12-1.el8                                     MariaDB         
mariadb-server.x86_64                                3:10.3.17-1.module_el8.1.0+257+48736ea6           AppStream       
mariadb-server-galera.x86_64                         3:10.3.17-1.module_el8.1.0+257+48736ea6           AppStream       
mariadb-server-utils.x86_64                          3:10.3.17-1.module_el8.1.0+257+48736ea6           AppStream 

Однако, если я отключу репозиторий AppStream в своей команде yum, он будет работать так, как должен (игнорируя недостающие зависимости от AppStream):

sudo yum list --disablerepo=AppStream |grep -i mariadb-server
Modular dependency problems:

 Problem 1: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBD-MySQL:4.046:8010020191114030811:073fa5fe-0.x86_64
 Problem 2: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64
MariaDB-server.x86_64                              10.4.12-1.el8                              MariaDB         
MariaDB-server-debuginfo.x86_64                    10.4.12-1.el8                              MariaDB       

Я что-то делаю не так, или это просто ошибка в DNF, возможно, из-за разных случаев, используемых Centos (mariadb-server) и MariaDB (MariaDB-server).

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

Чувствительность к регистру здесь не имеет большого значения, потому что оба пакета практически обеспечивают mariadb-server возможность (тот же случай).

Основная причина, по которой DNF хочет установить MariaDB из AppStream, заключается в том, что он предпочитает модульные пакеты. Это означает, что если определенные пакеты (имена) или виртуальные поставщики являются частью модуль, и есть пакеты с такими же именами, доступные из других репозиториев, и они не являются частью модуля, тогда DNF будет всегда хотите установить пакеты из модульного репозитория.

Здесь полезная команда, чтобы узнать, является ли конкретный пакет частью модуля:

sudo dnf module provides mariadb-server

Это найдет любые модули, у которых есть mariadb-server пакет.

В репозитории AppStream пакеты MariaDB имеют mariadb модуль.

Отключив AppStream, мы закрываем глаза на DNF, чтобы он не видел то, что ему нравится. Но лучший способ - научить его любить немодульные пакеты, добавив module_hotfixes=1 в интересующий репозиторий, например:

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

Обратите внимание, что конфигурация приоритета должна быть сохранена, потому что технически 3:10.3.17 (выше Epoch: 3) версия все еще побеждает 10.4.12 (Epoch: none, такой же как 0:10.4.12).