error: failed to commit transaction (conflicting files) / package: /usr/lib/file exists in filesystem
#Что означает ошибка
Pacman перед установкой проверяет, не перезапишет ли пакет файлы, которых он не знает. Сообщение вида package: /путь/файл exists in filesystem говорит, что такой файл уже есть, но не числится ни за одним установленным пакетом. Причины: файл остался после ручной установки (make install, скрипты), пакет удалён с ошибками, файл создан приложением, либо два пакета претендуют на один путь. Если же в сообщении названы два пакета, это конфликт между ними, и решать надо иначе — удалением одного из них.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Файл от ручной установкиСтавили из исходников в /usr. | pacman -Qo не находит владельца. | Удалите или переименуйте и ставьте пакет. |
Каталог .pacnew и остаткиПрерванное обновление. | Файл остался от прошлой установки. | Сделайте копию и удалите. |
| Конфликт двух пакетовОба поставляют один файл. | Сообщение называет два пакета. | Удалите один (sudo pacman -R) или найдите замену. |
| Недокачанное обновлениеПрервано питание или сеть. | Блокировка db.lck. | Убедитесь, что pacman не запущен, затем удалите /var/lib/pacman/db.lck. |
| Пакет из AUR перекрывает официальныйПакеты из AUR поставляют те же файлы. | Конфликт при обновлении. | Обновите или удалите AUR-пакет. |
| Вмешательство в систему ранееКопирование файлов вручную. | Много конфликтов сразу. | Разберите по одному; не используйте глобальную перезапись. |
#Порядок действий
- Прочитайте сообщение полностьюВ Arch откройте «Терминал» и повторите
sudo pacman -Syu, записав точный текст конфликта (пути файлов и имя пакета). Перед изменениями сохраните пользовательские данные. Не применяйте--overwrite "*": сначала проверьте, был ли конфликтующий файл установлен вручную или другим пакетом. - Выясните владельца файлаПрочитайте полный путь файла в сообщении pacman. В терминале Arch Linux выполните
pacman -Qo /полный/путь/к/файлу, подставив фактический путь. Если pacman показывает владельца, файл принадлежит установленному пакету — не удаляйте его вручную. Если пишетNo package owns, изучите назначение файла и сравните с официальными новостями Arch о переходах пакетов. При необходимости сначала сохраните точечную копию файла. - Сначала прочитайте новостиНа https://archlinux.org/news/ бывают заметки о том, как вручную разрешить конфликты при крупных обновлениях.
- Сохраните файл и удалите егоТолько если
pacman -Qo /полный/путьподтверждает, что файл не принадлежит ни одному установленному пакету, установите его назначение. Если это ваша ручная копия, сохраните её в отдельном каталоге резервных копий (например, в домашней папке), а не стирайте. Не переименовывайте файлы библиотек в/usr/libбез понимания зависимости программ. - Повторите установку или обновлениеПосле того как выяснено, какому пакету принадлежит конфликтующий файл, откройте терминал Arch и выполните
sudo pacman -Syu— это полное обновление системы. Перед подтверждением прочитайте список пакетов и предупреждения о конфликтах. Если ошибкаexists in filesystemповторилась, не добавляйте--overwrite "*"и не удаляйте файл наугад: сохраните его путь, выполнитеpacman -Qoс реальным путём в кавычках и разберите конфликт согласно новости о соответствующем пакете на archlinux.org. - Если файл нужен и совпадает с пакетнымПараметр
--overwrite— крайняя мера по официальной рекомендации Arch, и шаблон должен совпадать только с одним проверенным путём; после выполнения обязательно проверьте целостность пакета и работу приложения. Если нет официальной рекомендации для конкретного пакета, остановитесь и выясните источник конфликта. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Для pacman -F сначала обновите базу файлов: sudo pacman -Fy.
#Типичные ситуации
Перед крупными обновлениями на Arch проверяйте новости, делайте копию важных конфигураций и обновляйте систему регулярно, а не раз в полгода: накопленные изменения чаще дают конфликты.