* [make-initrd] I: ncurses experiment @ 2025-12-23 13:53 Alexey Gladkov 2026-10-16 14:20 ` Alexey Gladkov 0 siblings, 1 reply; 4+ messages in thread From: Alexey Gladkov @ 2025-12-23 13:53 UTC (permalink / raw) To: make-initrd Привет! Я попробовал поэкспериментировать с текстовыми диалогами. Я держал в голове встраиваемые системы и make-initrd. Если использовать обычный в таких случаях dialog(1), то разным скриптам, его использующим, необходимо договариваться кто в данный момент владеет терминалом. Проблема усугубляется, если у системы serial или netconsole. Можно использовать screen/tmux для переключения клиентов терминала, но у этих мультиплексеров не всегда удобный API для переключений клиентов. Плюс приходится всё-равно думать кого в данный момент показывать. Я подумал, что можно упростить жизнь, если сделать диспетчер, который владел бы терминалом и параллельно отображал бы диалоги по запросам скриптов. Скрипт может послать запрос на создание диалога и либо заблокироваться и ожидать результат, либо продолжить заниматься своими делами и проверять состояние диалога. Диспетчер же берёт на себя сериализацию запросов (т.к. ncurses не поддерживает multithreads), переключение фокуса между диалогами, переключение пользовательского ввода, сохраняет и возвращает клиенту состояние диалогов. В принципе, это у меня получилось. Есть диспетчер и диалоги в виде плагинов. Есть немного документации и тестов. https://github.com/osboot/plainmouth -- Rgrds, legion ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [make-initrd] I: ncurses experiment 2025-12-23 13:53 [make-initrd] I: ncurses experiment Alexey Gladkov @ 2026-10-16 14:20 ` Alexey Gladkov 2026-10-16 22:22 ` Leonid Krivoshein 0 siblings, 1 reply; 4+ messages in thread From: Alexey Gladkov @ 2026-10-16 14:20 UTC (permalink / raw) To: make-initrd On Tue, Dec 23, 2025 at 02:53:21PM +0100, Alexey Gladkov wrote: > Привет! > > Я попробовал поэкспериментировать с текстовыми диалогами. Я держал в > голове встраиваемые системы и make-initrd. > > Если использовать обычный в таких случаях dialog(1), то разным скриптам, > его использующим, необходимо договариваться кто в данный момент владеет > терминалом. Проблема усугубляется, если у системы serial или netconsole. > > Можно использовать screen/tmux для переключения клиентов терминала, но у > этих мультиплексеров не всегда удобный API для переключений клиентов. Плюс > приходится всё-равно думать кого в данный момент показывать. > > Я подумал, что можно упростить жизнь, если сделать диспетчер, который > владел бы терминалом и параллельно отображал бы диалоги по запросам > скриптов. > > Скрипт может послать запрос на создание диалога и либо заблокироваться и > ожидать результат, либо продолжить заниматься своими делами и проверять > состояние диалога. > > Диспетчер же берёт на себя сериализацию запросов (т.к. ncurses не > поддерживает multithreads), переключение фокуса между диалогами, > переключение пользовательского ввода, сохраняет и возвращает клиенту > состояние диалогов. > > В принципе, это у меня получилось. Есть диспетчер и диалоги в виде > плагинов. Есть немного документации и тестов. > > https://github.com/osboot/plainmouth Я несколько продвинулся в этом эксперименте. Я сделал плагины, чтобы создавать достаточно сложные интерфейсы. Теперь у меня есть аналог dialog(1) для некоторой совместимости. Я надеюсь попробовать сделать фичу для вывода диалогов через plainmouth. Надеюсь найду время. -- Rgrds, legion ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [make-initrd] I: ncurses experiment 2026-10-16 14:20 ` Alexey Gladkov @ 2026-10-16 22:22 ` Leonid Krivoshein 2026-10-17 9:57 ` Alexey Gladkov 0 siblings, 1 reply; 4+ messages in thread From: Leonid Krivoshein @ 2026-10-16 22:22 UTC (permalink / raw) To: make-initrd Привет! On 10/16/26 5:20 PM, Alexey Gladkov wrote: > On Tue, Dec 23, 2025 at 02:53:21PM +0100, Alexey Gladkov wrote: >> Привет! >> >> Я попробовал поэкспериментировать с текстовыми диалогами. Я держал в >> голове встраиваемые системы и make-initrd. >> >> Если использовать обычный в таких случаях dialog(1), то разным скриптам, >> его использующим, необходимо договариваться кто в данный момент владеет >> терминалом. Проблема усугубляется, если у системы serial или netconsole. >> >> Можно использовать screen/tmux для переключения клиентов терминала, но у >> этих мультиплексеров не всегда удобный API для переключений клиентов. Плюс >> приходится всё-равно думать кого в данный момент показывать. >> >> Я подумал, что можно упростить жизнь, если сделать диспетчер, который >> владел бы терминалом и параллельно отображал бы диалоги по запросам >> скриптов. >> >> Скрипт может послать запрос на создание диалога и либо заблокироваться и >> ожидать результат, либо продолжить заниматься своими делами и проверять >> состояние диалога. >> >> Диспетчер же берёт на себя сериализацию запросов (т.к. ncurses не >> поддерживает multithreads), переключение фокуса между диалогами, >> переключение пользовательского ввода, сохраняет и возвращает клиенту >> состояние диалогов. >> >> В принципе, это у меня получилось. Есть диспетчер и диалоги в виде >> плагинов. Есть немного документации и тестов. >> >> https://github.com/osboot/plainmouth > > Я несколько продвинулся в этом эксперименте. Я сделал плагины, чтобы > создавать достаточно сложные интерфейсы. Теперь у меня есть аналог > dialog(1) для некоторой совместимости. > > Я надеюсь попробовать сделать фичу для вывода диалогов через plainmouth. > Надеюсь найду время. > Пока в Сизиф не опакечено и нет примера-фичи, не очень понятно. По документации юскейс тоже не очень понятен. Сложно представить себе несогласованные скрипты из разных фич make-initrd, выводящие разные диалоги на единственный терминал, с нагромождением которых придётся разбираться пользователю. Кода для разделения единственного терминала /dev/console через tmux на разные сессии в качестве замены TTY сейчас в основной ветке не вижу, есть наброски в отдельных ветках, типа use-tmux [1]. Как мы говорили раньше, хотелось бы замены bootchain-interactive [2] на уровне всего make-initrd. Конечно, с удобными диалогами, когда можно обходиться без параметров, которые и так легко вычислить. Мне понятна концепция "своя сессия на каждую фичу, у которой есть ввод данных от пользователя либо есть вывод прогресса длительно выполняющихся процессов". При пошаговой загрузке диалоги открываются последовательно. Для аварийной консоли rdshell -- свой сеанс, для вывода статусов демонов (/dev/console) -- свой, для общего лога демонов, если нужно, третий сеанс. Если какой-то фиче потребовалось вывести диалог ввода (например, пароль на LUKS), её tmux-сессия становится активной, а сразу после ввода фича может вернуть фокус ввода или это сделает make-initrd при завершении tmux-сессии этой фичи. В bootchain-interactive отложенная на 8 секунд активация диалогового TTY и немедленная, если возникает диалог ввода. Такой подход позволяет избежать ненужного мелькания чего-либо про загружаемые процессы, если это происходит довольно быстро. В то же время, ошибки или ввод данных требует немедленного внимания. Если внимание потребуется двум и более не связанным фичам, не вижу проблем передавать фокус в очерёдности, обратной поступлению запросов. Ссылки: 1. https://github.com/osboot/make-initrd/commit/817d9ed89f39a8ead233af9b3d5a5bfa170037b0 2. https://github.com/klark973/make-initrd-bootchain/blob/sisyphus/bootchain-interactive/README.md -- WBR, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [make-initrd] I: ncurses experiment 2026-10-16 22:22 ` Leonid Krivoshein @ 2026-10-17 9:57 ` Alexey Gladkov 0 siblings, 0 replies; 4+ messages in thread From: Alexey Gladkov @ 2026-10-17 9:57 UTC (permalink / raw) To: make-initrd On Sat, Oct 17, 2026 at 01:22:06AM +0300, Leonid Krivoshein wrote: > > Я несколько продвинулся в этом эксперименте. Я сделал плагины, чтобы > > создавать достаточно сложные интерфейсы. Теперь у меня есть аналог > > dialog(1) для некоторой совместимости. > > > > Я надеюсь попробовать сделать фичу для вывода диалогов через plainmouth. > > Надеюсь найду время. > > > > Пока в Сизиф не опакечено и нет примера-фичи, не очень понятно. По > документации юскейс тоже не очень понятен. Сложно представить себе > несогласованные скрипты из разных фич make-initrd, выводящие разные диалоги > на единственный терминал, с нагромождением которых придётся разбираться > пользователю. Да, я знаю, что ты не понимаешь моей задумки :) Я написал для самоотчета и для подписчиков, которых ещё не знаю. В друг кого-нибудь заинтересует. Но твой bootchain-interactive делает тоже самое. Он рисует диалоги из разных мест скрипта. plainmouth сведёт всё на один экран и даст более удобный способ реагировать на события в диалоге. Он не избавит от необходимости синхронизации между скриптами. Плюс, некоторые вещи ты просто не получишь от обычного dialog, но уже есть в plainmouth вроде эвентов от изменения полей и возможности менять форму в ответ на них. Я постарался покрыть plainmouth тестами. Некоторые из них можно запускать интерактивно. > Кода для разделения единственного терминала /dev/console через tmux на > разные сессии в качестве замены TTY сейчас в основной ветке не вижу, есть > наброски в отдельных ветках, типа use-tmux [1]. > > Как мы говорили раньше, хотелось бы замены bootchain-interactive [2] на > уровне всего make-initrd. Конечно, с удобными диалогами, когда можно > обходиться без параметров, которые и так легко вычислить. > > Мне понятна концепция "своя сессия на каждую фичу, у которой есть ввод > данных от пользователя либо есть вывод прогресса длительно выполняющихся > процессов". При пошаговой загрузке диалоги открываются последовательно. Для > аварийной консоли rdshell -- свой сеанс, для вывода статусов демонов > (/dev/console) -- свой, для общего лога демонов, если нужно, третий сеанс. > > Если какой-то фиче потребовалось вывести диалог ввода (например, пароль на > LUKS), её tmux-сессия становится активной, а сразу после ввода фича может > вернуть фокус ввода или это сделает make-initrd при завершении tmux-сессии > этой фичи. В bootchain-interactive отложенная на 8 секунд активация > диалогового TTY и немедленная, если возникает диалог ввода. > > Такой подход позволяет избежать ненужного мелькания чего-либо про > загружаемые процессы, если это происходит довольно быстро. В то же время, > ошибки или ввод данных требует немедленного внимания. Если внимание > потребуется двум и более не связанным фичам, не вижу проблем передавать > фокус в очерёдности, обратной поступлению запросов. > > > Ссылки: > > 1. https://github.com/osboot/make-initrd/commit/817d9ed89f39a8ead233af9b3d5a5bfa170037b0 > 2. https://github.com/klark973/make-initrd-bootchain/blob/sisyphus/bootchain-interactive/README.md > > > -- > WBR, Leonid Krivoshein. > > _______________________________________________ > Make-initrd mailing list > Make-initrd@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/make-initrd -- Rgrds, legion ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-10-17 9:57 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-12-23 13:53 [make-initrd] I: ncurses experiment Alexey Gladkov 2026-10-16 14:20 ` Alexey Gladkov 2026-10-16 22:22 ` Leonid Krivoshein 2026-10-17 9:57 ` Alexey Gladkov
Make-initrd development discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \ make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com public-inbox-index make-initrd Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.make-initrd AGPL code for this site: git clone https://public-inbox.org/public-inbox.git