== Диагностика

=== Журналирование

Демон *chaind* ведёт журнал */var/log/chaind.log*, доступный в stage1 на
tty3 (по нажатию *Alt-F3*), что определяется дефолтными значениями *BC_LOG_VT*
и *BC_LOGFILE* в _<<_конфигурирование_bootchain_и_altboot,файле конфигурации>>_,
а также перебивается параметром
link:https://www.altlinux.org/Make-initrd[make-initrd] *rdlog=console*
или *rdlog=printk* в рантайме, что предписывает выводить журнал
на */dev/console* или на */dev/ttyprintk*. Если демон запущен в
_<<_совместимость_с_pipeline,режиме совместимости с pipeline>>_,
то журнал будет назван иначе: */var/log/pipelined.log*.

Расширенная диагностика включается через /proc/cmdline параметром
*bc_debug*. В этом случае в журнал попадает значительно больше информации
и он копируется по тому же пути в stage2 после отработки последнего «шага»,
а если в новой rootfs нет */var/log*, тогда копируется в */dev/bootchain/*
или в */dev/pipeline/*, в зависимости от режима запуска демона.

=== Отладка

Аналогом параметра *propagator-debug* в самом
link:https://www.altlinux.org/Make-initrd[make-initrd] является параметр
*stop=…*, для его использования образ initramfs должен быть собран с фичей
«link:https://github.com/osboot/make-initrd/tree/master/features/rdshell[rdshell]».

В параметре *stop=…* нужно указывать сервис, перед запуском которого загрузка
должна остановиться. Список сервисов находится внутри initramfs в каталоге
*/etc/rc.d/init.d/*. Укажите *stop=bootchian*, чтобы получить оболочку до
запуска демона *chaind*, или *stop=runinit*, чтобы получить оболочку до
перехода в stage2, по аналогии с параметром *propagator-debug*. Можно указать
целый список сервисов через запятую, например, *stop=bootchian,runinit*.

Для каждого сервиса из списка будет предложено запустить его и продолжить
загрузку (*Y*), не запускать сервис и продолжить загрузку (*N*) и запустить
rdshell (*S*). Необходимо запустить rdshell, нажав *S*. Для выхода из оболочки
нужно нажать *Ctrl+D* или выполнить команду `*exit*`. Если образ initramfs
собран с фичей
«link:https://github.com/osboot/make-initrd/tree/master/features/rdshell[rdshell]»
и загрузка с bootchain/altboot потерпит неудачу, отладочная оболочка с
приглашением «*(initramfs)$*» запустится автоматически.

При отладке будет мешать интерактивная заставка *plymouth*, поэтому нужно
указывать параметр загрузки *nosplash*. В некоторых случаях могут мешать
навязчивые сообщения от демона *rootdelayd*. Их можно отключить, дав
команду `*mkdir /.initrd/rootdelay/pause*`. В оболочке rdshell работает
автодополнение по клавише *Tab* (libreadline), доступны многие команды
из базовой системы, в том числе, имеются *less* и *vi*.

=== Тестирование

Пакет *make-initrd-bootchain-doc* содержит
link:https://github.com/klark973/make-initrd-bootchain/blob/sisyphus/bootchain-doc/testing/mksrvdata.sh[набор для тестирования]
с документацией, демон *chaind* поддерживает параметр *bc_test*=<NAME>,
предписывающий скопировать журнал и название успешно пройденного теста
<NAME> в каталог */var/log* rootfs второй стадии загрузки, а если в новой
rootfs нет */var/log*, тогда эта информация копируется в */dev/bootchain/*
или в */dev/pipeline/*, в зависимости от режима запуска демона.

