4 ### suitable for direct use in most SysV-style inits
8 # Required-Start: $local_fs $remote_fs $named $network
9 # Required-Stop: $local_fs $remote_fs $network
10 # Default-Start: 2 3 4 5
12 # Short-Description: tripe Virtual Private Network server
17 ###--------------------------------------------------------------------------
20 [ -f @initconfig@
] && . @initconfig@
22 : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
23 : ${bindir=@bindir@} ${sbindir=@sbindir@}
24 : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
25 : ${pidfile=@pidfile@}
26 : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
28 PATH
=/usr
/bin
:/usr
/sbin
:/bin
:/sbin
:$bindir
29 export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
31 ###--------------------------------------------------------------------------
32 ### Pre-flight checks.
34 ## Give up if there's no binary.
35 if test ! -x
"$tripe" ||
test ! -x
"$tripectl"; then
36 echo >&2 "Not starting/stopping TrIPE: binary files missing"
40 ## Give up if there's no key.
41 if test ! -f
"$TRIPEDIR/keyring" ||
test ! -f
"$TRIPEDIR/keyring.pub"; then
42 echo >&2 "Not starting/stopping TrIPE: keyring files missing"
46 ## Check it will work, or at least stands a fighting chance.
48 ## (Having loads of different tunnel types doesn't help any.)
49 case ${tunnel-`$tripe --tunnels | head -1`},`uname -s` in
53 if { test -f
/proc
/misc
&& grep -q tun
/proc
/misc
; } ||
57 echo >&2 "$tripe needs the Linux TUN/TAP driver to run."
60 if test -c
/dev
/net
/tun
; then
63 echo >&2 "$tripe needs /dev/net/tun, which is missing."
68 ## Linux Unet (obsolete).
70 if { test -f
/proc
/devices
&& grep -q unet
/proc
/devices
; } ||
71 modprobe
-q unet
; then
74 echo >&2 "$tripe needs the Linux UNET driver to run."
77 if test -c
/dev
/unet
; then
80 echo >&2 "$tripe needs /dev/unet, which is missing."
87 ## Don't know how to check the device is working. Check the device file
88 ## exists and hope for the best.
89 if test -c
/dev
/tun0
; then
92 echo >&2 "$tripe needs /dev/tun0, which is missing."
99 if test "$TRIPE_SLIPIF" = ""; then
100 echo >&2 "$tripe needs SLIP interfaces set up!"
105 ## Various kinds of misconfiguration.
107 echo >&2 "CONFIGURATION ERROR"
108 echo >&2 " $tripe is compiled to use a Linux tunnel device, but"
109 echo >&2 " this system is `uname -s`"
113 echo >&2 "CONFIGURATION ERROR"
114 echo >&2 " $tripe is compiled to use a BSD tunnel device, but"
115 echo >&2 " this system is `uname -s`"
120 ###--------------------------------------------------------------------------
121 ### Do what was wanted.
126 echo -n
"Starting TrIPE VPN daemon:"
128 ## Check to see whether the daemon is already going. If it can respond
129 ## to a simple request, we'll assume that it is.
130 if $tripectl version
>/dev
/null
2>/dev
/null
; then
131 echo " already running"
135 ## Start the server, passing lots of arguments.
137 case ${syslogp-nil} in nil
) ;; *) logopt
="$logopt -l" ;; esac
138 case ${logfile+t},${syslogp-nil} in
139 t
,*) logopt
="$logopt -f$logfile" ;;
140 ,nil
) logopt
="$logopt -f@logfile@" ;;
142 $tripectl -D
-s
-p
$tripe \
145 ${keytag+-S-t$keytag} \
146 ${addr+-S-b$addr} ${port+-S-p$port} \
147 ${user+-U$user} ${group+-G$group} \
148 ${sockmode+-S-m$sockmode} \
149 ${trace+-S-T$trace} \
150 ${tunnel+-S-n$tunnel} \
153 ## Wait for the server to start up. This doesn't usually take long.
154 for i
in 1 2 3 4 give-up
; do
155 $tripectl help >/dev
/null
2>/dev
/null
&& break
159 if [ $i = give-up
]; then
160 echo " wouldn't start"
166 ## Start up the ancillary services.
167 sep
=" services [" end
=""
168 [ -d
$TRIPEDIR/services
] && for i
in $TRIPEDIR/services
/*; do
169 [ -x
$i ] ||
continue
171 case $name in *~|\
#*) continue;; esac
172 if $i --daemon
--startup
; then
175 echo -n
"$sep($name failed)"
181 ## Start up the statically configured peers.
182 sep
=" peers [" end
=""
183 [ -d
$TRIPEDIR/peers
] && for i
in $TRIPEDIR/peers
/*; do
184 [ -x
$i ] ||
continue
186 case $name in *~|\
#*) continue;; esac
190 echo -n
"$sep($name failed)"
200 echo -n
"Stopping TrIPE VPN daemon:"
202 ## If there's no socket, it must have quit (probably nonviolently).
203 if (cd $TRIPEDIR && test ! -S
$TRIPESOCK); then
206 ## Ask it to die nicely.
207 elif $tripectl quit
>/dev
/null
2>&1; then
210 ## If there's no pidfile then tripectl presumably deleted it.
211 elif test ! -f
$pidfile; then
212 echo " stale socket found: removing"
215 ## Otherwise kill the process unpleasantly.
216 elif kill `cat $pidfile`; then
217 echo " done (killed violently)"
219 echo " it doesn't want to die!"
225 for i
in `$tripectl list`; do
227 $tripectl stats
$i |
sed 's/^/ /'
233 echo "Keyrings reloaded OK."
236 restart | force-reload
)
242 echo >&2 "usage: $0 start|stop|restart|status|reload|force-reload"
248 ###----- That's all, folks --------------------------------------------------