blob: 99fa8b287c2bec7bcc291e4a13772b0c51f8f17e (
plain) (
tree)
|
|
#!/sbin/runscript
# OpenVPN start/stop script
# Adapted to Gentoo by James Yonan
# Originally Contributed to the OpenVPN project by
# Douglas Keller <doug@voidstar.dyndns.org>
# 2002.05.15
# This script does the following:
#
# - Starts an openvpn process for each .conf file it finds in
# /etc/openvpn.
#
# - If /etc/openvpn/xxx.sh exists for a xxx.conf file then it executes
# it before starting openvpn (useful for doing openvpn --mktun...).
# - In addition to start/stop you can do:
#
# service openvpn reload - SIGHUP
# service openvpn reopen - SIGUSR1
# service openvpn status - SIGUSR2
# Location of openvpn binary
openvpn=/usr/local/sbin/openvpn
# PID directory
piddir=/var/run/openvpn
# Our working directory (.conf files should be here)
work=/etc/openvpn
# Our options
opts="start stop restart condrestart"
depend() {
need net
use dns
}
start() {
ebegin "Starting OpenVPN"
# Load the TUN/TAP module
/sbin/modprobe tun >/dev/null 2>&1
if [ ! -d $piddir ]; then
mkdir $piddir
fi
cd $work
# Start every .conf in $work and run .sh if exists
local errors=0
local successes=0
local retstatus=0
for c in `/bin/ls *.conf 2>/dev/null`; do
bn=${c%%.conf}
if [ -f "$bn.sh" ]; then
. $bn.sh
fi
rm -f $piddir/$bn.pid
$openvpn --daemon openvpn-$bn --writepid $piddir/$bn.pid --config $c --cd $work
if [ $? = 0 ]; then
successes=1
else
errors=1
fi
done
# Decide status based on errors/successes.
# If at least one tunnel succeeded, we return success.
# If some tunnels succeeded and some failed, we return
# success but give a warning.
if [ $successes = 1 ]; then
if [ $errors = 1 ]; then
ewarn "Note: At least one OpenVPN tunnel failed to start"
fi
else
retstatus=1
if [ $errors = 0 ]; then
ewarn "Note: No OpenVPN configuration files were found in $work"
fi
fi
eend $retstatus "Error starting OpenVPN"
}
stop() {
ebegin "Stopping OpenVPN"
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
eend 0
}
# this should really be in runscript.sh
started() {
if [ -L "${svcdir}/started/${myservice}" ]; then
return 1
else
return 0
fi
}
# attempt to restart ONLY if we are already started
condrestart() {
started || restart
}
|