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