Я побежал, sudo pacman -Syu
и я получил некоторые интересные ошибки чтения:
ошибка: не удалось зафиксировать транзакцию (конфликтующие файлы)
и длинный список файлов с последующим exists in filesystem
. Полный вывод здесь: http://ix.io/lLw
Похоже, что многие из этих файлов не связаны с пакетом, когда я их проверял pacman -Qo <path-to-file>
, но я не проверял их все. У меня было слабое соединение при запуске pacman -Syu
, но я получаю те же ошибки, когда обновляюсь позже: http://ix.io/lLx
Что мне делать? Должен ли я проверить все файлы и удалить те, у которых нет связанного пакета? Должен ли я принудительно обновить (с sudo pacman -S --force <package-name>
?)
Обновить
Я попытался бежать sudo pacman -S --force <package-name>
и получил это:
[my-pc]/home/average-joe$ pacman -Qo /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
error: No package owns /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
Похоже pacman -S --force <package
, не перезаписать каталоги, которые содержат файлы. От мужчины:
Использование --force не позволит перезаписать каталог с файлом или установить пакеты с конфликтующими файлами и каталогами.
Должен ли я просто удалить конфликтующие каталоги? (у них нет связанных пакетов)
источник
/usr/local/
вместо/usr/
)sudo pip install -U docker-compose==1.5.0rc3
этой страницы . Возможноsudo pip install
конфликтует с pacman?-S
обновлений (частичная установка и т. д.) позволит вам этот сценарий. Дело у меня--force
сработало все время.Ответы:
Хорошо, похоже, что работает
sudo pacman -S --force <package-name>
работает, но он не разрешает конфликтующие каталоги. В таких случаях бегутsudo rm -rf
по конфликтующим каталогам, затем следуютsudo pacman -S --force <package-name>
работы.Теперь мой
pacman -Syu
разрешается хорошо.источник
sudo pacman -Syu --force
работал для меня, но перезапись не была распознана.tl; dr: удалите конфликтующее приложение перед запуском
pacman
.pacman
(и другие менеджеры пакетов) хранят индекс пакетов и файлов, которыми они управляют (pacman --query --list
). Некоторые файлы, такие как конфигурация, будут помечены как изменяемые и не будут перезаписаны во время обновления (за исключением особых случаев, когда менеджер пакетов обычно удаляет старый файл перед созданием нового). Другие файлы будут помечены как неизменяемые. Если другое приложение каким-либо образом изменяет эти файлы без соответствующего обновления индекса, у менеджера пакетов нет возможности узнать, что делать с этими файлами во время обновления.Многие приложения, установленные с использованием стандартного
./configure && make && sudo make install
шаблона, могут быть удалены с помощьюsudo make uninstall
. Если вы установили приложение другим способом, вам может понадобиться что-то еще, чтобы удалить его. В целом, может быть хорошей идеей хранить где-нибудь копию установочных файлов (например~/install
), чтобы иметь возможность надежно удалить их в таких случаях. Простое удаление конфликтующих файлов, вероятно, приведет к тому, что другие файлы будут лежать без дела, что может вызвать другие проблемы.При установке программного обеспечения с другими менеджерами пакетов есть способы изолировать их от системных файлов. Это установившаяся лучшая практика, например, при разработке программного обеспечения, когда вы действительно хотите поддерживать согласованность версий и избегать конфликтов с другим программным обеспечением. Примеры включают в себя:
источник
sudo pip install
команды. Возможно, мне следует избегать использования pip с sudo?Из-за этого я устанавливал пакеты, которые я обычно устанавливаю с помощью pip через pacman. Но некоторые пакеты не найдены в репозиториях pacman. Я думаю, что мы должны избегать установки pip с привилегиями sudo и istead:
--user flag делает pip-установочные пакеты в вашем домашнем каталоге, что не требует специальных привилегий. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user
источник
TLDR;
sudo pacman -Syu
снова.отредактировано, чтобы добавить TLDR и исправить опечатки
Хотя я почти уверен, что не делал ничего глупого, у меня была эта проблема, может быть, каждый раз, когда я пытался обновить, так как я использовал Manjaro; три или четыре раза в течение двух месяцев. Суть в том, что это исправляет.
Получить список ваших файлов.
Когда в окне терминала происходит сбой обновления, вы получаете следующее:
... и многое другое.
Скопируйте вывод из терминала и поместите его в файл. Я использовал nano и назвал мои «файлы», как в ~ / work / files .
Лишить постороннюю информацию:
cat files | awk '{print $2}' >> ~/work/files2
Это берет второе слово из каждой строки и печатает его в files2.
Разобраться с файлами
Вы можете удалить их, переместить или переименовать.
Если что-то сломалось, это легче исправить, если мы сломаем его, переместив вместо удаления или переименования:
mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2
Если вы действительно хотите удалить их, что не нужно делать ( ОПАСНО ОПАСНО ): при чтении файла -r; do sudo rm - "$ file"; сделано <files2
обновление
Чтобы заставить работать --overwrite, что нам нужно, чтобы pacman понял, что пакет не сломан, вам нужен следующий синтаксис:
sudo pacman -S package_name --overwrite /location/of/thing
sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
У меня была милая проблема, когда я удалял символическую ссылку libidn2.so.0, ничего не работало, и когда я возвращал ее обратно, я получал ошибку «существует в файловой системе». Выше, с --overwrite, это все, что работало для меня.
В заключение:
sudo pacman -Syu
источник
После того, как pacman окончательно устарел,
--force
и чтобы суррогатная--overwrite
опция работала должным образом, следует отметить следующую схему использования.Эквивалентная команда для воспроизведения
--force
опции, которая слепо перезаписывает все, что конфликтует:Или
Сложная часть ускользает от шара, чтобы избежать его расширения.
источник
Если у вас много файлов, как у меня,
решает все вопросы.
источник