[Buildroot] [PATCH] Rework of shutdown policy in inittab

Thomas De Schampheleire patrickdepinguin+buildroot at gmail.com
Thu Dec 8 09:33:02 UTC 2011


Hello Maxime,

On Wed, Dec 7, 2011 at 2:08 PM, Maxime Ripard
<maxime.ripard at free-electrons.com> wrote:
> On 07/12/2011 07:52, Thomas De Schampheleire wrote:
>> Hi,
>>
>> On Fri, Sep 2, 2011 at 2:25 PM, Maxime Ripard
>> <maxime.ripard at free-electrons.com> wrote:
>>> This commit follows commit ad501b66. Start up of the busybox logging
>>> daemons were moved to an init script but the shutdown were still
>>> performed in inittab. This commit moves the shutdown policy to an
>>> rcK script that calls the stop function of all the init scripts in
>>> a reversed order.
>>>
>>> Signed-off-by: Maxime Ripard <maxime.ripard at free-electrons.com>
>>> ---
>>>  fs/skeleton/etc/init.d/rcK |   27 +++++++++++++++++++++++++++
>>>  fs/skeleton/etc/inittab    |    3 +--
>>>  2 files changed, 28 insertions(+), 2 deletions(-)
>>>  create mode 100755 fs/skeleton/etc/init.d/rcK
>>>
>>> diff --git a/fs/skeleton/etc/init.d/rcK b/fs/skeleton/etc/init.d/rcK
>>> new file mode 100755
>>> index 0000000..59e9c54
>>> --- /dev/null
>>> +++ b/fs/skeleton/etc/init.d/rcK
>>> @@ -0,0 +1,27 @@
>>> +#!/bin/sh
>>> +
>>> +
>>> +# Stop all init scripts in /etc/init.d
>>> +# executing them in reversed numerical order.
>>> +#
>>> +for i in $(ls -r /etc/init.d/S??*) ;do
>>> +
>>> +     # Ignore dangling symlinks (if any).
>>> +     [ ! -f "$i" ] && continue
>>> +
>>> +     case "$i" in
>>> +       *.sh)
>>> +           # Source shell script for speed.
>>> +           (
>>> +               trap - INT QUIT TSTP
>>> +               set stop
>>> +               . $i
>>> +           )
>>> +           ;;
>>> +       *)
>>> +           # No sh extension, so fork subprocess.
>>> +           $i stop
>>> +           ;;
>>> +    esac
>>> +done
>>> +
>>> diff --git a/fs/skeleton/etc/inittab b/fs/skeleton/etc/inittab
>>> index ac410d6..85881f4 100644
>>> --- a/fs/skeleton/etc/inittab
>>> +++ b/fs/skeleton/etc/inittab
>>> @@ -30,8 +30,7 @@ null::sysinit:/bin/hostname -F /etc/hostname
>>>  ::ctrlaltdel:/sbin/reboot
>>>
>>>  # Stuff to do before rebooting
>>> -null::shutdown:/usr/bin/killall klogd
>>> -null::shutdown:/usr/bin/killall syslogd
>>> +null::shutdown:/etc/init.d/rcK
>>>  null::shutdown:/bin/umount -a -r
>>>  null::shutdown:/sbin/swapoff -a
>>
>> This is a different behavior now. Before only the logging daemons were
>> killed, now all init scripts are run.
>>
>> For this to work properly, all init scripts that users have in
>> /etc/init.d should actually have a stop() function. Since this
>> behavior was not required previously, I expect several users not to
>> have this.
>> For such users, a reboot would suddenly trigger several
>> initializations that are unexpected.
>
> I have to admit, I didn't think about in-the-wild users in such a case.
>
>> I think there are at least two solutions:
>> 1. Keep the new behavior created with this patch, but make sure that
>> the release notes clearly state this behavior change and update the
>> documentation.
>
> I hardly see how this is a new behaviour, every single init scripts we
> have already implements it, and we require it to.

IMO it's new behavior in the sense that the 'stop' function of these
scripts was never run by default, they weren't used.
So, users adding their own script may not have felt this was necessary.
(and admittedly, I am such a user :-) )

>
>> 2. Adapt the new behavior: currently you are following
>> /etc/init.d/Sxxxx files/links, while I think that the default policy
>> on many distributions is to use /etc/init.d/Kxxxx for shutdown (and
>> Sxxxx only for startup).
>
> The only one doing that I can think of is OpenWRT, it is barely many.

I was thinking of non-embedded distributions, for example RedHat.

>
>> In this scenario, users who have custom Sxxx
>> init scripts will not be impacted. Only if they choose to, can they
>> create appropriate Kxxxx links and provide stop functions.
>> For scripts present in the buildroot distribution, we can provide
>> appropriate S and K links immediately.
>
> You're right.
>
> I'm glad we can finally have that sort of discussion, I was starting to
> think every one had a dev/null rule for my patches.

I have thought that before, too :-)

>
> However, this touches the same area than my systemd patches, so I'd
> prefer not to touch the same area in every packages in such a small time
> frame. So maybe the easier way would be to merge such as mechanism with
> the init mechanism introduced with these patches.

Ok for me.

Best regards,
Thomas



More information about the buildroot mailing list