[make-initrd] polld и проверка наличия /root/sbin/init

Leonid Krivoshein klark.devel at gmail.com
Sun Apr 9 23:18:25 MSK 2023


Привет!


On 4/6/23 12:29, Alexey Gladkov wrote:
> [...]
> Для более сложных случаев можно указать свой boot method:
>
> /lib/initrd/boot/method/SOMETHING/check
> /lib/initrd/boot/method/SOMETHING/action
>
> echo SOMETHING > /etc/initrd/method

Спасибо! Предположительно помогло создание симлинка check => /bin/false 
в altboot, т.е. способ решения проблемы через boot method сработал: ALT 
#45787. Но проблема была в другом месте...


>> [...]
>> bootchain после монтирования /sbin/init совершает ещё действия, поэтому нужно дождаться его выполнения.
>> В случае bootchain было бы надёжным запускать polld только тогда, когда он завершил свою работу.
>> Такое в принципе возможно?
> В новой версии make-initrd у pipeline будет шаг останавливающий или
> запускающий сервисы. В bootchain вы может сделать такой же шаг.

Если какие-то вспомогательные сервисы нужны или не нужны, конечно их 
можно запускать из цепочки. Но делать так с ключевыми сервисами 
make-initrd, назначение которых я даже толком не понимаю, мне кажется 
неправильным. Такой подход может поломать что-то ещё.


> Хотя я
> считаю более правильным сделать свой boot method с нужными дополнительными
> проверками.

В ходе разборок заметил странную штуку...

1. pipeline раньше использовал telinit 2 в шаге rootfs.
2. bootchain делал изначально точно так же.
3. В какой-то момент в pipeline/rootfs поменялся механизм: вместо 
telinit 2 стал перезаписываться boot method => localdev.
4. Почти сразу я портировал это изменение в bootchain/rootfs.
5. И pipeline, и bootchain изначально меняют boot method на себя и оба 
не предоставляют функций check и action для проверки специального 
условия нахождения корня, полагаясь на то, что когда цепочка будет 
завершена, метод загрузки переключится на localdev и там уже есть нужный 
функционал проверки.
7. Странное и неожиданное здесь то, что данный функционал работает 
параллельно с pipeline или bootchain несмотря на то, что метод загрузки 
изменён в самом начале цепочки -- это и есть причина рейса.
8. Для pipeline данная проблема остаётся в равной степени актуальной.
9. Для bootchain сделал лишь одно изменение: перенёс переключение на 
метод localdev из шага rootfs за конец цикла демона chaind чтобы 
успевать переписать в stage2 файл журнала.
10. Добавлять в bootchain или pipeline проверку успешности прохождения 
цепочки, наверное, можно, но я не стал городить огород, поскольку на 
Сизифных регулярках, в основном, используется altboot поверх bootchain.
11. Проверять что-либо в altboot смысла не было -- он не первый и не 
последний шаг bootchain, просто переписать boot method -- недостаточно, 
т.к. bootchain это делает, а толку ноль, но объединив всё вместе с 
симлинком на /bin/false результат неожиданно проблему вылечил.

Короче говоря, в make-initrd проверка метода localdev почему-то 
срабатывает, даже если метод загрузки установлен не localdev, и побороть 
это помогает только создание собственного check.



-- 
WBR, Leonid Krivoshein.


More information about the Make-initrd mailing list