Make-initrd development discussion
 help / color / mirror / Atom feed
* [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
@ 2021-09-24 15:57 Leonid Krivoshein
  2021-09-26 14:09 ` Alexey Gladkov
  0 siblings, 1 reply; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-24 15:57 UTC (permalink / raw)
  To: make-initrd

---
  .../data/etc/rc.d/init.d/bootchain            | 33 ++++++++++---------
  .../data/lib/bootchain-prepare.d/300-waitdev  | 12 +++++++
  2 files changed, 29 insertions(+), 16 deletions(-)
  create mode 100644 
make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev

diff --git 
a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain 
b/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
index 89d9de5..7bdb1cf 100755
--- a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
+++ b/make-initrd/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,27 +13,28 @@
  . /.initrd/initenv
  . /etc/init.d/template
  -NAME=pipelined
+NAME=bootchained
  PIDFILE="/var/run/$NAME.pid"
  ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME 
--displayname $NAME"
  -prepare() {
-	local dir i n
-
-	dir=/.initrd/pipeline/waitdev
-	mkdir -p -- "$dir"
-
-	i=0
-	while [ "$i" -lt "${WAITDEV:-0}" ]; do
-		touch "$dir/$i"
-		i=$(($i + 1))
-	done
+use_hooks()
+{
+	local hook hdir="$1"
+
+	if [ -d "$hdir" ]; then
+		# shellcheck disable=SC2012
+		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
+			[ -s "$hook" ] ||
+				continue
+			. "$hook"
+		done
+	fi
  }
   start() {
  	RETVAL=0
-	if [ "${ROOT-}" = pipeline ]; then
-		prepare
+	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
+		use_hooks /lib/bootchain-prepare.d
  		start_daemon --background $ARGS "$NAME"
  		RETVAL=$?
  	fi
@@ -43,7 +44,7 @@ start() {
  stop() {
  	stop_daemon $ARGS "$NAME"
  	RETVAL=$?
-	[ ! -f "$PIDFILE" ] || rm -f -- "$PIDFILE"
+	rm -f -- "$PIDFILE"
  	return $RETVAL
  }
  diff --git 
a/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev 
b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
new file mode 100644
index 0000000..f7315a3
--- /dev/null
+++ 
b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
@@ -0,0 +1,12 @@
+#!/bin/bash -efu
+
+dir=/.initrd/bootchain/waitdev
+mkdir -p -- "$dir"
+
+[ -z "${WAITDEV_TIMEOUT-}" ] ||
+	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
+i=0
+while [ "$i" -lt "${WAITDEV:-0}" ]; do
+	touch "$dir/$i"
+	i=$((1 + $i))
+done
-- 
2.21.0




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

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-24 15:57 [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks Leonid Krivoshein
@ 2021-09-26 14:09 ` Alexey Gladkov
  2021-09-26 19:53   ` Leonid Krivoshein
  0 siblings, 1 reply; 9+ messages in thread
From: Alexey Gladkov @ 2021-09-26 14:09 UTC (permalink / raw)
  To: make-initrd

On Fri, Sep 24, 2021 at 06:57:45PM +0300, Leonid Krivoshein wrote:

Что это за хуки и зачем они нужны ?

> ---
>  .../data/etc/rc.d/init.d/bootchain            | 33 ++++++++++---------
>  .../data/lib/bootchain-prepare.d/300-waitdev  | 12 +++++++
>  2 files changed, 29 insertions(+), 16 deletions(-)
>  create mode 100644 make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> 
> diff --git
> a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> b/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> index 89d9de5..7bdb1cf 100755
> --- a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> +++ b/make-initrd/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,27 +13,28 @@
>  . /.initrd/initenv
>  . /etc/init.d/template
>  -NAME=pipelined
> +NAME=bootchained
>  PIDFILE="/var/run/$NAME.pid"
>  ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname
> $NAME"
>  -prepare() {
> -	local dir i n
> -
> -	dir=/.initrd/pipeline/waitdev
> -	mkdir -p -- "$dir"
> -
> -	i=0
> -	while [ "$i" -lt "${WAITDEV:-0}" ]; do
> -		touch "$dir/$i"
> -		i=$(($i + 1))
> -	done
> +use_hooks()
> +{
> +	local hook hdir="$1"
> +
> +	if [ -d "$hdir" ]; then
> +		# shellcheck disable=SC2012
> +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
> +			[ -s "$hook" ] ||
> +				continue
> +			. "$hook"
> +		done
> +	fi
>  }
>   start() {
>  	RETVAL=0
> -	if [ "${ROOT-}" = pipeline ]; then
> -		prepare
> +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
> +		use_hooks /lib/bootchain-prepare.d
>  		start_daemon --background $ARGS "$NAME"
>  		RETVAL=$?
>  	fi
> @@ -43,7 +44,7 @@ start() {
>  stop() {
>  	stop_daemon $ARGS "$NAME"
>  	RETVAL=$?
> -	[ ! -f "$PIDFILE" ] || rm -f -- "$PIDFILE"
> +	rm -f -- "$PIDFILE"
>  	return $RETVAL
>  }
>  diff --git a/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> new file mode 100644
> index 0000000..f7315a3
> --- /dev/null
> +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> @@ -0,0 +1,12 @@
> +#!/bin/bash -efu
> +
> +dir=/.initrd/bootchain/waitdev
> +mkdir -p -- "$dir"
> +
> +[ -z "${WAITDEV_TIMEOUT-}" ] ||
> +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
> +i=0
> +while [ "$i" -lt "${WAITDEV:-0}" ]; do
> +	touch "$dir/$i"
> +	i=$((1 + $i))
> +done
> -- 
> 2.21.0
> 
> 
> _______________________________________________
> Make-initrd mailing list
> Make-initrd@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/make-initrd
> 

-- 
Rgrds, legion



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

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-26 14:09 ` Alexey Gladkov
@ 2021-09-26 19:53   ` Leonid Krivoshein
  2021-09-27  9:09     ` Alexey Gladkov
  0 siblings, 1 reply; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-26 19:53 UTC (permalink / raw)
  To: make-initrd


26.09.2021 17:09, Alexey Gladkov пишет:
> On Fri, Sep 24, 2021 at 06:57:45PM +0300, Leonid Krivoshein wrote:
>
> Что это за хуки и зачем они нужны ?

Отлично, уже дошли до первого принципиального и важного изменения!
Полагаю, тут больше камень в огород отсутствия описаний, это я поправлю.

Стартовый скрипт SysVinit ранее включал prepare() для предварительной 
подготовки каталогов для компонента waitdev, отделённого теперь в другую 
фичу. Другим компонентам bootchain при расширении (а теперь это уже 
более десятка фич и подпакетов) тоже может потребоваться подобная 
инициализация. Здесь в одном коммите видно, куда переехал код функции 
prepare(). Хуки нужны для того, чтобы вызывать подобную инициализацию из 
определённого места, так как базовый пакет bootchain-core может не 
знать, с какими компонентами bootchain собран initramfs. Соответственно, 
включаемые скрипты кладутся в /lib/bootchain-prepare.d. Если 
потребуется, по аналогии можно добавить в stop() хуки для деинициализации.


>> ---
>>   .../data/etc/rc.d/init.d/bootchain            | 33 ++++++++++---------
>>   .../data/lib/bootchain-prepare.d/300-waitdev  | 12 +++++++
>>   2 files changed, 29 insertions(+), 16 deletions(-)
>>   create mode 100644 make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
>>
>> diff --git
>> a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> b/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> index 89d9de5..7bdb1cf 100755
>> --- a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
>> +++ b/make-initrd/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,27 +13,28 @@
>>   . /.initrd/initenv
>>   . /etc/init.d/template
>>   -NAME=pipelined
>> +NAME=bootchained
>>   PIDFILE="/var/run/$NAME.pid"
>>   ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname
>> $NAME"
>>   -prepare() {
>> -	local dir i n
>> -
>> -	dir=/.initrd/pipeline/waitdev
>> -	mkdir -p -- "$dir"
>> -
>> -	i=0
>> -	while [ "$i" -lt "${WAITDEV:-0}" ]; do
>> -		touch "$dir/$i"
>> -		i=$(($i + 1))
>> -	done
>> +use_hooks()
>> +{
>> +	local hook hdir="$1"
>> +
>> +	if [ -d "$hdir" ]; then
>> +		# shellcheck disable=SC2012
>> +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
>> +			[ -s "$hook" ] ||
>> +				continue
>> +			. "$hook"
>> +		done
>> +	fi
>>   }
>>    start() {
>>   	RETVAL=0
>> -	if [ "${ROOT-}" = pipeline ]; then
>> -		prepare
>> +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
>> +		use_hooks /lib/bootchain-prepare.d
>>   		start_daemon --background $ARGS "$NAME"
>>   		RETVAL=$?
>>   	fi
>> @@ -43,7 +44,7 @@ start() {
>>   stop() {
>>   	stop_daemon $ARGS "$NAME"
>>   	RETVAL=$?
>> -	[ ! -f "$PIDFILE" ] || rm -f -- "$PIDFILE"
>> +	rm -f -- "$PIDFILE"
>>   	return $RETVAL
>>   }
>>   diff --git a/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
>> new file mode 100644
>> index 0000000..f7315a3
>> --- /dev/null
>> +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
>> @@ -0,0 +1,12 @@
>> +#!/bin/bash -efu
>> +
>> +dir=/.initrd/bootchain/waitdev
>> +mkdir -p -- "$dir"
>> +
>> +[ -z "${WAITDEV_TIMEOUT-}" ] ||
>> +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
>> +i=0
>> +while [ "$i" -lt "${WAITDEV:-0}" ]; do
>> +	touch "$dir/$i"
>> +	i=$((1 + $i))
>> +done
>> -- 
>> 2.21.0
>>
>>
>> _______________________________________________
>> 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] 9+ messages in thread

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-26 19:53   ` Leonid Krivoshein
@ 2021-09-27  9:09     ` Alexey Gladkov
  2021-09-27 13:11       ` Leonid Krivoshein
  0 siblings, 1 reply; 9+ messages in thread
From: Alexey Gladkov @ 2021-09-27  9:09 UTC (permalink / raw)
  To: make-initrd

On Sun, Sep 26, 2021 at 10:53:08PM +0300, Leonid Krivoshein wrote:
> 
> 26.09.2021 17:09, Alexey Gladkov пишет:
> > On Fri, Sep 24, 2021 at 06:57:45PM +0300, Leonid Krivoshein wrote:
> > 
> > Что это за хуки и зачем они нужны ?
> 
> Отлично, уже дошли до первого принципиального и важного изменения!
> Полагаю, тут больше камень в огород отсутствия описаний, это я поправлю.
> 
> Стартовый скрипт SysVinit ранее включал prepare() для предварительной
> подготовки каталогов для компонента waitdev, отделённого теперь в другую
> фичу.

Когда ты говоришь про prepare, ты про выполнение скриптов перед сервисом
(udev, ueventd, etc.) ?

> Другим компонентам bootchain при расширении (а теперь это уже более
> десятка фич и подпакетов) тоже может потребоваться подобная инициализация.
> Здесь в одном коммите видно, куда переехал код функции prepare(). Хуки нужны
> для того, чтобы вызывать подобную инициализацию из определённого места, так
> как базовый пакет bootchain-core может не знать, с какими компонентами
> bootchain собран initramfs. Соответственно, включаемые скрипты кладутся в
> /lib/bootchain-prepare.d. Если потребуется, по аналогии можно добавить в
> stop() хуки для деинициализации.

https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L32-L38
https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L61
https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L109
https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L114

Ты имеешь в виду вот такие хуки ?

> > > ---
> > >   .../data/etc/rc.d/init.d/bootchain            | 33 ++++++++++---------
> > >   .../data/lib/bootchain-prepare.d/300-waitdev  | 12 +++++++
> > >   2 files changed, 29 insertions(+), 16 deletions(-)
> > >   create mode 100644 make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> > > 
> > > diff --git
> > > a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > b/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > index 89d9de5..7bdb1cf 100755
> > > --- a/make-initrd/features/bootchain-core/data/etc/rc.d/init.d/bootchain
> > > +++ b/make-initrd/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,27 +13,28 @@
> > >   . /.initrd/initenv
> > >   . /etc/init.d/template
> > >   -NAME=pipelined
> > > +NAME=bootchained
> > >   PIDFILE="/var/run/$NAME.pid"
> > >   ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname
> > > $NAME"
> > >   -prepare() {
> > > -	local dir i n
> > > -
> > > -	dir=/.initrd/pipeline/waitdev
> > > -	mkdir -p -- "$dir"
> > > -
> > > -	i=0
> > > -	while [ "$i" -lt "${WAITDEV:-0}" ]; do
> > > -		touch "$dir/$i"
> > > -		i=$(($i + 1))
> > > -	done
> > > +use_hooks()
> > > +{
> > > +	local hook hdir="$1"
> > > +
> > > +	if [ -d "$hdir" ]; then
> > > +		# shellcheck disable=SC2012
> > > +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
> > > +			[ -s "$hook" ] ||
> > > +				continue
> > > +			. "$hook"
> > > +		done
> > > +	fi
> > >   }
> > >    start() {
> > >   	RETVAL=0
> > > -	if [ "${ROOT-}" = pipeline ]; then
> > > -		prepare
> > > +	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
> > > +		use_hooks /lib/bootchain-prepare.d
> > >   		start_daemon --background $ARGS "$NAME"
> > >   		RETVAL=$?
> > >   	fi
> > > @@ -43,7 +44,7 @@ start() {
> > >   stop() {
> > >   	stop_daemon $ARGS "$NAME"
> > >   	RETVAL=$?
> > > -	[ ! -f "$PIDFILE" ] || rm -f -- "$PIDFILE"
> > > +	rm -f -- "$PIDFILE"
> > >   	return $RETVAL
> > >   }
> > >   diff --git a/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> > > new file mode 100644
> > > index 0000000..f7315a3
> > > --- /dev/null
> > > +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> > > @@ -0,0 +1,12 @@
> > > +#!/bin/bash -efu
> > > +
> > > +dir=/.initrd/bootchain/waitdev
> > > +mkdir -p -- "$dir"
> > > +
> > > +[ -z "${WAITDEV_TIMEOUT-}" ] ||
> > > +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
> > > +i=0
> > > +while [ "$i" -lt "${WAITDEV:-0}" ]; do
> > > +	touch "$dir/$i"
> > > +	i=$((1 + $i))
> > > +done
> > > -- 
> > > 2.21.0
> > > 
> > > 
> > > _______________________________________________
> > > 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] 9+ messages in thread

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-27  9:09     ` Alexey Gladkov
@ 2021-09-27 13:11       ` Leonid Krivoshein
  2021-09-27 13:57         ` Alexey Gladkov
  0 siblings, 1 reply; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-27 13:11 UTC (permalink / raw)
  To: make-initrd


27.09.2021 12:09, Alexey Gladkov пишет:
> On Sun, Sep 26, 2021 at 10:53:08PM +0300, Leonid Krivoshein wrote:
>> 26.09.2021 17:09, Alexey Gladkov пишет:
>>> On Fri, Sep 24, 2021 at 06:57:45PM +0300, Leonid Krivoshein wrote:
>>>
>>> Что это за хуки и зачем они нужны ?
>> Отлично, уже дошли до первого принципиального и важного изменения!
>> Полагаю, тут больше камень в огород отсутствия описаний, это я поправлю.
>>
>> Стартовый скрипт SysVinit ранее включал prepare() для предварительной
>> подготовки каталогов для компонента waitdev, отделённого теперь в другую
>> фичу.
> Когда ты говоришь про prepare, ты про выполнение скриптов перед сервисом
> (udev, ueventd, etc.) ?

Речь о коде, перенесённом из одного места в другой. Как раз я не думаю, 
что тут можно как-то влиять на запуск до udev, ueventd. Но если мы 
вынесли из bootchain-core код, который до запуска демона должен что-то 
предварительно подготовить, нужен же механизм, который позволит его 
дёрнуть, для этого и нужны хуки. Другое дело, что по факту сейчас пока 
такой хук оказался лишь один. Но мне конструкция всё равно нравится 
больше, она делает стартовый скрипт более модульным, не зависящим от 
других фич bootchain-*.


>> Другим компонентам bootchain при расширении (а теперь это уже более
>> десятка фич и подпакетов) тоже может потребоваться подобная инициализация.
>> Здесь в одном коммите видно, куда переехал код функции prepare(). Хуки нужны
>> для того, чтобы вызывать подобную инициализацию из определённого места, так
>> как базовый пакет bootchain-core может не знать, с какими компонентами
>> bootchain собран initramfs. Соответственно, включаемые скрипты кладутся в
>> /lib/bootchain-prepare.d. Если потребуется, по аналогии можно добавить в
>> stop() хуки для деинициализации.
> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L32-L38
> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L61
> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L109
> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L114
>
> Ты имеешь в виду вот такие хуки ?

Ну очень похожие, хотя use_hooks() явно проще -- без блокировки консоли, 
без бита выполнения, просто соурсим исходники:

>>>> +use_hooks()
>>>> +{
>>>> +	local hook hdir="$1"
>>>> +
>>>> +	if [ -d "$hdir" ]; then
>>>> +		# shellcheck disable=SC2012
>>>> +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
>>>> +			[ -s "$hook" ] ||
>>>> +				continue
>>>> +			. "$hook"
>>>> +		done
>>>> +	fi
>>>>    }
и:
>>>> --- /dev/null
>>>> +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
>>>> @@ -0,0 +1,12 @@
>>>> +#!/bin/bash -efu
>>>> +
>>>> +dir=/.initrd/bootchain/waitdev
>>>> +mkdir -p -- "$dir"
>>>> +
>>>> +[ -z "${WAITDEV_TIMEOUT-}" ] ||
>>>> +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
>>>> +i=0
>>>> +while [ "$i" -lt "${WAITDEV:-0}" ]; do
>>>> +	touch "$dir/$i"
>>>> +	i=$((1 + $i))
>>>> +done


-- 
Best regards,
Leonid Krivoshein.



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

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-27 13:11       ` Leonid Krivoshein
@ 2021-09-27 13:57         ` Alexey Gladkov
  2021-09-27 17:22           ` Leonid Krivoshein
  0 siblings, 1 reply; 9+ messages in thread
From: Alexey Gladkov @ 2021-09-27 13:57 UTC (permalink / raw)
  To: make-initrd

On Mon, Sep 27, 2021 at 04:11:43PM +0300, Leonid Krivoshein wrote:
> 
> 27.09.2021 12:09, Alexey Gladkov пишет:
> > On Sun, Sep 26, 2021 at 10:53:08PM +0300, Leonid Krivoshein wrote:
> > > 26.09.2021 17:09, Alexey Gladkov пишет:
> > > > On Fri, Sep 24, 2021 at 06:57:45PM +0300, Leonid Krivoshein wrote:
> > > > 
> > > > Что это за хуки и зачем они нужны ?
> > > Отлично, уже дошли до первого принципиального и важного изменения!
> > > Полагаю, тут больше камень в огород отсутствия описаний, это я поправлю.
> > > 
> > > Стартовый скрипт SysVinit ранее включал prepare() для предварительной
> > > подготовки каталогов для компонента waitdev, отделённого теперь в другую
> > > фичу.
> > Когда ты говоришь про prepare, ты про выполнение скриптов перед сервисом
> > (udev, ueventd, etc.) ?
> 
> Речь о коде, перенесённом из одного места в другой. Как раз я не думаю, что
> тут можно как-то влиять на запуск до udev, ueventd. Но если мы вынесли из
> bootchain-core код, который до запуска демона должен что-то предварительно
> подготовить, нужен же механизм, который позволит его дёрнуть, для этого и
> нужны хуки. Другое дело, что по факту сейчас пока такой хук оказался лишь
> один. Но мне конструкция всё равно нравится больше, она делает стартовый
> скрипт более модульным, не зависящим от других фич bootchain-*.
> 
> 
> > > Другим компонентам bootchain при расширении (а теперь это уже более
> > > десятка фич и подпакетов) тоже может потребоваться подобная инициализация.
> > > Здесь в одном коммите видно, куда переехал код функции prepare(). Хуки нужны
> > > для того, чтобы вызывать подобную инициализацию из определённого места, так
> > > как базовый пакет bootchain-core может не знать, с какими компонентами
> > > bootchain собран initramfs. Соответственно, включаемые скрипты кладутся в
> > > /lib/bootchain-prepare.d. Если потребуется, по аналогии можно добавить в
> > > stop() хуки для деинициализации.
> > https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L32-L38
> > https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L61
> > https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L109
> > https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L114
> > 
> > Ты имеешь в виду вот такие хуки ?
> 
> Ну очень похожие, хотя use_hooks() явно проще -- без блокировки консоли, без
> бита выполнения, просто соурсим исходники:

Эти хуки уже давно есть и можно использовать. Не нужно дублировать этот же
функционал.

> > > > > +use_hooks()
> > > > > +{
> > > > > +	local hook hdir="$1"
> > > > > +
> > > > > +	if [ -d "$hdir" ]; then
> > > > > +		# shellcheck disable=SC2012
> > > > > +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
> > > > > +			[ -s "$hook" ] ||
> > > > > +				continue
> > > > > +			. "$hook"
> > > > > +		done
> > > > > +	fi
> > > > >    }
> и:
> > > > > --- /dev/null
> > > > > +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
> > > > > @@ -0,0 +1,12 @@
> > > > > +#!/bin/bash -efu
> > > > > +
> > > > > +dir=/.initrd/bootchain/waitdev
> > > > > +mkdir -p -- "$dir"
> > > > > +
> > > > > +[ -z "${WAITDEV_TIMEOUT-}" ] ||
> > > > > +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
> > > > > +i=0
> > > > > +while [ "$i" -lt "${WAITDEV:-0}" ]; do
> > > > > +	touch "$dir/$i"
> > > > > +	i=$((1 + $i))
> > > > > +done
> 
> 
> -- 
> 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] 9+ messages in thread

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-27 13:57         ` Alexey Gladkov
@ 2021-09-27 17:22           ` Leonid Krivoshein
  2021-09-28  0:40             ` Leonid Krivoshein
  2021-09-28  7:11             ` Leonid Krivoshein
  0 siblings, 2 replies; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-27 17:22 UTC (permalink / raw)
  To: make-initrd


27.09.2021 16:57, Alexey Gladkov пишет:
> On Mon, Sep 27, 2021 at 04:11:43PM +0300, Leonid Krivoshein wrote:
>> [...]
>>>> Другим компонентам bootchain при расширении (а теперь это уже более
>>>> десятка фич и подпакетов) тоже может потребоваться подобная инициализация.
>>>> Здесь в одном коммите видно, куда переехал код функции prepare(). Хуки нужны
>>>> для того, чтобы вызывать подобную инициализацию из определённого места, так
>>>> как базовый пакет bootchain-core может не знать, с какими компонентами
>>>> bootchain собран initramfs. Соответственно, включаемые скрипты кладутся в
>>>> /lib/bootchain-prepare.d. Если потребуется, по аналогии можно добавить в
>>>> stop() хуки для деинициализации.
>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L32-L38
>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L61
>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L109
>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L114
>>>
>>> Ты имеешь в виду вот такие хуки ?
>> Ну очень похожие, хотя use_hooks() явно проще -- без блокировки консоли, без
>> бита выполнения, просто соурсим исходники:
> Эти хуки уже давно есть и можно использовать. Не нужно дублировать этот же
> функционал.

Дойдя до этого места не понял, как их можно использовать...

Делаю скрипт выполняемым, а класть-то его куда? В 
/lib/initrd/pre/bootchain-core/ ?


>>>>>> +use_hooks()
>>>>>> +{
>>>>>> +	local hook hdir="$1"
>>>>>> +
>>>>>> +	if [ -d "$hdir" ]; then
>>>>>> +		# shellcheck disable=SC2012
>>>>>> +		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
>>>>>> +			[ -s "$hook" ] ||
>>>>>> +				continue
>>>>>> +			. "$hook"
>>>>>> +		done
>>>>>> +	fi
>>>>>>     }
>> и:
>>>>>> --- /dev/null
>>>>>> +++ b/make-initrd/features/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
>>>>>> @@ -0,0 +1,12 @@
>>>>>> +#!/bin/bash -efu
>>>>>> +
>>>>>> +dir=/.initrd/bootchain/waitdev
>>>>>> +mkdir -p -- "$dir"
>>>>>> +
>>>>>> +[ -z "${WAITDEV_TIMEOUT-}" ] ||
>>>>>> +	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
>>>>>> +i=0
>>>>>> +while [ "$i" -lt "${WAITDEV:-0}" ]; do
>>>>>> +	touch "$dir/$i"
>>>>>> +	i=$((1 + $i))
>>>>>> +done
>>

-- 
Best regards,
Leonid Krivoshein.



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

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-27 17:22           ` Leonid Krivoshein
@ 2021-09-28  0:40             ` Leonid Krivoshein
  2021-09-28  7:11             ` Leonid Krivoshein
  1 sibling, 0 replies; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-28  0:40 UTC (permalink / raw)
  To: make-initrd

[-- Attachment #1: Type: text/plain, Size: 2982 bytes --]


27.09.2021 20:22, Leonid Krivoshein пишет:
>
> 27.09.2021 16:57, Alexey Gladkov пишет:
>> On Mon, Sep 27, 2021 at 04:11:43PM +0300, Leonid Krivoshein wrote:
>>> [...]
>>>>> Другим компонентам bootchain при расширении (а теперь это уже более
>>>>> десятка фич и подпакетов) тоже может потребоваться подобная 
>>>>> инициализация.
>>>>> Здесь в одном коммите видно, куда переехал код функции prepare(). 
>>>>> Хуки нужны
>>>>> для того, чтобы вызывать подобную инициализацию из определённого 
>>>>> места, так
>>>>> как базовый пакет bootchain-core может не знать, с какими 
>>>>> компонентами
>>>>> bootchain собран initramfs. Соответственно, включаемые скрипты 
>>>>> кладутся в
>>>>> /lib/bootchain-prepare.d. Если потребуется, по аналогии можно 
>>>>> добавить в
>>>>> stop() хуки для деинициализации.
>>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L32-L38 
>>>>
>>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L61
>>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L109 
>>>>
>>>> https://github.com/osboot/make-initrd/blob/master/data/etc/rc.d/rc#L114 
>>>>
>>>>
>>>> Ты имеешь в виду вот такие хуки ?
>>> Ну очень похожие, хотя use_hooks() явно проще -- без блокировки 
>>> консоли, без
>>> бита выполнения, просто соурсим исходники:
>> Эти хуки уже давно есть и можно использовать. Не нужно дублировать 
>> этот же
>> функционал.
>
> Дойдя до этого места не понял, как их можно использовать...
>
> Делаю скрипт выполняемым, а класть-то его куда? В 
> /lib/initrd/pre/bootchain-core/ ?
>

Проверочная сборка показала, что этот путь не работает.

Если загрузиться с параметрами waitdev=UUID=1234 waitdev_timeout=180 
rdshell и запустить из rdshell руками 
/lib/initrd/pre/bootchain-core/300-waitdev , только тогда видно, что 
правильно отрабатывает. Но автоматом хук не запускается. В коде есть 
механизм запуска, но он не используется ни в одной фиче и в data/ его 
тоже нет, только сам этот скрипт rc. Вот изменения, на всякий случай:



-- 
Best regards,
Leonid Krivoshein.


[-- Attachment #2: waitdev.diff --]
[-- Type: text/x-patch, Size: 1916 bytes --]

commit d5340fea7efcf9995b7391a17b9781462556e661
Author: Leonid Krivoshein <klark@altlinux.org>
Date:   Tue Sep 28 00:14:28 2021 +0300

    core+waitdev: use common way for hooks call instead internal use_hooks()
    
    See also:
    https://lists.altlinux.org/pipermail/make-initrd/2021-September/000685.html

diff --git a/bootchain-core/data/etc/rc.d/init.d/bootchain b/bootchain-core/data/etc/rc.d/init.d/bootchain
index 7bdb1cf..1538339 100755
--- a/bootchain-core/data/etc/rc.d/init.d/bootchain
+++ b/bootchain-core/data/etc/rc.d/init.d/bootchain
@@ -17,24 +17,9 @@ NAME=bootchained
 PIDFILE="/var/run/$NAME.pid"
 ARGS="--lockfile $LOCKFILE --pidfile $PIDFILE --name $NAME --displayname $NAME"
 
-use_hooks()
-{
-	local hook hdir="$1"
-
-	if [ -d "$hdir" ]; then
-		# shellcheck disable=SC2012
-		for hook in $(ls -1 -- "$hdir"/* |sort) _; do
-			[ -s "$hook" ] ||
-				continue
-			. "$hook"
-		done
-	fi
-}
-
 start() {
 	RETVAL=0
 	if [ "${ROOT-}" = bootchain ] || [ "${ROOT-}" = pipeline ]; then
-		use_hooks /lib/bootchain-prepare.d
 		start_daemon --background $ARGS "$NAME"
 		RETVAL=$?
 	fi
diff --git a/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev b/bootchain-waitdev/data/lib/initrd/pre/bootchain-core/300-waitdev
old mode 100644
new mode 100755
similarity index 71%
rename from bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
rename to bootchain-waitdev/data/lib/initrd/pre/bootchain-core/300-waitdev
index f7315a3..5e0f040
--- a/bootchain-waitdev/data/lib/bootchain-prepare.d/300-waitdev
+++ b/bootchain-waitdev/data/lib/initrd/pre/bootchain-core/300-waitdev
@@ -1,10 +1,13 @@
 #!/bin/bash -efu
 
+. /.initrd/initenv
+
 dir=/.initrd/bootchain/waitdev
 mkdir -p -- "$dir"
 
 [ -z "${WAITDEV_TIMEOUT-}" ] ||
-	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir/TIMECNT"
+	printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir"/TIMECNT
+
 i=0
 while [ "$i" -lt "${WAITDEV:-0}" ]; do
 	touch "$dir/$i"

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

* Re: [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks
  2021-09-27 17:22           ` Leonid Krivoshein
  2021-09-28  0:40             ` Leonid Krivoshein
@ 2021-09-28  7:11             ` Leonid Krivoshein
  1 sibling, 0 replies; 9+ messages in thread
From: Leonid Krivoshein @ 2021-09-28  7:11 UTC (permalink / raw)
  To: make-initrd


27.09.2021 20:22, Leonid Krivoshein пишет:
>> Эти хуки уже давно есть и можно использовать. Не нужно дублировать 
>> этот же
>> функционал.
>
> Дойдя до этого места не понял, как их можно использовать...
>
> Делаю скрипт выполняемым, а класть-то его куда? В 
> /lib/initrd/pre/bootchain-core/ ?

Получилось: класть в /lib/initrd/pre/bootchain/* , т.е. по имени сервиса.


-- 
Best regards,
Leonid Krivoshein.



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

end of thread, other threads:[~2021-09-28  7:11 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 15:57 [make-initrd] [PATCH v1 21/41] fork pipeline: bootchain sysvinit script now use external hooks Leonid Krivoshein
2021-09-26 14:09 ` Alexey Gladkov
2021-09-26 19:53   ` Leonid Krivoshein
2021-09-27  9:09     ` Alexey Gladkov
2021-09-27 13:11       ` Leonid Krivoshein
2021-09-27 13:57         ` Alexey Gladkov
2021-09-27 17:22           ` Leonid Krivoshein
2021-09-28  0:40             ` Leonid Krivoshein
2021-09-28  7:11             ` 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