X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/01c94fa1b6e5db0dd2b1c6d05f1f598c21fe493d..2e35470f549072426bf493c73dceff108a05f3b1:/contrib/tripe-upstart.in diff --git a/contrib/tripe-upstart.in b/contrib/tripe-upstart.in new file mode 100644 index 00000000..aa6e4193 --- /dev/null +++ b/contrib/tripe-upstart.in @@ -0,0 +1,239 @@ +### -*-conf-*- +### +### Upstart control script for tripe. + +###-------------------------------------------------------------------------- +### 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. + $tripectl -s -p$tripe \ + -f${logfile-/var/log/tripe.log} \ + -P$pidfile \ + ${keytag+-S-t}$keytag \ + ${addr+-S-b}$addr \ + ${port+-S-p}${port} \ + ${user+-U}${user} \ + ${group+-G}${group} \ + ${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 -------------------------------------------------