Если вы обновляете или устанавливаете новый пакет, то если в файловой системе уже присутствуют файлы, включённые в этот пакет, то операция обновления/установки обрывается и выводятся файлы, которые уже присутствуют в системе. В моей практике причинами обычно являются пакеты, установленные с помощью pip и те же самые пакеты, которые пытаются установить с помощью pacman — в этом случае файлы пакетов уже существуют и установка невозможна.
Кстати, в этом случае точно не нужно использовать опцию --force, а нужно удалить мешающий пакет командой вида:
pip uninstall ПАКЕТ
Раньше в pacman была опция --force — если указать её вместе с командой установки/обновления, то она перезаписывала уже существующие в системе файлы.
Бывают ситуации, когда это действительно необходимо. Но сопроводители дистрибутива посчитали, что от опции --force только вред. И убрали её. На её смену пришла опция --overwrite <ПУТЬ>. Она перезаписывает конфликтующие файлы (может быть использовано неоднократно).
То есть по задумке авторов она должна использоваться с каждым файлом отдельно, чтобы мы чётко представляли что именно перезаписываем.
Я столкнулся с ситуацией, что моя ОС перестала загружаться. Я попытался удалить GNOME Display Manager и выяснилось, что этот пакет считается НЕ УСТАНОВЛЕННЫМ. Следовательно, он не мог быть обновлён, а также некоторые его зависимости были удалены как осиротевшие. То есть система не загружается явно из-за GDM, самый простой способ исправить — полностью удалить и сделать чистую установку. Но pacman не удаляет GDM, поскольку не считает его установленным. Но зато при попытке установить пакет gdm, pacman не позволяет и установить его, поскольку в системе присутствуют файлы этого пакета.
Пришла очередь воспользоваться опцией --overwrite, но файлов GDM очень много и перечислить их вручную невозможно. В общем, опытным путём я выяснил, что можно указывать папки, например:
sudo pacman -S --overwrite /usr/share/locale/* gdm
А чтобы получить полный аналог --force нужно указывать как «--overwrite '/*'».
Я выполнил следующие команды для принудительной установки, полного удаления и чистой установки GNOME Display Manager:
sudo pacman -S --overwrite '/*' gdm sudo pacman -Rn gdm sudo pacman -S gdm
В результате моя проблема была решена. Не злоупотребляйте «--overwrite '/*'», используйте этот синтаксис только когда вы действительно понимаете что вы делаете и когда вы уверены, что нет других способов удалить мешающие файлы — обычно это можно сделать сторонними менеджерами пакетов Python, PERL и прочими — теми же самыми, которыми эти пакеты были установлены.
Близкие статьи
- Ошибка pacman «warning: failed to retrieve some files» (РЕШЕНО) (100%)
- Ошибка «ruby-bundler: /usr/share/man/man5/gemfile.5.gz exists in filesystem (owned by ruby)» (РЕШЕНО) (100%)
- Ошибка «не удалось разрешить зависимость lib32 (32-битной библиотеки)» (РЕШЕНО) (100%)
- Ошибка «не удалось завершить транзакцию (неверный или поврежденный пакет)» (РЕШЕНО) (100%)
- Ошибка «error: blackarch: signature from "Levon 'noptrix' Kayan (BlackArch Developer)
" is invalid» (РЕШЕНО) (100%) - Как установить в Arch Linux инструменты для бенчмарка CPU (RANDOM - 50%)