Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 1 | #!/bin/sh -e |
| 2 | # |
| 3 | # Original version by Robert Leslie |
| 4 | # <rob@mars.org>, edited by iwj and cs |
| 5 | # Modified for openvpn by Alberto Gonzalez Iniesta <agi@agi.as> |
| 6 | # Modified for restarting / starting / stopping single tunnels by Richard Mueller <mueller@teamix.net> |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 7 | # Modified for respecting pid file on service start by Fabian Klemp <fabian.klemp@axino-group.com> |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 8 | |
| 9 | test $DEBIAN_SCRIPT_DEBUG && set -v -x |
| 10 | |
| 11 | DAEMON=/usr/sbin/openvpn |
| 12 | CONFIG_DIR=/etc/openvpn |
| 13 | test -x $DAEMON || exit 0 |
| 14 | test -d $CONFIG_DIR || exit 0 |
| 15 | |
| 16 | start_vpn () { |
| 17 | modprobe tun >/dev/null 2>&1 || true |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 18 | start-stop-daemon --start --quiet --pidfile /var/run/openvpn.$NAME.pid \ |
| 19 | --exec $DAEMON -- \ |
| 20 | --daemon --writepid /var/run/openvpn.$NAME.pid \ |
| 21 | --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || rc="$?" |
| 22 | case $rc in |
| 23 | 1) echo -n " ALREADY STARTED->";; |
| 24 | 3) echo -n " FAILED->";; |
| 25 | esac |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 26 | echo -n " $NAME" |
| 27 | } |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 28 | |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 29 | stop_vpn () { |
| 30 | kill `cat $PIDFILE` || true |
| 31 | rm $PIDFILE |
| 32 | } |
| 33 | |
| 34 | case "$1" in |
| 35 | start) |
| 36 | echo -n "Starting openvpn:" |
| 37 | |
| 38 | if test -z $2 ; then |
| 39 | for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do |
| 40 | NAME=${CONFIG%%.conf} |
| 41 | start_vpn |
| 42 | done |
| 43 | else |
| 44 | if test -e $CONFIG_DIR/$2.conf ; then |
| 45 | NAME=$2 |
| 46 | start_vpn |
| 47 | else |
| 48 | echo -n " No such VPN: $2" |
| 49 | fi |
| 50 | fi |
| 51 | echo "." |
| 52 | |
| 53 | ;; |
| 54 | stop) |
| 55 | echo -n "Stopping openvpn:" |
| 56 | |
| 57 | if test -z $2 ; then |
| 58 | for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do |
| 59 | NAME=`echo $PIDFILE | cut -c18-` |
| 60 | NAME=${NAME%%.pid} |
| 61 | stop_vpn |
| 62 | echo -n " $NAME" |
| 63 | done |
| 64 | else |
| 65 | if test -e /var/run/openvpn.$2.pid ; then |
| 66 | PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null` |
| 67 | NAME=`echo $PIDFILE | cut -c18-` |
| 68 | NAME=${NAME%%.pid} |
| 69 | stop_vpn |
| 70 | echo -n " $NAME" |
| 71 | else |
| 72 | echo -n " No such VPN: $2" |
| 73 | fi |
| 74 | fi |
| 75 | echo "." |
| 76 | ;; |
| 77 | # We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'. |
| 78 | reload|force-reload) |
| 79 | echo -n "Reloading openvpn:" |
| 80 | for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do |
| 81 | NAME=`echo $PIDFILE | cut -c18-` |
| 82 | NAME=${NAME%%.pid} |
| 83 | # If openvpn if running under a different user than root we'll need to restart |
| 84 | if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then |
| 85 | stop_vpn |
| 86 | sleep 1 |
| 87 | start_vpn |
| 88 | echo -n "(restarted)" |
| 89 | else |
| 90 | kill -HUP `cat $PIDFILE` || true |
| 91 | # start-stop-daemon --stop --signal HUP --quiet --oknodo \ |
| 92 | # --exec $DAEMON --pidfile $PIDFILE |
| 93 | echo -n " $NAME" |
| 94 | fi |
| 95 | done |
| 96 | echo "." |
| 97 | ;; |
| 98 | |
| 99 | restart) |
| 100 | $0 stop $2 |
| 101 | sleep 1 |
| 102 | $0 start $2 |
| 103 | ;; |
| 104 | *) |
| 105 | echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2 |
| 106 | exit 1 |
| 107 | ;; |
| 108 | esac |
| 109 | |
| 110 | exit 0 |
| 111 | |
| 112 | # vim:set ai et sts=2 sw=2 tw=0: |