chiark / gitweb /
General overhaul of tunnelling: allow multiple tunnel drivers in one daemon,
[tripe] / tripe-init.in
... / ...
CommitLineData
1#! /bin/sh
2#
3# tripe init script
4# suitable for direct use in most SysV-style inits
5
6set -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}
16PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
17export PATH TRIPEDIR
18
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
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 ${tunnel-`$tripe --tunnels | head -1`} 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 slip)
103 if test "$TRIPE_SLIPIF" = ""; then
104 echo >&2 "$tripe needs SLIP interfaces set up!"
105 exit 1
106 fi
107 ;;
108esac
109
110# --- Do what was wanted ---
111
112case "$1" in
113 start)
114 echo -n "Starting TrIPE VPN daemon:"
115 if $tripectl version >/dev/null 2>/dev/null; then
116 echo " already running"
117 exit 0
118 fi
119 $tripectl -D -s -p$tripe \
120 -f${logfile-@logfile@} \
121 -P$pidfile \
122 ${keytag+-S-t}$keytag \
123 ${addr+-S-b}$addr \
124 ${port+-S-p}${port} \
125 ${user+-S-u}${user} \
126 ${group+-S-g}${group} \
127 ${trace+-S-T}${trace} \
128 ${tunnel+-S-n}${tunnel} \
129 ${miscopts}
130 for i in 1 2 3 4 give-up; do
131 $tripectl help >/dev/null 2>/dev/null && break
132 sleep 1
133 done
134 if [ $i = give-up ]; then
135 echo " wouldn't start"
136 exit 1
137 fi
138 echo -n " tripe"
139 for i in $TRIPEDIR/peers/*; do
140 [ -x $i ] || continue
141 name=`basename $i`
142 case $name in *~|\#*) continue;; esac
143 if $i; then
144 echo -n " $name"
145 else
146 echo -n " ($name failed)"
147 fi
148 done
149 echo " done"
150 ;;
151 stop)
152 echo -n "Stopping TrIPE VPN daemon:"
153 if test ! -S $tripesock; then
154 echo " not running"
155 elif $tripectl quit >/dev/null 2>&1; then
156 echo " done"
157 elif test ! -f $pidfile; then
158 echo " stale socket found: removing"
159 rm -f $tripesock
160 elif kill `cat $pidfile`; then
161 echo " done (killed violently)"
162 else
163 echo " it doesn't want do die!"
164 exit 1
165 fi
166 ;;
167 status)
168 for i in `$tripectl list`; do
169 echo "Peer \`$i':"
170 $tripectl stats $i | sed 's/^/ /'
171 done
172 ;;
173 restart | force-reload)
174 sh $0 stop
175 sh $0 start
176 ;;
177 *)
178 echo >&2 "usage: $0 start|stop|restart|status|force-reload"
179 exit 1
180 ;;
181esac