#! /bin/sh # # tripe init script # suitable for direct use in most SysV-style inits set -e # --- Setup --- [ -f @initconfig@ ] && . @initconfig@ : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@} : ${bindir=@bindir@} ${sbindir=@sbindir@} : ${TRIPEDIR=@configdir@} : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl} PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir export PATH TRIPEDIR # --- Check it will work, or at least stands a fighting chance --- # # Having loads of different tunnel types doesn't help any. test -x $tripe -a -x $tripectl || exit 0 case `$tripe --tunnel` in linux) case `uname -s` in Linux) if { test -f /proc/misc && grep -q net/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 ;; *) 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 ;; esac ;; unet) case `uname -s` in 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 ;; *) 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 ;; esac ;; bsd) case `uname -s` in *BSD) # Don't know how to check the device is working. if test -c /dev/tun0; then : good else echo >&2 "$tripe needs /dev/tun0, which is missing." exit 1 fi ;; *) 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 ;; esac # --- Do what was wanted --- case "$1" in start) echo -n "Starting TrIPE VPN daemon:" if $tripectl help >/dev/null 2>/dev/null; then echo " already running" exit 0 fi $tripectl -D -s -p$tripe \ -f${logfile-@logfile@} \ -P${pidfile-@pidfile@} \ ${keytag+-S-t}$keytag \ ${addr+-S-b}$addr \ ${port+-S-p}${port} \ ${user+-S-u}${user} \ ${group+-S-g}${group} \ ${trace+-S-T}${trace} \ ${miscopts} 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 " wouldn't start" exit 1 fi echo -n " tripe" for i in $TRIPEDIR/peers/*; do [ -x $i ] || continue name=`basename $i` case $name in *~|\#*) continue;; esac if $i; then echo -n " $name" else echo -n " ($name failed)" fi done echo " done" ;; stop) echo -n "Stopping TrIPE VPN daemon:" $tripectl quit echo " done" ;; status) for i in `$tripectl list`; do echo "Peer \`$i':" $tripectl stats $i | sed 's/^/ /' done ;; restart | force-reload) sh $0 stop sh $0 start ;; *) echo >&2 "usage: $0 start|stop|restart|status|force-reload" exit 1 ;; esac