You are here: Home » Справка и подсказки » Аналог опции --force в pacman

Аналог опции --force в pacman

Если вы обновляете или устанавливаете новый пакет, то если в файловой системе уже присутствуют файлы, включённые в этот пакет, то операция обновления/установки обрывается и выводятся файлы, которые уже присутствуют в системе. В моей практике причинами обычно являются пакеты, установленные с помощью 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 и прочими — теми же самыми, которыми эти пакеты были установлены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo