From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 26 Oct 2021 21:16:00 +0200 From: Alexey Gladkov To: make-initrd@lists.altlinux.org Message-ID: <20211026191600.srasvg6dbltxrsjw@example.org> References: <20211024172323.DBBE6A5E66@lists.altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20211024172323.DBBE6A5E66@lists.altlinux.org> Subject: Re: [make-initrd] [PATCH v6 21/22] bootchain-core: adds ability to bring the daemon to the foreground X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Oct 2021 19:16:02 -0000 Archived-At: List-Archive: On Sun, Oct 24, 2021 at 08:23:23PM +0300, Leonid Krivoshein wrote: > Also introduces configuration parameter BC_FGVT_ACTIVATE and new pseudo-step > "fg". This is only works together with the "bootchain-interactive" feature > included to initramfs. Jointly features "bootchain-core" and "bootchain- > interactive" they lay the foundation for building simple text installers > in the stage1. Напомни пожалуйста, а что мешает демону из бэкграунда писать на указанный терминал и читать с него ? Типа вот так: exec /dev/tty2 2>&1 > See README.md for more details. > > Signed-off-by: Leonid Krivoshein > --- > features/bootchain-core/README.md | 16 +++++++ > .../data/bin/bootchain-sh-functions | 2 + > features/bootchain-core/data/sbin/chaind | 45 ++++++++++++++++--- > 3 files changed, 58 insertions(+), 5 deletions(-) > > diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md > index ab89181..943b4b0 100644 > --- a/features/bootchain-core/README.md > +++ b/features/bootchain-core/README.md > @@ -50,11 +50,18 @@ us to optimize fill in `initramfs` only which we are need. > > - Modularity: loading methods are initially separated from the common > code and daemon. > +- Provides the ability to bring the daemon to the foreground at any time. This > + restarts the `chaind` process on a specific terminal, although initially the > + daemon is started in the background. > - Some steps (actions) are built directly into the code of the main loop > of the `chaind` daemon, external scripts are not called to execute them. > Such pseudo-steps allow you to control, basically, the internal state of the > daemon and should not be taken into account in the boot chain, as if they are > hidden. > +- Optionally, the daemon can work in conjunction with the `bootchain-interactive` > + feature, can move to the foreground and continue working on a specific terminal, > + by default, tty2. Jointly features `bootchain-core` and `bootchain-interactive` > + they lay the foundation for building simple text installers in stage1. > - The `chaind` daemon allows you to overload the chain with a new set of steps, > thanks to this, you can change the logic of work "on the fly", support loops > and conditional jumps, in text dialogs it is an opportunity to go back. > @@ -147,6 +154,11 @@ parameters: > should be output in the background. By default, the value is 3, respectively, > the log is output to tty3. An empty value allows you to disable log output > to any terminal. > +- `BC_FGVT_ACTIVATE` - delay in seconds before activating the interactive > + terminal, by default tty2 is activated after 2 seconds in debug mode > + or after 8 seconds in normal mode. An empty value instructs to activate > + the interactive terminal immediately. This configuration option only works > + together with the `bootchain-interactive` features included in initramfs. > - `BC_LOGFILE` - the full path to the log file or the name of a special device, > to which debugging messages will be output. In NATIVE mode, the default value > is `/var/log/chaind.log`, in COMPATIBILITY mode with `pipeline` the default > @@ -165,6 +177,10 @@ embedded in the code of the main loop of the `boot chain-loop` daemon, do > not need additional parameters and should not be taken into account when > addressing, as if they are hidden. > > +- `fg` - provides the transfer of the daemon to interactive mode when building > + initramfs with `bootchain-interactive` features. The `bootchain-core` itself > + is not interactivity required, but some other steps may need it, such as > + `altboot`. > - `noop` - does not perform any actions and is designed to pull off the results > on the of the previous step from the of the next step, which can > be useful, for example, when we don`t want the results of the `waitdev` step > diff --git a/features/bootchain-core/data/bin/bootchain-sh-functions b/features/bootchain-core/data/bin/bootchain-sh-functions > index 3a9ec6b..743a8f9 100644 > --- a/features/bootchain-core/data/bin/bootchain-sh-functions > +++ b/features/bootchain-core/data/bin/bootchain-sh-functions > @@ -25,6 +25,8 @@ else > pipeline_mode= > fi > > +[ -n "$BC_DEBUG" ] && BC_FGVT_ACTIVATE=1 || > + BC_FGVT_ACTIVATE="${BC_FGVT_ACTIVATE:-7}" > BC_NEXTCHAIN=/.initrd/bootchain/bootchain.next > BC_PASSED=/.initrd/bootchain/passed > handlerdir=/lib/bootchain > diff --git a/features/bootchain-core/data/sbin/chaind b/features/bootchain-core/data/sbin/chaind > index e8ce94a..68a1aae 100755 > --- a/features/bootchain-core/data/sbin/chaind > +++ b/features/bootchain-core/data/sbin/chaind > @@ -2,11 +2,12 @@ > > . bootchain-sh-functions > > -bcretry=1 > +bcretry="${bcretry:-1}" > pidfile="/var/run/$PROG.pid" > -chainsteps="$BOOTCHAIN" > -stepnum=0 > -prevdir= > +chainsteps="${chainsteps-}" > +stepnum="${stepnum:-0}" > +prevdir="${prevdir-}" > +BC_IM_supported= > > > exit_handler() > @@ -25,6 +26,8 @@ debug() > } > > > +# Only when daemon started first time > +if [ "x${1-}" != "x--foreground" ]; then "x" тут признак чего ? не надо этого. > [ ! -f "$pidfile" ] || > fatal "already running" > set_cleanup_handler exit_handler > @@ -57,12 +60,44 @@ debug() > mountpoint -q -- "$mntdir" || > run mount -t tmpfs tmpfs "$mntdir" ||: > > + chainsteps="$BOOTCHAIN" > +fi > + > +# Check that interactive mode supports > +if has_feature bootchain-interactive; then > + . interactive-sh-functions > + > + [ "x${1-}" != "x--foreground" ] || > + IM_activate "$BC_FGVT_ACTIVATE" "$BC_LOGFILE" > + BC_IM_supported=1 > +fi > + > rc=0 > while [ -n "$chainsteps" ]; do > name="${chainsteps%%,*}" > exe="$handlerdir/$name" > > - if [ "$name" = noop ]; then > + if [ "$name" = fg ]; then > + [ -n "$BC_IM_supported" ] || > + fatal "bootchain-interactive feature required" > + assign "callnum" "\${callnum_$name:-0}" > + chainsteps="${chainsteps#$name}" > + chainsteps="${chainsteps#,}" > + > + if IM_is_active; then > + message "[$callnum] Step '$name' has ignored" > + else > + message "[$callnum] Switching to foreground" > + > + callnum=$((1 + $callnum)) > + assign "callnum_$name" "\$callnum" > + > + export stepnum chainsteps callnum_fg prevdir bcretry > + > + IM_exec "$0" --foreground > + fi > + > + elif [ "$name" = noop ]; then > chainsteps="${chainsteps#$name}" > chainsteps="${chainsteps#,}" > prevdir= > -- > 2.24.1 > > _______________________________________________ > Make-initrd mailing list > Make-initrd@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/make-initrd > -- Rgrds, legion