[arch-releng] [RFC] [PATCH] [configs/releng] Replace rc.d/archiso with initscripts hooks.

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Wed Aug 17 21:51:56 EDT 2011


On 08/17/2011 10:30 PM, Dave Reisner wrote:
> On Wed, Aug 17, 2011 at 10:19:32PM -0300, Gerardo Exequiel Pozzi wrote:
>> In this way:
>> * Prepare locales requested by boot param mostly early possible.
>> * Setup special console at end of rc.sysinit
>>
>> Remove unneded include from automated_script (already included by rc.conf)
>>
>> Signed-off-by: Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>
>> ---
>>   configs/releng/root-image/etc/rc.conf              |    2 +-
>>   configs/releng/root-image/etc/rc.d/archiso         |   45 --------------------
>>   .../etc/rc.d/functions.d/automated_script          |    2 -
>>   .../etc/rc.d/functions.d/prepare_locale_gen        |   11 +++++
>>   .../etc/rc.d/functions.d/setup_special_console     |   25 +++++++++++
>>   5 files changed, 37 insertions(+), 48 deletions(-)
>>   delete mode 100755 configs/releng/root-image/etc/rc.d/archiso
>>   create mode 100644 configs/releng/root-image/etc/rc.d/functions.d/prepare_locale_gen
>>   create mode 100644 configs/releng/root-image/etc/rc.d/functions.d/setup_special_console
>>
>> diff --git a/configs/releng/root-image/etc/rc.conf b/configs/releng/root-image/etc/rc.conf
>> index 42084f6..a3e3d8a 100644
>> --- a/configs/releng/root-image/etc/rc.conf
>> +++ b/configs/releng/root-image/etc/rc.conf
>> @@ -30,4 +30,4 @@ USELVM="no"
>>
>>   HOSTNAME="archiso"
>>
>> -DAEMONS=(hwclock syslog-ng archiso)
>> +DAEMONS=(hwclock syslog-ng)
>> diff --git a/configs/releng/root-image/etc/rc.d/archiso b/configs/releng/root-image/etc/rc.d/archiso
>> deleted file mode 100755
>> index cc930f6..0000000
>> --- a/configs/releng/root-image/etc/rc.d/archiso
>> +++ /dev/null
>> @@ -1,45 +0,0 @@
>> -# vim: set ft=sh:
>> -. /etc/rc.conf
>> -. /etc/rc.d/functions
>> -
>> -do_locale_gen ()
>> -{
>> -    if [[ ${LOCALE} != "en_US.UTF-8" ]]; then
>> -        stat_busy "Generating locales..."
>> -            sed -i "s/#\(${LOCALE/[@.]*}\)/\1/" /etc/locale.gen
>> -            /usr/sbin/locale-gen>  /dev/null
>> -        stat_done
>> -    fi
>> -}
>> -
>> -# If an alternate console was specified on the kernel command line,
>> -# start agetty on it too.
>> -do_special_console()
>> -{
>> -    local cmdline_console
>> -    if cmdline_console=$(kernel_cmdline console); then
>> -        stat_busy "Starting agetty on console: ${cmdline_console}"
>> -            local port options baud rts
>> -            port=${cmdline_console%%,*}
>> -            options=${cmdline_console#${port}}
>> -            options=${options#,}
>> -            baud=${options%%[neo]*}
>> -            [[ ${options} =~ r$ ]]&&  rts="-h"
>> -            if ! grep -q "^${port}" /etc/securetty; then
>> -                echo ${port}>>  /etc/securetty
>> -            fi
>> -            if ! grep -q "^z0:" /etc/inittab; then
>> -                echo "z0:2345:respawn:/sbin/agetty -8 -s ${rts} ${baud:-9600} ${port} linux">>  /etc/inittab
>> -            fi
>> -            /sbin/telinit q
>> -        stat_done
>> -    fi
>> -}
>> -
>> -case "$1" in
>> -  start)
>> -    do_locale_gen
>> -    do_special_console
>> -    ;;
>> -esac
>> -exit 0
>> diff --git a/configs/releng/root-image/etc/rc.d/functions.d/automated_script b/configs/releng/root-image/etc/rc.d/functions.d/automated_script
>> index edb8ea3..7a35acb 100644
>> --- a/configs/releng/root-image/etc/rc.d/functions.d/automated_script
>> +++ b/configs/releng/root-image/etc/rc.d/functions.d/automated_script
>> @@ -1,5 +1,3 @@
>> -. /etc/archiso/functions
>> -
>>   automated_script ()
>>   {
>>       script="$(kernel_cmdline script)"
>> diff --git a/configs/releng/root-image/etc/rc.d/functions.d/prepare_locale_gen b/configs/releng/root-image/etc/rc.d/functions.d/prepare_locale_gen
>> new file mode 100644
>> index 0000000..47ed79d
>> --- /dev/null
>> +++ b/configs/releng/root-image/etc/rc.d/functions.d/prepare_locale_gen
>> @@ -0,0 +1,11 @@
>> +prepare_locale_gen ()
>> +{
>> +    if [[ ${LOCALE} != "en_US.UTF-8" ]]; then
>> +        stat_busy "Generating locales..."
>> +            sed -i "s/#\(${LOCALE/[@.]*}\)/\1/" /etc/locale.gen
>> +            /usr/sbin/locale-gen>  /dev/null
>> +        stat_done
>> +    fi
>> +}
>> +
>> +add_hook sysinit_postmount prepare_locale_gen
>> diff --git a/configs/releng/root-image/etc/rc.d/functions.d/setup_special_console b/configs/releng/root-image/etc/rc.d/functions.d/setup_special_console
>> new file mode 100644
>> index 0000000..93553a6
>> --- /dev/null
>> +++ b/configs/releng/root-image/etc/rc.d/functions.d/setup_special_console
>> @@ -0,0 +1,25 @@
>> +# If an alternate console was specified on the kernel command line,
>> +# start agetty on it too.
>> +setup_special_console()
>> +{
>> +    local cmdline_console
>> +    if cmdline_console=$(kernel_cmdline console); then
> Just to point out, console can be specified multiple times. Not sure if
> you want to honor all of them, or just the first. Some refactoring would
> be involved to catch them all, but it doesn't seem like it'd be too
> raunchy.
Yes, at this moment only one extra console is supported. The main 
purpose of this is for serial console. (Personally I use for qemu, and 
only one serial console is supported).
>> +        stat_busy "Starting agetty on console: ${cmdline_console}"
>> +            local port options baud rts
>> +            port=${cmdline_console%%,*}
>> +            options=${cmdline_console#${port}}
>> +            options=${options#,}
>> +            baud=${options%%[neo]*}
> Hrmmm, I'd bet you could split this all with a single read:
>
>    IFS=',' read -r -d '' port baud options<<<  "$cmdline_console"
Nope :( Because not all fields are separated by ','

So this fails: console=ttyS0,9600n or ttyS0,115200n8 or ttyS0,38400n8r


>
>> +            [[ ${options} =~ r$ ]]&&  rts="-h"
> No need for a regex here: [[ $options = *r ]]
True.
>
>> +            if ! grep -q "^${port}" /etc/securetty; then
>> +                echo ${port}>>  /etc/securetty
>> +            fi
>> +            if ! grep -q "^z0:" /etc/inittab; then
>> +                echo "z0:2345:respawn:/sbin/agetty -8 -s ${rts} ${baud:-9600} ${port} linux">>  /etc/inittab
>> +            fi
>> +            /sbin/telinit q
>> +        stat_done
>> +    fi
>> +}
>> +
>> +add_hook sysinit_end setup_special_console
>> -- 
>> 1.7.6
>>

Thanks for the feedback.

-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1



More information about the arch-releng mailing list