--- /dev/null
+### -*-conf-*-
+###
+### Upstart control script for tripe.
+
+###--------------------------------------------------------------------------
+### Identification.
+
+description "TrIPE virtual private network server"
+author "Mark Wooding <mdw@distorted.org.uk>"
+
+###--------------------------------------------------------------------------
+### 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 -------------------------------------------------