| 1 | #!/bin/sh -e
|
|---|
| 2 | #
|
|---|
| 3 |
|
|---|
| 4 | test $DEBIAN_SCRIPT_DEBUG && set -v -x
|
|---|
| 5 |
|
|---|
| 6 | DAEMON=_path_/bin/openvpn
|
|---|
| 7 | CONFIG_DIR=_path_/etc/openvpn
|
|---|
| 8 | test -x $DAEMON || exit 0
|
|---|
| 9 | test -d $CONFIG_DIR || exit 0
|
|---|
| 10 |
|
|---|
| 11 | start_vpn () {
|
|---|
| 12 | if ( [ ! -c /dev/net/tun ] ) then
|
|---|
| 13 | if ( [ ! -d /dev/net ] ) then
|
|---|
| 14 | mkdir -m 755 /dev/net
|
|---|
| 15 | fi
|
|---|
| 16 | mknod /dev/net/tun c 10 200
|
|---|
| 17 | fi
|
|---|
| 18 | if ( !(lsmod | grep -q "tun") ); then
|
|---|
| 19 | if [ -e /lib/modules/tun.ko ]; then
|
|---|
| 20 | insmod /lib/modules/tun.ko
|
|---|
| 21 | elif [ -e /var/lib/modules/tun.ko ]; then
|
|---|
| 22 | insmod /var/lib/modules/tun.ko
|
|---|
| 23 | elif [ -e _path_/lib/modules/tun.ko ]; then
|
|---|
| 24 | insmod _path_/lib/modules/tun.ko
|
|---|
| 25 | fi
|
|---|
| 26 | fi
|
|---|
| 27 | /lib/ld-linux.so.2 --library-path _path_/lib $DAEMON --daemon --writepid /var/run/openvpn.$NAME.pid \
|
|---|
| 28 | --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || echo -n " FAILED->"
|
|---|
| 29 | echo -n " $NAME"
|
|---|
| 30 | }
|
|---|
| 31 | stop_vpn () {
|
|---|
| 32 | kill `cat $PIDFILE` || true
|
|---|
| 33 | rm $PIDFILE
|
|---|
| 34 | }
|
|---|
| 35 |
|
|---|
| 36 | case "$1" in
|
|---|
| 37 | start)
|
|---|
| 38 | echo -n "Starting openvpn:"
|
|---|
| 39 |
|
|---|
| 40 | if test -z $2 ; then
|
|---|
| 41 | for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
|
|---|
| 42 | NAME=${CONFIG%%.conf}
|
|---|
| 43 | start_vpn
|
|---|
| 44 | done
|
|---|
| 45 | else
|
|---|
| 46 | if test -e $CONFIG_DIR/$2.conf ; then
|
|---|
| 47 | NAME=$2
|
|---|
| 48 | start_vpn
|
|---|
| 49 | else
|
|---|
| 50 | echo -n " No such VPN: $2"
|
|---|
| 51 | fi
|
|---|
| 52 | fi
|
|---|
| 53 | echo "."
|
|---|
| 54 |
|
|---|
| 55 | ;;
|
|---|
| 56 | stop)
|
|---|
| 57 | echo -n "Stopping openvpn:"
|
|---|
| 58 |
|
|---|
| 59 | if test -z $2 ; then
|
|---|
| 60 | for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
|
|---|
| 61 | NAME=`echo $PIDFILE | cut -c18-`
|
|---|
| 62 | NAME=${NAME%%.pid}
|
|---|
| 63 | stop_vpn
|
|---|
| 64 | echo -n " $NAME"
|
|---|
| 65 | done
|
|---|
| 66 | else
|
|---|
| 67 | if test -e /var/run/openvpn.$2.pid ; then
|
|---|
| 68 | PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
|
|---|
| 69 | NAME=`echo $PIDFILE | cut -c18-`
|
|---|
| 70 | NAME=${NAME%%.pid}
|
|---|
| 71 | stop_vpn
|
|---|
| 72 | echo -n " $NAME"
|
|---|
| 73 | else
|
|---|
| 74 | echo -n " No such VPN: $2"
|
|---|
| 75 | fi
|
|---|
| 76 | fi
|
|---|
| 77 | echo "."
|
|---|
| 78 | ;;
|
|---|
| 79 | # We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'.
|
|---|
| 80 | reload|force-reload)
|
|---|
| 81 | echo -n "Reloading openvpn:"
|
|---|
| 82 | for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
|
|---|
| 83 | NAME=`echo $PIDFILE | cut -c18-`
|
|---|
| 84 | NAME=${NAME%%.pid}
|
|---|
| 85 | # If openvpn if running under a different user than root we'll need to restart
|
|---|
| 86 | if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
|
|---|
| 87 | stop_vpn
|
|---|
| 88 | sleep 1
|
|---|
| 89 | start_vpn
|
|---|
| 90 | echo -n "(restarted)"
|
|---|
| 91 | else
|
|---|
| 92 | kill -HUP `cat $PIDFILE` || true
|
|---|
| 93 | # start-stop-daemon --stop --signal HUP --quiet --oknodo \
|
|---|
| 94 | # --exec $DAEMON --pidfile $PIDFILE
|
|---|
| 95 | echo -n " $NAME"
|
|---|
| 96 | fi
|
|---|
| 97 | done
|
|---|
| 98 | echo "."
|
|---|
| 99 | ;;
|
|---|
| 100 |
|
|---|
| 101 | restart)
|
|---|
| 102 | $0 stop $2
|
|---|
| 103 | sleep 1
|
|---|
| 104 | $0 start $2
|
|---|
| 105 | ;;
|
|---|
| 106 | *)
|
|---|
| 107 | echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
|
|---|
| 108 | exit 1
|
|---|
| 109 | ;;
|
|---|
| 110 | esac
|
|---|
| 111 |
|
|---|
| 112 | exit 0
|
|---|
| 113 |
|
|---|
| 114 | # vim:set ai et sts=2 sw=2 tw=0:
|
|---|