### -*-conf-*-
###
### Upstart control script for tripe.
###
### (c) 2012 Mark Wooding
###
###----- Licensing notice ---------------------------------------------------
###
### This file is part of Trivial IP Encryption (TrIPE).
###
### TrIPE is free software: you can redistribute it and/or modify it under
### the terms of the GNU General Public License as published by the Free
### Software Foundation; either version 3 of the License, or (at your
### option) any later version.
###
### TrIPE is distributed in the hope that it will be useful, but WITHOUT
### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
### FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
### for more details.
###
### You should have received a copy of the GNU General Public License
### along with TrIPE. If not, see .
###--------------------------------------------------------------------------
### Identification.
description "TrIPE virtual private network server"
author "Mark Wooding "
###--------------------------------------------------------------------------
### Trigger conditions.
start on stopped pymaemo-optify
stop on starting shutdown
respawn
###--------------------------------------------------------------------------
### Process environment.
console none
###--------------------------------------------------------------------------
### Pre-flight check.
pre-start script
[ -f @initconfig@ ] && . @initconfig@
: ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
: ${bindir=@bindir@} ${sbindir=@sbindir@}
: ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
: ${pidfile=@pidfile@}
: ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
## Give up if there's no binary.
if test ! -x "$tripe" || test ! -x "$tripectl"; then
echo >&2 "Not starting/stopping TrIPE: binary files missing"
exit 1
fi
## Give up if there's no key.
if test ! -f "$TRIPEDIR/keyring" ||
test ! -f "$TRIPEDIR/keyring.pub"; then
echo >&2 "Not starting/stopping TrIPE: keyring files missing"
exit 1
fi
## Check it will work, or at least stands a fighting chance.
##
## (Having loads of different tunnel types doesn't help any.)
case ${tunnel-`$tripe --tunnels | head -1`},`uname -s` in
## Linux TUN/TAP.
linux,Linux)
if { test -f /proc/misc && grep -q tun /proc/misc; } ||
modprobe -q tun; then
: good
else
echo >&2 "$tripe needs the Linux TUN/TAP driver to run."
exit 1
fi
if test -c /dev/net/tun; then
: good
else
echo >&2 "$tripe needs /dev/net/tun, which is missing."
exit 1
fi
;;
## Linux Unet (obsolete).
unet,Linux)
if { test -f /proc/devices && grep -q unet /proc/devices; } ||
modprobe -q unet; then
: good
else
echo >&2 "$tripe needs the Linux UNET driver to run."
exit 1
fi
if test -c /dev/unet; then
: good
else
echo >&2 "$tripe needs /dev/unet, which is missing."
exit 1
fi
;;
## BSD tun.
bsd,*BSD)
## Don't know how to check the device is working. Check the
## device file exists and hope for the best.
if test -c /dev/tun0; then
: good
else
echo >&2 "$tripe needs /dev/tun0, which is missing."
exit 1
fi
;;
## SLIP.
slip,*)
if test "$TRIPE_SLIPIF" = ""; then
echo >&2 "$tripe needs SLIP interfaces set up!"
exit 1
fi
;;
## Various kinds of misconfiguration.
linux,* | unet,*)
echo >&2 "CONFIGURATION ERROR"
echo >&2 " $tripe is compiled to use a Linux tunnel device, but"
echo >&2 " this system is `uname -s`"
exit 1
;;
bsd,*)
echo >&2 "CONFIGURATION ERROR"
echo >&2 " $tripe is compiled to use a BSD tunnel device, but"
echo >&2 " this system is `uname -s`"
exit 1
;;
esac
end script
###--------------------------------------------------------------------------
### Main startup.
script
[ -f @initconfig@ ] && . @initconfig@
: ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
: ${bindir=@bindir@} ${sbindir=@sbindir@}
: ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
: ${pidfile=@pidfile@}
: ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
## Start the server, passing lots of arguments.
logopt=
case ${syslogp-nil} in nil) ;; *) logopt="$logopt -l" ;; esac
case ${logfile+t},${syslogp-nil} in
t,*) logopt="$logopt -f$logfile" ;;
,nil) logopt="$logopt -f@logfile@" ;;
esac
$tripectl -s -p$tripe \
-P$pidfile \
$logopt \
${keytag+-S-t$keytag} \
${addr+-S-b$addr} ${port+-S-p$port} \
${user+-U$user} ${group+-G$group} \
${sockmode+-S-m$sockmode} \
${trace+-S-T$trace} \
${tunnel+-S-n$tunnel} \
$miscopts
end script
post-start script
[ -f @initconfig@ ] && . @initconfig@
: ${prefix=@prefix@} ${exec_prefix=@exec_prefix@}
: ${bindir=@bindir@} ${sbindir=@sbindir@}
: ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock}
: ${pidfile=@pidfile@}
: ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
## Wait for the server to start up. This doesn't usually take long.
for i in 1 2 3 4 give-up; do
$tripectl help >/dev/null 2>/dev/null && break
sleep 1
done
if [ $i = give-up ]; then
echo >&2 "Tripe server wouldn't start"
exit 1
fi
## Start up the ancillary services.
[ -d $TRIPEDIR/services ] && for i in $TRIPEDIR/services/*; do
[ -x $i ] || continue
name=`basename $i`
case $name in *~|\#*) continue;; esac
$i --daemon --startup || :
done
## Start up the statically configured peers.
[ -d $TRIPEDIR/peers ] && for i in $TRIPEDIR/peers/*; do
[ -x $i ] || continue
name=`basename $i`
case $name in *~|\#*) continue;; esac
$i || :
done
end script
###--------------------------------------------------------------------------
### Shutdown.
pre-stop script
[ -f /etc/default/tripe ] && . /etc/default/tripe
: ${prefix=/usr} ${exec_prefix=/usr}
: ${bindir=/usr/bin} ${sbindir=/usr/sbin}
: ${TRIPEDIR=/etc/tripe} ${TRIPESOCK=/var/run/tripesock}
: ${pidfile=/var/run/tripectl.pid}
: ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl}
PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir
export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF
## If there's no socket, it must have quit (probably nonviolently).
if test ! -S $TRIPESOCK; then
:
## Ask it to die nicely.
elif $tripectl quit >/dev/null 2>&1; then
:
## If there's no pidfile then tripectl presumably deleted it.
elif test ! -f $pidfile; then
rm -f $TRIPESOCK
## Otherwise kill the process unpleasantly.
elif kill `cat $pidfile`; then
:
else
exit 1
fi
end script
###------ That's all, folks -------------------------------------------------