[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