Я установил Manjaro linux, производную от Arch linux, и столкнулся с проблемой циклической зависимости обновлений программного обеспечения. Предлагаемое решение?

Возможно

$ ssh user@host "cat remote-file-1 >> remote-file-2"

при условии, что файлы находятся в доме пользователя

1
15.04.2019, 21:08
1 ответ

Просто просматривая вывод pacman, я вижу много сообщений «/bla/bla существует в файловой системе». Это, вероятно, ваша проблема прямо там. IDK, как это могло произойти, но pacman не любит перезаписывать файлы, если только он не знает наверняка, что пакет, который вы устанавливаете, «владеет» указанными файлами.

Я считаю, что вы можете переопределить эту проверку с помощью опции --force, хотя вы должны делать это С ПРЕДОСТЕРЕЖЕНИЕМ , так как файлы могут быть перезаписаны несовместимыми версиями. Кроме того, вам придется делать это каждый раз, когда вы столкнетесь с таким конфликтом. Это означает, что вам придется делать это КАЖДЫЙ РАЗ при обновлении python-dateutilили python-pyasn1.

Более надежным решением может быть удаление этих файлов перед обновлением пакетов. Однако, ЭТО ЕЩЕ БОЛЕЕ ОПАСНО , чем предыдущее решение, поскольку оно *может *разрушить вашу систему (в зависимости от того, какие файлы вы вынуждены удалить ). Если вы пойдете по этому пути, убедитесь, что у вас есть хорошие резервные копии всех ваших самых важных файлов,и обязательно держите живой CD/DVD/флэш-накопитель/что угодно под рукой на случай, если вам понадобится восстановить и/или переустановить систему.

Вот удобный способ получить список конфликтующих файлов:

while [ : ]; do echo y; done | sudo pacman -Syu | grep 'exists in filesystem$' | cut -f 2- -d ' ' | sed 's/ exists in filesystem$//g'

ОБНОВЛЕНИЕ:Я только что вспомнил, что Arch не поставляется с sudo, поэтому вам, возможно, придется запускать pacman от имени пользователя root, используя другие средства, такие как замена команды sudo на:su -c 'pacman -Syu'. (IDK, если Manjaro поставляется с sudo, но поскольку он основан на Arch -, я подозреваю, что это не так.)

Вы можете использовать вывод выше, чтобы сделать резервную копию конфликтующих файлов (, возможно, поместив их в архив ). Указанный список также можно использовать для автоматического удаления этих файлов. Вот хороший скрипт, который вы можете использовать для резервного копирования и удаления файлов за один раз:

FILES="$(while [ : ]; do echo y; done | pacman -Syu | grep 'exists in filesystem$' | cut -f 2- -d ' ' | sed 's/ exists in filesystem$//g')"
echo "$FILES" | xargs -0 -d \\n -s 9999999999 tar -c -a -f /backup-broken-files.tar || exit
echo "$FILES" | xargs -0 -d \\n -s 9999999999 rm
echo "Backed up and removed conflicting application files."

Должен вас предупредить :Раньше у меня был Arch, до недавнего времени, когда я переключился на Fedora (в основном из любопытства ). Тем не менее, поскольку у меня больше нет Arch, я не могу протестировать этот скрипт, поэтому используйте его на свой страх и риск. Кроме того, чтобы этот скрипт работал, вам (конечно )нужно запустить его КАК КОРНЕВОЙ .

Если вы хотите применить сжатие к архиву, который будет создан, просто добавьте соответствующее расширение -, такое как.xz,.gz или.bz2 -, в конец имени файла, и tar автоматически используйте соответствующее сжатие (благодаря аргументу -a).

Надеюсь, кто-нибудь знает более безопасный способ решить эту проблему (, возможно, заставить pacman думать, что эти файлы *уже *принадлежат пакетам, которые Kzqai пытается установить/обновить ). Возможно, вам следует подождать лучших ответов, прежде чем продолжить.

PS :Вероятно, вы получите предупреждение от xargs о том, что "значение x для параметра -s должно быть <= y", где "x" и "y" - числа. Не волнуйтесь, вы можете спокойно игнорировать это предупреждение.

2
27.01.2020, 23:30

Теги

Похожие вопросы