On Mon, Jun 27, 2011 at 11:27 AM, Kurt J. Bosch <[email protected]> wrote: > Seblu, 2011-06-27 00:51: >> >> On Mon, Jun 27, 2011 at 12:44 AM, Kurt J. Bosch >> <[email protected]> wrote: >>> >>> Seblu, 2011-06-27 00:28: >>>> >>>> On Sun, Jun 26, 2011 at 11:51 PM, Kurt J. Bosch >>>> <[email protected]> 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) -- Sébastien Luttringer www.seblu.net
