четверг, 20 декабря 2012 г.

PACMAN: file exists in filesystem

При обновлении (установке) появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")!
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.
Почему это происходит: pacman при обнаружении конфликтующих файлов, по умолчанию, не будет их перезаписывать автоматически. Это не ошибка, так сделано специально. Вопрос решается тривиально. Сначала проверьте не принадлежит ли файл другому пакету:
pacman -Qo /path/to/file
Если принадлежит - создайте отчет об ошибке. Если проблемный файл не нужен другим пакетам - переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.

Если программа была установлена вручную, без использования pacman или его оболочек, вам нужно будет удалить программу и все ее файлы, а затем выполнить установку при помощи pacman.

Информация, о каждом установленном файле, храниться в файле с метаданными пакета /var/lib/pacman/local/$package-$version/files.
При повреждении этого файла (может быть пустым или отсутствовать), во время обновления пакета, и будет получена ошибка - "file exists in filesystem" ("файл существует в файловой системе").
Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета, поэтому вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, выполните
pacman -S --force $package
после этой команды pacman принудительно перезапишет эти файлы.

Никогда не запускайте pacman -Syu --force



SOURCE