rc.subr problems
Paul Schmehl
pschmehl_lists at tx.rr.com
Fri Dec 14 01:52:16 UTC 2012
I'm working on updating the sguil ports; security/sguil-server,
security/sguil-sensor and security/sguil-client. Right now I'm trying to
get the startup script working for sguil-server, and I'm banging my head
against the wall.
The server is a tcl script that begins like all the other scripts:
#!/bin/sh
# Run tcl from users PATH \
exec tclsh "$0" "$@"
I can start it from the commandline with no problem like this:
# sh /usr/local/bin/sguild -c /usr/local/etc/sguild/sguild.conf -D -P
/var/run/sguild/sguild.pid
2012-12-14 01:45:19 pid(68134) Loading access list:
/usr/local/etc/sguild/sguild.access
2012-12-14 01:45:19 pid(68134) Sensor access list set to ALLOW ANY.
2012-12-14 01:45:19 pid(68134) Client access list set to ALLOW ANY.
This launches sguild as a daemon and forks two child processes, all running
under the user sguil.
# ps -auxw | grep sguild
sguil 68136 0.0 0.1 28240 8524 1 I 1:45AM 0:00.02
/usr/local/bin/tclsh8.5 /usr/local/bin/sguild -c
/usr/local/etc/sguild/sguild.conf -D -P /var/run/sguild/
sguil 68140 0.0 0.1 28240 8392 1 S 1:45AM 0:00.00
/usr/local/bin/tclsh8.5 /usr/local/bin/sguild -c
/usr/local/etc/sguild/sguild.conf -D -P /var/run/sguild/
sguil 68141 0.0 0.1 28240 8396 1 I 1:45AM 0:00.00
/usr/local/bin/tclsh8.5 /usr/local/bin/sguild -c
/usr/local/etc/sguild/sguild.conf -D -P /var/run/sguild/
If I run the rc script, I get this:
# /usr/local/etc/rc.d/sguild start
/usr/local/etc/rc.d/sguild: unknown directive '/usr/local/bin/sguild'.
Usage: /usr/local/etc/rc.d/sguild
[fast|force|one|quiet](start|stop|restart|rcvar|status|poll)
Here's the guts of the startup script:
. /etc/rc.subr
name="sguild"
load_rc_config ${name}
# set some defaults
sguild_enable=${sguild_enable:-"NO"}
sguild_conf=${sguild_conf:-"/usr/local/etc/sguild/sguild.conf"}
sguild_pid=${sguild_pid:-"/var/run/sguild/sguild.pid"}
sguild_flags=${sguild_flags:-"-D -P ${sguild_pid}"}
sguild_user=${sguild_user:-"sguil"}
command="/usr/local/bin/${name}"
command_args="-c ${sguild_conf} ${sguild_flags}"
procname="/usr/local/bin/tclsh8.5"
start_cmd="sh ${command} ${command_args}"
run_rc_command "$1"
When I read through the rc.subr script, I gather that unknown directive is
the script bailing because it has no idea what to do.
Yet when I run stop, it works fine:
# /usr/local/etc/rc.d/sguild stop
Stopping sguild.
SGUILD: killing child procs...
SGUILD: Exiting...
This makes no sense to me.
If I add command_interpreter="/bin/sh" or
command_interpreter="/usr/local/bin/tclsh8.5", I get this:
# /usr/local/etc/rc.d/sguild start
/usr/local/etc/rc.d/sguild: WARNING: no shebang line in
/usr/local/bin/tclsh8.5
/usr/local/etc/rc.d/sguild: WARNING: no shebang line in
/usr/local/bin/tclsh8.5
/usr/local/etc/rc.d/sguild: unknown directive '/usr/local/bin/sguild'.
Usage: /usr/local/etc/rc.d/sguild
[fast|force|one|quiet](start|stop|restart|rcvar|status|poll)
Clearly I'm missing something, but I have no idea what it is. This same
script works fine in the current port version.
Paul Schmehl, Senior Infosec Analyst
As if it wasn't already obvious, my opinions
are my own and not those of my employer.
*******************************************
"It is as useless to argue with those who have
renounced the use of reason as to administer
medication to the dead." Thomas Jefferson
"There are some ideas so wrong that only a very
intelligent person could believe in them." George Orwell
More information about the freebsd-rc
mailing list