[make-initrd] Fwd: [#269003] TESTED make-initrd.git=2.14.1-alt1

Leonid Krivoshein klark.devel at gmail.com
Tue Apr 6 20:38:27 MSK 2021


06.04.2021 11:44, Alexey Gladkov пишет:
> On Tue, Apr 06, 2021 at 01:51:30AM +0300, Leonid Krivoshein wrote:
>> 8. Можно сделать общее описание входа/выхода для всех поддерживаемых шагов и
>> выполнять необходимые проверки до и после выполнения шага, чтобы не не
>> делать этого внутри самих шагов. Такое описание будет полезно и для шага
>> debug. Шаги могут быть транзитными (pass-thru).
> Я не хочу навязывать что должны шага принимать и уж тем более нельзя
> навязывать, что они должны возвращать. Например, waitdev ничего не
> монтирует т.е. на выходе нет ничего кроме задержки перед следующим шагом.
>
> Могут быть шаги, которые будут спрашивать что-то у пользователя. Описывать
> такое очень сложно.

Можно сделать необязательным описание входа. Если не описано, считать, 
что на входе может быть что угодно и задача шага -- проверить это 
самостоятельно и вывести fatal(). Если же есть описание, проверку может 
делать сам pipeline. ANY -- что угодно, DEV -- устройство, DIR -- 
каталог, PASS -- шаг не обрабатывает вход, вместо этого он должен быть 
напрямую связан с выходом без обработки, т.е. в данном случае pipeline 
должен передать выход предыдущего шага на вход следующего шага или 
первого, который не PASS.

Иначе каждый шаг начинается с проверок и вывода fatal(), а в конце 
сейчас приходится использовать специально написанную для данного случая 
pass_thru_pipeline(). Именно эту однотипную и примитивную обработку 
предлагаю перетащить в pipeline, чтобы не делать её на каждом шаге.

И вообще я бы заменил передачу dev на devname или симлинк. Чтобы не 
видеть таких путей в mtab ни в stage1, ни в stage2:

/dev/pipeline/dst/pipe1/dev ==> /dev/sr0



> Как организовывать debug это другой вопрос. Можно добавить в шаги больше
> verbose сообщений. Можно также сделать шаг shell, который даст консоль.
>
>> [уже не про pipeline]
>>
>> Иногда нужно не делать switch_root "$rootmnt" "$INIT", а нужно просто
>> запустить скрипт "$INIT" с подмонтированного "$rootmnt", полностью остановив
>> счётчик таймаута загрузки, и разрешив интерактивное взаимодействие. При этом
>> make-initrd с запущенными фоновыми процессами может продолжать работать, а
>> организацию выключения/перезагрузки можно возложить на запущенный скрипт.
>> Как лучше реализовать аналог data/etc/rc.d/rc.sysexec?
> Ты всегда можешь придумать свой "метод" загрузки.
>
> Для обычных систем это localdev [1], который подразумевает пинок init,
> чтобы тот выполнил rc.sysexec.
>
> Но ты можешь это изменить и придумать свою последовательность (какую
> хочешь). Например вот фича [2], которая реализует "метод" bootloader,
> который показывает меню и делает kexec.
>
> [1] https://github.com/osboot/make-initrd/tree/master/data/lib/initrd/boot/method/localdev
> [2] https://github.com/osboot/make-initrd-bootloader

Это прекрасно, большое спасибо!

Теперь и rescue-launcher для всяких развёртывалок можно перетащить в 
stage1...



-- 
Best regards,
Leonid Krivoshein.



More information about the Make-initrd mailing list