== Совместимость с pipeline

Демон *chaind* может работать в одном из двух режимов: «родном» и в «режиме
совместимости с *pipeline*». Для «родного» режима предусмотрен синтаксис:

[,,subs="verbatim,quotes"]
----
`*root=bootchain bootchain*`=...
----

«Режим совместимости с *pipeline*» активируется при записи в параметрах загрузки:

[,,subs="verbatim,quotes"]
----
`*root=pipeline pipeline*`=...
----

.Сходства и различия между двумя режимами перечислены в таблице:
[valign="top",options="header,compact,pgwide,unbreakable",cols="1,1,1"]
|===========================================================================
|Действие или значение         |режим «pipeline»           |режим «bootchain»
|Завершение и переход в stage2 |шаг может выйти с кодом 2  |шаг должен вызвать break_bc_loop()
|Шаг вызвал break_bc_loop()    |демон завершается          |демон завершается
|Шаг завершился с кодом 0      |переход к следующему шагу  |переход к следующему шагу
|Шаг завершился с кодом 2      |демон завершается          |обработка ошибки
|Шаг завершился с кодом >0     |обработка ошибки           |обработка ошибки
|Значение $mntdir              |/dev/pipeline              |/dev/bootchain
|Журнал отладки                |/var/log/pipelined.log     |/var/log/chaind.log
|===========================================================================

Обработка ошибки демоном *chaind* выполняется следующим образом. По умолчанию
разрешено 4 раза повторять зафейлившийся шаг с паузой в 2 секунды. Данный
режим отключается шагом «*noretry*» и включается обратно шагом «*retry*».
При отключении повторов демон выходит немедленно с соответствующей записью в
журнале отладки. *chaind* не допускает возвращения скриптами «шагов» ненулевых
кодов, но не знает, какие «шаги» теоретически могут фейлиться, а какие нет.

В «режиме совместимости с *pipeline*» демон делает исключение для обработки
возвращаемого кода 2, рассматривая его как команду немедленного прекращения
работы с соответствующей записью в журнале отладки. В любом режиме прекращение
работы демона выполняется сразу после выхода из скрипта «шага», вызвавшего
функцию *break_bc_loop()*. Значения по умолчанию для $mntdir и пути к журналу
отладки можно переопределить в конфиге */etc/sysconfig/bootchain*.

В последних версиях make-initrd оригинальная фича «*pipeline*» перестала
быть демоном, поскольку в самом make-initrd произошли архитектурные изменения
с момента форка «bootchain». Также в код make-initrd и в код фичи «pipeline»
перетекли некоторые вещи, в частности, описанная выше обработка ошибок теперь
и в «pipeline» стала более управляемой. Но современный «bootchain» всё больше
отличается от современного «pipeline», здесь требуется периодическая
синхронизация кода либо возвращение «bootchain» в апстрим make-initrd.

