Fix broken upstream init script, drop chroot stuff from default config; add debian...
[anytun.git] / etc / init.d / anytun
1 #! /bin/sh
2 ### BEGIN INIT INFO
3 # Provides:          anytun
4 # Required-Start:    $network $named $syslog
5 # Required-Stop:     
6 # Default-Start:     2 3 4 5
7 # Default-Stop:      0 1 6
8 # Short-Description: Start anycast tunneling daemon at boot time
9 # Description:       Enables networking over vpn tunnel interfaces
10 ### END INIT INFO
11 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
12 DAEMON=/usr/sbin/anytun
13 ANYTUNCONFIG=/usr/bin/anytun-config
14 CONTROLDAEMON=/usr/bin/anytun-controld
15 NAME=anytun
16 DESC=anytun
17 CONFIG_DIR=/etc/anytun
18 VARCONFIG_DIR=/var/run/anytun-controld
19 VARRUN_DIR=/var/run/anytun
20
21 test -x $DAEMON || exit 0
22
23 # Include anytun defaults if available
24 if [ -f /etc/default/anytun ] ; then
25   . /etc/default/anytun
26 fi
27
28 start_vpn () {
29   STATUS="OK"
30   if [ -f $CONFIG_DIR/$NAME/config ] ; then
31     POSTUP=''
32     test -f  $CONFIG_DIR/$NAME/post-up.sh && POSTUP="-x $CONFIG_DIR/$NAME/post-up.sh"
33     CHROOTDIR=`grep '^chroot' < $CONFIG_DIR/$NAME/config | sed 's/chroot\s*//'`
34     if [ -n "$CHROOTDIR" ] ; then
35       test -d $CHROOTDIR || mkdir -p $CHROOTDIR
36     fi
37     test -d $VARRUN_DIR || mkdir -p $VARRUN_DIR
38     DAEMONARG=`sed 's/#.*//' < $CONFIG_DIR/$NAME/config | grep -e '\w' | sed  's/^/--/' | tr '\n' ' '`
39     $DAEMON --write-pid /var/run/uanytun.$NAME.pid $POSTUP $DAEMONOPTS $DAEMONARG || STATUS="FAILED"
40   else
41     STATUS="no config found"
42   fi
43   start_configd
44   echo -n "($STATUS)"
45 }
46 stop_vpn () {
47   kill `cat $PIDFILE` || true
48   rm $PIDFILE
49   stop_configd
50 }
51
52 start_configd () {
53   if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
54     test -d $VARCONFIG_DIR || mkdir -p $VARCONFIG_DIR
55     chmod 700 $VARCONFIG_DIR
56     rm -f $VARCONFIG_DIR/$NAME 2>/dev/null
57     for CLIENTNAME in `ls $CONFIG_DIR/$NAME/conf.d`; do
58       echo -n " ($CLIENTNAME)"
59       DAEMONARG=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/conf.d/$CLIENTNAME | grep -e '\w' | sed  's/^/ --/' | xargs echo`
60       $ANYTUNCONFIG $DAEMONARG >> $VARCONFIG_DIR/$NAME
61     done
62     CONTROLHOST=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'control-host' | sed  's/^/ --/'`
63     $CONTROLDAEMON -f $VARCONFIG_DIR/$NAME $DAEMONOPTS $CONTROLHOST \
64       --write-pid $VARCONFIG_DIR/$NAME.pid
65     # rm -f $VARCONFIG_DIR/$NAME
66   fi
67 }
68 stop_configd () {
69   if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
70     echo -n " ($NAME)"
71     kill `cat $VARCONFIG_DIR/$NAME.pid` || true
72     rm $VARCONFIG_DIR/$NAME.pid
73   fi 
74 }
75
76 set -e
77 case "$1" in
78   start)
79   echo -n "Starting $DESC:"
80   if test -z "$2" ; then
81     if [ -f $CONFIG_DIR/autostart ] ; then
82       for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
83         echo -n " $NAME"
84         start_vpn
85       done
86     else
87       echo "no config found"
88       exit 1;
89     fi
90   else
91     while shift ; do
92       [ -z "$1" ] && break
93       NAME=$1
94       echo -n " $NAME"
95       start_vpn
96     done
97   fi
98   echo "."
99   ;;
100   stop)
101   echo -n "Stoping $DESC:"
102   if test -z "$2" ; then
103     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
104       NAME=`echo $PIDFILE | cut -c17-`
105       NAME=${NAME%%.pid}
106       echo -n " $NAME"
107       stop_vpn
108     done
109   else
110     while shift ; do
111       [ -z "$1" ] && break
112       if test -e $VARRUN_DIR/$1.pid ; then
113         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
114         NAME=`echo $PIDFILE | cut -c17-`
115         NAME=${NAME%%.pid}
116         echo -n " $NAME"
117         stop_vpn
118       else
119         echo -n " (failure: No such tunnel is running: $1)"
120       fi
121     done
122   fi
123   echo "."
124   ;;
125   reload)
126   echo -n "Reloading $DESC:"
127   if test -z "$2" ; then
128     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
129       NAME=`echo $PIDFILE | cut -c17-`
130       NAME=${NAME%%.pid}
131       echo -n " $NAME"
132       if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
133         stop_vpn
134         start_vpn
135       else
136         stop_configd
137         start_configd
138       fi
139     done
140   else
141     while shift ; do
142       [ -z "$1" ] && break
143       if test -e $VARRUN_DIR/$1.pid ; then
144         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
145         NAME=`echo $PIDFILE | cut -c17-`
146         NAME=${NAME%%.pid}
147         echo -n " $NAME"
148         if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
149           stop_vpn
150           start_vpn
151         else
152           stop_configd
153           start_configd
154         fi
155       else
156         echo -n " (failure: No such tunnel is running: $1)"
157       fi
158     done
159   fi
160   echo "."
161   ;;
162   force-reload)
163   echo -n "Restarting $DESC:"
164   if test -z "$2" ; then
165     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
166       NAME=`echo $PIDFILE | cut -c17-`
167       NAME=${NAME%%.pid}
168       echo -n " $NAME"
169       stop_vpn
170       sleep 1
171       start_vpn
172     done
173   else
174     while shift ; do
175       [ -z "$1" ] && break
176       if test -e $VARRUN_DIR/$1.pid ; then
177         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
178         NAME=`echo $PIDFILE | cut -c17-`
179         NAME=${NAME%%.pid}
180         echo -n " $NAME"
181         stop_vpn
182         sleep 1
183         start_vpn
184       else
185         echo -n " (failure: No such tunnel is running: $1)"
186       fi
187     done
188   fi
189   echo "."
190   ;;
191   restart)
192     SCRIPT=$0
193     shift
194     $SCRIPT stop $*
195     sleep 1
196     $SCRIPT start $*
197   ;;
198   *)
199   N=/etc/init.d/$NAME
200   echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
201   exit 1
202   ;;
203 esac
204
205 exit 0