openvpn: autostart openvpn instances for each .conf file in /etc/openvpn

Align init behaviour with other distros by starting an OpenVPN instance
for each config file found in /etc/openvpn/. This removes the additional
requirement to "register" the configs with uci and thus simplifies the
setup.

Make sure to respect the disabled state in uci to not suddenly autostart
instances which have been previously set to disabled, also skip configs
which are already started due to uci configuration.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44310 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Jo-Philipp Wich 2015-02-07 21:01:28 +00:00
parent 905361b89c
commit 6a61b200d8
2 changed files with 32 additions and 4 deletions

View File

@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=openvpn PKG_NAME:=openvpn
PKG_VERSION:=2.3.6 PKG_VERSION:=2.3.6
PKG_RELEASE:=2 PKG_RELEASE:=3
PKG_SOURCE_URL:=http://swupdate.openvpn.net/community/releases PKG_SOURCE_URL:=http://swupdate.openvpn.net/community/releases
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

View File

@ -13,6 +13,9 @@ PROG=/usr/sbin/openvpn
LIST_SEP=" LIST_SEP="
" "
UCI_STARTED=
UCI_DISABLED=
append_param() { append_param() {
local s="$1" local s="$1"
local v="$2" local v="$2"
@ -59,6 +62,7 @@ openvpn_add_instance() {
procd_open_instance procd_open_instance
procd_set_param command "$PROG" \ procd_set_param command "$PROG" \
--syslog "openvpn($name)" \ --syslog "openvpn($name)" \
--status "/var/run/openvpn.$name.status" \
--cd "$dir" \ --cd "$dir" \
--config "$conf" --config "$conf"
procd_set_param file "$dir/$conf" procd_set_param file "$dir/$conf"
@ -69,14 +73,19 @@ openvpn_add_instance() {
start_instance() { start_instance() {
local s="$1" local s="$1"
section_enabled "$s" || return 1
config_get config "$s" config config_get config "$s" config
config="${config:+$(readlink -f "$config")}"
section_enabled "$s" || {
append UCI_DISABLED "$config" "$LIST_SEP"
return 1
}
[ ! -d "/var/run" ] && mkdir -p "/var/run" [ ! -d "/var/run" ] && mkdir -p "/var/run"
if [ ! -z "$config" ]; then if [ ! -z "$config" ]; then
openvpn_add_instance "$s" "$(dirname "$config")" "$(basename "$config")" append UCI_STARTED "$config" "$LIST_SEP"
openvpn_add_instance "$s" "${config%/*}" "$config"
return return
fi fi
@ -123,4 +132,23 @@ start_instance() {
start_service() { start_service() {
config_load 'openvpn' config_load 'openvpn'
config_foreach start_instance 'openvpn' config_foreach start_instance 'openvpn'
local path name
for path in /etc/openvpn/*.conf; do
if [ -f "$path" ]; then
name="${path##*/}"; name="${name%.conf}"
# don't start configs again that are already started by uci
if echo "$UCI_STARTED" | grep -qxF "$path"; then
continue
# don't start configs which are set to disabled in uci
elif echo "$UCI_DISABLED" | grep -qxF "$path"; then
logger -t openvpn "$name.conf is disabled in /etc/config/openvpn"
continue
fi
openvpn_add_instance "$name" "${path%/*}" "$path"
fi
done
} }