On 4/18/06, M. Warner Losh <[EMAIL PROTECTED]> wrote:
>
> In message: <[EMAIL PROTECTED]>
> Eric Anderson <[EMAIL PROTECTED]> writes:
> : Gordon Bergling wrote:
> : > Hi,
> : >
> : > * Thus spake Eric Anderson ([EMAIL PROTECTED]):
> : >> I've made a patch to /etc/rc.subr that makes the startup/shutdown rc
> : >> scripting look similar to other OS's (many different linux distros,
> : >> HP-UX, etc), but without color.
> : >>
> : >> The patch shouldn't break anything, and is only enabled if you have
> this
> : >> in your /etc/rc.conf:
> : >>
> : >> rc_fancy="YES"
> : >>
> : >> Several of the /etc/rc.d/* scripts send output to stdout, so that
> could
> : >> be cleaned up a bit if needed, but for now I tried to keep the patch
> as
> : >> minimal as possible.
> : >>
> : >> This is still a first pass, so please give feedback.
> : >
> : > A short try on my notebook shows some errors.
> : > I don't want to let this email getting too big, so I put the "dmesg
> -a"
> : > output online. http://generic.0xfce3.net/dmesg-fancy.txt
> : >
> : > BTW, the patch applied cleanly.
> :
> :
> : Thanks for the feedback! Looks like I made an erroneous assumption that
> : the wc, expr, and printf tools found in /usr/bin and /bin would be
> : available through boot, but that isn't the case on systems with those
> : file systems separate from /. I'm not sure how to resolve some of these
> : issues, since I don't know of a way to do those functions in csh without
> : them. I'm open to suggestions here from anyone.
>
> /bin and /sbin are available through the entire boot. Only things in
> /usr are suspect because /usr gets mounted early in the boot process,
> but not as early as /.
>
> Warner
Nice work!
I too noticed the dependence upon wc, printf, expr. I went ahead and rewrote
these into equivalents in native sh. (attaching new diff).
This diff is against the latest 7-CURRENT rc.subr. I had to manually merge 3
hunks due to some differences.
--
coleman kane
--- rc.subr.orig Tue Apr 18 13:58:14 2006
+++ rc.subr Tue Apr 18 13:57:36 2006
@@ -313,12 +313,16 @@
break
fi
_list=$_nlist
- echo -n ${_prefix:-"Waiting for PIDS: "}$_list
+ if ! checkyesno rc_fancy; then
+ echo -n ${_prefix:-"Waiting for PIDS: "}$_list
+ fi
_prefix=", "
sleep 2
done
if [ -n "$_prefix" ]; then
- echo "."
+ if ! checkyesno rc_fancy; then
+ echo "."
+ fi
fi
}
@@ -564,12 +568,14 @@
# if the precmd failed and force
# isn't set, exit
#
+ rcargsize=`echo $rc_arg`
+ rcargsize=${#rcargsize}
if [ -n "$_precmd" ]; then
debug "run_rc_command: evaluating ${_precmd}()."
eval $_precmd $rc_extra_args
_return=$?
[ $_return -ne 0 ] && [ -z "$rc_force" ] &&
- return 1
+ (echo_fancy "FAILED" `expr 10 + $rcargsize - 1`) && return 1
fi
if [ -n "$_cmd" ]; then
@@ -577,7 +583,7 @@
eval $_cmd $rc_extra_args
_return=$?
[ $_return -ne 0 ] && [ -z "$rc_force" ] &&
- return 1
+ (echo_fancy "FAILED" `expr 10 + $rcargsize - 1`) && return 1
fi
if [ -n "$_postcmd" ]; then
@@ -585,6 +591,7 @@
eval $_postcmd $rc_extra_args
_return=$?
fi
+ echo_fancy " OK " 0
return $_return
fi
@@ -600,13 +607,16 @@
;;
start)
+ echo -n "Starting ${name}"
if [ -z "$rc_fast" -a -n "$rc_pid" ]; then
+ echo_fancy " SKIP " 9
echo 1>&2 "${name} already running? (pid=$rc_pid)."
return 1
fi
if [ ! -x ${_chroot}${command} ]; then
info "run_rc_command: cannot run ($command)."
+ echo_fancy "ERROR " 9
return 1
fi
@@ -617,6 +627,7 @@
if ! checkyesno $_f; then
warn "\$${_f} is not enabled."
if [ -z "$rc_force" ]; then
+ echo_fancy "ERROR " 9
return 1
fi
fi
@@ -625,6 +636,7 @@
if [ ! -d "${_f}/." ]; then
warn "${_f} is not a directory."
if [ -z "$rc_force" ]; then
+ echo_fancy "ERROR " 9
return 1
fi
fi
@@ -633,6 +645,7 @@
if [ ! -r "${_f}" ]; then
warn "${_f} is not readable."
if [ -z "$rc_force" ]; then
+ echo_fancy "ERROR " 9
return 1
fi
fi
@@ -646,12 +659,11 @@
eval $_precmd
_return=$?
[ $_return -ne 0 ] && [ -z "$rc_force" ] &&
- return 1
+ (echo_fancy "ERROR " 9) && return 1
fi
# setup the command to run, and run it
#
- echo "Starting ${name}."
if [ -n "$_chroot" ]; then
_doit="\
${_nice:+nice -n $_nice }\
@@ -673,7 +685,7 @@
debug "run_rc_command: _doit: $_doit"
eval $_doit
_return=$?
- [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1
+ [ $_return -ne 0 ] && [ -z "$rc_force" ] && (echo_fancy "FAILED" 9) && return 1
# finally, run postcmd
#
@@ -681,15 +693,19 @@
debug "run_rc_command: evaluating ${_postcmd}()."
eval $_postcmd
fi
+ echo_fancy " OK " 9
;;
stop)
+ echo -n "Stopping ${name}"
if [ -z "$rc_pid" ]; then
[ -n "$rc_fast" ] && return 0
if [ -n "$pidfile" ]; then
+ echo_fancy " SKIP " 9
echo 1>&2 \
"${name} not running? (check $pidfile)."
else
+ echo_fancy " SKIP " 9
echo 1>&2 "${name} not running?"
fi
return 1
@@ -702,12 +718,11 @@
eval $_precmd
_return=$?
[ $_return -ne 0 ] && [ -z "$rc_force" ] &&
- return 1
+ (echo_fancy "ERROR " 9) && return 1
fi
# send the signal to stop
#
- echo "Stopping ${name}."
_doit="kill -${sig_stop:-TERM} $rc_pid"
if [ -n "$_user" ]; then
_doit="su -m $_user -c 'sh -c \"$_doit\"'"
@@ -718,7 +733,7 @@
#
eval $_doit
_return=$?
- [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1
+ [ $_return -ne 0 ] && [ -z "$rc_force" ] && (echo_fancy "FAILED" 9) && return 1
# wait for the command to exit,
# and run postcmd.
@@ -727,24 +742,27 @@
eval $_postcmd
_return=$?
fi
+ echo_fancy " OK " 9
;;
reload)
+ echo -n "Reloading ${name} config files"
if [ -z "$rc_pid" ]; then
if [ -n "$pidfile" ]; then
+ echo_fancy "SKIPPED" 23
echo 1>&2 \
"${name} not running? (check $pidfile)."
else
+ echo_fancy "SKIPPED" 23
echo 1>&2 "${name} not running?"
fi
return 1
fi
- echo "Reloading ${name} config files."
if [ -n "$_precmd" ]; then
eval $_precmd
_return=$?
[ $_return -ne 0 ] && [ -z "$rc_force" ] &&
- return 1
+ (echo_fancy "FAILED" 23) && return 1
fi
_doit="kill -${sig_reload:-HUP} $rc_pid"
if [ -n "$_user" ]; then
@@ -752,11 +770,12 @@
fi
eval $_doit
_return=$?
- [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1
+ [ $_return -ne 0 ] && [ -z "$rc_force" ] && (echo_fancy "FAILED" 23) && return 1
if [ -n "$_postcmd" ]; then
eval $_postcmd
_return=$?
fi
+ echo_fancy " OK " 23
;;
restart)
@@ -1428,3 +1447,33 @@
}
fi
+
+echo_fancy () {
+ columns=80
+ label=$1
+ namesize=`echo -n $name`
+ namesize=${#namesize}
+ rc_argsize=`echo -n $rc_arg`
+ rc_argsize=${#rc_argsize}
+ padding=""
+ paddingsize=$(($columns - 15 - $2 - $namesize))
+ until [ 0 = ${paddingsize} ]; do
+ padding=" $padding"
+ paddingsize=$(($paddingsize - 1))
+ done
+ if checkyesno rc_fancy; then
+ if [ $2 = 0 ]; then
+ padding=""
+ paddingsize=$((60 - $namesize - $rc_argsize))
+ until [ 0 = ${paddingsize} ]; do
+ padding=" $padding"
+ paddingsize=$(($paddingsize - 1))
+ done
+ echo -e "\rRunning ${rc_arg} $name $padding [$label]"
+ else
+ echo " ... $padding [$label]"
+ fi
+ else
+ echo "."
+ fi
+}
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"