conf/177217: rc.d/ddb -- squelch warning when ddb_enable=yes but DDB missing from kernel
jdc at koitsu.org
Fri Mar 22 01:20:00 UTC 2013
>Synopsis: rc.d/ddb -- squelch warning when ddb_enable=yes but DDB missing from kernel
>Arrival-Date: Fri Mar 22 01:20:00 UTC 2013
>Originator: Jeremy Chadwick
>Release: FreeBSD 9.1-STABLE amd64
System: FreeBSD icarus.home.lan 9.1-STABLE FreeBSD 9.1-STABLE #0 r248403: Sat Mar 16 20:33:01 PDT 2013 root at icarus.home.lan:/usr/obj/usr/src/sys/X7SBA_RELENG_9_amd64 amd64
If a user has ddb_enable="yes" in rc.conf, but their kernel is
lacking "options DDB" and friends, then the following message is
shown during boot:
/etc/rc.d/ddb: WARNING: failed precmd routine for ddb
The reason is that returning 1 from inside of precmd causes rc.subr
to emit the above warning. Returning 0 would cause rc.subr to
continue on and try to run /sbin/ddb, which emits even more errors.
IMO, the simplest way to solve this dillema is to use "exit 1" and
bail out of the rc.d script ASAP; some other rc.d scripts use this
method as well.
To make this fact clearer to future committers/readers, I added
an explanation comment. I also added use of $SYSCTL_N to be
consistent with other scripts.
I should note I did try getting rid of the precmd stuff and instead
making a ddb_start() routine + doing the necessary magic, but this
induces all sorts of edge cases/nuances relating to required_files
and command_args and some other things. exit 1 just seems easier.
If someone has a better/cleaner method, I'm happy to test such.
1. Set ddb_enable="yes" in rc.conf on a system lacking DDB support
in the kernel
2. Run "/etc/rc.d/ddb start"
Patch is below, and will be available at the following URL one I
get a PR number:
Verified as working on stable/9 (r248403).
--- etc/rc.d/ddb (revision 248604)
+++ etc/rc.d/ddb (working copy)
@@ -19,8 +19,11 @@ stop_cmd=":"
# Silently exit if ddb is not enabled
- if [ -z "`sysctl -Nq debug.ddb.scripting.scripts`" ]; then
- return 1
+ # NOTE: exit is needed here, not return, else rc.subr emits
+ # a "failed precmd routine" warning when ddb_enable="yes" is
+ # used on a system which lacks DDB support in the kernel.
+ if [ -z "`$SYSCTL_N -q debug.ddb.scripting.scripts`" ]; then
+ exit 1
More information about the freebsd-bugs