a0bb9d443f
tinc (1.0.24-2~bpo70+1) wheezy-backports; urgency=medium * Backport to wheezy-backports. * Add myself to Uploaders. tinc (1.0.24-2) unstable; urgency=medium * Improve the init script: stopping tinc now waits for the process to terminate. If that doesn't happen in 5 seconds, it will send the TERM signal again (which helps if tinc is waiting for a script to finish executing). It now also detects whether the process mentioned in the PID file is actually running, and if not it will exit early and without warnings. Closes: #748107
140 lines
2.7 KiB
Bash
140 lines
2.7 KiB
Bash
#! /bin/sh
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: tinc
|
|
# Required-Start: $remote_fs $network
|
|
# Required-Stop: $remote_fs $network
|
|
# Should-Start: $syslog $named
|
|
# Should-Stop: $syslog
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Start tinc daemons
|
|
# Description: Create a file $NETSFILE (/etc/tinc/nets.boot),
|
|
# and put all the names of the networks in there.
|
|
# These names must be valid directory names under
|
|
# $TCONF (/etc/tinc). Lines starting with a # will be
|
|
# ignored in this file.
|
|
### END INIT INFO
|
|
#
|
|
# Based on Lubomir Bulej's Redhat init script.
|
|
|
|
. /lib/lsb/init-functions
|
|
|
|
DAEMON="/usr/sbin/tincd"
|
|
NAME="tinc"
|
|
DESC="tinc daemons"
|
|
TCONF="/etc/tinc"
|
|
NETSFILE="$TCONF/nets.boot"
|
|
NETS=""
|
|
|
|
test -f $DAEMON || exit 0
|
|
|
|
[ -r /etc/default/tinc ] && . /etc/default/tinc
|
|
|
|
# foreach_net "what-to-say" action [arguments...]
|
|
foreach_net() {
|
|
if [ ! -f $NETSFILE ] ; then
|
|
echo "Please create $NETSFILE."
|
|
exit 0
|
|
fi
|
|
echo -n "$1"
|
|
shift
|
|
egrep '^[ ]*[a-zA-Z0-9_-]+' $NETSFILE | while read net args; do
|
|
echo -n " $net"
|
|
"$@" $net $args
|
|
done
|
|
echo "."
|
|
}
|
|
|
|
signal_running() {
|
|
for i in /var/run/tinc.*pid; do
|
|
if [ -f "$i" ]; then
|
|
head -1 $i | while read pid; do
|
|
kill -$1 $pid
|
|
done
|
|
fi
|
|
done
|
|
}
|
|
|
|
setlimits() {
|
|
while [ $# -gt 0 ]; do
|
|
parm=$1 ; shift
|
|
if [ -n "$1" -a "${1#-}" = "$1" ]; then
|
|
value=$1 ; shift
|
|
ulimit $parm $value
|
|
else
|
|
ulimit $parm
|
|
fi
|
|
done
|
|
}
|
|
|
|
test -n "$LIMITS" && setlimits $LIMITS
|
|
|
|
start() {
|
|
$DAEMON $EXTRA -n "$@"
|
|
}
|
|
|
|
stop() {
|
|
[ -f /var/run/tinc.$1.pid ] || return
|
|
read pid rest </var/run/tinc.$1.pid || return
|
|
kill -0 "$pid" 2>/dev/null || return
|
|
|
|
$DAEMON -n $1 -k || return
|
|
|
|
i=0;
|
|
sleep 0.5
|
|
|
|
# Wait for the pidfile to disappear
|
|
while [ -f /var/run/tinc.$1.pid ]; do
|
|
# And check that there is an actual process running
|
|
kill -0 "$pid" 2>/dev/null || return
|
|
|
|
if [ $i = '10' ] ; then
|
|
# It's still alive, kill it again and give up
|
|
$DAEMON -n $1 -k && sleep 0.5
|
|
break
|
|
else
|
|
echo -n "."
|
|
i=$(($i+1))
|
|
fi
|
|
|
|
sleep 0.5
|
|
done
|
|
}
|
|
|
|
reload() {
|
|
$DAEMON -n $1 -kHUP
|
|
}
|
|
|
|
alarm() {
|
|
$DAEMON -n $1 -kALRM
|
|
}
|
|
|
|
restart() {
|
|
stop "$@"
|
|
start "$@"
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
foreach_net "Starting $DESC:" start
|
|
;;
|
|
stop)
|
|
foreach_net "Stopping $DESC:" stop
|
|
;;
|
|
reload|force-reload)
|
|
foreach_net "Reloading $DESC configuration:" reload
|
|
;;
|
|
restart)
|
|
foreach_net "Restarting $DESC:" restart
|
|
;;
|
|
alarm)
|
|
signal_running ALRM
|
|
;;
|
|
*)
|
|
echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|alarm}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|