LINUX.ORG.RU

Обновление сломало мне Arch Linux

 , , ,


4

1

Сегодня обновление убило мой Arch Linux на старом ноутбуке, чему я очень сильно удивился. Никогда такого не было и вот опять. Но ситуация довольно интересная, поэтому я оставлю описание этой проблемы и её решение на всякий случай на этом форуме. Вдруг кто придёт из поисковика, а у него такая же хрень окажется. Может помогу кому. Итак, фотография ошибки:

Kernel panic – not syncing: No working init found

Вечером я просто обновился привычной всем командой yaourt -Syua и перегрузился в Windows (стоит в дуалбуте рядом с Fedora и Arch Linux) по делам. Ладно, вру, перегрузился чтобы поиграть в Half-Life и Unreal Tournament ’99. Поиграл на славу, снова решил загрузиться обратно в Arch Linux — получил ситуацию, которая запечатлена на фотографии выше.

Сначала я подумал, что каким-то неведомым образом слетел Fedora’вский grub, так как именно он обеспечивает мне, так сказать, «дуалбут» в три операционные системы: Windows 10, Arch Linux и Fedora 29. Загрузился в Fedora, выполнил привычные команды для восстановления grub’а и обновления его конфигурации:

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

Перегрузился снова, в меню grub’а выбрал Arch Linux — ситуация нисколько не изменилась. Тогда я решил, что при последнем обновлении слетели какие-то модули в ядре и из-за этого оно валится в панику. Снова загрузился в Fedora. Отмечу, что как же хорошо, что я её установил рядом и теперь не мучаюсь со всякими LiveUSB-флешками в подобных ситуациях, примонтировал rootfs от Arch Linux’а и с помощью скрипта arch-croot чрутнулся в него:

mount /dev/sda4 /mnt
./arch-chroot /mnt

Из лога пакетного менеджера /var/log/pacman.log я вычленил список пакетов последнего обновления, которые могли испортить мне ядро и initramfs:

upgraded device-mapper (2.02.184-3 -> 2.02.184-4)
upgraded lvm2 (2.02.184-3 -> 2.02.184-4)
upgraded virtualbox-host-dkms (6.0.4-4 -> 6.0.6-1)
upgraded virtualbox (6.0.4-4 -> 6.0.6-1)

При установке VirtualBox с помощью DKMS незаметно для пользователя собираются и устанавливаются некоторые модули ядра, на которые я и грешил, а потому переустановил эти пакеты заново:

yaourt -S device-mapper lvm2 virtualbox-host-dkms virtualbox
yaourt -S linux

На всякий случай само ядро, пакет linux, я тоже переустановил. Перезагрузился — ситуация нихрена не изменилась. Подумал, раз ядро паникует от init’а, может проблема в systemd? Его же всегда и все винят во всех бедах! В третий раз загрузился в Fedora, переустановил пакет systemd и перегенерировал initramfs:

yaourt -S systemd
mkinitcpio -p linux

Перегрузился, постучался в Arch Linux — проблема не ушла. Очень странно! Пришлось в четвёртый раз грузиться в Fedora и начать гуглить инфу по этой ошибке. Поисковый запрос «kernel panic not syncing no init found arch linux» сразу же привёл меня в тему на форуме Arch Linux, благодаря которой я и решил эту проблему: [SOLVED] Kernel Panic - not syncing. No working init found. Человек на том форуме столкнулся с похожей ситуацией.


Итак, восстановление работы поломанного Arch Linux’а и расследование почему так случилось, ибо проблемка-то и не очень уж тривиальная. Из темы на форуме Arch Linux, по ссылке выше тот человек перепробовал все действия, которые попробовал я и у него тоже не получилось сначала восстановить работоспособность системы. Потом знатоки на том форуме посоветовали ему выполнить команду:

pacman -Qkk filesystem

warning: filesystem: /usr/lib64 (No such file or directory)

Для определения различных ошибок в структуре файловой системы. Я тоже её выполнил и так же как и в той теме наткнулся на странную проблему со сущностью /usr/lib64, которая в нормальных условиях ожидаемо должна быть симлинком на /usr/lib. У меня же этот файл вообще отсутствовал, а у того человека на форуме вместо симлинка был пустой каталог.

Механизм возникновения проблемы

Итак, судя по сообщению пользователя Scimmia:

There’s been a number of people without /usr/lib64/. I’m guessing it’s because of a updated that was --force’d. Don’t do that.

В pacman’е имеется какой-то странный баг или поведение, когда при опции --force или --overwrite нарушается структура файловой системы, в частности, имеется вероятность неведомым образом снести симлинк /usr/lib64 или вместо него создаётся пустая директория, как у того человека с форума. Судя по логу, я действительно обновлял какой-то пакет из AUR’а с этой опцией из-за того, что установка ругалась на какие-то существующие файлы и не придал этому значение после. Но самый цимес в том, что обновлял я этот пакет целых три месяца назад и этот --force и вылетел у меня из головы.

Что интересно, само отсутствие /usr/lib64 похоже никоим образом не влияет на работоспособность системы. Если бы что-то отвалилось и перестало работать сразу после обновления и перезагрузки, то было бы легче догадаться в чём же именно дело. Но этот симлинк /usr/lib64 в rootfs каким-то странным и неведомым способом влияет на построение образа initramfs, а поэтому Arch Linux рассыпался только спустя три месяца (sic!), когда прилетело обновление VirtualBox, которое обновило свои модули ядра и потребовало перегенерировать initramfs, генератор которого видя отсутствие симлинка /usr/lib64 тупо взял и сгенерировал мне кривой образ, из-за которого ядро посыпалось в панику.

Решение проблемы

Как уже понятно из рассказа — тривиальное, создать убитый симлинк заново, перегенерировать initramfs по новой:

cd /usr/
ln -s /usr/lib/ lib64
mkinitcpio -p linux

После выполнения этих команд Arch Linux загрузился как ни в чём не бывало и продолжил нормально работать.

Вердикт

Вот такая довольно странная и нетривиальная проблема меня посетила, которая «занесла меч над головой» и целых три месяца никак себя не проявляла. Если честно, даже не знаю, не найдя подобную тему на форуме Arch Linux, смог бы я найти решение или нет. Скорее всего нет и тупо бы снёс раздел с Arch Linux’ом, перенеся важные файлы.

А чем вы занимались сегодня ночью?

★★★★★

TL;DR

В Арче может исчезнуть симлинк /usr/lib64, указывающий на /usr/lib, из-за чего после очередного пересоздания initrd вы получите Kernel panic – not syncing: No working init found.

Thetan ★★ ()

Судя по логу, я действительно обновлял какой-то пакет из AUR’а с этой опцией из-за того, что установка ругалась на какие-то существующие файлы и не придал этому значение после.

Хорошо, что признал.

Всякие --force, симлинки руками и пр. – это минирование системы. Лучше разобраться и найти решение до (точнее, вместо).


K.O.

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 4)
Ответ на: комментарий от greenman

У меня очень давно была ситуация, когда pacman с флагом --force мне здорово помог при 12309 при обновлении системы, когда я не дождался «отвисания» и спустя 20 минут жёстко ребутнулся. Много системных пакетов тогда побилось ко всем чертям, но с помощью --force я их просто переустановил и вернул систему к рабочему состоянию. Кстати эту же.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от Deleted

Ага, смысла пихать SSD в такой старый ноут (ASUS A52F) не вижу. Он у меня как раз для экспериментов с Linux’ами, всё железо цепляется и отлично работает. Даже в Haiku.

EXL ★★★★★ ()

TL;DR: Арч — рассыпуха из файлов, совместно функционирующая лишь чудом и когда она вдруг чудом приходит раз в три месяца в согласованное состояние, то это состояние не грузится.

Гоу на NixOS.

t184256 ★★★★★ ()

привычной всем командой yaourt -Syua

yaourt - давно заброшенный проект с кривой архитектурой, зачем ты его используешь? Поставь что-нибудь нормальное со всеми зелеными пунктами с этой страницы https://wiki.archlinux.org/index.php/AUR_helpers, например самый популярный сейчас yay

anonymous ()
Ответ на: комментарий от anonymous

зачем ты его используешь?

Потому что я установил Arch Linux в те древние годы, когда yaourt был популярен и возможно единственный.

Можно сказать, я просто привык. Хотя я предпринимал попытки миграции. Кажется на ЛОРе мне когда-то посоветовали новый и молодёжный pacaur; когда я наконец-то созрел для перехода на этот helper, оказалось что он тоже устарел и его даже выкинули из AUR’а.

Cool Story.

EXL ★★★★★ ()
Ответ на: комментарий от anonymous

Да какая разница, если yaourt только собрал пакет (через makepkg), а потом этот собранный пакет был поставлен через pacman --force?

Как бы в этом случае помог yay? Тот, кто хочет выстрелить себе в ногу, всегда найдёт способ.

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от greenman

Я пробовал поставить NixOS, ничего страшного там не было, learning curve сопоставима с Arch Linux’ом, если не проще.

Интересный дистрибутив, но изменить своим ежедневным привычкам не смог, да и AUR нравится. Так может быть и остался бы на нём.

EXL ★★★★★ ()
Ответ на: комментарий от greenman

И вроде –force пока работает, хоть и выдаёт

А --overwrite уже с yaourt видимо не работает.

Вот и появилась весомая причина наконец-то мигрировать на что-то другое.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

pacaur тоже забрасывали на какое-то время, но недавно снова начали пилить. Можно ставить.

Вообще в среде арчеводов «модным и молодежным» всегда считался yaourt, а pacaur - наоборот, инструментом для понимающих. Он кстати написан на C с башем.

anonymous ()
Ответ на: комментарий от greenman

Да, сейчас проверил, действительно. Там просто glob надо было ещё ставить в аргумент, судя по man’у, а я почему-то подумал, что это парсер yaourt’а сбоит.

Обновление отменяется, остаёмся на yaourt.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Всё равно придётся, рано или поздно, уходить с yaourt.

При очередном обновлении pacman-а package-query не соберётся, и усё…

(Смотри-ка, кто-то опять занёс yaourt в AUR. Пока 5 голосов…)

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 1)

Сегодня обновление убило мой Arch Linux

Ладно, вру

/usr/lib64, которая в нормальных условиях ожидаемо должна быть симлинком на /usr/lib. У меня же этот файл вообще отсутствовал

Судя по логу, я действительно обновлял какой-то пакет из AUR’а с этой опцией --force из-за того, что установка ругалась на какие-то существующие файлы и не придал этому значение после.

Итого, весь понос сознания можно свести к одному предложению, ставил кривой пакет из AUR, содержимое PKGBUILD не проверял, игнорировал все ошибки, тем самым целенаправленно сломал системный пакет filesystem.

surefire ★★★ ()

Вердикт

Вот такая довольно странная и нетривиальная проблема меня посетила

А нужно

Вердикт

Я криворукий олух, которые юзает ауровские пакеты с закрытыми глазами, игнорит ошибки и не проверяет результат.

anonymous ()
Ответ на: комментарий от surefire

Большой плюс ТС – всё честно расписал. Да и решение сам нашёл.

Бывают же такие, что видно – что-то скрывают. Но не сознаются. Потом все вокруг виноваты.

greenman ★★★★★ ()
Ответ на: комментарий от commagray

Согласно убеждениям разработчиков арча - да.

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

Сурс - их АМА на реддите

Midael ★★★★★ ()
Последнее исправление: Midael (всего исправлений: 1)

Вот. А потом из каждой щели «Арч ломается при обновлениях!111 Ко-ко-ко!!1 НИСТАБИЛЬНЫЙ ДИСТРИБУТИВ ДЛЯ ШКОЛЬНИКА1111!!!».

По факту в большинстве случаев так и происходит. Юзер делает какую-то дичь, ломает систему, а виноваты ментейнеры.

anonymous ()
Ответ на: комментарий от EXL

Я перешел на trizen кстати, уже не помню почему, но на wiki есть список пакетных менеджеров с их фишками и недостатками и вот yaourt был один из самых хреновых по разным параметрам.

deterok ★★★★★ ()
Ответ на: комментарий от commagray

Для обновления тоже предлагаешь ходить по директориям, делая git pull && makepkg -sic вместо одного yay для всего?

Да. Я так и делаю. И делать иначе - просто самоубийство. Откуда я знаю что они туда напихали? Я смотрю pkgbuild и потом вручную обновляю.

Но я спрашивал о другом - неужели из аура у всех пакеты десятками стоят, что вручную обновить сложно? Что вы все оттуда ставите?

curufinwe ★★★★★ ()

А теперь тож самое повтори в пределах ООО Рога и Копыта на 40 компов...

И потом нам запрещают ковыряться пальцем в носу!

Выбор клиентских ОС весьма и весьма минёрская работа. Ошибся один раз - и работа в офисе остановилась, тебя все кроют матом, а ты думаешь что ни в чём не виноват.

Deleted ()
Ответ на: комментарий от curufinwe

Но я спрашивал о другом - неужели из аура у всех пакеты десятками стоят, что вручную обновить сложно? Что вы все оттуда ставите?

Тоже не понимаю. У меня стоит с десяток пакетов из аура, которые и обновления-то не требуют, ну или требуют раз в год.

Я yaourt-ом пользуюсь, но я читаю содержимое билда сначала.

Некоторые PKGBUILD-ы сам поддерживаю на локалхосте, это проще, чем ждать пока какой-то такой же лентяй как я найдёт время обновить пакет.

devzero ()
Ответ на: комментарий от greenman

От задачи очень зависит, и внутри нее тоже очень зависит.

Если просто десктоп юзать, то learning curve маленькая.

Если админить и перелезать с другого configuration management, то чуть ли не отрицательная.

А если ты — разработчик, у которого воркфлоу насмерть повязан на ущербный недо-ПМ от языка, то начинается лотерея. Если это был тот ужас из хаскелла, только лучше станет. Если это был pip, то придется подучиться и постараться. Если это был cargo, то готовься рвать волосы на всех местах.

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

А если ты — разработчик, у которого воркфлоу насмерть повязан на ущербный недо-ПМ от языка, то начинается лотерея. Если это был тот ужас из хаскелла, только лучше станет. Если это был pip, то придется подучиться и постараться. Если это был cargo, то готовься рвать волосы на всех местах.

А если это rvm, просто разворачиваешь рабочее окружение в хомяке как обычно, не важно, какой там ПМ в системе.

devzero ()
Ответ на: комментарий от devzero

А если это rvm, просто разворачиваешь рабочее окружение в хомяке как обычно, не важно, какой там ПМ в системе.

Вот из-за таких как ты игнорастов мы все и страдаем.

Давай, разверни мне средствами язычкового недоПМ произвольную нативную зависимость.

t184256 ★★★★★ ()