Make-initrd development discussion
 help / color / mirror / Atom feed
* Re: [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline
  @ 2021-10-26  9:08 ` Alexey Gladkov
  2021-10-26  9:39   ` Leonid Krivoshein
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Gladkov @ 2021-10-26  9:08 UTC (permalink / raw)
  To: make-initrd

On Sun, Oct 24, 2021 at 08:19:59PM +0300, Leonid Krivoshein wrote:
> Pipeline live as an add-in over bootchain-core for backward
> compatibility with already existing solutions.
> For bootchain-core it is planned to implement a number of
> new features to cover the tasks of bootloading the installer
> and live systems.
> 
> Signed-off-by: Leonid Krivoshein <klark.devel@gmail.com>
> ---
>  features/bootchain-core/README.md             | 82 +++++++++++++++++++
>  features/bootchain-core/config.mk             |  8 ++
>  .../data/etc/initrd/cmdline.d/bootchain-core} |  3 +-
>  .../data/etc/rc.d/init.d/bootchain}           |  8 +-
>  .../udev/rules.d/50-bootchain-waitdev.rules}  |  2 +-
>  .../data/lib/bootchain}/getimage              |  2 +-
>  .../data/lib/bootchain}/mountfs               |  2 +-
>  .../data/lib/bootchain}/overlayfs             |  2 +-
>  .../data/lib/bootchain}/rootfs                |  2 +-
>  .../data/lib/bootchain}/waitdev               |  4 +-
>  .../data/lib/initrd/cmdline.d/bootchain       |  6 ++
>  .../data/lib/initrd/cmdline.d/pipeline        |  2 +-
>  .../lib/uevent/filters/bootchain-waitdev}     |  4 +-
>  .../data/sbin/bootchain-sh-functions}         | 12 +--
>  .../data/sbin/chaind}                         | 22 ++---
>  features/bootchain-core/rules.mk              |  4 +
>  features/pipeline/config.mk                   |  9 +-
>  features/pipeline/rules.mk                    |  6 --
>  18 files changed, 134 insertions(+), 46 deletions(-)
>  create mode 100644 features/bootchain-core/README.md
>  create mode 100644 features/bootchain-core/config.mk
>  rename features/{pipeline/data/etc/initrd/cmdline.d/pipeline => bootchain-core/data/etc/initrd/cmdline.d/bootchain-core} (63%)
>  rename features/{pipeline/data/etc/rc.d/init.d/pipeline => bootchain-core/data/etc/rc.d/init.d/bootchain} (83%)
>  rename features/{pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules => bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules} (77%)
>  rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/getimage (93%)
>  rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/mountfs (91%)
>  rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/overlayfs (95%)
>  rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/rootfs (86%)
>  rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/waitdev (83%)
>  create mode 100755 features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>  rename features/{pipeline => bootchain-core}/data/lib/initrd/cmdline.d/pipeline (64%)
>  rename features/{pipeline/data/lib/uevent/filters/pipeline-waitdev => bootchain-core/data/lib/uevent/filters/bootchain-waitdev} (77%)
>  rename features/{pipeline/data/sbin/pipeline-sh-functions => bootchain-core/data/sbin/bootchain-sh-functions} (70%)
>  rename features/{pipeline/data/sbin/pipelined => bootchain-core/data/sbin/chaind} (78%)
>  create mode 100644 features/bootchain-core/rules.mk
> 
> diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md
> new file mode 100644
> index 0000000..ce2bf98
> --- /dev/null
> +++ b/features/bootchain-core/README.md
> @@ -0,0 +1,82 @@
> +# Feature: bootchain-core
> +
> +`bootchain-core` - it's a fork and further development the original
> +feature of `pipeline`. This feature allow us to consistently setup
> +steps-scripts one by one. For details about `pipeline` you can see
> +in ../features/pipeline/README.md.
> +
> +In fork process `pipeline` was divided by three parts:
> +
> +- `bootchain-core` - the main functional of feature `pipeline`, common
> +  API and daemon.
> +- `bootchain-getimage` - method to networking boot from ISO-image with
> +  the wget utility.
> +- `bootchain-waitdev` - method to boot from specified local media.
> +
> +The future work with `bootchain` allowed us to create a few modules.
> +They are expected to be upstream soon. This divide on modules allow
> +us to optimize fill in `initramfs` only which we are need.
> +
> +## Main components of bootchain-core
> +
> +- `/sbin/bootchain-sh-functions` - common API and evolution
> +  of `pipeline-sh-functions`.
> +- `/sbin/chaind` - daemon, evolution of `pipelined`.
> +- `/etc/rc.d/init.d/bootchain` - sysvinit start script.
> +
> +## Reasons of making fork and rename pipeline
> +
> +- A set of `bootchain` modules was developed in order to create a
> +  replacement in stage1 programs `propagator`, fully integrated into
> +  the run-time `make-initrd`. In the original version, the `pipeline`
> +  feature did not satisfy this need. At an early stage of development,
> +  it was not yet known what functionality `bootchain` would eventually
> +  have, how far it would go from the fork and be able to whether to be
> +  fully compatible with it.
> +- For some time, the development of `bootchain` was carried out independently
> +  of the main project `make-initrd`. To build and test bootable disks with
> +  `make-initrd` and `bootchain` so that `bootchain` does not depend on
> +  `make-initrd` versions, so that not intersect with the `pipeline` features
> +  built into the `make-initrd` and so as not to interfere the author of
> +  `make-initrd`, the `pipeline` feature had to be copied under a different
> +  name, giving it a more appropriate name at the same time.
> +- The result of the completed step is not always used next. Steps-scripts
> +  they can use the results not only of the previous one, but also of any
> +  earlier one the completed step. So it's not a pipeline in its purest
> +  form, but rather a chain loading steps, the sequence of actions performed.
> +
> +## External elements of the bootchain (steps-scripts)
> +
> +- `mountfs` - mounts a file or device from the result of the previous or other
> +  specified step.
> +- `overlayfs` - combines one or more elements of the boot chain using overlayfs.
> +- `rootfs` - forces the daemon to use the result of the previous element as the
> +  found root of stage 2.
> +
> +## Boot parameters
> +
> +- `bootchain=name1[,name2][,name3]` - defines the initial state of the boot
> +  chains, i.e. the steps that the daemon must go through one by one. These can
> +  be both built-in pseudo-steps and real scripts of the actions performed. The
> +  names these steps are listed separated by commas.
> +- `pipeline=name1[,name2][,name3]` - alias for `bootchain=...`.
> +- `mountfs=target` - specifies the file or device to be mounted.
> +- `overlayfs=list` - defines the list of elements to combine.
> +
> +## bootchain-sh-functions API
> +
> +- check_parameter() - checks that the required parameter is not empty, otherwise
> +  it exits via fatal().
> +- get_parameter() - outputs the value of the parameter of the current step by
> +  the index $callnum.
> +- resolve_target() - output the path to a file, directory or device, depending
> +  on from the parameter.
> +- run() - run an external command.
> +
> +## Example
> +
> +Cmdline: root=pipeline pipeline=getimage,mountfs,overlayfs,rootfs getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso mountfs=rescue
> +
> +Following these parameters, the daemon loads the image "vi-20140918-i586.iso",
> +mounts it via the loop device, mounts the "rescue" file from it as squashfs of
> +the root system, makes it writable using overlayfs and tries to boot from it.
> diff --git a/features/bootchain-core/config.mk b/features/bootchain-core/config.mk
> new file mode 100644
> index 0000000..33e66ed
> --- /dev/null
> +++ b/features/bootchain-core/config.mk
> @@ -0,0 +1,8 @@
> +$(call feature-requires,depmod-image add-udev-rules)
> +
> +BOOTCHAIN_CORE_DATADIR = $(FEATURESDIR)/bootchain-core/data
> +
> +BOOTCHAIN_CORE_RULES = \
> +	*-cdrom_id.rules
> +
> +BOOTCHAIN_CORE_MODULES = isofs squashfs overlay
> diff --git a/features/pipeline/data/etc/initrd/cmdline.d/pipeline b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> similarity index 63%
> rename from features/pipeline/data/etc/initrd/cmdline.d/pipeline
> rename to features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> index 4200d57..8af3a20 100644
> --- a/features/pipeline/data/etc/initrd/cmdline.d/pipeline
> +++ b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> @@ -1,4 +1,5 @@
> -register_parameter string PIPELINE
> +register_parameter string BOOTCHAIN
> +register_alias BOOTCHAIN PIPELINE
>  register_array string GETIMAGE
>  register_array string MOUNTFS
>  register_array string OVERLAYFS
> diff --git a/features/pipeline/data/etc/rc.d/init.d/pipeline b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> similarity index 83%
> rename from features/pipeline/data/etc/rc.d/init.d/pipeline
> rename to features/bootchain-core/data/etc/rc.d/init.d/bootchain
> index 89d9de5..1be6d39 100755
> --- a/features/pipeline/data/etc/rc.d/init.d/pipeline
> +++ b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> @@ -1,6 +1,6 @@
>  #!/bin/bash
>  ### BEGIN INIT INFO
> -# Provides:            pipeline
> +# Provides:            bootchain
>  # Required-Start:      uevent udev
>  # Should-Start:
>  # Required-Stop:
> @@ -13,14 +13,14 @@
>  . /.initrd/initenv
>  . /etc/init.d/template
>  
> -NAME=pipelined
> +NAME=chaind
>  PIDFILE="/var/run/$NAME.pid"
>  ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname $NAME"
>  
>  prepare() {
>  	local dir i n
>  
> -	dir=/.initrd/pipeline/waitdev
> +	dir=/.initrd/bootchain/waitdev
>  	mkdir -p -- "$dir"
>  
>  	i=0
> @@ -32,7 +32,7 @@ prepare() {
>  
>  start() {
>  	RETVAL=0
> -	if [ "${ROOT-}" = pipeline ]; then
> +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
>  		prepare
>  		start_daemon --background $ARGS "$NAME"
>  		RETVAL=$?
> diff --git a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> similarity index 77%
> rename from features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
> rename to features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> index e473deb..e4b8616 100644
> --- a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
> +++ b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> @@ -1 +1 @@
> -SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/pipeline-waitdev"
> +SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/bootchain-waitdev"
> diff --git a/features/pipeline/data/lib/pipeline/getimage b/features/bootchain-core/data/lib/bootchain/getimage
> similarity index 93%
> rename from features/pipeline/data/lib/pipeline/getimage
> rename to features/bootchain-core/data/lib/bootchain/getimage
> index 409ad14..1f141ac 100755
> --- a/features/pipeline/data/lib/pipeline/getimage
> +++ b/features/bootchain-core/data/lib/bootchain/getimage
> @@ -1,6 +1,6 @@
>  #!/bin/bash -efu
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  check_parameter GETIMAGE
>  url="$(get_parameter GETIMAGE)"
> diff --git a/features/pipeline/data/lib/pipeline/mountfs b/features/bootchain-core/data/lib/bootchain/mountfs
> similarity index 91%
> rename from features/pipeline/data/lib/pipeline/mountfs
> rename to features/bootchain-core/data/lib/bootchain/mountfs
> index d15ae91..45ffa68 100755
> --- a/features/pipeline/data/lib/pipeline/mountfs
> +++ b/features/bootchain-core/data/lib/bootchain/mountfs
> @@ -1,6 +1,6 @@
>  #!/bin/bash -efu
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  check_parameter MOUNTFS
>  param="$(get_parameter MOUNTFS)"
> diff --git a/features/pipeline/data/lib/pipeline/overlayfs b/features/bootchain-core/data/lib/bootchain/overlayfs
> similarity index 95%
> rename from features/pipeline/data/lib/pipeline/overlayfs
> rename to features/bootchain-core/data/lib/bootchain/overlayfs
> index 23b869b..58261cc 100755
> --- a/features/pipeline/data/lib/pipeline/overlayfs
> +++ b/features/bootchain-core/data/lib/bootchain/overlayfs
> @@ -1,6 +1,6 @@
>  #!/bin/bash -efu
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  target="$(get_parameter OVERLAYFS)"
>  
> diff --git a/features/pipeline/data/lib/pipeline/rootfs b/features/bootchain-core/data/lib/bootchain/rootfs
> similarity index 86%
> rename from features/pipeline/data/lib/pipeline/rootfs
> rename to features/bootchain-core/data/lib/bootchain/rootfs
> index e4b2ca9..6ac64a6 100755
> --- a/features/pipeline/data/lib/pipeline/rootfs
> +++ b/features/bootchain-core/data/lib/bootchain/rootfs
> @@ -1,6 +1,6 @@
>  #!/bin/bash -efu
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  [ -n "$prevdir" ] ||
>  	fatal "no previous step to use as rootfs"
> diff --git a/features/pipeline/data/lib/pipeline/waitdev b/features/bootchain-core/data/lib/bootchain/waitdev
> similarity index 83%
> rename from features/pipeline/data/lib/pipeline/waitdev
> rename to features/bootchain-core/data/lib/bootchain/waitdev
> index f818cc5..74af6ea 100755
> --- a/features/pipeline/data/lib/pipeline/waitdev
> +++ b/features/bootchain-core/data/lib/bootchain/waitdev
> @@ -1,12 +1,12 @@
>  #!/bin/bash -efu
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  check_parameter WAITDEV
>  devspec="$(get_parameter WAITDEV)"
>  
>  while [ -n "$devspec" ]; do
> -	envfile="/.initrd/pipeline/waitdev/$callnum"
> +	envfile="/.initrd/bootchain/waitdev/$callnum"
>  
>  	if [ -s "$envfile" ]; then
>  		devfile=
> diff --git a/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
> new file mode 100755
> index 0000000..b692f6d
> --- /dev/null
> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
> @@ -0,0 +1,6 @@
> +#!/bin/bash -efu
> +
> +. /.initrd/initenv
> +
> +[ "${ROOT-}" != bootchain ] ||
> +	echo bootchain > /etc/initrd/method
> diff --git a/features/pipeline/data/lib/initrd/cmdline.d/pipeline b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> similarity index 64%
> rename from features/pipeline/data/lib/initrd/cmdline.d/pipeline
> rename to features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> index ac65b68..21b164c 100755
> --- a/features/pipeline/data/lib/initrd/cmdline.d/pipeline
> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> @@ -3,4 +3,4 @@
>  . /.initrd/initenv
>  
>  [ "${ROOT-}" != pipeline ] ||
> -	echo pipeline > /etc/initrd/method
> +	echo bootchain > /etc/initrd/method
> diff --git a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> similarity index 77%
> rename from features/pipeline/data/lib/uevent/filters/pipeline-waitdev
> rename to features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> index d975006..272aee7 100755
> --- a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev
> +++ b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> @@ -3,8 +3,8 @@
>  . /.initrd/initenv
>  . initrd-sh-functions
>  
> -mkdir -p -- /.initrd/pipeline/waitdev
> -cd /.initrd/pipeline/waitdev
> +mkdir -p -- /.initrd/bootchain/waitdev
> +cd /.initrd/bootchain/waitdev/
>  
>  i=0
>  while [ "$i" -lt "${WAITDEV:-0}" ]; do
> diff --git a/features/pipeline/data/sbin/pipeline-sh-functions b/features/bootchain-core/data/sbin/bootchain-sh-functions
> similarity index 70%
> rename from features/pipeline/data/sbin/pipeline-sh-functions
> rename to features/bootchain-core/data/sbin/bootchain-sh-functions
> index 662d069..fa6201f 100644
> --- a/features/pipeline/data/sbin/pipeline-sh-functions
> +++ b/features/bootchain-core/data/sbin/bootchain-sh-functions
> @@ -1,13 +1,13 @@
>  #!/bin/bash -efu
>  
> -if [ -z "${__pipeline_sh_functions-}" ]; then
> -__pipeline_sh_functions=1
> +if [ -z "${__bootchain_sh_functions-}" ]; then
> +__bootchain_sh_functions=1
>  
>  . /.initrd/initenv
>  . shell-signal
>  
> -handlerdir="/lib/pipeline"
> -mntdir="/dev/pipeline"
> +handlerdir=/lib/bootchain
> +[ "${ROOT-}" = pipeline ] && mntdir=/dev/pipeline || mntdir=/dev/bootchain
>  
>  check_parameter()
>  {
> @@ -29,7 +29,7 @@ resolve_target()
>  		'')
>  			;;
>  		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
> -			target="$mntdir/dst/$target"
> +			target="$mntdir/dst/step${target:4}"
>  			;;

Тут явно что-то не то.

Ты переименовал pipe* в step* и сделал это изменение для сохранения
обратной совместимости. Только что будет если в качестве аргумента этой
функции передадут новое имя step* ?

Кажется, потерян ещё один кейс:

		step[0-9]|step[0-9][0-9]|step[0-9][0-9][0-9])
			target="$mntdir/dst/$target"
			;;

>  		*)
>  			if [ -z "${prevdir-}" ]; then
> @@ -48,4 +48,4 @@ run()
>  	"$@"
>  }
>  
> -fi # __pipeline_sh_functions
> +fi # __bootchain_sh_functions
> diff --git a/features/pipeline/data/sbin/pipelined b/features/bootchain-core/data/sbin/chaind
> similarity index 78%
> rename from features/pipeline/data/sbin/pipelined
> rename to features/bootchain-core/data/sbin/chaind
> index 1d30061..d401101 100755
> --- a/features/pipeline/data/sbin/pipelined
> +++ b/features/bootchain-core/data/sbin/chaind
> @@ -21,7 +21,7 @@ exit_handler()
>  set_cleanup_handler exit_handler
>  echo "$$" >"$pidfile"
>  
> -. pipeline-sh-functions
> +. bootchain-sh-functions
>  
>  
>  [ "${RDLOG-}" != 'console' ] ||
> @@ -35,22 +35,22 @@ mkdir -p -- "$mntdir"
>  mountpoint -q "$mntdir" ||
>  	mount -t tmpfs tmpfs "$mntdir" ||:
>  
> -pipenum=0
> -pipe="$PIPELINE"
> +stepnum=0
> +chainsteps="$BOOTCHAIN"
>  datadir=
>  destdir=
>  
> -while [ -n "$pipe" ]; do
> -	name="${pipe%%,*}"
> +while [ -n "$chainsteps" ]; do
> +	name="${chainsteps%%,*}"
>  	exe="$handlerdir/$name"
>  
>  	if [ -x "$exe" ]; then
>  		eval "callnum=\"\${callnum_$name:-0}\""
>  
> -		datadir="$mntdir/src/pipe$pipenum"
> -		destdir="$mntdir/dst/pipe$pipenum"
> +		datadir="$mntdir/src/step$stepnum"
> +		destdir="$mntdir/dst/step$stepnum"
>  
> -		[ "$pipenum" != 0 ] ||
> +		[ "$stepnum" != 0 ] ||
>  			prevdir=""
>  
>  		mkdir -p -- "$datadir" "$destdir"
> @@ -80,8 +80,8 @@ while [ -n "$pipe" ]; do
>  		eval "callnum_$name=\"\$callnum\""
>  	fi
>  
> -	pipe="${pipe#$name}"
> -	pipe="${pipe#,}"
> +	chainsteps="${chainsteps#$name}"
> +	chainsteps="${chainsteps#,}"
>  
> -	pipenum=$(($pipenum + 1))
> +	stepnum=$(($stepnum + 1))
>  done
> diff --git a/features/bootchain-core/rules.mk b/features/bootchain-core/rules.mk
> new file mode 100644
> index 0000000..724a0b0
> --- /dev/null
> +++ b/features/bootchain-core/rules.mk
> @@ -0,0 +1,4 @@
> +MODULES_TRY_ADD += $(BOOTCHAIN_CORE_MODULES)
> +
> +PUT_UDEV_RULES += $(BOOTCHAIN_CORE_RULES)
> +PUT_FEATURE_DIRS += $(BOOTCHAIN_CORE_DATADIR)
> diff --git a/features/pipeline/config.mk b/features/pipeline/config.mk
> index 9172528..3ff29ac 100644
> --- a/features/pipeline/config.mk
> +++ b/features/pipeline/config.mk
> @@ -1,8 +1 @@
> -$(call feature-requires,depmod-image add-udev-rules)
> -
> -PIPELINE_DATADIR = $(FEATURESDIR)/pipeline/data
> -
> -PIPELINE_RULES = \
> -	*-cdrom_id.rules
> -
> -PIPELINE_MODULES = isofs squashfs overlay
> +$(call feature-requires,bootchain-core)
> diff --git a/features/pipeline/rules.mk b/features/pipeline/rules.mk
> index 3ccd260..e69de29 100644
> --- a/features/pipeline/rules.mk
> +++ b/features/pipeline/rules.mk
> @@ -1,6 +0,0 @@
> -MODULES_TRY_ADD += $(PIPELINE_MODULES)
> -
> -PUT_UDEV_RULES += $(PIPELINE_RULES)
> -
> -PUT_FEATURE_DIRS  += $(PIPELINE_DATADIR)
> -PUT_FEATURE_FILES += $(PIPELINE_FILES)
> -- 
> 2.24.1
> 
> _______________________________________________
> 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

* Re: [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline
  2021-10-26  9:08 ` [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline Alexey Gladkov
@ 2021-10-26  9:39   ` Leonid Krivoshein
  2021-10-26 11:24     ` Alexey Gladkov
  0 siblings, 1 reply; 4+ messages in thread
From: Leonid Krivoshein @ 2021-10-26  9:39 UTC (permalink / raw)
  To: make-initrd

Привет!


26.10.2021 12:08, Alexey Gladkov пишет:
> On Sun, Oct 24, 2021 at 08:19:59PM +0300, Leonid Krivoshein wrote:
>> Pipeline live as an add-in over bootchain-core for backward
>> compatibility with already existing solutions.
>> For bootchain-core it is planned to implement a number of
>> new features to cover the tasks of bootloading the installer
>> and live systems.
>>
>> Signed-off-by: Leonid Krivoshein <klark.devel@gmail.com>
>> ---
>>   features/bootchain-core/README.md             | 82 +++++++++++++++++++
>>   features/bootchain-core/config.mk             |  8 ++
>>   .../data/etc/initrd/cmdline.d/bootchain-core} |  3 +-
>>   .../data/etc/rc.d/init.d/bootchain}           |  8 +-
>>   .../udev/rules.d/50-bootchain-waitdev.rules}  |  2 +-
>>   .../data/lib/bootchain}/getimage              |  2 +-
>>   .../data/lib/bootchain}/mountfs               |  2 +-
>>   .../data/lib/bootchain}/overlayfs             |  2 +-
>>   .../data/lib/bootchain}/rootfs                |  2 +-
>>   .../data/lib/bootchain}/waitdev               |  4 +-
>>   .../data/lib/initrd/cmdline.d/bootchain       |  6 ++
>>   .../data/lib/initrd/cmdline.d/pipeline        |  2 +-
>>   .../lib/uevent/filters/bootchain-waitdev}     |  4 +-
>>   .../data/sbin/bootchain-sh-functions}         | 12 +--
>>   .../data/sbin/chaind}                         | 22 ++---
>>   features/bootchain-core/rules.mk              |  4 +
>>   features/pipeline/config.mk                   |  9 +-
>>   features/pipeline/rules.mk                    |  6 --
>>   18 files changed, 134 insertions(+), 46 deletions(-)
>>   create mode 100644 features/bootchain-core/README.md
>>   create mode 100644 features/bootchain-core/config.mk
>>   rename features/{pipeline/data/etc/initrd/cmdline.d/pipeline => bootchain-core/data/etc/initrd/cmdline.d/bootchain-core} (63%)
>>   rename features/{pipeline/data/etc/rc.d/init.d/pipeline => bootchain-core/data/etc/rc.d/init.d/bootchain} (83%)
>>   rename features/{pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules => bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules} (77%)
>>   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/getimage (93%)
>>   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/mountfs (91%)
>>   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/overlayfs (95%)
>>   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/rootfs (86%)
>>   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/waitdev (83%)
>>   create mode 100755 features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>>   rename features/{pipeline => bootchain-core}/data/lib/initrd/cmdline.d/pipeline (64%)
>>   rename features/{pipeline/data/lib/uevent/filters/pipeline-waitdev => bootchain-core/data/lib/uevent/filters/bootchain-waitdev} (77%)
>>   rename features/{pipeline/data/sbin/pipeline-sh-functions => bootchain-core/data/sbin/bootchain-sh-functions} (70%)
>>   rename features/{pipeline/data/sbin/pipelined => bootchain-core/data/sbin/chaind} (78%)
>>   create mode 100644 features/bootchain-core/rules.mk
>>
>> diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md
>> new file mode 100644
>> index 0000000..ce2bf98
>> --- /dev/null
>> +++ b/features/bootchain-core/README.md
>> @@ -0,0 +1,82 @@
>> +# Feature: bootchain-core
>> +
>> +`bootchain-core` - it's a fork and further development the original
>> +feature of `pipeline`. This feature allow us to consistently setup
>> +steps-scripts one by one. For details about `pipeline` you can see
>> +in ../features/pipeline/README.md.
>> +
>> +In fork process `pipeline` was divided by three parts:
>> +
>> +- `bootchain-core` - the main functional of feature `pipeline`, common
>> +  API and daemon.
>> +- `bootchain-getimage` - method to networking boot from ISO-image with
>> +  the wget utility.
>> +- `bootchain-waitdev` - method to boot from specified local media.
>> +
>> +The future work with `bootchain` allowed us to create a few modules.
>> +They are expected to be upstream soon. This divide on modules allow
>> +us to optimize fill in `initramfs` only which we are need.
>> +
>> +## Main components of bootchain-core
>> +
>> +- `/sbin/bootchain-sh-functions` - common API and evolution
>> +  of `pipeline-sh-functions`.
>> +- `/sbin/chaind` - daemon, evolution of `pipelined`.
>> +- `/etc/rc.d/init.d/bootchain` - sysvinit start script.
>> +
>> +## Reasons of making fork and rename pipeline
>> +
>> +- A set of `bootchain` modules was developed in order to create a
>> +  replacement in stage1 programs `propagator`, fully integrated into
>> +  the run-time `make-initrd`. In the original version, the `pipeline`
>> +  feature did not satisfy this need. At an early stage of development,
>> +  it was not yet known what functionality `bootchain` would eventually
>> +  have, how far it would go from the fork and be able to whether to be
>> +  fully compatible with it.
>> +- For some time, the development of `bootchain` was carried out independently
>> +  of the main project `make-initrd`. To build and test bootable disks with
>> +  `make-initrd` and `bootchain` so that `bootchain` does not depend on
>> +  `make-initrd` versions, so that not intersect with the `pipeline` features
>> +  built into the `make-initrd` and so as not to interfere the author of
>> +  `make-initrd`, the `pipeline` feature had to be copied under a different
>> +  name, giving it a more appropriate name at the same time.
>> +- The result of the completed step is not always used next. Steps-scripts
>> +  they can use the results not only of the previous one, but also of any
>> +  earlier one the completed step. So it's not a pipeline in its purest
>> +  form, but rather a chain loading steps, the sequence of actions performed.
>> +
>> +## External elements of the bootchain (steps-scripts)
>> +
>> +- `mountfs` - mounts a file or device from the result of the previous or other
>> +  specified step.
>> +- `overlayfs` - combines one or more elements of the boot chain using overlayfs.
>> +- `rootfs` - forces the daemon to use the result of the previous element as the
>> +  found root of stage 2.
>> +
>> +## Boot parameters
>> +
>> +- `bootchain=name1[,name2][,name3]` - defines the initial state of the boot
>> +  chains, i.e. the steps that the daemon must go through one by one. These can
>> +  be both built-in pseudo-steps and real scripts of the actions performed. The
>> +  names these steps are listed separated by commas.
>> +- `pipeline=name1[,name2][,name3]` - alias for `bootchain=...`.
>> +- `mountfs=target` - specifies the file or device to be mounted.
>> +- `overlayfs=list` - defines the list of elements to combine.
>> +
>> +## bootchain-sh-functions API
>> +
>> +- check_parameter() - checks that the required parameter is not empty, otherwise
>> +  it exits via fatal().
>> +- get_parameter() - outputs the value of the parameter of the current step by
>> +  the index $callnum.
>> +- resolve_target() - output the path to a file, directory or device, depending
>> +  on from the parameter.
>> +- run() - run an external command.
>> +
>> +## Example
>> +
>> +Cmdline: root=pipeline pipeline=getimage,mountfs,overlayfs,rootfs getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso mountfs=rescue
>> +
>> +Following these parameters, the daemon loads the image "vi-20140918-i586.iso",
>> +mounts it via the loop device, mounts the "rescue" file from it as squashfs of
>> +the root system, makes it writable using overlayfs and tries to boot from it.
>> diff --git a/features/bootchain-core/config.mk b/features/bootchain-core/config.mk
>> new file mode 100644
>> index 0000000..33e66ed
>> --- /dev/null
>> +++ b/features/bootchain-core/config.mk
>> @@ -0,0 +1,8 @@
>> +$(call feature-requires,depmod-image add-udev-rules)
>> +
>> +BOOTCHAIN_CORE_DATADIR = $(FEATURESDIR)/bootchain-core/data
>> +
>> +BOOTCHAIN_CORE_RULES = \
>> +	*-cdrom_id.rules
>> +
>> +BOOTCHAIN_CORE_MODULES = isofs squashfs overlay
>> diff --git a/features/pipeline/data/etc/initrd/cmdline.d/pipeline b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>> similarity index 63%
>> rename from features/pipeline/data/etc/initrd/cmdline.d/pipeline
>> rename to features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>> index 4200d57..8af3a20 100644
>> --- a/features/pipeline/data/etc/initrd/cmdline.d/pipeline
>> +++ b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>> @@ -1,4 +1,5 @@
>> -register_parameter string PIPELINE
>> +register_parameter string BOOTCHAIN
>> +register_alias BOOTCHAIN PIPELINE
>>   register_array string GETIMAGE
>>   register_array string MOUNTFS
>>   register_array string OVERLAYFS
>> diff --git a/features/pipeline/data/etc/rc.d/init.d/pipeline b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> similarity index 83%
>> rename from features/pipeline/data/etc/rc.d/init.d/pipeline
>> rename to features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> index 89d9de5..1be6d39 100755
>> --- a/features/pipeline/data/etc/rc.d/init.d/pipeline
>> +++ b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> @@ -1,6 +1,6 @@
>>   #!/bin/bash
>>   ### BEGIN INIT INFO
>> -# Provides:            pipeline
>> +# Provides:            bootchain
>>   # Required-Start:      uevent udev
>>   # Should-Start:
>>   # Required-Stop:
>> @@ -13,14 +13,14 @@
>>   . /.initrd/initenv
>>   . /etc/init.d/template
>>   
>> -NAME=pipelined
>> +NAME=chaind
>>   PIDFILE="/var/run/$NAME.pid"
>>   ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname $NAME"
>>   
>>   prepare() {
>>   	local dir i n
>>   
>> -	dir=/.initrd/pipeline/waitdev
>> +	dir=/.initrd/bootchain/waitdev
>>   	mkdir -p -- "$dir"
>>   
>>   	i=0
>> @@ -32,7 +32,7 @@ prepare() {
>>   
>>   start() {
>>   	RETVAL=0
>> -	if [ "${ROOT-}" = pipeline ]; then
>> +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
>>   		prepare
>>   		start_daemon --background $ARGS "$NAME"
>>   		RETVAL=$?
>> diff --git a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>> similarity index 77%
>> rename from features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
>> rename to features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>> index e473deb..e4b8616 100644
>> --- a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
>> +++ b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>> @@ -1 +1 @@
>> -SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/pipeline-waitdev"
>> +SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/bootchain-waitdev"
>> diff --git a/features/pipeline/data/lib/pipeline/getimage b/features/bootchain-core/data/lib/bootchain/getimage
>> similarity index 93%
>> rename from features/pipeline/data/lib/pipeline/getimage
>> rename to features/bootchain-core/data/lib/bootchain/getimage
>> index 409ad14..1f141ac 100755
>> --- a/features/pipeline/data/lib/pipeline/getimage
>> +++ b/features/bootchain-core/data/lib/bootchain/getimage
>> @@ -1,6 +1,6 @@
>>   #!/bin/bash -efu
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   check_parameter GETIMAGE
>>   url="$(get_parameter GETIMAGE)"
>> diff --git a/features/pipeline/data/lib/pipeline/mountfs b/features/bootchain-core/data/lib/bootchain/mountfs
>> similarity index 91%
>> rename from features/pipeline/data/lib/pipeline/mountfs
>> rename to features/bootchain-core/data/lib/bootchain/mountfs
>> index d15ae91..45ffa68 100755
>> --- a/features/pipeline/data/lib/pipeline/mountfs
>> +++ b/features/bootchain-core/data/lib/bootchain/mountfs
>> @@ -1,6 +1,6 @@
>>   #!/bin/bash -efu
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   check_parameter MOUNTFS
>>   param="$(get_parameter MOUNTFS)"
>> diff --git a/features/pipeline/data/lib/pipeline/overlayfs b/features/bootchain-core/data/lib/bootchain/overlayfs
>> similarity index 95%
>> rename from features/pipeline/data/lib/pipeline/overlayfs
>> rename to features/bootchain-core/data/lib/bootchain/overlayfs
>> index 23b869b..58261cc 100755
>> --- a/features/pipeline/data/lib/pipeline/overlayfs
>> +++ b/features/bootchain-core/data/lib/bootchain/overlayfs
>> @@ -1,6 +1,6 @@
>>   #!/bin/bash -efu
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   target="$(get_parameter OVERLAYFS)"
>>   
>> diff --git a/features/pipeline/data/lib/pipeline/rootfs b/features/bootchain-core/data/lib/bootchain/rootfs
>> similarity index 86%
>> rename from features/pipeline/data/lib/pipeline/rootfs
>> rename to features/bootchain-core/data/lib/bootchain/rootfs
>> index e4b2ca9..6ac64a6 100755
>> --- a/features/pipeline/data/lib/pipeline/rootfs
>> +++ b/features/bootchain-core/data/lib/bootchain/rootfs
>> @@ -1,6 +1,6 @@
>>   #!/bin/bash -efu
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   [ -n "$prevdir" ] ||
>>   	fatal "no previous step to use as rootfs"
>> diff --git a/features/pipeline/data/lib/pipeline/waitdev b/features/bootchain-core/data/lib/bootchain/waitdev
>> similarity index 83%
>> rename from features/pipeline/data/lib/pipeline/waitdev
>> rename to features/bootchain-core/data/lib/bootchain/waitdev
>> index f818cc5..74af6ea 100755
>> --- a/features/pipeline/data/lib/pipeline/waitdev
>> +++ b/features/bootchain-core/data/lib/bootchain/waitdev
>> @@ -1,12 +1,12 @@
>>   #!/bin/bash -efu
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   check_parameter WAITDEV
>>   devspec="$(get_parameter WAITDEV)"
>>   
>>   while [ -n "$devspec" ]; do
>> -	envfile="/.initrd/pipeline/waitdev/$callnum"
>> +	envfile="/.initrd/bootchain/waitdev/$callnum"
>>   
>>   	if [ -s "$envfile" ]; then
>>   		devfile=
>> diff --git a/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>> new file mode 100755
>> index 0000000..b692f6d
>> --- /dev/null
>> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>> @@ -0,0 +1,6 @@
>> +#!/bin/bash -efu
>> +
>> +. /.initrd/initenv
>> +
>> +[ "${ROOT-}" != bootchain ] ||
>> +	echo bootchain > /etc/initrd/method
>> diff --git a/features/pipeline/data/lib/initrd/cmdline.d/pipeline b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>> similarity index 64%
>> rename from features/pipeline/data/lib/initrd/cmdline.d/pipeline
>> rename to features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>> index ac65b68..21b164c 100755
>> --- a/features/pipeline/data/lib/initrd/cmdline.d/pipeline
>> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>> @@ -3,4 +3,4 @@
>>   . /.initrd/initenv
>>   
>>   [ "${ROOT-}" != pipeline ] ||
>> -	echo pipeline > /etc/initrd/method
>> +	echo bootchain > /etc/initrd/method
>> diff --git a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>> similarity index 77%
>> rename from features/pipeline/data/lib/uevent/filters/pipeline-waitdev
>> rename to features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>> index d975006..272aee7 100755
>> --- a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev
>> +++ b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>> @@ -3,8 +3,8 @@
>>   . /.initrd/initenv
>>   . initrd-sh-functions
>>   
>> -mkdir -p -- /.initrd/pipeline/waitdev
>> -cd /.initrd/pipeline/waitdev
>> +mkdir -p -- /.initrd/bootchain/waitdev
>> +cd /.initrd/bootchain/waitdev/
>>   
>>   i=0
>>   while [ "$i" -lt "${WAITDEV:-0}" ]; do
>> diff --git a/features/pipeline/data/sbin/pipeline-sh-functions b/features/bootchain-core/data/sbin/bootchain-sh-functions
>> similarity index 70%
>> rename from features/pipeline/data/sbin/pipeline-sh-functions
>> rename to features/bootchain-core/data/sbin/bootchain-sh-functions
>> index 662d069..fa6201f 100644
>> --- a/features/pipeline/data/sbin/pipeline-sh-functions
>> +++ b/features/bootchain-core/data/sbin/bootchain-sh-functions
>> @@ -1,13 +1,13 @@
>>   #!/bin/bash -efu
>>   
>> -if [ -z "${__pipeline_sh_functions-}" ]; then
>> -__pipeline_sh_functions=1
>> +if [ -z "${__bootchain_sh_functions-}" ]; then
>> +__bootchain_sh_functions=1
>>   
>>   . /.initrd/initenv
>>   . shell-signal
>>   
>> -handlerdir="/lib/pipeline"
>> -mntdir="/dev/pipeline"
>> +handlerdir=/lib/bootchain
>> +[ "${ROOT-}" = pipeline ] && mntdir=/dev/pipeline || mntdir=/dev/bootchain
>>   
>>   check_parameter()
>>   {
>> @@ -29,7 +29,7 @@ resolve_target()
>>   		'')
>>   			;;
>>   		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
>> -			target="$mntdir/dst/$target"
>> +			target="$mntdir/dst/step${target:4}"
>>   			;;
> Тут явно что-то не то.
>
> Ты переименовал pipe* в step* и сделал это изменение для сохранения
> обратной совместимости. Только что будет если в качестве аргумента этой
> функции передадут новое имя step* ?

Очевидно, сейчас не будет реакции на step*.


> Кажется, потерян ещё один кейс:
>
> 		step[0-9]|step[0-9][0-9]|step[0-9][0-9][0-9])
> 			target="$mntdir/dst/$target"
> 			;;

Не потерян. Сначала тоже думал именно так реализовать, потом сделал 
немного иначе. В следующих коммитах это будет видно. Работает прямая 
адресация, как раньше -- pipe* и потом добавится step-<N>, адресация в 
обратную сторону относительно текущего шага. С минусом интуитивно 
понятней. Если хочешь, давай сделаем алиас step<N> = pipe<N> для прямой 
адресации.


>>   		*)
>>   			if [ -z "${prevdir-}" ]; then
>> @@ -48,4 +48,4 @@ run()
>>   	"$@"
>>   }
>>   
>> -fi # __pipeline_sh_functions
>> +fi # __bootchain_sh_functions
>> diff --git a/features/pipeline/data/sbin/pipelined b/features/bootchain-core/data/sbin/chaind
>> similarity index 78%
>> rename from features/pipeline/data/sbin/pipelined
>> rename to features/bootchain-core/data/sbin/chaind
>> index 1d30061..d401101 100755
>> --- a/features/pipeline/data/sbin/pipelined
>> +++ b/features/bootchain-core/data/sbin/chaind
>> @@ -21,7 +21,7 @@ exit_handler()
>>   set_cleanup_handler exit_handler
>>   echo "$$" >"$pidfile"
>>   
>> -. pipeline-sh-functions
>> +. bootchain-sh-functions
>>   
>>   
>>   [ "${RDLOG-}" != 'console' ] ||
>> @@ -35,22 +35,22 @@ mkdir -p -- "$mntdir"
>>   mountpoint -q "$mntdir" ||
>>   	mount -t tmpfs tmpfs "$mntdir" ||:
>>   
>> -pipenum=0
>> -pipe="$PIPELINE"
>> +stepnum=0
>> +chainsteps="$BOOTCHAIN"
>>   datadir=
>>   destdir=
>>   
>> -while [ -n "$pipe" ]; do
>> -	name="${pipe%%,*}"
>> +while [ -n "$chainsteps" ]; do
>> +	name="${chainsteps%%,*}"
>>   	exe="$handlerdir/$name"
>>   
>>   	if [ -x "$exe" ]; then
>>   		eval "callnum=\"\${callnum_$name:-0}\""
>>   
>> -		datadir="$mntdir/src/pipe$pipenum"
>> -		destdir="$mntdir/dst/pipe$pipenum"
>> +		datadir="$mntdir/src/step$stepnum"
>> +		destdir="$mntdir/dst/step$stepnum"
>>   
>> -		[ "$pipenum" != 0 ] ||
>> +		[ "$stepnum" != 0 ] ||
>>   			prevdir=""
>>   
>>   		mkdir -p -- "$datadir" "$destdir"
>> @@ -80,8 +80,8 @@ while [ -n "$pipe" ]; do
>>   		eval "callnum_$name=\"\$callnum\""
>>   	fi
>>   
>> -	pipe="${pipe#$name}"
>> -	pipe="${pipe#,}"
>> +	chainsteps="${chainsteps#$name}"
>> +	chainsteps="${chainsteps#,}"
>>   
>> -	pipenum=$(($pipenum + 1))
>> +	stepnum=$(($stepnum + 1))
>>   done
>> diff --git a/features/bootchain-core/rules.mk b/features/bootchain-core/rules.mk
>> new file mode 100644
>> index 0000000..724a0b0
>> --- /dev/null
>> +++ b/features/bootchain-core/rules.mk
>> @@ -0,0 +1,4 @@
>> +MODULES_TRY_ADD += $(BOOTCHAIN_CORE_MODULES)
>> +
>> +PUT_UDEV_RULES += $(BOOTCHAIN_CORE_RULES)
>> +PUT_FEATURE_DIRS += $(BOOTCHAIN_CORE_DATADIR)
>> diff --git a/features/pipeline/config.mk b/features/pipeline/config.mk
>> index 9172528..3ff29ac 100644
>> --- a/features/pipeline/config.mk
>> +++ b/features/pipeline/config.mk
>> @@ -1,8 +1 @@
>> -$(call feature-requires,depmod-image add-udev-rules)
>> -
>> -PIPELINE_DATADIR = $(FEATURESDIR)/pipeline/data
>> -
>> -PIPELINE_RULES = \
>> -	*-cdrom_id.rules
>> -
>> -PIPELINE_MODULES = isofs squashfs overlay
>> +$(call feature-requires,bootchain-core)
>> diff --git a/features/pipeline/rules.mk b/features/pipeline/rules.mk
>> index 3ccd260..e69de29 100644
>> --- a/features/pipeline/rules.mk
>> +++ b/features/pipeline/rules.mk
>> @@ -1,6 +0,0 @@
>> -MODULES_TRY_ADD += $(PIPELINE_MODULES)
>> -
>> -PUT_UDEV_RULES += $(PIPELINE_RULES)
>> -
>> -PUT_FEATURE_DIRS  += $(PIPELINE_DATADIR)
>> -PUT_FEATURE_FILES += $(PIPELINE_FILES)
>> -- 
>> 2.24.1
>>
>> _______________________________________________
>> Make-initrd mailing list
>> Make-initrd@lists.altlinux.org
>> https://lists.altlinux.org/mailman/listinfo/make-initrd
>>

-- 
Best regards,
Leonid Krivoshein.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline
  2021-10-26  9:39   ` Leonid Krivoshein
@ 2021-10-26 11:24     ` Alexey Gladkov
  2021-10-26 17:36       ` Leonid Krivoshein
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Gladkov @ 2021-10-26 11:24 UTC (permalink / raw)
  To: make-initrd

On Tue, Oct 26, 2021 at 12:39:07PM +0300, Leonid Krivoshein wrote:
> Привет!
> 
> 
> 26.10.2021 12:08, Alexey Gladkov пишет:
> > On Sun, Oct 24, 2021 at 08:19:59PM +0300, Leonid Krivoshein wrote:
> > > Pipeline live as an add-in over bootchain-core for backward
> > > compatibility with already existing solutions.
> > > For bootchain-core it is planned to implement a number of
> > > new features to cover the tasks of bootloading the installer
> > > and live systems.
> > > 
> > > Signed-off-by: Leonid Krivoshein <klark.devel@gmail.com>
> > > ---
> > >   features/bootchain-core/README.md             | 82 +++++++++++++++++++
> > >   features/bootchain-core/config.mk             |  8 ++
> > >   .../data/etc/initrd/cmdline.d/bootchain-core} |  3 +-
> > >   .../data/etc/rc.d/init.d/bootchain}           |  8 +-
> > >   .../udev/rules.d/50-bootchain-waitdev.rules}  |  2 +-
> > >   .../data/lib/bootchain}/getimage              |  2 +-
> > >   .../data/lib/bootchain}/mountfs               |  2 +-
> > >   .../data/lib/bootchain}/overlayfs             |  2 +-
> > >   .../data/lib/bootchain}/rootfs                |  2 +-
> > >   .../data/lib/bootchain}/waitdev               |  4 +-
> > >   .../data/lib/initrd/cmdline.d/bootchain       |  6 ++
> > >   .../data/lib/initrd/cmdline.d/pipeline        |  2 +-
> > >   .../lib/uevent/filters/bootchain-waitdev}     |  4 +-
> > >   .../data/sbin/bootchain-sh-functions}         | 12 +--
> > >   .../data/sbin/chaind}                         | 22 ++---
> > >   features/bootchain-core/rules.mk              |  4 +
> > >   features/pipeline/config.mk                   |  9 +-
> > >   features/pipeline/rules.mk                    |  6 --
> > >   18 files changed, 134 insertions(+), 46 deletions(-)
> > >   create mode 100644 features/bootchain-core/README.md
> > >   create mode 100644 features/bootchain-core/config.mk
> > >   rename features/{pipeline/data/etc/initrd/cmdline.d/pipeline => bootchain-core/data/etc/initrd/cmdline.d/bootchain-core} (63%)
> > >   rename features/{pipeline/data/etc/rc.d/init.d/pipeline => bootchain-core/data/etc/rc.d/init.d/bootchain} (83%)
> > >   rename features/{pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules => bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules} (77%)
> > >   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/getimage (93%)
> > >   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/mountfs (91%)
> > >   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/overlayfs (95%)
> > >   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/rootfs (86%)
> > >   rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/waitdev (83%)
> > >   create mode 100755 features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
> > >   rename features/{pipeline => bootchain-core}/data/lib/initrd/cmdline.d/pipeline (64%)
> > >   rename features/{pipeline/data/lib/uevent/filters/pipeline-waitdev => bootchain-core/data/lib/uevent/filters/bootchain-waitdev} (77%)
> > >   rename features/{pipeline/data/sbin/pipeline-sh-functions => bootchain-core/data/sbin/bootchain-sh-functions} (70%)
> > >   rename features/{pipeline/data/sbin/pipelined => bootchain-core/data/sbin/chaind} (78%)
> > >   create mode 100644 features/bootchain-core/rules.mk
> > > 
> > > diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md
> > > new file mode 100644
> > > index 0000000..ce2bf98
> > > --- /dev/null
> > > +++ b/features/bootchain-core/README.md
> > > @@ -0,0 +1,82 @@
> > > +# Feature: bootchain-core
> > > +
> > > +`bootchain-core` - it's a fork and further development the original
> > > +feature of `pipeline`. This feature allow us to consistently setup
> > > +steps-scripts one by one. For details about `pipeline` you can see
> > > +in ../features/pipeline/README.md.
> > > +
> > > +In fork process `pipeline` was divided by three parts:
> > > +
> > > +- `bootchain-core` - the main functional of feature `pipeline`, common
> > > +  API and daemon.
> > > +- `bootchain-getimage` - method to networking boot from ISO-image with
> > > +  the wget utility.
> > > +- `bootchain-waitdev` - method to boot from specified local media.
> > > +
> > > +The future work with `bootchain` allowed us to create a few modules.
> > > +They are expected to be upstream soon. This divide on modules allow
> > > +us to optimize fill in `initramfs` only which we are need.
> > > +
> > > +## Main components of bootchain-core
> > > +
> > > +- `/sbin/bootchain-sh-functions` - common API and evolution
> > > +  of `pipeline-sh-functions`.
> > > +- `/sbin/chaind` - daemon, evolution of `pipelined`.
> > > +- `/etc/rc.d/init.d/bootchain` - sysvinit start script.
> > > +
> > > +## Reasons of making fork and rename pipeline
> > > +
> > > +- A set of `bootchain` modules was developed in order to create a
> > > +  replacement in stage1 programs `propagator`, fully integrated into
> > > +  the run-time `make-initrd`. In the original version, the `pipeline`
> > > +  feature did not satisfy this need. At an early stage of development,
> > > +  it was not yet known what functionality `bootchain` would eventually
> > > +  have, how far it would go from the fork and be able to whether to be
> > > +  fully compatible with it.
> > > +- For some time, the development of `bootchain` was carried out independently
> > > +  of the main project `make-initrd`. To build and test bootable disks with
> > > +  `make-initrd` and `bootchain` so that `bootchain` does not depend on
> > > +  `make-initrd` versions, so that not intersect with the `pipeline` features
> > > +  built into the `make-initrd` and so as not to interfere the author of
> > > +  `make-initrd`, the `pipeline` feature had to be copied under a different
> > > +  name, giving it a more appropriate name at the same time.
> > > +- The result of the completed step is not always used next. Steps-scripts
> > > +  they can use the results not only of the previous one, but also of any
> > > +  earlier one the completed step. So it's not a pipeline in its purest
> > > +  form, but rather a chain loading steps, the sequence of actions performed.
> > > +
> > > +## External elements of the bootchain (steps-scripts)
> > > +
> > > +- `mountfs` - mounts a file or device from the result of the previous or other
> > > +  specified step.
> > > +- `overlayfs` - combines one or more elements of the boot chain using overlayfs.
> > > +- `rootfs` - forces the daemon to use the result of the previous element as the
> > > +  found root of stage 2.
> > > +
> > > +## Boot parameters
> > > +
> > > +- `bootchain=name1[,name2][,name3]` - defines the initial state of the boot
> > > +  chains, i.e. the steps that the daemon must go through one by one. These can
> > > +  be both built-in pseudo-steps and real scripts of the actions performed. The
> > > +  names these steps are listed separated by commas.
> > > +- `pipeline=name1[,name2][,name3]` - alias for `bootchain=...`.
> > > +- `mountfs=target` - specifies the file or device to be mounted.
> > > +- `overlayfs=list` - defines the list of elements to combine.
> > > +
> > > +## bootchain-sh-functions API
> > > +
> > > +- check_parameter() - checks that the required parameter is not empty, otherwise
> > > +  it exits via fatal().
> > > +- get_parameter() - outputs the value of the parameter of the current step by
> > > +  the index $callnum.
> > > +- resolve_target() - output the path to a file, directory or device, depending
> > > +  on from the parameter.
> > > +- run() - run an external command.
> > > +
> > > +## Example
> > > +
> > > +Cmdline: root=pipeline pipeline=getimage,mountfs,overlayfs,rootfs getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso mountfs=rescue
> > > +
> > > +Following these parameters, the daemon loads the image "vi-20140918-i586.iso",
> > > +mounts it via the loop device, mounts the "rescue" file from it as squashfs of
> > > +the root system, makes it writable using overlayfs and tries to boot from it.
> > > diff --git a/features/bootchain-core/config.mk b/features/bootchain-core/config.mk
> > > new file mode 100644
> > > index 0000000..33e66ed
> > > --- /dev/null
> > > +++ b/features/bootchain-core/config.mk
> > > @@ -0,0 +1,8 @@
> > > +$(call feature-requires,depmod-image add-udev-rules)
> > > +
> > > +BOOTCHAIN_CORE_DATADIR = $(FEATURESDIR)/bootchain-core/data
> > > +
> > > +BOOTCHAIN_CORE_RULES = \
> > > +	*-cdrom_id.rules
> > > +
> > > +BOOTCHAIN_CORE_MODULES = isofs squashfs overlay
> > > diff --git a/features/pipeline/data/etc/initrd/cmdline.d/pipeline b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> > > similarity index 63%
> > > rename from features/pipeline/data/etc/initrd/cmdline.d/pipeline
> > > rename to features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> > > index 4200d57..8af3a20 100644
> > > --- a/features/pipeline/data/etc/initrd/cmdline.d/pipeline
> > > +++ b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
> > > @@ -1,4 +1,5 @@
> > > -register_parameter string PIPELINE
> > > +register_parameter string BOOTCHAIN
> > > +register_alias BOOTCHAIN PIPELINE
> > >   register_array string GETIMAGE
> > >   register_array string MOUNTFS
> > >   register_array string OVERLAYFS
> > > diff --git a/features/pipeline/data/etc/rc.d/init.d/pipeline b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > similarity index 83%
> > > rename from features/pipeline/data/etc/rc.d/init.d/pipeline
> > > rename to features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > index 89d9de5..1be6d39 100755
> > > --- a/features/pipeline/data/etc/rc.d/init.d/pipeline
> > > +++ b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > @@ -1,6 +1,6 @@
> > >   #!/bin/bash
> > >   ### BEGIN INIT INFO
> > > -# Provides:            pipeline
> > > +# Provides:            bootchain
> > >   # Required-Start:      uevent udev
> > >   # Should-Start:
> > >   # Required-Stop:
> > > @@ -13,14 +13,14 @@
> > >   . /.initrd/initenv
> > >   . /etc/init.d/template
> > > -NAME=pipelined
> > > +NAME=chaind
> > >   PIDFILE="/var/run/$NAME.pid"
> > >   ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname $NAME"
> > >   prepare() {
> > >   	local dir i n
> > > -	dir=/.initrd/pipeline/waitdev
> > > +	dir=/.initrd/bootchain/waitdev
> > >   	mkdir -p -- "$dir"
> > >   	i=0
> > > @@ -32,7 +32,7 @@ prepare() {
> > >   start() {
> > >   	RETVAL=0
> > > -	if [ "${ROOT-}" = pipeline ]; then
> > > +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
> > >   		prepare
> > >   		start_daemon --background $ARGS "$NAME"
> > >   		RETVAL=$?
> > > diff --git a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> > > similarity index 77%
> > > rename from features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
> > > rename to features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> > > index e473deb..e4b8616 100644
> > > --- a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
> > > +++ b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
> > > @@ -1 +1 @@
> > > -SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/pipeline-waitdev"
> > > +SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/bootchain-waitdev"
> > > diff --git a/features/pipeline/data/lib/pipeline/getimage b/features/bootchain-core/data/lib/bootchain/getimage
> > > similarity index 93%
> > > rename from features/pipeline/data/lib/pipeline/getimage
> > > rename to features/bootchain-core/data/lib/bootchain/getimage
> > > index 409ad14..1f141ac 100755
> > > --- a/features/pipeline/data/lib/pipeline/getimage
> > > +++ b/features/bootchain-core/data/lib/bootchain/getimage
> > > @@ -1,6 +1,6 @@
> > >   #!/bin/bash -efu
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   check_parameter GETIMAGE
> > >   url="$(get_parameter GETIMAGE)"
> > > diff --git a/features/pipeline/data/lib/pipeline/mountfs b/features/bootchain-core/data/lib/bootchain/mountfs
> > > similarity index 91%
> > > rename from features/pipeline/data/lib/pipeline/mountfs
> > > rename to features/bootchain-core/data/lib/bootchain/mountfs
> > > index d15ae91..45ffa68 100755
> > > --- a/features/pipeline/data/lib/pipeline/mountfs
> > > +++ b/features/bootchain-core/data/lib/bootchain/mountfs
> > > @@ -1,6 +1,6 @@
> > >   #!/bin/bash -efu
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   check_parameter MOUNTFS
> > >   param="$(get_parameter MOUNTFS)"
> > > diff --git a/features/pipeline/data/lib/pipeline/overlayfs b/features/bootchain-core/data/lib/bootchain/overlayfs
> > > similarity index 95%
> > > rename from features/pipeline/data/lib/pipeline/overlayfs
> > > rename to features/bootchain-core/data/lib/bootchain/overlayfs
> > > index 23b869b..58261cc 100755
> > > --- a/features/pipeline/data/lib/pipeline/overlayfs
> > > +++ b/features/bootchain-core/data/lib/bootchain/overlayfs
> > > @@ -1,6 +1,6 @@
> > >   #!/bin/bash -efu
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   target="$(get_parameter OVERLAYFS)"
> > > diff --git a/features/pipeline/data/lib/pipeline/rootfs b/features/bootchain-core/data/lib/bootchain/rootfs
> > > similarity index 86%
> > > rename from features/pipeline/data/lib/pipeline/rootfs
> > > rename to features/bootchain-core/data/lib/bootchain/rootfs
> > > index e4b2ca9..6ac64a6 100755
> > > --- a/features/pipeline/data/lib/pipeline/rootfs
> > > +++ b/features/bootchain-core/data/lib/bootchain/rootfs
> > > @@ -1,6 +1,6 @@
> > >   #!/bin/bash -efu
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   [ -n "$prevdir" ] ||
> > >   	fatal "no previous step to use as rootfs"
> > > diff --git a/features/pipeline/data/lib/pipeline/waitdev b/features/bootchain-core/data/lib/bootchain/waitdev
> > > similarity index 83%
> > > rename from features/pipeline/data/lib/pipeline/waitdev
> > > rename to features/bootchain-core/data/lib/bootchain/waitdev
> > > index f818cc5..74af6ea 100755
> > > --- a/features/pipeline/data/lib/pipeline/waitdev
> > > +++ b/features/bootchain-core/data/lib/bootchain/waitdev
> > > @@ -1,12 +1,12 @@
> > >   #!/bin/bash -efu
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   check_parameter WAITDEV
> > >   devspec="$(get_parameter WAITDEV)"
> > >   while [ -n "$devspec" ]; do
> > > -	envfile="/.initrd/pipeline/waitdev/$callnum"
> > > +	envfile="/.initrd/bootchain/waitdev/$callnum"
> > >   	if [ -s "$envfile" ]; then
> > >   		devfile=
> > > diff --git a/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
> > > new file mode 100755
> > > index 0000000..b692f6d
> > > --- /dev/null
> > > +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
> > > @@ -0,0 +1,6 @@
> > > +#!/bin/bash -efu
> > > +
> > > +. /.initrd/initenv
> > > +
> > > +[ "${ROOT-}" != bootchain ] ||
> > > +	echo bootchain > /etc/initrd/method
> > > diff --git a/features/pipeline/data/lib/initrd/cmdline.d/pipeline b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> > > similarity index 64%
> > > rename from features/pipeline/data/lib/initrd/cmdline.d/pipeline
> > > rename to features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> > > index ac65b68..21b164c 100755
> > > --- a/features/pipeline/data/lib/initrd/cmdline.d/pipeline
> > > +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
> > > @@ -3,4 +3,4 @@
> > >   . /.initrd/initenv
> > >   [ "${ROOT-}" != pipeline ] ||
> > > -	echo pipeline > /etc/initrd/method
> > > +	echo bootchain > /etc/initrd/method
> > > diff --git a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> > > similarity index 77%
> > > rename from features/pipeline/data/lib/uevent/filters/pipeline-waitdev
> > > rename to features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> > > index d975006..272aee7 100755
> > > --- a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev
> > > +++ b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
> > > @@ -3,8 +3,8 @@
> > >   . /.initrd/initenv
> > >   . initrd-sh-functions
> > > -mkdir -p -- /.initrd/pipeline/waitdev
> > > -cd /.initrd/pipeline/waitdev
> > > +mkdir -p -- /.initrd/bootchain/waitdev
> > > +cd /.initrd/bootchain/waitdev/
> > >   i=0
> > >   while [ "$i" -lt "${WAITDEV:-0}" ]; do
> > > diff --git a/features/pipeline/data/sbin/pipeline-sh-functions b/features/bootchain-core/data/sbin/bootchain-sh-functions
> > > similarity index 70%
> > > rename from features/pipeline/data/sbin/pipeline-sh-functions
> > > rename to features/bootchain-core/data/sbin/bootchain-sh-functions
> > > index 662d069..fa6201f 100644
> > > --- a/features/pipeline/data/sbin/pipeline-sh-functions
> > > +++ b/features/bootchain-core/data/sbin/bootchain-sh-functions
> > > @@ -1,13 +1,13 @@
> > >   #!/bin/bash -efu
> > > -if [ -z "${__pipeline_sh_functions-}" ]; then
> > > -__pipeline_sh_functions=1
> > > +if [ -z "${__bootchain_sh_functions-}" ]; then
> > > +__bootchain_sh_functions=1
> > >   . /.initrd/initenv
> > >   . shell-signal
> > > -handlerdir="/lib/pipeline"
> > > -mntdir="/dev/pipeline"
> > > +handlerdir=/lib/bootchain
> > > +[ "${ROOT-}" = pipeline ] && mntdir=/dev/pipeline || mntdir=/dev/bootchain
> > >   check_parameter()
> > >   {
> > > @@ -29,7 +29,7 @@ resolve_target()
> > >   		'')
> > >   			;;
> > >   		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
> > > -			target="$mntdir/dst/$target"
> > > +			target="$mntdir/dst/step${target:4}"
> > >   			;;
> > Тут явно что-то не то.
> > 
> > Ты переименовал pipe* в step* и сделал это изменение для сохранения
> > обратной совместимости. Только что будет если в качестве аргумента этой
> > функции передадут новое имя step* ?
> 
> Очевидно, сейчас не будет реакции на step*.

Будет и будет совершенно непонятное поведение.

В патче не видно, но полный код:

resolve_target()
{
	local target="$1"
	case "${target%%/*}" in
		'')
			;;
		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
			target="$mntdir/dst/$target"
			;;
		*)
			if [ -z "${prevdir-}" ]; then
				message "no previous stop to use"
				return
			fi
			target="$prevdir/${target#/}"
			;;
	esac
	printf '%s' "$target"
}

Если target не пуст и не имеет префикс 'pipe', то будет работать последний
кейс то есть будет что-то типа target="$prevdir/step3". Такого каталога
нет поэтому будет непонятная ошибка.

> 
> > Кажется, потерян ещё один кейс:
> > 
> > 		step[0-9]|step[0-9][0-9]|step[0-9][0-9][0-9])
> > 			target="$mntdir/dst/$target"
> > 			;;
> 
> Не потерян. Сначала тоже думал именно так реализовать, потом сделал немного

Если не потерян, то получается странность. Ты так хотел уйти от термина
"pipe", но он продолжает использоваться в bootchain= и к нему добавляется
step как указатель на относительную позицию.

> иначе. В следующих коммитах это будет видно. Работает прямая адресация, как
> раньше -- pipe* и потом добавится step-<N>, адресация в обратную сторону
> относительно текущего шага. С минусом интуитивно понятней. Если хочешь,
> давай сделаем алиас step<N> = pipe<N> для прямой адресации.

Я относительную адресацию тоже прокомментировал.

> 
> > >   		*)
> > >   			if [ -z "${prevdir-}" ]; then
> > > @@ -48,4 +48,4 @@ run()
> > >   	"$@"
> > >   }
> > > -fi # __pipeline_sh_functions
> > > +fi # __bootchain_sh_functions
> > > diff --git a/features/pipeline/data/sbin/pipelined b/features/bootchain-core/data/sbin/chaind
> > > similarity index 78%
> > > rename from features/pipeline/data/sbin/pipelined
> > > rename to features/bootchain-core/data/sbin/chaind
> > > index 1d30061..d401101 100755
> > > --- a/features/pipeline/data/sbin/pipelined
> > > +++ b/features/bootchain-core/data/sbin/chaind
> > > @@ -21,7 +21,7 @@ exit_handler()
> > >   set_cleanup_handler exit_handler
> > >   echo "$$" >"$pidfile"
> > > -. pipeline-sh-functions
> > > +. bootchain-sh-functions
> > >   [ "${RDLOG-}" != 'console' ] ||
> > > @@ -35,22 +35,22 @@ mkdir -p -- "$mntdir"
> > >   mountpoint -q "$mntdir" ||
> > >   	mount -t tmpfs tmpfs "$mntdir" ||:
> > > -pipenum=0
> > > -pipe="$PIPELINE"
> > > +stepnum=0
> > > +chainsteps="$BOOTCHAIN"
> > >   datadir=
> > >   destdir=
> > > -while [ -n "$pipe" ]; do
> > > -	name="${pipe%%,*}"
> > > +while [ -n "$chainsteps" ]; do
> > > +	name="${chainsteps%%,*}"
> > >   	exe="$handlerdir/$name"
> > >   	if [ -x "$exe" ]; then
> > >   		eval "callnum=\"\${callnum_$name:-0}\""
> > > -		datadir="$mntdir/src/pipe$pipenum"
> > > -		destdir="$mntdir/dst/pipe$pipenum"
> > > +		datadir="$mntdir/src/step$stepnum"
> > > +		destdir="$mntdir/dst/step$stepnum"
> > > -		[ "$pipenum" != 0 ] ||
> > > +		[ "$stepnum" != 0 ] ||
> > >   			prevdir=""
> > >   		mkdir -p -- "$datadir" "$destdir"
> > > @@ -80,8 +80,8 @@ while [ -n "$pipe" ]; do
> > >   		eval "callnum_$name=\"\$callnum\""
> > >   	fi
> > > -	pipe="${pipe#$name}"
> > > -	pipe="${pipe#,}"
> > > +	chainsteps="${chainsteps#$name}"
> > > +	chainsteps="${chainsteps#,}"
> > > -	pipenum=$(($pipenum + 1))
> > > +	stepnum=$(($stepnum + 1))
> > >   done
> > > diff --git a/features/bootchain-core/rules.mk b/features/bootchain-core/rules.mk
> > > new file mode 100644
> > > index 0000000..724a0b0
> > > --- /dev/null
> > > +++ b/features/bootchain-core/rules.mk
> > > @@ -0,0 +1,4 @@
> > > +MODULES_TRY_ADD += $(BOOTCHAIN_CORE_MODULES)
> > > +
> > > +PUT_UDEV_RULES += $(BOOTCHAIN_CORE_RULES)
> > > +PUT_FEATURE_DIRS += $(BOOTCHAIN_CORE_DATADIR)
> > > diff --git a/features/pipeline/config.mk b/features/pipeline/config.mk
> > > index 9172528..3ff29ac 100644
> > > --- a/features/pipeline/config.mk
> > > +++ b/features/pipeline/config.mk
> > > @@ -1,8 +1 @@
> > > -$(call feature-requires,depmod-image add-udev-rules)
> > > -
> > > -PIPELINE_DATADIR = $(FEATURESDIR)/pipeline/data
> > > -
> > > -PIPELINE_RULES = \
> > > -	*-cdrom_id.rules
> > > -
> > > -PIPELINE_MODULES = isofs squashfs overlay
> > > +$(call feature-requires,bootchain-core)
> > > diff --git a/features/pipeline/rules.mk b/features/pipeline/rules.mk
> > > index 3ccd260..e69de29 100644
> > > --- a/features/pipeline/rules.mk
> > > +++ b/features/pipeline/rules.mk
> > > @@ -1,6 +0,0 @@
> > > -MODULES_TRY_ADD += $(PIPELINE_MODULES)
> > > -
> > > -PUT_UDEV_RULES += $(PIPELINE_RULES)
> > > -
> > > -PUT_FEATURE_DIRS  += $(PIPELINE_DATADIR)
> > > -PUT_FEATURE_FILES += $(PIPELINE_FILES)
> > > -- 
> > > 2.24.1
> > > 
> > > _______________________________________________
> > > Make-initrd mailing list
> > > Make-initrd@lists.altlinux.org
> > > https://lists.altlinux.org/mailman/listinfo/make-initrd
> > > 
> 
> -- 
> Best regards,
> 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

* Re: [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline
  2021-10-26 11:24     ` Alexey Gladkov
@ 2021-10-26 17:36       ` Leonid Krivoshein
  0 siblings, 0 replies; 4+ messages in thread
From: Leonid Krivoshein @ 2021-10-26 17:36 UTC (permalink / raw)
  To: make-initrd



26.10.2021 14:24, Alexey Gladkov пишет:
> On Tue, Oct 26, 2021 at 12:39:07PM +0300, Leonid Krivoshein wrote:
>> Привет!
>>
>>
>> 26.10.2021 12:08, Alexey Gladkov пишет:
>>> On Sun, Oct 24, 2021 at 08:19:59PM +0300, Leonid Krivoshein wrote:
>>>> Pipeline live as an add-in over bootchain-core for backward
>>>> compatibility with already existing solutions.
>>>> For bootchain-core it is planned to implement a number of
>>>> new features to cover the tasks of bootloading the installer
>>>> and live systems.
>>>>
>>>> Signed-off-by: Leonid Krivoshein <klark.devel@gmail.com>
>>>> ---
>>>>    features/bootchain-core/README.md             | 82 +++++++++++++++++++
>>>>    features/bootchain-core/config.mk             |  8 ++
>>>>    .../data/etc/initrd/cmdline.d/bootchain-core} |  3 +-
>>>>    .../data/etc/rc.d/init.d/bootchain}           |  8 +-
>>>>    .../udev/rules.d/50-bootchain-waitdev.rules}  |  2 +-
>>>>    .../data/lib/bootchain}/getimage              |  2 +-
>>>>    .../data/lib/bootchain}/mountfs               |  2 +-
>>>>    .../data/lib/bootchain}/overlayfs             |  2 +-
>>>>    .../data/lib/bootchain}/rootfs                |  2 +-
>>>>    .../data/lib/bootchain}/waitdev               |  4 +-
>>>>    .../data/lib/initrd/cmdline.d/bootchain       |  6 ++
>>>>    .../data/lib/initrd/cmdline.d/pipeline        |  2 +-
>>>>    .../lib/uevent/filters/bootchain-waitdev}     |  4 +-
>>>>    .../data/sbin/bootchain-sh-functions}         | 12 +--
>>>>    .../data/sbin/chaind}                         | 22 ++---
>>>>    features/bootchain-core/rules.mk              |  4 +
>>>>    features/pipeline/config.mk                   |  9 +-
>>>>    features/pipeline/rules.mk                    |  6 --
>>>>    18 files changed, 134 insertions(+), 46 deletions(-)
>>>>    create mode 100644 features/bootchain-core/README.md
>>>>    create mode 100644 features/bootchain-core/config.mk
>>>>    rename features/{pipeline/data/etc/initrd/cmdline.d/pipeline => bootchain-core/data/etc/initrd/cmdline.d/bootchain-core} (63%)
>>>>    rename features/{pipeline/data/etc/rc.d/init.d/pipeline => bootchain-core/data/etc/rc.d/init.d/bootchain} (83%)
>>>>    rename features/{pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules => bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules} (77%)
>>>>    rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/getimage (93%)
>>>>    rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/mountfs (91%)
>>>>    rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/overlayfs (95%)
>>>>    rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/rootfs (86%)
>>>>    rename features/{pipeline/data/lib/pipeline => bootchain-core/data/lib/bootchain}/waitdev (83%)
>>>>    create mode 100755 features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>>>>    rename features/{pipeline => bootchain-core}/data/lib/initrd/cmdline.d/pipeline (64%)
>>>>    rename features/{pipeline/data/lib/uevent/filters/pipeline-waitdev => bootchain-core/data/lib/uevent/filters/bootchain-waitdev} (77%)
>>>>    rename features/{pipeline/data/sbin/pipeline-sh-functions => bootchain-core/data/sbin/bootchain-sh-functions} (70%)
>>>>    rename features/{pipeline/data/sbin/pipelined => bootchain-core/data/sbin/chaind} (78%)
>>>>    create mode 100644 features/bootchain-core/rules.mk
>>>>
>>>> diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md
>>>> new file mode 100644
>>>> index 0000000..ce2bf98
>>>> --- /dev/null
>>>> +++ b/features/bootchain-core/README.md
>>>> @@ -0,0 +1,82 @@
>>>> +# Feature: bootchain-core
>>>> +
>>>> +`bootchain-core` - it's a fork and further development the original
>>>> +feature of `pipeline`. This feature allow us to consistently setup
>>>> +steps-scripts one by one. For details about `pipeline` you can see
>>>> +in ../features/pipeline/README.md.
>>>> +
>>>> +In fork process `pipeline` was divided by three parts:
>>>> +
>>>> +- `bootchain-core` - the main functional of feature `pipeline`, common
>>>> +  API and daemon.
>>>> +- `bootchain-getimage` - method to networking boot from ISO-image with
>>>> +  the wget utility.
>>>> +- `bootchain-waitdev` - method to boot from specified local media.
>>>> +
>>>> +The future work with `bootchain` allowed us to create a few modules.
>>>> +They are expected to be upstream soon. This divide on modules allow
>>>> +us to optimize fill in `initramfs` only which we are need.
>>>> +
>>>> +## Main components of bootchain-core
>>>> +
>>>> +- `/sbin/bootchain-sh-functions` - common API and evolution
>>>> +  of `pipeline-sh-functions`.
>>>> +- `/sbin/chaind` - daemon, evolution of `pipelined`.
>>>> +- `/etc/rc.d/init.d/bootchain` - sysvinit start script.
>>>> +
>>>> +## Reasons of making fork and rename pipeline
>>>> +
>>>> +- A set of `bootchain` modules was developed in order to create a
>>>> +  replacement in stage1 programs `propagator`, fully integrated into
>>>> +  the run-time `make-initrd`. In the original version, the `pipeline`
>>>> +  feature did not satisfy this need. At an early stage of development,
>>>> +  it was not yet known what functionality `bootchain` would eventually
>>>> +  have, how far it would go from the fork and be able to whether to be
>>>> +  fully compatible with it.
>>>> +- For some time, the development of `bootchain` was carried out independently
>>>> +  of the main project `make-initrd`. To build and test bootable disks with
>>>> +  `make-initrd` and `bootchain` so that `bootchain` does not depend on
>>>> +  `make-initrd` versions, so that not intersect with the `pipeline` features
>>>> +  built into the `make-initrd` and so as not to interfere the author of
>>>> +  `make-initrd`, the `pipeline` feature had to be copied under a different
>>>> +  name, giving it a more appropriate name at the same time.
>>>> +- The result of the completed step is not always used next. Steps-scripts
>>>> +  they can use the results not only of the previous one, but also of any
>>>> +  earlier one the completed step. So it's not a pipeline in its purest
>>>> +  form, but rather a chain loading steps, the sequence of actions performed.
>>>> +
>>>> +## External elements of the bootchain (steps-scripts)
>>>> +
>>>> +- `mountfs` - mounts a file or device from the result of the previous or other
>>>> +  specified step.
>>>> +- `overlayfs` - combines one or more elements of the boot chain using overlayfs.
>>>> +- `rootfs` - forces the daemon to use the result of the previous element as the
>>>> +  found root of stage 2.
>>>> +
>>>> +## Boot parameters
>>>> +
>>>> +- `bootchain=name1[,name2][,name3]` - defines the initial state of the boot
>>>> +  chains, i.e. the steps that the daemon must go through one by one. These can
>>>> +  be both built-in pseudo-steps and real scripts of the actions performed. The
>>>> +  names these steps are listed separated by commas.
>>>> +- `pipeline=name1[,name2][,name3]` - alias for `bootchain=...`.
>>>> +- `mountfs=target` - specifies the file or device to be mounted.
>>>> +- `overlayfs=list` - defines the list of elements to combine.
>>>> +
>>>> +## bootchain-sh-functions API
>>>> +
>>>> +- check_parameter() - checks that the required parameter is not empty, otherwise
>>>> +  it exits via fatal().
>>>> +- get_parameter() - outputs the value of the parameter of the current step by
>>>> +  the index $callnum.
>>>> +- resolve_target() - output the path to a file, directory or device, depending
>>>> +  on from the parameter.
>>>> +- run() - run an external command.
>>>> +
>>>> +## Example
>>>> +
>>>> +Cmdline: root=pipeline pipeline=getimage,mountfs,overlayfs,rootfs getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso mountfs=rescue
>>>> +
>>>> +Following these parameters, the daemon loads the image "vi-20140918-i586.iso",
>>>> +mounts it via the loop device, mounts the "rescue" file from it as squashfs of
>>>> +the root system, makes it writable using overlayfs and tries to boot from it.
>>>> diff --git a/features/bootchain-core/config.mk b/features/bootchain-core/config.mk
>>>> new file mode 100644
>>>> index 0000000..33e66ed
>>>> --- /dev/null
>>>> +++ b/features/bootchain-core/config.mk
>>>> @@ -0,0 +1,8 @@
>>>> +$(call feature-requires,depmod-image add-udev-rules)
>>>> +
>>>> +BOOTCHAIN_CORE_DATADIR = $(FEATURESDIR)/bootchain-core/data
>>>> +
>>>> +BOOTCHAIN_CORE_RULES = \
>>>> +	*-cdrom_id.rules
>>>> +
>>>> +BOOTCHAIN_CORE_MODULES = isofs squashfs overlay
>>>> diff --git a/features/pipeline/data/etc/initrd/cmdline.d/pipeline b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>>>> similarity index 63%
>>>> rename from features/pipeline/data/etc/initrd/cmdline.d/pipeline
>>>> rename to features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>>>> index 4200d57..8af3a20 100644
>>>> --- a/features/pipeline/data/etc/initrd/cmdline.d/pipeline
>>>> +++ b/features/bootchain-core/data/etc/initrd/cmdline.d/bootchain-core
>>>> @@ -1,4 +1,5 @@
>>>> -register_parameter string PIPELINE
>>>> +register_parameter string BOOTCHAIN
>>>> +register_alias BOOTCHAIN PIPELINE
>>>>    register_array string GETIMAGE
>>>>    register_array string MOUNTFS
>>>>    register_array string OVERLAYFS
>>>> diff --git a/features/pipeline/data/etc/rc.d/init.d/pipeline b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>>>> similarity index 83%
>>>> rename from features/pipeline/data/etc/rc.d/init.d/pipeline
>>>> rename to features/bootchain-core/data/etc/rc.d/init.d/bootchain
>>>> index 89d9de5..1be6d39 100755
>>>> --- a/features/pipeline/data/etc/rc.d/init.d/pipeline
>>>> +++ b/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>>>> @@ -1,6 +1,6 @@
>>>>    #!/bin/bash
>>>>    ### BEGIN INIT INFO
>>>> -# Provides:            pipeline
>>>> +# Provides:            bootchain
>>>>    # Required-Start:      uevent udev
>>>>    # Should-Start:
>>>>    # Required-Stop:
>>>> @@ -13,14 +13,14 @@
>>>>    . /.initrd/initenv
>>>>    . /etc/init.d/template
>>>> -NAME=pipelined
>>>> +NAME=chaind
>>>>    PIDFILE="/var/run/$NAME.pid"
>>>>    ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname $NAME"
>>>>    prepare() {
>>>>    	local dir i n
>>>> -	dir=/.initrd/pipeline/waitdev
>>>> +	dir=/.initrd/bootchain/waitdev
>>>>    	mkdir -p -- "$dir"
>>>>    	i=0
>>>> @@ -32,7 +32,7 @@ prepare() {
>>>>    start() {
>>>>    	RETVAL=0
>>>> -	if [ "${ROOT-}" = pipeline ]; then
>>>> +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
>>>>    		prepare
>>>>    		start_daemon --background $ARGS "$NAME"
>>>>    		RETVAL=$?
>>>> diff --git a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>>>> similarity index 77%
>>>> rename from features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
>>>> rename to features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>>>> index e473deb..e4b8616 100644
>>>> --- a/features/pipeline/data/etc/udev/rules.d/50-pipeline-waitdev.rules
>>>> +++ b/features/bootchain-core/data/etc/udev/rules.d/50-bootchain-waitdev.rules
>>>> @@ -1 +1 @@
>>>> -SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/pipeline-waitdev"
>>>> +SUBSYSTEM=="block", ACTION!="remove", RUN+="/lib/uevent/filters/bootchain-waitdev"
>>>> diff --git a/features/pipeline/data/lib/pipeline/getimage b/features/bootchain-core/data/lib/bootchain/getimage
>>>> similarity index 93%
>>>> rename from features/pipeline/data/lib/pipeline/getimage
>>>> rename to features/bootchain-core/data/lib/bootchain/getimage
>>>> index 409ad14..1f141ac 100755
>>>> --- a/features/pipeline/data/lib/pipeline/getimage
>>>> +++ b/features/bootchain-core/data/lib/bootchain/getimage
>>>> @@ -1,6 +1,6 @@
>>>>    #!/bin/bash -efu
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    check_parameter GETIMAGE
>>>>    url="$(get_parameter GETIMAGE)"
>>>> diff --git a/features/pipeline/data/lib/pipeline/mountfs b/features/bootchain-core/data/lib/bootchain/mountfs
>>>> similarity index 91%
>>>> rename from features/pipeline/data/lib/pipeline/mountfs
>>>> rename to features/bootchain-core/data/lib/bootchain/mountfs
>>>> index d15ae91..45ffa68 100755
>>>> --- a/features/pipeline/data/lib/pipeline/mountfs
>>>> +++ b/features/bootchain-core/data/lib/bootchain/mountfs
>>>> @@ -1,6 +1,6 @@
>>>>    #!/bin/bash -efu
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    check_parameter MOUNTFS
>>>>    param="$(get_parameter MOUNTFS)"
>>>> diff --git a/features/pipeline/data/lib/pipeline/overlayfs b/features/bootchain-core/data/lib/bootchain/overlayfs
>>>> similarity index 95%
>>>> rename from features/pipeline/data/lib/pipeline/overlayfs
>>>> rename to features/bootchain-core/data/lib/bootchain/overlayfs
>>>> index 23b869b..58261cc 100755
>>>> --- a/features/pipeline/data/lib/pipeline/overlayfs
>>>> +++ b/features/bootchain-core/data/lib/bootchain/overlayfs
>>>> @@ -1,6 +1,6 @@
>>>>    #!/bin/bash -efu
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    target="$(get_parameter OVERLAYFS)"
>>>> diff --git a/features/pipeline/data/lib/pipeline/rootfs b/features/bootchain-core/data/lib/bootchain/rootfs
>>>> similarity index 86%
>>>> rename from features/pipeline/data/lib/pipeline/rootfs
>>>> rename to features/bootchain-core/data/lib/bootchain/rootfs
>>>> index e4b2ca9..6ac64a6 100755
>>>> --- a/features/pipeline/data/lib/pipeline/rootfs
>>>> +++ b/features/bootchain-core/data/lib/bootchain/rootfs
>>>> @@ -1,6 +1,6 @@
>>>>    #!/bin/bash -efu
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    [ -n "$prevdir" ] ||
>>>>    	fatal "no previous step to use as rootfs"
>>>> diff --git a/features/pipeline/data/lib/pipeline/waitdev b/features/bootchain-core/data/lib/bootchain/waitdev
>>>> similarity index 83%
>>>> rename from features/pipeline/data/lib/pipeline/waitdev
>>>> rename to features/bootchain-core/data/lib/bootchain/waitdev
>>>> index f818cc5..74af6ea 100755
>>>> --- a/features/pipeline/data/lib/pipeline/waitdev
>>>> +++ b/features/bootchain-core/data/lib/bootchain/waitdev
>>>> @@ -1,12 +1,12 @@
>>>>    #!/bin/bash -efu
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    check_parameter WAITDEV
>>>>    devspec="$(get_parameter WAITDEV)"
>>>>    while [ -n "$devspec" ]; do
>>>> -	envfile="/.initrd/pipeline/waitdev/$callnum"
>>>> +	envfile="/.initrd/bootchain/waitdev/$callnum"
>>>>    	if [ -s "$envfile" ]; then
>>>>    		devfile=
>>>> diff --git a/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>>>> new file mode 100755
>>>> index 0000000..b692f6d
>>>> --- /dev/null
>>>> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/bootchain
>>>> @@ -0,0 +1,6 @@
>>>> +#!/bin/bash -efu
>>>> +
>>>> +. /.initrd/initenv
>>>> +
>>>> +[ "${ROOT-}" != bootchain ] ||
>>>> +	echo bootchain > /etc/initrd/method
>>>> diff --git a/features/pipeline/data/lib/initrd/cmdline.d/pipeline b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>>>> similarity index 64%
>>>> rename from features/pipeline/data/lib/initrd/cmdline.d/pipeline
>>>> rename to features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>>>> index ac65b68..21b164c 100755
>>>> --- a/features/pipeline/data/lib/initrd/cmdline.d/pipeline
>>>> +++ b/features/bootchain-core/data/lib/initrd/cmdline.d/pipeline
>>>> @@ -3,4 +3,4 @@
>>>>    . /.initrd/initenv
>>>>    [ "${ROOT-}" != pipeline ] ||
>>>> -	echo pipeline > /etc/initrd/method
>>>> +	echo bootchain > /etc/initrd/method
>>>> diff --git a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>>>> similarity index 77%
>>>> rename from features/pipeline/data/lib/uevent/filters/pipeline-waitdev
>>>> rename to features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>>>> index d975006..272aee7 100755
>>>> --- a/features/pipeline/data/lib/uevent/filters/pipeline-waitdev
>>>> +++ b/features/bootchain-core/data/lib/uevent/filters/bootchain-waitdev
>>>> @@ -3,8 +3,8 @@
>>>>    . /.initrd/initenv
>>>>    . initrd-sh-functions
>>>> -mkdir -p -- /.initrd/pipeline/waitdev
>>>> -cd /.initrd/pipeline/waitdev
>>>> +mkdir -p -- /.initrd/bootchain/waitdev
>>>> +cd /.initrd/bootchain/waitdev/
>>>>    i=0
>>>>    while [ "$i" -lt "${WAITDEV:-0}" ]; do
>>>> diff --git a/features/pipeline/data/sbin/pipeline-sh-functions b/features/bootchain-core/data/sbin/bootchain-sh-functions
>>>> similarity index 70%
>>>> rename from features/pipeline/data/sbin/pipeline-sh-functions
>>>> rename to features/bootchain-core/data/sbin/bootchain-sh-functions
>>>> index 662d069..fa6201f 100644
>>>> --- a/features/pipeline/data/sbin/pipeline-sh-functions
>>>> +++ b/features/bootchain-core/data/sbin/bootchain-sh-functions
>>>> @@ -1,13 +1,13 @@
>>>>    #!/bin/bash -efu
>>>> -if [ -z "${__pipeline_sh_functions-}" ]; then
>>>> -__pipeline_sh_functions=1
>>>> +if [ -z "${__bootchain_sh_functions-}" ]; then
>>>> +__bootchain_sh_functions=1
>>>>    . /.initrd/initenv
>>>>    . shell-signal
>>>> -handlerdir="/lib/pipeline"
>>>> -mntdir="/dev/pipeline"
>>>> +handlerdir=/lib/bootchain
>>>> +[ "${ROOT-}" = pipeline ] && mntdir=/dev/pipeline || mntdir=/dev/bootchain
>>>>    check_parameter()
>>>>    {
>>>> @@ -29,7 +29,7 @@ resolve_target()
>>>>    		'')
>>>>    			;;
>>>>    		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
>>>> -			target="$mntdir/dst/$target"
>>>> +			target="$mntdir/dst/step${target:4}"
>>>>    			;;
>>> Тут явно что-то не то.
>>>
>>> Ты переименовал pipe* в step* и сделал это изменение для сохранения
>>> обратной совместимости. Только что будет если в качестве аргумента этой
>>> функции передадут новое имя step* ?
>> Очевидно, сейчас не будет реакции на step*.
> Будет и будет совершенно непонятное поведение.
>
> В патче не видно, но полный код:
>
> resolve_target()
> {
> 	local target="$1"
> 	case "${target%%/*}" in
> 		'')
> 			;;
> 		pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9])
> 			target="$mntdir/dst/$target"
> 			;;
> 		*)
> 			if [ -z "${prevdir-}" ]; then
> 				message "no previous stop to use"
> 				return
> 			fi
> 			target="$prevdir/${target#/}"
> 			;;
> 	esac
> 	printf '%s' "$target"
> }
>
> Если target не пуст и не имеет префикс 'pipe', то будет работать последний
> кейс то есть будет что-то типа target="$prevdir/step3". Такого каталога
> нет поэтому будет непонятная ошибка.

Да. Ну, потому что не было предусмотрено такого синтаксиса step*.


>>> Кажется, потерян ещё один кейс:
>>>
>>> 		step[0-9]|step[0-9][0-9]|step[0-9][0-9][0-9])
>>> 			target="$mntdir/dst/$target"
>>> 			;;
>> Не потерян. Сначала тоже думал именно так реализовать, потом сделал немного
> Если не потерян, то получается странность. Ты так хотел уйти от термина
> "pipe", но он продолжает использоваться в bootchain= и к нему добавляется
> step как указатель на относительную позицию.

Согласен. :-) pipe был сохранён для совместимости, а так вообще идея 
была сразу переименовать в step, так что это не потеря, а злой умысел, 
но и правда, выглядит странно. ))


>> иначе. В следующих коммитах это будет видно. Работает прямая адресация, как
>> раньше -- pipe* и потом добавится step-<N>, адресация в обратную сторону
>> относительно текущего шага. С минусом интуитивно понятней. Если хочешь,
>> давай сделаем алиас step<N> = pipe<N> для прямой адресации.
> Я относительную адресацию тоже прокомментировал.
>

В общем, идею я понял.


>>>>    		*)
>>>>    			if [ -z "${prevdir-}" ]; then
>>>> @@ -48,4 +48,4 @@ run()
>>>>    	"$@"
>>>>    }
>>>> -fi # __pipeline_sh_functions
>>>> +fi # __bootchain_sh_functions
>>>> diff --git a/features/pipeline/data/sbin/pipelined b/features/bootchain-core/data/sbin/chaind
>>>> similarity index 78%
>>>> rename from features/pipeline/data/sbin/pipelined
>>>> rename to features/bootchain-core/data/sbin/chaind
>>>> index 1d30061..d401101 100755
>>>> --- a/features/pipeline/data/sbin/pipelined
>>>> +++ b/features/bootchain-core/data/sbin/chaind
>>>> @@ -21,7 +21,7 @@ exit_handler()
>>>>    set_cleanup_handler exit_handler
>>>>    echo "$$" >"$pidfile"
>>>> -. pipeline-sh-functions
>>>> +. bootchain-sh-functions
>>>>    [ "${RDLOG-}" != 'console' ] ||
>>>> @@ -35,22 +35,22 @@ mkdir -p -- "$mntdir"
>>>>    mountpoint -q "$mntdir" ||
>>>>    	mount -t tmpfs tmpfs "$mntdir" ||:
>>>> -pipenum=0
>>>> -pipe="$PIPELINE"
>>>> +stepnum=0
>>>> +chainsteps="$BOOTCHAIN"
>>>>    datadir=
>>>>    destdir=
>>>> -while [ -n "$pipe" ]; do
>>>> -	name="${pipe%%,*}"
>>>> +while [ -n "$chainsteps" ]; do
>>>> +	name="${chainsteps%%,*}"
>>>>    	exe="$handlerdir/$name"
>>>>    	if [ -x "$exe" ]; then
>>>>    		eval "callnum=\"\${callnum_$name:-0}\""
>>>> -		datadir="$mntdir/src/pipe$pipenum"
>>>> -		destdir="$mntdir/dst/pipe$pipenum"
>>>> +		datadir="$mntdir/src/step$stepnum"
>>>> +		destdir="$mntdir/dst/step$stepnum"
>>>> -		[ "$pipenum" != 0 ] ||
>>>> +		[ "$stepnum" != 0 ] ||
>>>>    			prevdir=""
>>>>    		mkdir -p -- "$datadir" "$destdir"
>>>> @@ -80,8 +80,8 @@ while [ -n "$pipe" ]; do
>>>>    		eval "callnum_$name=\"\$callnum\""
>>>>    	fi
>>>> -	pipe="${pipe#$name}"
>>>> -	pipe="${pipe#,}"
>>>> +	chainsteps="${chainsteps#$name}"
>>>> +	chainsteps="${chainsteps#,}"
>>>> -	pipenum=$(($pipenum + 1))
>>>> +	stepnum=$(($stepnum + 1))
>>>>    done
>>>> diff --git a/features/bootchain-core/rules.mk b/features/bootchain-core/rules.mk
>>>> new file mode 100644
>>>> index 0000000..724a0b0
>>>> --- /dev/null
>>>> +++ b/features/bootchain-core/rules.mk
>>>> @@ -0,0 +1,4 @@
>>>> +MODULES_TRY_ADD += $(BOOTCHAIN_CORE_MODULES)
>>>> +
>>>> +PUT_UDEV_RULES += $(BOOTCHAIN_CORE_RULES)
>>>> +PUT_FEATURE_DIRS += $(BOOTCHAIN_CORE_DATADIR)
>>>> diff --git a/features/pipeline/config.mk b/features/pipeline/config.mk
>>>> index 9172528..3ff29ac 100644
>>>> --- a/features/pipeline/config.mk
>>>> +++ b/features/pipeline/config.mk
>>>> @@ -1,8 +1 @@
>>>> -$(call feature-requires,depmod-image add-udev-rules)
>>>> -
>>>> -PIPELINE_DATADIR = $(FEATURESDIR)/pipeline/data
>>>> -
>>>> -PIPELINE_RULES = \
>>>> -	*-cdrom_id.rules
>>>> -
>>>> -PIPELINE_MODULES = isofs squashfs overlay
>>>> +$(call feature-requires,bootchain-core)
>>>> diff --git a/features/pipeline/rules.mk b/features/pipeline/rules.mk
>>>> index 3ccd260..e69de29 100644
>>>> --- a/features/pipeline/rules.mk
>>>> +++ b/features/pipeline/rules.mk
>>>> @@ -1,6 +0,0 @@
>>>> -MODULES_TRY_ADD += $(PIPELINE_MODULES)
>>>> -
>>>> -PUT_UDEV_RULES += $(PIPELINE_RULES)
>>>> -
>>>> -PUT_FEATURE_DIRS  += $(PIPELINE_DATADIR)
>>>> -PUT_FEATURE_FILES += $(PIPELINE_FILES)
>>>> -- 
>>>> 2.24.1
>>>>
>>>> _______________________________________________
>>>> Make-initrd mailing list
>>>> Make-initrd@lists.altlinux.org
>>>> https://lists.altlinux.org/mailman/listinfo/make-initrd
>>>>
>> -- 
>> Best regards,
>> Leonid Krivoshein.
>>
>> _______________________________________________
>> Make-initrd mailing list
>> Make-initrd@lists.altlinux.org
>> https://lists.altlinux.org/mailman/listinfo/make-initrd

-- 
Best regards,
Leonid Krivoshein.



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-10-26 17:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-26  9:08 ` [make-initrd] [PATCH v6 01/22] separate new feature of bootchain-core from pipeline Alexey Gladkov
2021-10-26  9:39   ` Leonid Krivoshein
2021-10-26 11:24     ` Alexey Gladkov
2021-10-26 17:36       ` Leonid Krivoshein

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