134 lines
2.5 KiB
Bash
134 lines
2.5 KiB
Bash
#!/bin/sh -e
|
|
# Start/stop/restart/status unbound.
|
|
|
|
PIDFILE=/run/unbound/unbound.pid
|
|
VARDIR=/var/lib/unbound
|
|
RUNDIR=/run/unbound
|
|
DAEMON=/usr/sbin/unbound
|
|
USER=unbound
|
|
GROUP=unbound
|
|
CONFDIR=/etc/unbound
|
|
CONFIG=${CONFDIR}/unbound.conf
|
|
|
|
# Start unbound:
|
|
_start() {
|
|
echo "Starting Unbound"
|
|
|
|
# dunno dafuq, but let's repeat it as pointed in redhat script
|
|
if [ -f ${VARDIR}/root.anchor -a -f ${DAEMON}-anchor ]; then
|
|
sudo -u $USER ${DAEMON}-anchor -a ${VARDIR}/root.anchor -c ${CONFDIR}/icannbundle.pem
|
|
fi
|
|
|
|
# generate new control keys if they're missing
|
|
if [ ! -f ${VARDIR}/unbound_control.key ]; then
|
|
echo -n "Generating unbound control key and certificate: "
|
|
${DAEMON}-control-setup -d ${VARDIR}/ >/dev/null 2>&1
|
|
chown ${USER}:${GROUP} ${VARDIR}/unbound_*.{key,pem}
|
|
echo
|
|
fi
|
|
|
|
set +o errexit
|
|
${DAEMON}-checkconf $CONFIG >/dev/null 2>&1
|
|
|
|
if [ $? -ne 0 ]; then
|
|
set -e
|
|
$DAEMON-checkconf $CONFIG
|
|
fi
|
|
|
|
set -e
|
|
|
|
if [ ! -d $RUNDIR ]; then
|
|
install -dpm 0750 -o $USER -g $GROUP $RUNDIR
|
|
fi
|
|
|
|
if [ -f $PIDFILE ]; then
|
|
if [ $(stat --printf=%s $PIDFILE) != "0" ]; then
|
|
# try to guess if process noted in pidfile still alive
|
|
PID=$(cat $PIDFILE)
|
|
|
|
# Eh, file contains something -try to guess if its unbound or not
|
|
set +o errexit
|
|
PROCNAME="$(ps -p ${PID} -o comm= 2>/dev/null)"
|
|
set -e
|
|
|
|
if [ -z $PROCNAME ]; then
|
|
# looks like no such process
|
|
echo "Removing stall PID-file found at $PIDFILE"
|
|
rm -f $PIDFILE
|
|
elif [ $PROCNAME == "unbound" ]; then
|
|
echo "Unbound already running"
|
|
exit 1
|
|
else
|
|
# process exist, but have different name
|
|
echo "Removing stall PID-file found at $PIDFILE"
|
|
rm -f $PIDFILE
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
set +o errexit
|
|
${DAEMON}-control start
|
|
|
|
if [ $? -ne 0 ]; then
|
|
$DAEMON -c $CONFIG
|
|
RET=$?
|
|
|
|
if [ $RET -ne 0 ]; then
|
|
echo "Something went wrong, unbound unable to start."
|
|
exit $RET
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Stop unbound:
|
|
_stop() {
|
|
echo "Stopping Unbound"
|
|
set +o errexit
|
|
${DAEMON}-control stop >/dev/null 2>&1
|
|
RET=$?
|
|
set -e
|
|
|
|
if [ $RET -ne 0 ]; then
|
|
if [ -f $PIDFILE ]; then
|
|
if [ $(stat --printf=%s $PIDFILE) != "0" ]; then
|
|
kill $(cat $PIDFILE)
|
|
|
|
if [ -f $PIDFILE ]; then
|
|
rm -rf $PIDFILE
|
|
fi
|
|
else
|
|
echo "Unable to stop unbound"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Restart unbound:
|
|
_restart() {
|
|
_stop
|
|
sleep 1
|
|
_start
|
|
}
|
|
|
|
_status() {
|
|
${DAEMON}-control status
|
|
}
|
|
|
|
case "$1" in
|
|
'start')
|
|
_start
|
|
;;
|
|
'stop')
|
|
_stop
|
|
;;
|
|
'restart')
|
|
_restart
|
|
;;
|
|
'status')
|
|
_status
|
|
;;
|
|
*)
|
|
echo "usage $0 start|stop|restart|status"
|
|
esac
|