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> SVN-Revision: 44310
This commit is contained in:
parent
fcfbbfc385
commit
ccc33238a4
2 changed files with 32 additions and 4 deletions
|
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
|||
PKG_NAME:=openvpn
|
||||
|
||||
PKG_VERSION:=2.3.6
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE_URL:=http://swupdate.openvpn.net/community/releases
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
|
|
|
@ -13,6 +13,9 @@ PROG=/usr/sbin/openvpn
|
|||
LIST_SEP="
|
||||
"
|
||||
|
||||
UCI_STARTED=
|
||||
UCI_DISABLED=
|
||||
|
||||
append_param() {
|
||||
local s="$1"
|
||||
local v="$2"
|
||||
|
@ -59,6 +62,7 @@ openvpn_add_instance() {
|
|||
procd_open_instance
|
||||
procd_set_param command "$PROG" \
|
||||
--syslog "openvpn($name)" \
|
||||
--status "/var/run/openvpn.$name.status" \
|
||||
--cd "$dir" \
|
||||
--config "$conf"
|
||||
procd_set_param file "$dir/$conf"
|
||||
|
@ -69,14 +73,19 @@ openvpn_add_instance() {
|
|||
start_instance() {
|
||||
local s="$1"
|
||||
|
||||
section_enabled "$s" || return 1
|
||||
|
||||
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"
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
|
@ -123,4 +132,23 @@ start_instance() {
|
|||
start_service() {
|
||||
config_load '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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue