#Что означает ошибка
Error: Transaction test error: file ... conflicts between attempted installs
Ошибка dnf package X conflicts with Y provided by Z или Problem: ... conflicting requests означает, что устанавливаемый или обновляемый пакет несовместим с уже установленным: они поставляют один и тот же файл или явно объявлены конфликтующими. Типично для смены версий PHP/Python/MariaDB и подключённых модулей.
Прочитайте, какие именно пакеты конфликтуют, и решите, какой оставить.
Принудительная установка небезопасна.
Конфликт возникает, когда два пакета содержат один и тот же файл либо зависимости несовместимы. Часто помогают очистка кэша и синхронизация с dnf distro-sync.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Смешанные репозитории | Разные версии. | Отключите лишние. |
| Остатки старых версий | Устаревшие пакеты. | Удалите. |
| Повреждён кэш | Метаданные. | Очистите. |
| Конфликт сторонних пакетов | Другие репозитории. | Используйте один. |
#Пошаговое решение
- Прочитайте пары конфликтующих пакетовВнимательно прочитайте весь вывод
sudo dnf updateи выпишите названия двух конфликтующих пакетов, их версии и репозитории. Часто один пакет принадлежит внешнему репозиторию или другой ветке дистрибутива. Выполнитеdnf info ИМЯ_ПАКЕТАдля каждого из реальных имён и сравните «From repo»/«Repository». До выяснения не используйте--allowerasingиrpm --force: они могут удалить нужный пакет или переписать чужой файл. - Просмотрите план без выполненияДля просмотра возможных изменений без выполнения воспользуйтесь
sudo dnf upgrade --assumeno: команда показывает план и отвечает отказом на подтверждение; на поддерживаемых выпусках также можно проверить--downloadonlyлишь после сверки параметров версии. Если план содержит удаление критических библиотек, ядра или панели управления сервером, отмените операцию. Сохраните имена пакетов и названия репозиториев, чтобы исправить источник конфликта. - Найдите владельца файлаСкопируйте путь конфликтующего файла из сообщения DNF. В терминале Fedora/RHEL-совместимой системы выполните
rpm -qf "/реальный/путь", подставив настоящий путь и сохранив кавычки. Если файл отсутствует и DNF сообщает о конфликте пакетов, выполнитеdnf repoquery --whatprovides "/имя/файла"(при наличии соответствующего средства) и изучите список. Не удаляйте файл, пока не установлены его владелец, необходимость и резервная копия конфигурации. - Замените пакет или сбросьте модульСначала выполните пробный запуск
sudo dnf install ИМЯ_ПАКЕТА --assumenoс настоящим названием из ошибки. Если DNF предлагает заменить библиотеку или удалить другое приложение, оцените последствия;dnf swapиdnf module resetне равнозначны и требуют знания имени модуля. Применяйте только после проверки совместимости репозитория и сохранения резервной копии. - Выполните distro-sync
distro-syncвыравнивает версии установленных пакетов с выбранными репозиториями и иногда понижает версии, поэтому не запускайте его без просмотра плана. Сначала выполнитеsudo dnf distro-sync --assumenoи изучите список изменений. На рабочем сервере создайте снимок/копию и запланируйте окно обслуживания. Применяйтеsudo dnf distro-syncтолько если источники пакетов проверены и план безопасен; после операции проверьте работу критических служб. - Очистка кэша dnfLinux · Терминал (Bash)КомандаНужен sudoОчистка кэша dnf.
sudo dnf clean all
#Диагностика
Выполните команду с подробностями: sudo dnf install пакет --allowerasing --assumeno (покажет, что будет удалено, без выполнения). Выясните, кто поставляет файл: dnf provides /путь/к/файлу. Посмотрите установленное: rpm -qa | grep имя. Проверьте репозитории и модули: dnf repolist, dnf module list. Конфликты часто возникают из-за смешивания EPEL/Remi/AppStream.
#Решение
Замените конфликтующий пакет: sudo dnf swap старый новый или sudo dnf install новый --allowerasing (после проверки списка удаляемых). Переключите поток модуля: sudo dnf module reset php && sudo dnf module enable php:remi-8.3. Обновите весь набор: sudo dnf distro-sync. Удалите дубликаты версий: sudo dnf remove $(dnf repoquery --duplicates --latest-limit=-1 -q) (проверьте список). Исправьте приоритеты репозиториев: priority= в .repo.
#Если не получается
Попробуйте sudo dnf update --best --allowerasing. Очистите кэш: sudo dnf clean all && sudo dnf makecache. Проверьте консистентность: sudo dnf check и sudo rpm -Va --nofiles. Для проблемных сторонних репозиториев временно отключите: --disablerepo=имя. Не используйте rpm --force --nodeps: можно сломать систему. В продакшене сначала проверьте изменения на копии или в снимке виртуальной машины.
sudo dnf install пакет --allowerasing --assumenodnf provides /usr/bin/файлsudo dnf module listsudo dnf distro-syncКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.