[arch-projects] [initscripts] [PATCH] Fix: don't use install where target file can't/shouldn't be removed

Kurt J. Bosch kjb-temp-2009 at alpenjodel.de
Mon Jun 27 17:36:54 EDT 2011


Seblu, 2011-06-27 20:40:
> On Mon, Jun 27, 2011 at 11:27 AM, Kurt J. Bosch
> <kjb-temp-2009 at alpenjodel.de>  wrote:
>> Seblu, 2011-06-27 00:51:
>>>
>>> On Mon, Jun 27, 2011 at 12:44 AM, Kurt J. Bosch
>>> <kjb-temp-2009 at alpenjodel.de>    wrote:
>>>>
>>>> Seblu, 2011-06-27 00:28:
>>>>>
>>>>> On Sun, Jun 26, 2011 at 11:51 PM, Kurt J. Bosch
>>>>> <kjb-temp-2009 at alpenjodel.de>      wrote:
>>>>>>
>>>>>> ---
>>>>>>   functions  |    7 +++++++
>>>>>>   rc.sysinit |    4 ++--
>>>>>>   2 files changed, 9 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/functions b/functions
>>>>>> index 43414c0..9ad75a9 100644
>>>>>> --- a/functions
>>>>>> +++ b/functions
>>>>>> @@ -428,6 +428,13 @@ install_file() {
>>>>>>         install -T "$@"<(printf '%s' "$content") "$file"
>>>>>>   }
>>>>>>
>>>>>> +# install would fail because files can't be removed from /proc
>>>>>> +# moreover we don't want to remove nodes from /dev
>>>>>> +write_file() {
>>>>>> +       local file=$1 content=$2
>>>>>> +       printf '%s' "$content">| "$file"
>>>>>> +}
>>>>>> +
>>>>>>   bootlogd_stop() {
>>>>>>         [[ -f /run/bootlogd.pid ]] || return 0
>>>>>>         touch /var/log/boot
>>>>>> diff --git a/rc.sysinit b/rc.sysinit
>>>>>> index dcc88f5..2c08f02 100755
>>>>>> --- a/rc.sysinit
>>>>>> +++ b/rc.sysinit
>>>>>> @@ -209,7 +209,7 @@ status "Activating Swap" swapon -a
>>>>>>   RANDOM_SEED=/var/lib/misc/random-seed
>>>>>>   [[ -f $RANDOM_SEED ]]&&
>>>>>>         status "Initializing Random Seed" \
>>>>>> -               install_file /dev/urandom "$(<      "$RANDOM_SEED" )"
>>>>>> +               cp "$RANDOM_SEED" /dev/urandom
>>>>>>
>>>>>>   stat_busy "Removing Leftover Files"
>>>>>>         rm -rf /etc/{nologin,shutdownpid} /forcefsck /tmp/*
>>>>>> /tmp/.*&>/dev/null
>>>>>> @@ -225,7 +225,7 @@ stat_done
>>>>>>
>>>>>>   [[ $HOSTNAME ]]&&
>>>>>>         status "Setting Hostname: $HOSTNAME" \
>>>>>> -               install_file /proc/sys/kernel/hostname "$HOSTNAME"
>>>>>> +               write_file /proc/sys/kernel/hostname "$HOSTNAME"
>>>>>>
>>>>>
>>>>> Do you call a function to do the job of a redirection?
>>>>>
>>>> Yep. We need to do it _within_ status.
>>>
>>> Reading (or not) your commit message I thought you wanted to do that.
>>> What do you think about doing you eval inside status?
>>>
>> Would be rather difficult because eval does word splitting.
> It was a joke, using eval should be avoided.
>
>>
>>> Or better, just rollback from your previous patch where you assert
>>> this write can be done in one line with status instead of a classic
>>> status_start / status_done?
>>> In this case, the use of status is not the best choice I think.
>>>
>> Using status + write_file is better in this case IMHO for some reasons:
>> * It provides DONE/FAIL handling.
> Nothing more than calling those 2 lines ?
>
> start_busy "Setting Hostname: $HOSTNAME"
> echo $HOSTNAME>  /proc/sys/kernel/hostname&&  stat_done || stat_fail
>
> or in one line
>
> start_busy "Setting Hostname: $HOSTNAME"; echo $HOSTNAME>
> /proc/sys/kernel/hostname&&  stat_done || stat_fail
>
>
>> * We avoid the common pitfall of changing the from stat_busy/stat_done to
>> the non working status with redirection later as happened for "Initializing
>> Random Seed" two moths ago without beeing fixed until now.
> Thos doesn't avoid bad using of status... this just fix a bad status
> using by creating a function to write a file.
>
> I see status as an helper for simple cases of stat_*. Here bash syntax
> doesn't allow it.
>
> Doesn't forget that initscripts syntax must be easily readable (i tell
> this about all your patchs, not only this one)
>
OK, OK, OK, giving up. Fixed this in the rebased patches.

-- 
Kurt


More information about the arch-projects mailing list