Получи случайную криптовалюту за регистрацию!

Очередной пост про весло. На этот раз, правда, с болью: я зап | .рубик

Очередной пост про весло.

На этот раз, правда, с болью: я запустил pacman -Syu, а весло или не весло, а сам пакман в результате потеряло часть системных файлов.
Их было достаточно много, при этом: например, bash или sudo просто не было, как таковых (они стали размером в 0 байт), а zsh ругался на:
zsh: error while loading shared libraries: /usr/lib/libcap.so.2: file too short
Очевидно, либа тоже была 0 байт.

В целом, из оставшихся доступных взаимодействий был маппинг весла по сети, был бинарь wsl.exe (есть ещё bash, но я проиграл в рулетку, и баш был тоже обнулен).

Какое решение всей это проблемы вышло по итогу:
Качается сама либа из пакетов арча:
https://archlinux.org/packages/core/x86_64/libcap/
Как-то её придется распаковать, а расжимать zstd скорее всего нечем - поэтому качается разжималка zstd отсюда

Либа распаковывается куда-нибудь, а дальше в проводнике открывается сетевой путь до tmp внутри весла \\wsl$\Arch\tmp, куда переносится либа.
Распаковать сразу в /usr из винды нельзя - винда ругается на пермишены (и правильно ругается кста).

Дальше фикшу либу, и можно уже заходить в шелл.
wsl -u root -e /bin/cp -r /tmp/usr /

Но всё веселье только начинается, надо ж ещё починить систему!

Логичней всего это делать через пакман, но увы - пакман тоже умер, поэтому по старой схеме - качаем https://archlinux.org/packages/core/x86_64/krb5,
распаковываем, накатываем поверх системы.

Ура, пакман появился, но починить всё нам будет мешать неработащий gpgme - его тоже придется накатить поверх системы.
(можно прописать "SigLevel = Never" в /etc/pacman.conf, но переустановить сам gpgme у меня всё равно не вышло - вылезли проблемы с либами).

Теперь gpg полностью работает, и можно наконец перенакатывать все пакеты: pacman -S --overwrite "*" $(pacman -Qnq)

Последним этапом можно попробовать поискать по системе мертвые файлы через лютый
find / \( -path '/mnt' -o -path '/sys' -o -path '/proc' -o -path '/dev' -o -path '/run' \) -prune -o -size 0c -print | grep -vE "lock|.gitkeep|__init__.py\$"
Но я у себя ничего не нашел.

UPD: покопался у себя в event viewer, и похоже, что причиной этому был OOM - весло попросило слишком много памяти, и винда убила виртуалку. pacman такое переживает достаточно плохо.

UPDx2: В комментариях подсказали, что восстановление после такого краша описано на арчевики - если вкратце, то половину действий можно упростить при наличии pacman-static (статической версии пакмана), или просто другого работающего арча, например, livecd, хотя в случае с веслом это сложнее. Also, мертвые файлы можно искать менее лютым find /usr/lib -size 0 - поскольку при обновлении пакетов из реп задевается только этот путь.