#!/sbin/openrc-run supervisor=supervise-daemon description="The NLnet Labs Name Server Daemon (NSD)" extra_commands="configtest" extra_started_commands="reload" # For the config file, we use a combination of --with-configdir and # the service name instead of (say) the value passed to # --with-nsd_conf_file, because OpenRC supports running multiple # instances of the same daemon from one service script using symlinks. config_file="@configdir@/${RC_SVCNAME}.conf" checkconf="@sbindir@/nsd-checkconf" command="@sbindir@/nsd" # Run the daemon in the foreground and allow OpenRC to background it # and manage its PID file. This is the simplest way to ensure that a # PID file owned and writable only by the superuser is created outside # of e.g. the socket directory that must be writable by the nsd # user. It also happens to agree with what the nsd.service systemd # unit does. The PID file is named after the service name (and ignores # --with-pidfile) to support multiple instances running simultaneously. command_args="-c ${config_file} -d -P '' ${NSD_EXTRA_OPTS}" command_background=true pidfile="@runstatedir@/${RC_SVCNAME}.pid" required_files="${config_file}" depend() { use logger need net } checkconfig() { if ! "${checkconf}" "${config_file}" ; then eerror "You have errors in your config file (${config_file})" return $? fi return 0 } configtest() { ebegin "Checking ${RC_SVCNAME} configuration" checkconfig eend $? } start_pre() { # If this isn't a restart, make sure that the configuration is # usable before we try to start the daemon. Without this, the # service will start successfully but then immediately crash. # If this *is* a restart, then the stop_pre action will have # already checked the config. if [ "${RC_CMD}" != "restart" ] ; then checkconfig || return $? fi } stop_pre() { # If this is a restart, check to make sure the user's config # isn't busted before we stop the running daemon. If it's a # regular "stop," however, then we shouldn't interfere. if [ "${RC_CMD}" = "restart" ] ; then checkconfig || return $? fi } reload() { checkconfig || return $? ebegin "Reloading config and zone files" supervise-daemon "${RC_SVCNAME}" -s SIGHUP eend $? }