chiark / gitweb /
keys/tripe-keys.in, keys/tripe-keys.conf.5.in: Allow setting attributes.
[tripe] / contrib / tripe-upstart.in
CommitLineData
2e35470f
MW
1### -*-conf-*-
2###
3### Upstart control script for tripe.
4
5###--------------------------------------------------------------------------
6### Identification.
7
8description "TrIPE virtual private network server"
9author "Mark Wooding <mdw@distorted.org.uk>"
10
11###--------------------------------------------------------------------------
12### Trigger conditions.
13
14start on stopped pymaemo-optify
15stop on starting shutdown
16
17respawn
18
19###--------------------------------------------------------------------------
20### Process environment.
21
22console none
23
24###--------------------------------------------------------------------------
25### Pre-flight check.
26
27pre-start script
28
29 [ -f @initconfig@ ] && . @initconfig@
30
31 : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
32 : ${bindir=@bindir@} ${sbindir=@sbindir@}
33 : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
34 : ${pidfile=@pidfile@}
35 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
36
37 PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
38 export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
39
40 ## Give up if there's no binary.
41 if test ! -x "$tripe" || test ! -x "$tripectl"; then
42 echo >&2 "Not starting/stopping TrIPE: binary files missing"
43 exit 1
44 fi
45
46 ## Give up if there's no key.
47 if test ! -f "$TRIPEDIR/keyring" ||
48 test ! -f "$TRIPEDIR/keyring.pub"; then
49 echo >&2 "Not starting/stopping TrIPE: keyring files missing"
50 exit 1
51 fi
52
53 ## Check it will work, or at least stands a fighting chance.
54 ##
55 ## (Having loads of different tunnel types doesn't help any.)
56 case ${tunnel-`$tripe --tunnels | head -1`},`uname -s` in
57
58 ## Linux TUN/TAP.
59 linux,Linux)
60 if { test -f /proc/misc && grep -q tun /proc/misc; } ||
61 modprobe -q tun; then
62 : good
63 else
64 echo >&2 "$tripe needs the Linux TUN/TAP driver to run."
65 exit 1
66 fi
67 if test -c /dev/net/tun; then
68 : good
69 else
70 echo >&2 "$tripe needs /dev/net/tun, which is missing."
71 exit 1
72 fi
73 ;;
74
75 ## Linux Unet (obsolete).
76 unet,Linux)
77 if { test -f /proc/devices && grep -q unet /proc/devices; } ||
78 modprobe -q unet; then
79 : good
80 else
81 echo >&2 "$tripe needs the Linux UNET driver to run."
82 exit 1
83 fi
84 if test -c /dev/unet; then
85 : good
86 else
87 echo >&2 "$tripe needs /dev/unet, which is missing."
88 exit 1
89 fi
90 ;;
91
92 ## BSD tun.
93 bsd,*BSD)
94 ## Don't know how to check the device is working. Check the
95 ## device file exists and hope for the best.
96 if test -c /dev/tun0; then
97 : good
98 else
99 echo >&2 "$tripe needs /dev/tun0, which is missing."
100 exit 1
101 fi
102 ;;
103
104 ## SLIP.
105 slip,*)
106 if test "$TRIPE_SLIPIF" = ""; then
107 echo >&2 "$tripe needs SLIP interfaces set up!"
108 exit 1
109 fi
110 ;;
111
112 ## Various kinds of misconfiguration.
113 linux,* | unet,*)
114 echo >&2 "CONFIGURATION ERROR"
115 echo >&2 " $tripe is compiled to use a Linux tunnel device, but"
116 echo >&2 " this system is `uname -s`"
117 exit 1
118 ;;
119 bsd,*)
120 echo >&2 "CONFIGURATION ERROR"
121 echo >&2 " $tripe is compiled to use a BSD tunnel device, but"
122 echo >&2 " this system is `uname -s`"
123 exit 1
124 ;;
125 esac
126
127end script
128
129###--------------------------------------------------------------------------
130### Main startup.
131
132script
133
134 [ -f @initconfig@ ] && . @initconfig@
135
136 : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
137 : ${bindir=@bindir@} ${sbindir=@sbindir@}
138 : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
139 : ${pidfile=@pidfile@}
140 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
141
142 PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
143 export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
144
145 ## Start the server, passing lots of arguments.
ae8928d2
MW
146 logopt=
147 case ${syslogp-nil} in nil) ;; *) logopt="$logopt -l" ;; esac
148 case ${logfile+t},${syslogp-nil} in
149 t,*) logopt="$logopt -f$logfile" ;;
150 ,nil) logopt="$logopt -f@logfile@" ;;
151 esac
2e35470f 152 $tripectl -s -p$tripe \
2e35470f 153 -P$pidfile \
ae8928d2 154 $logopt \
85b239ad
MW
155 ${keytag+-S-t$keytag} \
156 ${addr+-S-b$addr} ${port+-S-p$port} \
157 ${user+-U$user} ${group+-G$group} \
158 ${sockmode+-S-m$sockmode} \
159 ${trace+-S-T$trace} \
160 ${tunnel+-S-n$tunnel} \
161 $miscopts
2e35470f
MW
162
163end script
164
165post-start script
166
167 [ -f @initconfig@ ] && . @initconfig@
168
169 : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
170 : ${bindir=@bindir@} ${sbindir=@sbindir@}
171 : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
172 : ${pidfile=@pidfile@}
173 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
174
175 PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
176 export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
177
178 ## Wait for the server to start up. This doesn't usually take long.
179 for i in 1 2 3 4 give-up; do
180 $tripectl help >/dev/null 2>/dev/null && break
181 sleep 1
182 done
183
184 if [ $i = give-up ]; then
185 echo >&2 "Tripe server wouldn't start"
186 exit 1
187 fi
188
189 ## Start up the ancillary services.
190 [ -d $TRIPEDIR/services ] && for i in $TRIPEDIR/services/*; do
191 [ -x $i ] || continue
192 name=`basename $i`
193 case $name in *~|\#*) continue;; esac
194 $i --daemon --startup || :
195 done
196
197 ## Start up the statically configured peers.
198 [ -d $TRIPEDIR/peers ] && for i in $TRIPEDIR/peers/*; do
199 [ -x $i ] || continue
200 name=`basename $i`
201 case $name in *~|\#*) continue;; esac
202 $i || :
203 done
204
205end script
206
207###--------------------------------------------------------------------------
208### Shutdown.
209
210pre-stop script
211
212 [ -f /etc/default/tripe ] && . /etc/default/tripe
213
214 : ${prefix=/usr} ${exec_prefix=/usr}
215 : ${bindir=/usr/bin} ${sbindir=/usr/sbin}
216 : ${TRIPEDIR=/etc/tripe} ${TRIPESOCK=/var/run/tripesock}
217 : ${pidfile=/var/run/tripectl.pid}
218 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
219
220 PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
221 export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
222
223 ## If there's no socket, it must have quit (probably nonviolently).
224 if test ! -S $TRIPESOCK; then
225 :
226
227 ## Ask it to die nicely.
228 elif $tripectl quit >/dev/null 2>&1; then
229 :
230
231 ## If there's no pidfile then tripectl presumably deleted it.
232 elif test ! -f $pidfile; then
233 rm -f $TRIPESOCK
234
235 ## Otherwise kill the process unpleasantly.
236 elif kill `cat $pidfile`; then
237 :
238 else
239 exit 1
240 fi
241
242end script
243
244###------ That's all, folks -------------------------------------------------