[arch-projects] [INITSCRIPTS] Improvment & bug fix

Dave Reisner d at falconindy.com
Mon Mar 28 21:45:05 EDT 2011


On Tue, Mar 29, 2011 at 03:15:32AM +0200, Seblu wrote:
> Hello,
> 
> You can see 2 patches.
> 
> First add a new rc helper which allow to do thing list this
> # rc start sshd dbus gpm
> # rc stop syslog-ng
> # rc list
> This is a similar behaviour to debian invoke-rc.d.
> 
> Second fix bug: https://bugs.archlinux.org/task/23373
> 
> Regards,
> 
> -- 
> Sébastien Luttringer
> www.seblu.net

> From 1a88a9d40727b2565d155060fef261e9d30781b3 Mon Sep 17 00:00:00 2001
> From: Seblu <seblu at seblu.net>
> Date: Tue, 29 Mar 2011 02:35:04 +0200
> Subject: [PATCH 1/2] Add an rc helper
> 
> This is allow a quick calling to /etc/rc.d scripts by calling a shell command.
> By example, starting sshd and gpm can be done by typing: rc start sshd gpm
> rc can also list available scripts and show which is in DAEMONS
> 
> Signed-off-by: Seblu <seblu at seblu.net>
> ---
>  install.sh |    2 ++
>  rc         |   43 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 45 insertions(+), 0 deletions(-)
>  create mode 100755 rc
> 
> diff --git a/install.sh b/install.sh
> index 2b2cbbc..116daed 100755
> --- a/install.sh
> +++ b/install.sh
> @@ -21,3 +21,5 @@ done
>  
>  gcc $CFLAGS -o minilogd minilogd.c || exit 1
>  install -D -m755 minilogd ${DESTDIR}/sbin/minilogd || exit 1
> +
> +install -D -m755 rc ${DESTDIR}/sbin/rc || exit 1

/sbin is typically reserved for programs which an unpriveleged user gets
no use out of. Since we've got a "list" function, this is probably
better suited for /bin (could make a case for /usr/bin as well).

> diff --git a/rc b/rc
> new file mode 100755
> index 0000000..63669b8
> --- /dev/null
> +++ b/rc
> @@ -0,0 +1,43 @@
> +#!/bin/bash
> +
> +. /etc/rc.conf
> +. /etc/rc.d/functions
> +
> +usage() {
> +cat >&2 << EOF
> +usage: rc action daemon ...
> +
> +e.g: rc list
> +     rc help
> +     rc start sshd gpm
> +EOF
> +}
> +
> +(( $# >= 1 )) || { usage; exit 1; }
> +
> +case $1 in
> +	help)
> +		usage
> +		;;
> +	list)
> +		cd /etc/rc.d/
> +		for rcs in *; do
> +			[[ -x $rcs && ! -d $rcs ]] || continue
> +			echo -n "$rcs"
> +			for rcu in "${DAEMONS[@]}"; do
> +				[[ "$rcu" = $rcs ]] && echo -n " (DAEMONS)" && break
> +			done
> +			echo
> +		done
> +	;;

Couldn't we get more mileage out of this? Why not list all the daemons,
with an indication of their status (based on /var/run/daemons) and
whether or not they're enabled in /etc/rc.conf. For example...

[STOPPED]     *dbus       <- stopped, enabled
[STOPPED]     kexec       <- stopped, not enabled
[RUNNING]     *mpd        <- running, enabled
[RUNNING]     cups        <- running, not enabled

Bonus points: colorize if USECOLOR, sort by status (stopped first, then
running) and by name within each status. Shouldn't be too hard --
something similar to this appeared on the forums a while back.

> +	*)
> +		action=$1
> +		shift
> +		for i in $*; do

$* is superfluous, and mildly sloppy. "for i" is sufficient to
iterate over positional parameters.

> +			[[ -x "/etc/rc.d/$i" ]] && "/etc/rc.d/$i" $action
> +		done
> +esac
> +
> +true

Why not keep a counter of errors and exit with a meaningful value?

> +
> +# vim: set ts=2 sw=2 noet:
> -- 
> 1.7.4.1
> 

> From 40a7b8cad1b7197aa97f5a391b6a071faef032c5 Mon Sep 17 00:00:00 2001
> From: Seblu <seblu at seblu.net>
> Date: Tue, 29 Mar 2011 03:41:14 +0200
> Subject: [PATCH 2/2] Allow loading of multiple keymaps when LOCALE is UTF-8
> 
> Close FS#23373.
> 
> Signed-off-by: Seblu <seblu at seblu.net>
> ---
>  rc.sysinit |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/rc.sysinit b/rc.sysinit
> index 9797611..19a71b4 100755
> --- a/rc.sysinit
> +++ b/rc.sysinit
> @@ -380,7 +380,7 @@ if [[ ${LOCALE,,} =~ utf ]]; then
>  	done
>  	echo 1 > /sys/module/vt/parameters/default_utf8
>  	stat_done
> -	[[ $KEYMAP ]] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q -u "$KEYMAP"
> +	[[ $KEYMAP ]] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q -u $KEYMAP
>  else
>  	stat_busy "Setting Consoles to legacy mode"
>  	# make non-UTF-8 consoles work on 2.6.24 and newer kernels
> -- 
> 1.7.4.1
> 


dave



More information about the arch-projects mailing list