[make-initrd] make pseudo GUI from bootchain-interactime common feature
Leonid Krivoshein
klark.devel at gmail.com
Mon Jun 28 19:34:02 MSK 2021
28.06.2021 19:06, Alexey Gladkov пишет:
> On Mon, Jun 28, 2021 at 05:43:48PM +0300, Leonid Krivoshein wrote:
>>> [...]
>>> Леонид, а у тебя какие планы на bootchain-interactive ?
>> Планы -- как можно быстрее интегрировать всю связку в make-initrd.
>>
>> Идея переместить bootchain-interactive на верхний уровень и сделать частью
>> make-initrd, независимой от bootchain была с самого начала, поэтому весь код
>> этой фичи так написан, что он совсем не зависит от других модулей bootchain.
>> Есть, правда, пара "но". Именно bootchain-interactive, как концепция,
>> создана наспех, для написания остального кода altboot, поэтому её хорошо бы
>> поревьювить именно в части общей пригодности интерфейса и арифметики.
> Ну это не проблема.
>
> Кстати, однажды Олег Нестеров подсказал мне вот такой код:
>
> ttysz()
> {
> local esc cols rows
> echo -ne "\e[s\e[1000;1000H\e[6n\e[u"
> IFS=';[' read -s -t2 -dR esc rows cols ||
> { echo >&2 'ttysz() FAILED'; return 0; }
> stty rows $rows cols $cols
> }
>
> Думаю, что его можно модифицировать и использовать для твоих нужд.
Для определения размеров TTY и для сохранения/восстановления консоли в
первых реализациях я тоже использовал stty. Но потом обнаружил, что
сохранение/восстановление поддерживается далеко не всеми TTY, поэтому
использовал отдельную консоль, которую просто чищу за собой, а
определение размера не проблема, dialog'ом её тоже можно решать
достаточно надёжно. Если оставить как сейчас -- не будет лишней зависимости.
>> Второй момент куда более важный. bootchain (изначально pipeline) мне видится
>> как решение проблемы синхронизации последовательности выполняемых действий
>> независимо от последовательности входящих событий. Так, фича overlayroot в
>> bootchain сейчас может "гоняться" с фичей "resume" make-initrd. С ней вообще
>> много чего может "гоняться".
> Я специально не трогал pipeline, чтобы не ломать тебе ничего. Я решал
> примерно такую же проблему с kickstart. На время работы таких фич как
> kickstart и pipeline нужно выключать обработку эвентов в ueventd. Но не
> всех, а только тех, что отвечают за разбор того, что пришло из udev.
>
> Это реализовано в kickstart. Перед запуском kickstart ставит на паузу
> очередь udev и снимает с паузы после обработки сценария (если управление
> возвращается initramfs). Насколько это хорошее решение пока не знаю, но
> это работает.
>
> Примерно это же можно делать и в bootchain т.е. блокировать обработку
> очереди udev эвентов при заходе в условный main_loop.
>
Интересно, надо будет посмотреть повнимательней.
>> Было бы здорово сделать весь bootchain частью
>> интерфейса make-initrd, и чтобы код разных его фич можно было более тесно
>> интегрировать с bootchain, при необходимости. В первую очередь network, да и
>> всё, что можно конфигурировать через диалоги, запрос паролей не только на
>> токены, но и crypto-luks. Но это такие мечты и отдалённые задачи, наверняка
>> решаемые уже после того, как удастся заапстримить bootchain.
> Ты наверно имел в виду не весь bootchain, а фичу с диалогами ?
Нет, имел ввиду весь bootchain. И даже более широко. Было бы хорошо в
самом make-initrd иметь наряду с параллельной событийно-ориентированной
обработкой интерфейс, позволяющий выполнять что угодно последовательно,
не только с диалогами. pipeline/bootchain эту задачу решают, но возможно
на уровне интерфейса make-initrd её можно решить ещё лучше, а bootchain
со своими "входами" и "выходами" сделать частным использованием этого
общего интерфейса make-initrd. Некоторые вещи нужно обрабатывать
последовательно, а не как карта ляжет. Например resume, fsck, создание
оверлеев...
> Мне сразу в голову пришло примерно как это сделано в dpkg-configure. У нас
> же примерно такая же задача. У нас есть параметры, которые могут быть
> заданы, если нет, то о них нужно спросить или же использовать некие
> дефолты если возможно. Нужно будет поизучать как это у них уже
> реализовано.
Да, классная идея, но это уже следующий уровень интеллекта. Не уверен,
что сходу достижимый, по крайней мере, без изменения интерфейса
регистрируемых аргументов make-initrd. Но если отталкиваться не от
параметров make-initrd, а от того, как данные описываются в d-i
(dpkg-configure использует эту модель, если не ошибаюсь), то да, но
скорее всего диалоги там не автоматически формируются, а тоже используют
библиотеку доступа к этим данным. Давно изучал вопрос, поэтому плохо
помню, что там и как.
>> При написании документации (уже около 30 страниц) обнаружил пару
>> архитектурных изъяна в bootchain и сейчас их уже почти исправил, но пока не
>> выгрузил обновления. При этом добился полной совместимости с pipeline, для
>> его пользователей теперь вообще ничего можно не менять. С ipmi/novga
>> консолями и utf8 тоже пока остаётся вопрос, как решать, ещё не заходил на
>> эту задачу. И останется всё ещё раз прогнать на стендах, так-то оно вроде
>> работало. После этого можно переходить к движению в апстрим в твоим
>> участием! :-)
> Ok. Нет проблем :)
>
--
Best regards,
Leonid Krivoshein.
More information about the Make-initrd
mailing list