chiark / gitweb /
Allow admin clients to filter out async messages. Send notifications
[tripe] / tripe-init.in
CommitLineData
0fa31a96 1#! /bin/sh
2#
3# tripe init script
4# suitable for direct use in most SysV-style inits
5
0fa31a96 6set -e
7
ef4a1ab7 8# --- Setup ---
0fa31a96 9
ef4a1ab7 10[ -f @initconfig@ ] && . @initconfig@
11: ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
12: ${bindir=@bindir@} ${sbindir=@sbindir@}
3cdc3f3a 13: ${TRIPEDIR=@configdir@} ${tripesock=@socketdir@/tripesock}
14: ${pidfile=@pidfile@}
ef4a1ab7 15: ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
0fa31a96 16PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
ef4a1ab7 17export PATH TRIPEDIR
18
3cdc3f3a 19# --- Give up if there's no key ---
20
21if test ! -f $TRIPEDIR/keyring || test ! -f $TRIPEDIR/keyring.pub; then
22 echo >&2 "Not starting/stopping TrIPE: keyring files missing"
23 exit 0
24fi
25
ef4a1ab7 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
30test -x $tripe -a -x $tripectl || exit 0
31
32case `$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 ;;
102esac
103
104# --- Do what was wanted ---
0fa31a96 105
106case "$1" in
107 start)
108 echo -n "Starting TrIPE VPN daemon:"
3cdc3f3a 109 if $tripectl version >/dev/null 2>/dev/null; then
0fa31a96 110 echo " already running"
111 exit 0
112 fi
ef4a1ab7 113 $tripectl -D -s -p$tripe \
114 -f${logfile-@logfile@} \
3cdc3f3a 115 -P$pidfile \
52c03a2a 116 ${keytag+-S-t}$keytag \
0fa31a96 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
595935b7 133 [ -x $i ] || continue
0fa31a96 134 name=`basename $i`
595935b7 135 case $name in *~|\#*) continue;; esac
136 if $i; then
137 echo -n " $name"
138 else
139 echo -n " ($name failed)"
140 fi
0fa31a96 141 done
142 echo " done"
143 ;;
144 stop)
145 echo -n "Stopping TrIPE VPN daemon:"
3cdc3f3a 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
0fa31a96 159 ;;
ef4a1ab7 160 status)
161 for i in `$tripectl list`; do
162 echo "Peer \`$i':"
163 $tripectl stats $i | sed 's/^/ /'
164 done
165 ;;
0fa31a96 166 restart | force-reload)
167 sh $0 stop
168 sh $0 start
169 ;;
170 *)
ef4a1ab7 171 echo >&2 "usage: $0 start|stop|restart|status|force-reload"
0fa31a96 172 exit 1
173 ;;
174esac