### -*-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. 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 -------------------------------------------------