Я пытаюсь установить 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
).