#set -v -x
-DAEMON=openvpn
+DAEMON=$(which openvpn)
CONFIG_DIR=/var/etc/openvpn
+FLAG=/var/etc/.openvpn
test -x $DAEMON || exit 0
test -d $CONFIG_DIR || exit 0
-modprobe tun >/dev/null 2>&1 || true
+
start_vpn () {
+ if [ ! -c /dev/net/tun ]; then
+ modprobe tun >/dev/null 2>&1 || true
+ fi
$DAEMON --daemon --writepid /var/run/openvpn.$NAME.pid \
- --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || echo -n " FAILED->"
+ --config $CONFIG_DIR/$NAME.conf \
+ --log /tmp/openvpn.$NAME.log \
+ --cd $CONFIG_DIR || echo -n " FAILED->"
echo -n " $NAME"
}
stop_vpn () {
- kill `cat $PIDFILE` || true
- rm $PIDFILE
+ kill `cat $PIDFILE` || true
+ rm $PIDFILE >/dev/null 2>&1
+ rm /tmp/openvpn.$NAME.log
}
case "$1" in
start)
- echo -n "Starting openvpn:"
-
- if test -z $2 ; then
- for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
- NAME=${CONFIG%%.conf}
- start_vpn
- done
- else
- if test -e $CONFIG_DIR/$2.conf ; then
- NAME=$2
- start_vpn
- else
- echo -n " No such VPN: $2"
- fi
- fi
- echo "."
+ echo -n "Starting openvpn:"
- ;;
+ if test -z $2 ; then
+ if [ -e $FLAG ]; then
+ read mode < /var/etc/.openvpn
+ mode=${mode:-client}
+ NAME=$mode
+ start_vpn
+ fi
+ else
+ if test -e $CONFIG_DIR/$2.conf ; then
+ NAME=$2
+ start_vpn
+ else
+ echo -n " No such VPN: $2"
+ fi
+ fi
+ echo "."
+ ;;
stop)
- echo -n "Stopping openvpn:"
+ echo -n "Stopping openvpn:"
- if test -z $2 ; then
- for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
- NAME=`echo $PIDFILE | cut -c18-`
- NAME=${NAME%%.pid}
- stop_vpn
- echo -n " $NAME"
- done
- else
- if test -e /var/run/openvpn.$2.pid ; then
- PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
- NAME=`echo $PIDFILE | cut -c18-`
- NAME=${NAME%%.pid}
- stop_vpn
- echo -n " $NAME"
- else
- echo -n " No such VPN: $2"
- fi
- fi
- echo "."
- ;;
+ if test -z $2 ; then
+ for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ echo -n " $NAME"
+ done
+ else
+ if test -e /var/run/openvpn.$2.pid ; then
+ PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ echo -n " $NAME"
+ else
+ echo -n " No such VPN: $2"
+ fi
+ fi
+ echo "."
+ ;;
# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'.
reload|force-reload)
- echo -n "Reloading openvpn:"
- for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
- NAME=`echo $PIDFILE | cut -c18-`
- NAME=${NAME%%.pid}
+ echo -n "Reloading openvpn:"
+ for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
# If openvpn if running under a different user than root we'll need to restart
- if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
- stop_vpn
- sleep 1
- start_vpn
- echo -n "(restarted)"
- else
- kill -HUP `cat $PIDFILE` || true
+ if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
+ stop_vpn
+ sleep 1
+ start_vpn
+ echo -n "(restarted)"
+ else
+ kill -HUP `cat $PIDFILE` || true
# start-stop-daemon --stop --signal HUP --quiet --oknodo \
# --exec $DAEMON --pidfile $PIDFILE
- echo -n " $NAME"
- fi
- done
- echo "."
- ;;
+ echo -n " $NAME (reloaded)"
+ fi
+ done
+ echo "."
+ ;;
restart)
- $0 stop $2
- sleep 1
- $0 start $2
- ;;
+ $0 stop $2
+ sleep 1
+ $0 start $2
+ ;;
*)
- echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
- exit 1
- ;;
+ echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
+ exit 1
+ ;;
esac
exit 0