diff --git a/init.d/fastd b/init.d/fastd new file mode 100755 index 0000000..1d8a9a8 --- /dev/null +++ b/init.d/fastd @@ -0,0 +1,212 @@ +#!/bin/sh -e + +### BEGIN INIT INFO +# Provides: fastd +# Required-Start: $network $remote_fs $syslog +# Required-Stop: $network $remote_fs $syslog +# Should-Start: network-manager +# Should-Stop: network-manager +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Fast and Secure Tunneling Daemon +# Description: This script will start fastd tunnels as specified +# in /etc/default/fastd and /etc/fastd/*/fastd.conf +### END INIT INFO + +# Derived from the OpenVPN init script +# Original version by Robert Leslie +# , edited by iwj and cs +# Modified for openvpn by Alberto Gonzalez Iniesta +# Modified for restarting / starting / stopping single tunnels by Richard Mueller +# Modified for fastd by Nils Schneider +# Beautified by Thomas Hooge + +. /lib/lsb/init-functions + +test $DEBIAN_SCRIPT_DEBUG && set -v -x + +DESC="Fast and Secure Tunneling Daemon" +NAME=fastd +DAEMON=/usr/local/bin/$NAME +CONFIG_DIR=/etc/fastd +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Exit if the configuration directory is not existent +[ -d $CONFIG_DIR ] || exit 0 + +# Source defaults file; edit that file to configure this script. +AUTOSTART="all" +if test -e /etc/default/$NAME ; then + . /etc/default/$NAME +fi + +start_vpn () { + STATUS=0 + start-stop-daemon --start --quiet --oknodo \ + --pidfile /var/run/fastd/$INSTANCE.pid \ + --make-pidfile \ + --background \ + --exec $DAEMON -- \ + --syslog-level info \ + --config $CONFIG_DIR/$INSTANCE/fastd.conf \ + || STATUS=1 +} + +stop_vpn () { + kill `cat $PIDFILE` || true + rm -f $PIDFILE + log_end_msg 0 +} + +case "$1" in + start) + log_action_begin_msg "Starting $DESC" + + # autostart fastds + if test -z "$2" ; then + # check if automatic startup is disabled by AUTOSTART=none + if test "x$AUTOSTART" = "xnone" -o -z "$AUTOSTART" ; then + log_warning_msg " Autostart disabled, no $NAME will be started." + exit 0 + fi + if test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then + # all fastds shall be started automatically + for CONFIG in `cd $CONFIG_DIR; ls */fastd.conf 2> /dev/null`; do + INSTANCE=${CONFIG%%/fastd.conf} + log_daemon_msg " Autostarting $NAME '$INSTANCE'" + start_vpn + done + else + # start only specified fastds + for INSTANCE in $AUTOSTART ; do + if test -e $CONFIG_DIR/$INSTANCE/fastd.conf ; then + log_daemon_msg " Autostarting $NAME '$INSTANCE'" + start_vpn + else + log_failure_msg " Autostarting $NAME '$INSTANCE': missing $CONFIG_DIR/$INSTANCE/fastd.conf file!" + STATUS=1 + fi + done + fi + #start fastds from command line + else + while shift ; do + [ -z "$1" ] && break + INSTANCE=$1 + if test -e $CONFIG_DIR/$INSTANCE/fastd.conf ; then + log_daemon_msg " Starting $NAME '$INSTANCE'" + start_vpn + else + log_failure_msg " Starting $NAME '$INSTANCE': missing $CONFIG_DIR/$INSTANCE/fastd.conf file!" + STATUS=1 + fi + done + fi + log_end_msg ${STATUS:-0} + ;; + stop) + log_action_begin_msg "Stopping $DESC" + if test -z "$2" ; then + PIDFILE= + for PIDFILE in `ls /var/run/fastd/*.pid 2> /dev/null`; do + INSTANCE=`echo $PIDFILE | cut -c16-` + INSTANCE=${INSTANCE%%.pid} + log_daemon_msg " Stopping $NAME '$INSTANCE'" + stop_vpn + done + if test -z "$PIDFILE" ; then + log_warning_msg " No $NAME is running." + fi + else + while shift ; do + [ -z "$1" ] && break + if test -e /var/run/fastd/$1.pid ; then + log_daemon_msg " Stopping $NAME '$1'" + PIDFILE=`ls /var/run/fastd/$1.pid 2> /dev/null` + INSTANCE=`echo $PIDFILE | cut -c16-` + INSTANCE=${INSTANCE%%.pid} + stop_vpn + else + log_failure_msg " Stopping $NAME '$1': No such $NAME is running." + fi + done + fi + ;; + restart) + shift + $0 stop ${@} + sleep 1 + $0 start ${@} + ;; + status) + GLOBAL_STATUS=0 + if test -z "$2" ; then + # We want status for all defined fastd. + # Returns success if all autostarted fastds are defined and running + if test "x$AUTOSTART" = "xnone" ; then + # Consider it a failure if AUTOSTART=none + log_warning_msg "No fastds autostarted" + GLOBAL_STATUS=1 + else + if ! test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then + # Consider it a failure if one of the autostarted fastd is not defined + for VPN in $AUTOSTART ; do + if ! test -f $CONFIG_DIR/$VPN/fastd.conf ; then + log_warning_msg "fastd '$VPN' is in AUTOSTART but is not defined" + GLOBAL_STATUS=1 + fi + done + fi + fi + for CONFIG in `cd $CONFIG_DIR; ls */fastd.conf 2> /dev/null`; do + INSTANCE=${CONFIG%%/fastd.conf} + # Is it an autostarted fastd? + if test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then + AUTOVPN=1 + else + if test "x$AUTOSTART" = "xnone" ; then + AUTOVPN=0 + else + AUTOVPN=0 + for VPN in $AUTOSTART; do + if test "x$VPN" = "x$NAME" ; then + AUTOVPN=1 + fi + done + fi + fi + if test "x$AUTOVPN" = "x1" ; then + # If it is autostarted, then it contributes to global status + status_of_proc -p /var/run/fastd/${INSTANCE}.pid $NAME "$NAME '${INSTANCE}'" || GLOBAL_STATUS=1 + else + status_of_proc -p /var/run/fastd/${INSTANCE}.pid $NAME "$NAME '${INSTANCE}' (non autostarted)" || true + fi + done + else + # We just want status for specified fastd. + # Returns success if all specified fastds are defined and running + while shift ; do + [ -z "$1" ] && break + INSTANCE=$1 + if test -e $CONFIG_DIR/$INSTANCE/fastd.conf ; then + # Config exists + status_of_proc -p /var/run/fastd/${INSTANCE}.pid $NAME "$NAME '${INSTANCE}'" || GLOBAL_STATUS=1 + else + # Config does not exist + log_warning_msg "$NAME '$INSTANCE': missing $CONFIG_DIR/$INSTANCE/fastd.conf file!" + GLOBAL_STATUS=1 + fi + done + fi + exit $GLOBAL_STATUS + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/install-tools.sh b/install-tools.sh index 05573fa..1757c0a 100755 --- a/install-tools.sh +++ b/install-tools.sh @@ -1,6 +1,7 @@ #!/bin/sh -install fastd-status.py /usr/local/bin -install ffgate-check /usr/local/bin -install alfred-announce.py /usr/local/bin +install -v fastd-status.py /usr/local/bin +install -v ffgate-check /usr/local/bin +install -v alfred-announce.py /usr/local/bin +install -v init.d/fastd /etc/init.d