diff options
Diffstat (limited to 'dist')
-rwxr-xr-x | dist/procd/wgconfd | 55 | ||||
-rw-r--r-- | dist/systemd/wgconfd@.service | 20 |
2 files changed, 75 insertions, 0 deletions
diff --git a/dist/procd/wgconfd b/dist/procd/wgconfd new file mode 100755 index 0000000..9cfd438 --- /dev/null +++ b/dist/procd/wgconfd @@ -0,0 +1,55 @@ +#!/bin/sh /etc/rc.common + +START=50 +STOP=50 +USE_PROCD=1 + +handle_interface() { + local iface="$1" + local val + + mkdir -p "/tmp/wgconfd/$1" "/tmp/wgconfd/$1/cache" + procd_open_instance + procd_set_param env RUNTIME_DIRECTORY="/tmp/wgconfd/$1" CACHE_DIRECTORY="/tmp/wgconfd/$1/cache" + procd_set_param command /usr/bin/wgconfd "$1" --cmdline + + config_get val "$1" refresh_sec + [ -n "$val" ] && procd_append_param command refresh_sec "$val" + + config_get val "$1" min_keepalive + [ -n "$val" ] && procd_append_param command min_keepalive "$val" + + config_get val "$1" max_keepalive + [ -n "$val" ] && procd_append_param command max_keepalive "$val" + + config_list_foreach "$1" source handle_source + + procd_set_param respawn 30 5 5 + procd_set_param stderr 1 + procd_close_instance +} + +handle_source() { + local val + config_get val "$1" url + procd_append_param command source "$1" "$val" + + config_get val "$1" psk + [ -n "$val" ] && procd_append_param command psk "$val" + + config_get_bool val "$1" required 0 + [ "$val" -eq 1 ] && procd_append_param command required + + config_list_foreach "$1" ipv4 handle_source_arg ipv4 + + config_list_foreach "$1" ipv6 handle_source_arg ipv6 +} + +handle_source_arg() { + procd_append_param command "$2" "$1" +} + +start_service() { + config_load wgconfd + config_foreach handle_interface interface +} diff --git a/dist/systemd/wgconfd@.service b/dist/systemd/wgconfd@.service new file mode 100644 index 0000000..85acb13 --- /dev/null +++ b/dist/systemd/wgconfd@.service @@ -0,0 +1,20 @@ +[Unit] +Description=WireGuard configuration daemon on %i +Wants=network.target +After=network-pre.target +Before=network.target + +[Service] +Type=simple +CapabilityBoundingSet=CAP_NET_ADMIN +Restart=on-failure +RestartSec=0 +RuntimeDirectory=wgconfd/%i +RuntimeDirectoryPreserve=yes +CacheDirectory=wgconfd/%i +ExecStart=/usr/bin/env wgconfd %i /etc/wireguard/%i.toml +StandardError=journal +SyslogLevelPrefix=true + +[Install] +WantedBy=multi-user.target |