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’ом, перенеся важные файлы.

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

★★★★★

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

Потому что оно в core не сдалось. Так можно и про mongodb вспомнить. Ну и еще раз поввторю тезис: мне обновили один пакет с работой лидаров, а обновлять придется все 3гб (еще не уточняя а какие из пакетов добавлять туда, а какие нет, т.е. в любом случае пользовательские ros-пакеты все-равно будут отдельно лежать в aur-е.. tldr это попросту неудобно, зачем лечить зубы через анус?)

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

Без проблем.

https://wiki.archlinux.org/index.php/System_maintenance_(Русский)#Частичные_обновления_не_поддерживаются

По той же причине будьте очень осторожны при использовании IgnorePkg и IgnoreGroup

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

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

Идея единого конфига мне близка по душе, ибо сам сделал пакстрап с нужными пакетами (что не всегда поможет, ибо есть любители по-переименовывать пакеты, но, как я понял, в nixos такие тоже есть). Для меня это больше вопрос наличия аналога aur-а (сделать эдакий nux user channel?), wiki и пакетов.

Вопрос лишь в том, что я скорее возьму из aur-а nix, пойму как с ним в арче работать и ничего особо менять не придется. Ну, это было бы идеально. Минимальная система (с минимальным шансом сломаться) ставится стандартным pacstrap, а весь остальной софт нужной версии через nixconfig. Проблемы жирных обновленй и версионности должны бы уйти.

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

Ты троллишь или что? Отличай частичное обновление и скип пакетов, когда обновляешься, допустим с версии пакета 1.0.0 до 1.1.0 минуя все, что было между ними. И вообще, че я тут объясняю, ты взрослый мальчик. Если нужно, читай, изучай.

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

Я знаю, сам ставил летом, но другие дела подошли. Там мейнтейнера уже тогда меняли. Суть в версионности, мне приходилось и пакеты буста менять, и cmake-а. Я на самом деле не очень понимаю в чем проблема техническая иметь несколько пакетов разных версий с суффиксом, собственно, версий. Надо попробовать собрать 2 либы и посмотреть в чем разница в линковке если -L у них одинаковый, как -l прописывать. Пока что решение для меня собирать самому в home

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

Не раз обновлял машины с интервалом в несколько месяцев. Без проблем, если читать выхлоп пакмана. Как у тебя постоянно валится, не понимаю.

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

И возникает чувство, что это уже не арч, бинарный дистрибутив, а LFS ты собираешь.

Одно другому не мешает. Тащем-то никто не может запретить в pkgbuild-е прописать wget + g++. Только называть по-другому пакет.

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

Лорчую, в общем-то. В арче топ это софт (аур), пакман и документация. Роллинг релиз весьма часто скорее мешает, но лучше ничего не придумали.

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

Обновляюсь только когда надо какой-то новый софт ставить, т.е. раз в 3-9 недель. Последний раз ломалось прошлым летом, когда nvidia решила дропнуть fermi на древний драйвер. Все. Вся эта фобия что «у-у-у-у, год не обновлялся, ставь арч лучше по новой) ересь какая-то с генезисом от магического мышления. Кроме того выкачивать 2-4гб софта при обновлении какого-нибудь хаскеля и латеха, которые обновляются весьма часто - удовольствие странное. Ну и перезагружаться, конечно же, потому что ядро тоже обновится.

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

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

и что,

В Арче может исчезнуть симлинк /usr/lib64, указывающий на /usr/lib,

симлинк прекратит ломаться?

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

Для меня это больше вопрос наличия аналога aur-а (сделать эдакий nux user channel?), wiki и пакетов.

Аналогами будут (в порядке нарастания замороченности оформления) override, overlay, NUR. Wiki не будет. Пакеты будут, но любителям софта, который релизнется только через полгода, все-таки придется писать свои деривации или overrid’ить существующие.

Вопрос лишь в том, что я скорее возьму из aur-а nix, пойму как с ним в арче работать и ничего особо менять не придется. Ну, это было бы идеально. Минимальная система (с минимальным шансом сломаться) ставится стандартным pacstrap, а весь остальной софт нужной версии через nixconfig.

Не знаю, кто такой nixconfig, но флаг тебе в руки. Nix в этом плане даже еще более гибок, нежели тебе надо.

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

Аналогами будут

Так вроде в nix можно по аналогии с ppa подключать сторонние channels? Я это опять же в контексте ros-а смотрел, отдельная компания собственно им под nixos и занимается из-за простоты разворачивания одинаковых систем (написали код для робота/умного дома и размножили по щелчку пальцев).

кто такой nixconfig

Имелся ввиду файл конфигруации nix-а. Не помнил как точно звать.

Энивей, летом заведу виртуалку/докер и буду щупать на предмет применимости/портирования нужного софта.

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

Тред не читал, сразу отвечал?

ой, читать тред с обсуждением поломок арча, это всё равно что читать вечную книгу.

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

Так вроде в nix можно по аналогии с ppa подключать сторонние channels?

Ну да, а там прописывать хоть оверлеи, хоть что.

Я это опять же в контексте ros-а смотрел, отдельная компания собственно им под nixos и занимается из-за простоты разворачивания одинаковых систем (написали код для робота/умного дома и размножили по щелчку пальцев).

Кто-кто NixOS’ом занимается? Не помню таких.

t184256 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.