Bug 41097

Summary: bootchain: если загрузка не удалась, невозможно добраться до лога загрузки
Product: Sisyphus Reporter: Alexey Sheplyakov <asheplyakov>
Component: make-initrd-bootchainAssignee: Leonid Krivoshein <klark>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: antohami, klark
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Пример возможности поддержки /dev/ttyprintk none

Description Alexey Sheplyakov 2021-10-12 12:48:39 MSK
Пытаюсь загрузиться по сети, сеть не подымается (это предмет отдельного бага).
Хочу зайти в shell и просмотреть/скопировать лог загрузки. Однако консоль заблокирована диалогом "Please choose the installation method". Кнопка "Canel"
в диалоге неактивна. Пункта "show logs" или "run shell" нет.
Если прибить с помощью Ctrl+C - через пару секунд перезапускается.

Итого - добыть лог загрузки (/var/log/bootchained.log) практически невозможно.

Командная строка ядра:

rdshell nottys bc_debug root=bootchain bootchain=fg,altboot ip=dhcp4 automatic=method:http,network:dhcp,server:${http_server},directory:/altlinux/regular-xfce-20211006-aarch64.iso stagename=live console=ttyS0,115200n8 earylcon=uart8250,mmio32,0x20230000 audit=0
Comment 1 Leonid Krivoshein 2021-10-13 02:45:38 MSK
А можете рассказать словами, сколько всего у вас устройств ввода и вывода на раннем этапе загрузки, и что это за устройства? Для serial console / netconsole была реализована некая начальная поддержка, очевидно по "остаточному принципу". Хотелось бы это улучшить, но без понимания и железа довольно сложно.

Если указать параметр rdlog=console, журнал вестись не будет, он будет сразу выводиться в /dev/console. Годится такой вариант для отладки? Не сложно по аналогии организовать вывод в /dev/ttyprintk.
Comment 2 Leonid Krivoshein 2021-10-13 16:11:41 MSK
Created attachment 9818 [details]
Пример возможности поддержки /dev/ttyprintk

Проверял с разными вариантами, самый простой вариант прилагаю. Работает, но у нас это может работать по-разному. Без ответа на главный вопрос не могу понять, есть ли возможность изменить концепцию вывода диалогов и журналов для машин, у которых нет VGA. И нужны ли на них вообще диалоги?
Comment 3 Alexey Sheplyakov 2021-10-14 14:43:41 MSK
(In reply to Leonid Krivoshein from comment #1)
> А можете рассказать словами, сколько всего у вас устройств ввода и вывода на
> раннем этапе загрузки, и что это за устройства? 

Ввода - UART консоль.
Вывода - она же. Возможно, что ещё есть efifb.
Comment 4 Alexey Sheplyakov 2021-10-14 14:59:18 MSK
(In reply to Leonid Krivoshein from comment #1)

> Если указать параметр rdlog=console, журнал вестись не будет, он будет сразу
> выводиться в /dev/console.

Прогресс/диалоги всё равно отображаются и затирают и логи.
 
> Годится такой вариант для отладки?

Нет. Отладочных сообщений не видно. Прокрутить вверх историю не получается.
Консоль заблокирована "неубиваемым" диалогом.

Жизнеспособные варианты:

1) Если указано rdshell и nottys -- вообще не отображать диалогов, а при ошибке писать сообщение (что-нибудь вида "Automatic boot failed, starting emergency shell"), и запускать shell

2) Если указано nottys - мультиплексировать консоль с помощью screen|tmux
Comment 5 Leonid Krivoshein 2021-10-14 20:05:36 MSK
Спасибо, теперь понятно. Так я и думал, что у вас единственное устройство для взаимодействия с пользователем. Конечно нельзя на него выводить одновременно и диалоги, и логи, и запускать там rdshell, и туда же make-initrd выводит стартовые сообщения о запуске демонов.

Предлагаю сделать так: по умолчанию диалоги будут выводиться на UART, раз они там работоспособны, а лог будет писаться в файл. С параметром bc_debug журнал подробный и в случае успеха копируется в stage2. В новой версии его название изменится на /var/log/chaind.log, так предложено сделать в процессе апстрима. Указывать nottys больше не потребуется, если в console=... что-то есть. Если переход в stage2 не происходит, будет два варианта:

1. Вернуться в диалоге в главное меню и запустить из него shell.
2. Изначально запускать с noaskuser и rdlog=console или rdlog=printk earlycon=... ignore_loglevel. В этом случае вывод диалогов будет отключен полностью, ввод данных со стороны пользователя будет исключён совсем, все параметры должны передаваться заранее через /proc/cmdline, лог будет писаться не в файл, а в /dev/console или в /dev/ttyprintk, соответственно.

Если годится такой вариант, могу сегодня собрать тестовое задание.

Запихивание screen/tmux пока не увенчалось успехом, так как в самом make-initrd пока остаются вопросы с настройкой терминалов, конфликтами с plymouth, несобираемостью фичи kbd в initramfs, т.е. мультиплексоры запихнуть туда можно, но без правильно настроенной UTF-8 консоли работать они не хотят. Так что этот вариант пока отложим в сторонку.
Comment 6 Leonid Krivoshein 2021-10-15 19:40:22 MSK
Попробуйте с заданием #287155 -- получилось всё, кроме п.1, rdshell работает с диалогами altboot "не дружелюбно" при наличии единственной консоли, а запускать shell из диалогов без rdshell пока не получилось. Эту проблему будем решать с legion@, когда дойдём от апстрима фичи bootchain-interactive.

Точнее так: на большинстве конфигураций с TTY'ами переключение в rdshell работает безупречно. На них и журнал доступен, по умолчанию на tty3. Параметр nottys упразднён в пользу ядерного console=... В конфигурации без TTY'ов крайне не желательно использовать rdshell, но всё же он как-то странно, но работает. У меня получалось переключаться из меню в rdshell со второй попытки стабильно, поэтому я решил оставить лучше пока так, чем его не будет совсем. И я не знаю, как это поведёт себя на Байкале.

Более комфортный вариант теперь для отладки на конфигурациях без TTY'ов -- перенаправлять диалоги в /dev/null параметром noaskuser, а отладочный вывод через rdlog= на консоль. Раньше noaskuser отключал только диалоги ввода.
Comment 7 Repository Robot 2021-10-18 16:07:18 MSK
make-initrd-bootchain-0.1.5-alt5 -> sisyphus:

 Fri Oct 15 2021 Leonid Krivoshein <klark@altlinux> 0.1.5-alt5
 - fix netboot problem on very slow hardware (ALT #41078).
 - fix screen blinks in ponder widget (ALT #41096).
 - bootchain-core: adds support for the early console.
 - bootchain-waitnet: increase timeout and fix messages.
 - bootchain: reworked interaction with TTY's (ALT #41097).
 - bootchain-altboot: adds special actions to the main menu.
 - concatinate bootchain-loop back with the bootchained.
 - bootchain-core: daemon and log renamed to chaind.
 - bootchain-waitnet: bring up interfaces only once.