From: Leonid Krivoshein <klark.devel@gmail.com>
To: make-initrd@lists.altlinux.org
Subject: Re: [make-initrd] I: ncurses experiment
Date: Sat, 17 Oct 2026 01:22:06 +0300
Message-ID: <cb6c58f9-ce20-47af-a6be-7d56eb8389a9@gmail.com> (raw)
In-Reply-To: <atIypMvHsKDddY84@example.org>
Привет!
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.
next prev parent reply other threads:[~2026-10-16 22:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-23 13:53 Alexey Gladkov
2026-10-16 14:20 ` Alexey Gladkov
2026-10-16 22:22 ` Leonid Krivoshein [this message]
2026-10-17 9:57 ` Alexey Gladkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cb6c58f9-ce20-47af-a6be-7d56eb8389a9@gmail.com \
--to=klark.devel@gmail.com \
--cc=make-initrd@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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