[Buildroot] [PATCH] Rework of shutdown policy in inittab
Maxime Ripard
maxime.ripard at free-electrons.com
Wed Dec 7 13:08:04 UTC 2011
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.
> 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.
> 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.
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.
Maxime
--
Maxime Ripard, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
More information about the buildroot
mailing list