ports/176156: Add multi-instance support to NSD rc script
Darren Pilgrim
darren.pilgrim at gmail.com
Fri Feb 15 05:20:00 UTC 2013
>Number: 176156
>Category: ports
>Synopsis: Add multi-instance support to NSD rc script
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Fri Feb 15 05:20:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Darren Pilgrim
>Release:
>Organization:
>Environment:
>Description:
NSD 3.x can run multiple instances by specifying alternate config files via the -c command-line parameter. The attached patch alters the RC script such that the config file chosen depends on the name of the RC script invoked. This lets you add instances by creating symlinks to the RC script. The same approach is used with ISC DHCPD to run the separate v4 and v6 instances. The pattern is ${LOCAL_BASE}/etc/rc.d/foo tells NSD to use /usr/local/etc/nsd/foo.conf. This does not change the default behaviour.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
--- files/nsd.in.orig 2012-02-21 15:26:18.452254011 -0800
+++ files/nsd.in 2012-09-09 06:11:14.075501163 -0700
@@ -14,45 +14,71 @@
. /etc/rc.subr
-name=nsd
-rcvar=nsd_enable
+case $0 in
+/etc/rc*)
+ # during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),
+ # so get the name of the script from $_file
+ name=$_file
+ ;;
+*)
+ name=$0
+ ;;
+esac
-required_files=%%PREFIX%%/etc/nsd/nsd.conf
+name=${name##*/}
-command=%%PREFIX%%/sbin/nsdc
-command_args="start"
-pidfile=`%%PREFIX%%/sbin/nsd-checkconf -o pidfile %%PREFIX%%/etc/nsd/nsd.conf`
-procname=%%PREFIX%%/sbin/${name}
+rcvar=${name}_enable
load_rc_config ${name}
-nsd_enable=${nsd_enable-"NO"}
+eval ": \${${name}_conf:=\"%%PREFIX%%/etc/nsd/${name}.conf\"}"
+eval "_conf=\${${name}_conf}"
+
+command=%%PREFIX%%/sbin/nsdc
+procname=%%PREFIX%%/sbin/nsd
+
+required_files=${_conf}
+pidfile=`%%PREFIX%%/sbin/nsd-checkconf -o pidfile ${_conf}`
+
+extra_commands="notify patch rebuild reload update"
-extra_commands="reload"
-start_precmd="nsd_precmd"
-reload_cmd="nsd_reload"
-stop_cmd="nsd_stop"
+notify_cmd="nsd_nsdc_cmd notify"
+patch_cmd="nsd_nsdc_cmd patch"
+rebuild_cmd="nsd_nsdc_cmd rebuild"
+reload_cmd="nsd_reload_cmd"
+start_cmd="nsd_start_cmd"
+stop_cmd="nsd_stop_cmd"
+update_cmd="nsd_nsdc_cmd update"
-nsd_precmd()
+nsd_nsdc_cmd()
{
- db=`%%PREFIX%%/sbin/nsd-checkconf -o database %%PREFIX%%/etc/nsd/nsd.conf`
- if [ ! -f "$db" ]; then
- ${command} rebuild
- fi
+ ${command} -c ${_conf} "$1"
}
-nsd_reload()
+nsd_reload_cmd()
{
- ${command} rebuild && ${command} reload
+ nsd_nsdc_cmd rebuild && nsd_nsdc_cmd reload
+}
+
+nsd_start_cmd()
+{
+ local _db
+ _db=`%%PREFIX%%/sbin/nsd-checkconf -o database ${_conf}`
+ if [ ! -f "${_db}" ]; then
+ nsd_nsdc_cmd rebuild
+ fi
+
+ echo "Starting ${name}."
+ nsd_nsdc_cmd start
}
-nsd_stop()
+nsd_stop_cmd()
{
echo "Merging nsd zone transfer changes to zone files."
- ${command} patch
+ nsd_nsdc_cmd patch
echo "Stopping ${name}."
- ${command} stop
+ nsd_nsdc_cmd stop
}
run_rc_command "$1"
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list