You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.5 KiB
Plaintext
147 lines
3.5 KiB
Plaintext
2 years ago
|
#!/bin/sh -e
|
||
|
|
||
|
### BEGIN INIT INFO
|
||
|
# Provides: bind bind9
|
||
|
# Required-Start: $remote_fs
|
||
|
# Required-Stop: $remote_fs
|
||
|
# Should-Start: $network $syslog
|
||
|
# Should-Stop: $network $syslog
|
||
|
# Default-Start: 2 3 4 5
|
||
|
# Default-Stop: 0 1 6
|
||
|
# Short-Description: Start and stop BIND 9 Domain Name Server
|
||
|
# Description: BIND 9 is a Domain Name Server (DNS)
|
||
|
# which translates ip addresses to and from internet names
|
||
|
### END INIT INFO
|
||
|
|
||
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||
|
|
||
|
# for a chrooted server: "-u bind -t /var/lib/named"
|
||
|
# Don't modify this line, instead change or create /etc/default/named.
|
||
|
OPTIONS=""
|
||
|
RESOLVCONF=no
|
||
|
|
||
|
test -f /etc/default/named && . /etc/default/named
|
||
|
|
||
|
test -x /usr/sbin/rndc || exit 0
|
||
|
|
||
|
. /lib/lsb/init-functions
|
||
|
PIDFILE=/run/named/named.pid
|
||
|
|
||
|
check_network() {
|
||
|
result=0
|
||
|
if [ -x /usr/bin/uname ] && [ "X$(/usr/bin/uname -o)" = XSolaris ]; then
|
||
|
LIST_NICS_IP=$(/sbin/ifconfig -au) || result=$?
|
||
|
else
|
||
|
LIST_NICS_IP=$(/bin/ip addr) || result=$?
|
||
|
fi
|
||
|
if [ $result -ne 0 -o -z "${LIST_NICS_IP}" ]; then
|
||
|
#log_action_msg "No networks configured."
|
||
|
return 1
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
start)
|
||
|
log_daemon_msg "Starting domain name service..." "named"
|
||
|
|
||
|
modprobe capability >/dev/null 2>&1 || true
|
||
|
|
||
|
# dirs under /run can go away on reboots.
|
||
|
mkdir -p /run/named
|
||
|
chmod 775 /run/named
|
||
|
chown root:bind /run/named >/dev/null 2>&1 || true
|
||
|
|
||
|
if [ ! -x /usr/sbin/named ]; then
|
||
|
log_action_msg "named binary missing - not starting"
|
||
|
log_end_msg 1
|
||
|
fi
|
||
|
|
||
|
if ! check_network; then
|
||
|
log_action_msg "no networks configured"
|
||
|
log_end_msg 1
|
||
|
fi
|
||
|
|
||
|
if start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named \
|
||
|
--pidfile ${PIDFILE} -- $OPTIONS; then
|
||
|
if [ "X$RESOLVCONF" != "Xno" ] && [ -x /sbin/resolvconf ] ; then
|
||
|
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.named
|
||
|
fi
|
||
|
log_end_msg 0
|
||
|
else
|
||
|
log_end_msg 1
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
stop)
|
||
|
log_daemon_msg "Stopping domain name service..." "named"
|
||
|
if ! check_network; then
|
||
|
log_action_msg "no networks configured"
|
||
|
log_end_msg 1
|
||
|
fi
|
||
|
|
||
|
if [ "X$RESOLVCONF" != "Xno" ] && [ -x /sbin/resolvconf ] ; then
|
||
|
/sbin/resolvconf -d lo.named
|
||
|
fi
|
||
|
pid=$(/usr/sbin/rndc stop -p | awk '/^pid:/ {print $2}') || true
|
||
|
if [ -z "$pid" ]; then # no pid found, so either not running, or error
|
||
|
pid=$(pgrep -f ^/usr/sbin/named) || true
|
||
|
start-stop-daemon --stop --oknodo --quiet --exec /usr/sbin/named \
|
||
|
--pidfile ${PIDFILE} -- $OPTIONS
|
||
|
fi
|
||
|
if [ -n "$pid" ]; then
|
||
|
sig=0
|
||
|
n=1
|
||
|
while kill -$sig $pid 2>/dev/null; do
|
||
|
if [ $n -eq 1 ]; then
|
||
|
echo "waiting for pid $pid to die"
|
||
|
fi
|
||
|
if [ $n -eq 11 ]; then
|
||
|
echo "giving up on pid $pid with kill -0; trying -9"
|
||
|
sig=9
|
||
|
fi
|
||
|
if [ $n -gt 20 ]; then
|
||
|
echo "giving up on pid $pid"
|
||
|
break
|
||
|
fi
|
||
|
n=$(($n+1))
|
||
|
sleep 1
|
||
|
done
|
||
|
fi
|
||
|
log_end_msg 0
|
||
|
;;
|
||
|
|
||
|
reload|force-reload)
|
||
|
log_daemon_msg "Reloading domain name service..." "named"
|
||
|
if ! check_network; then
|
||
|
log_action_msg "no networks configured"
|
||
|
log_end_msg 1
|
||
|
fi
|
||
|
|
||
|
/usr/sbin/rndc reload >/dev/null && log_end_msg 0 || log_end_msg 1
|
||
|
;;
|
||
|
|
||
|
restart)
|
||
|
if ! check_network; then
|
||
|
log_action_msg "no networks configured"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
$0 stop
|
||
|
$0 start
|
||
|
;;
|
||
|
|
||
|
status)
|
||
|
ret=0
|
||
|
status_of_proc -p ${PIDFILE} /usr/sbin/named bind 2>/dev/null || ret=$?
|
||
|
exit $ret
|
||
|
;;
|
||
|
|
||
|
*)
|
||
|
log_action_msg "Usage: /etc/init.d/named {start|stop|reload|restart|force-reload|status}"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
exit 0
|