Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Feb 2013 05:12:50 GMT
From:      Darren Pilgrim <darren.pilgrim@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/176156: Add multi-instance support to NSD rc script
Message-ID:  <201302150512.r1F5Cogt051469@red.freebsd.org>
Resent-Message-ID: <201302150520.r1F5K0vs015140@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302150512.r1F5Cogt051469>