chiark / gitweb /
Issue ADD and KXSTART notifications in the right order!
[tripe] / tripe-init.in
1 #! /bin/sh
2 #
3 # tripe init script
4 #   suitable for direct use in most SysV-style inits
5
6 set -e
7
8 # --- Setup ---
9
10 [ -f @initconfig@ ] && . @initconfig@
11 : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
12 : ${bindir=@bindir@} ${sbindir=@sbindir@}
13 : ${TRIPEDIR=@configdir@} ${tripesock=@socketdir@/tripesock}
14 : ${pidfile=@pidfile@}
15 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
16 PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
17 export PATH TRIPEDIR
18
19 # --- Give up if there's no key ---
20
21 if test ! -f $TRIPEDIR/keyring || test ! -f $TRIPEDIR/keyring.pub; then
22   echo >&2 "Not starting/stopping TrIPE: keyring files missing"
23   exit 0
24 fi
25
26 # --- Check it will work, or at least stands a fighting chance ---
27 #
28 # Having loads of different tunnel types doesn't help any.
29
30 test -x $tripe -a -x $tripectl || exit 0
31
32 case `$tripe --tunnel` in
33   linux)
34     case `uname -s` in
35       Linux)
36         if { test -f /proc/misc && grep -q net/tun /proc/misc; } ||
37            modprobe -q tun; then
38           : good
39         else
40           echo >&2 "$tripe needs the Linux TUN/TAP driver to run."
41           exit 1
42         fi
43         if test -c /dev/net/tun; then
44           : good
45         else
46           echo >&2 "$tripe needs /dev/net/tun, which is missing."
47           exit 1
48         fi
49         ;;
50       *)
51         echo >&2 "CONFIGURATION ERROR"
52         echo >&2 "  $tripe is compiled to use a Linux tunnel device, but"
53         echo >&2 "  this system is `uname -s`"
54         exit 1
55         ;;
56     esac
57     ;;
58   unet)
59     case `uname -s` in
60       Linux)
61         if { test -f /proc/devices && grep -q unet /proc/devices; } ||
62            modprobe -q unet; then
63           : good
64         else
65           echo >&2 "$tripe needs the Linux UNET driver to run."
66           exit 1
67         fi
68         if test -c /dev/unet; then
69           : good
70         else
71           echo >&2 "$tripe needs /dev/unet, which is missing."
72           exit 1
73         fi
74         ;;
75       *)
76         echo >&2 "CONFIGURATION ERROR"
77         echo >&2 "  $tripe is compiled to use a Linux tunnel device, but"
78         echo >&2 "  this system is `uname -s`"
79         exit 1
80         ;;
81     esac
82     ;;
83   bsd)
84     case `uname -s` in
85       *BSD)
86         # Don't know how to check the device is working.
87         if test -c /dev/tun0; then
88           : good
89         else
90           echo >&2 "$tripe needs /dev/tun0, which is missing."
91           exit 1
92         fi
93         ;;
94       *)
95         echo >&2 "CONFIGURATION ERROR"
96         echo >&2 "  $tripe is compiled to use a BSD tunnel device, but"
97         echo >&2 "  this system is `uname -s`"
98         exit 1
99         ;;
100     esac
101     ;;
102 esac
103   
104 # --- Do what was wanted ---
105
106 case "$1" in
107   start)
108     echo -n "Starting TrIPE VPN daemon:"
109     if $tripectl version >/dev/null 2>/dev/null; then
110       echo " already running"
111       exit 0
112     fi
113     $tripectl -D -s -p$tripe \
114       -f${logfile-@logfile@} \
115       -P$pidfile \
116       ${keytag+-S-t}$keytag \
117       ${addr+-S-b}$addr \
118       ${port+-S-p}${port} \
119       ${user+-S-u}${user} \
120       ${group+-S-g}${group} \
121       ${trace+-S-T}${trace} \
122       ${miscopts}
123     for i in 1 2 3 4 give-up; do
124       $tripectl help >/dev/null 2>/dev/null && break
125       sleep 1
126     done
127     if [ $i = give-up ]; then
128       echo " wouldn't start"
129       exit 1
130     fi
131     echo -n " tripe"
132     for i in $TRIPEDIR/peers/*; do
133       [ -x $i ] || continue
134       name=`basename $i`
135       case $name in *~|\#*) continue;; esac
136       if $i; then 
137         echo -n " $name"
138       else
139         echo -n " ($name failed)"
140       fi
141     done
142     echo " done"
143     ;;
144   stop)
145     echo -n "Stopping TrIPE VPN daemon:"
146     if test ! -S $tripesock; then
147       echo " not running"
148     elif $tripectl quit >/dev/null 2>&1; then
149       echo " done"
150     elif test ! -f $pidfile; then
151       echo " stale socket found: removing"
152       rm -f $tripesock
153     elif kill `cat $pidfile`; then
154       echo " done (killed violently)"
155     else
156       echo " it doesn't want do die!"
157       exit 1
158     fi
159     ;;
160   status)
161     for i in `$tripectl list`; do
162       echo "Peer \`$i':"
163       $tripectl stats $i | sed 's/^/  /'
164     done
165     ;;
166   restart | force-reload)
167     sh $0 stop
168     sh $0 start
169     ;;
170   *)
171     echo >&2 "usage: $0 start|stop|restart|status|force-reload"
172     exit 1
173     ;;
174 esac