chiark / gitweb /
Debianization.
[tripe] / tripe-init.in
index 5d96691c95bdcf11f94eab4c19d88a94c0326dc8..db9cb35f63351eaf0e2aa60ddf5a811696d69c03 100755 (executable)
@@ -3,21 +3,97 @@
 # tripe init script
 #   suitable for direct use in most SysV-style inits
 
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@bindir@
-sbindir=@sbindir@
-
 set -e
 
-[ -f /etc/tripe.conf ] && . /etc/tripe.conf
-: ${TRIPEDIR=/var/lib/tripe}
-export TRIPEDIR
+# --- Setup ---
 
-: ${tripe=$sbindir/tripe}
-: ${tripectl=$bindir/tripectl}
+[ -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
+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)
@@ -26,7 +102,9 @@ case "$1" in
       echo " already running"
       exit 0
     fi
-    $tripectl -D -f ${logfile-tripe.log} -p $tripe -s \
+    $tripectl -D -s -p$tripe \
+      -f${logfile-@logfile@} \
+      -P${pidfile-@pidfile@} \
       ${addr+-S-b}$addr \
       ${port+-S-p}${port} \
       ${user+-S-u}${user} \
@@ -59,12 +137,18 @@ case "$1" in
     $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|force-reload"
+    echo >&2 "usage: $0 start|stop|restart|status|force-reload"
     exit 1
     ;;
 esac