aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/acme-acmesh/files/hook.sh37
-rw-r--r--net/acme-common/Makefile2
-rw-r--r--net/acme-common/files/acme-notify.sh17
-rw-r--r--net/haproxy/files/acme.hotplug4
-rw-r--r--net/haproxy/files/haproxy.init4
-rw-r--r--net/nginx/Makefile3
-rw-r--r--net/nginx/files/acme.hotplug3
-rw-r--r--net/nginx/files/nginx.init5
8 files changed, 48 insertions, 27 deletions
diff --git a/net/acme-acmesh/files/hook.sh b/net/acme-acmesh/files/hook.sh
index cd92cec9d..bbe23b4a1 100644
--- a/net/acme-acmesh/files/hook.sh
+++ b/net/acme-acmesh/files/hook.sh
@@ -4,6 +4,7 @@ ACME=/usr/lib/acme/client/acme.sh
LOG_TAG=acme-acmesh
# webroot option deprecated, use the hardcoded value directly in the next major version
WEBROOT=${webroot:-/var/run/acme/challenge}
+NOTIFY=/usr/lib/acme/notify
# shellcheck source=net/acme/files/functions.sh
. /usr/lib/acme/functions.sh
@@ -12,9 +13,7 @@ WEBROOT=${webroot:-/var/run/acme/challenge}
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
export NO_TIMESTAMP=1
-cmd="$1"
-
-case $cmd in
+case $1 in
get)
set --
[ "$debug" = 1 ] && set -- "$@" --debug
@@ -38,20 +37,25 @@ get)
staging_moved=1
else
set -- "$@" --renew --home "$state_dir" -d "$main_domain"
- log info "$*"
- trap 'ACTION=renewed-failed hotplug-call acme;exit 1' INT
- "$ACME" "$@"
+ log info "$ACME $*"
+ trap '$NOTIFY renew-failed;exit 1' INT
+ $ACME "$@"
status=$?
trap - INT
case $status in
- 0) ;; # renewed ok, handled by acme.sh hook, ignore.
- 2) ;; # renew skipped, ignore.
+ 0)
+ $NOTIFY renewed
+ exit;;
+ 2)
+ # renew skipped, ignore.
+ exit
+ ;;
*)
- ACTION=renew-failed hotplug-call acme
+ $NOTIFY renew-failed
+ exit 1
;;
esac
- return 0
fi
fi
@@ -92,11 +96,11 @@ get)
set -- "$@" --issue --home "$state_dir"
- log info "$*"
- trap 'ACTION=issue-failed hotplug-call acme;exit 1' INT
+ log info "$ACME $*"
+ trap '$NOTIFY issue-failed;exit 1' INT
"$ACME" "$@" \
- --pre-hook 'ACTION=prepare hotplug-call acme' \
- --renew-hook 'ACTION=renewed hotplug-call acme'
+ --pre-hook "$NOTIFY prepare" \
+ --renew-hook "$NOTIFY renewed"
status=$?
trap - INT
@@ -106,7 +110,7 @@ get)
ln -s "$domain_dir/$main_domain.key" /etc/ssl/acme
ln -s "$domain_dir/fullchain.cer" "/etc/ssl/acme/$main_domain.fullchain.cer"
ln -s "$domain_dir/ca.cer" "/etc/ssl/acme/$main_domain.chain.cer"
- ACTION=issued hotplug-call acme
+ $NOTIFY issued
;;
*)
if [ "$staging_moved" = 1 ]; then
@@ -117,8 +121,7 @@ get)
mv "$domain_dir" "$failed_dir"
log err "State moved to $failed_dir"
fi
- ACTION=issue-failed hotplug-call acme
- return 0
+ $NOTIFY issue-failed
;;
esac
;;
diff --git a/net/acme-common/Makefile b/net/acme-common/Makefile
index 997c31e31..a279641c2 100644
--- a/net/acme-common/Makefile
+++ b/net/acme-common/Makefile
@@ -41,10 +41,12 @@ define Package/acme-common/install
$(INSTALL_BIN) ./files/acme.sh $(1)/usr/bin/acme
$(INSTALL_DIR) $(1)/usr/lib/acme
$(INSTALL_DATA) ./files/functions.sh $(1)/usr/lib/acme
+ $(INSTALL_BIN) ./files/acme-notify.sh $(1)/usr/lib/acme/notify
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/acme.init $(1)/etc/init.d/acme
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DATA) ./files/acme.uci-defaults $(1)/etc/uci-defaults/acme
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/acme
endef
define Package/acme/postinst
diff --git a/net/acme-common/files/acme-notify.sh b/net/acme-common/files/acme-notify.sh
new file mode 100644
index 000000000..4f06f9412
--- /dev/null
+++ b/net/acme-common/files/acme-notify.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -u
+
+event="$1"
+
+# Call hotplug first, giving scripts a chance to modify certificates before
+# reloadaing the services
+ACTION=$event hotplug-call acme
+
+case $event in
+renewed)
+ ubus call service event '{"type":"acme.renew","data":{}}'
+ ;;
+issued)
+ ubus call service event '{"type":"acme.issue","data":{}}'
+ ;;
+esac
diff --git a/net/haproxy/files/acme.hotplug b/net/haproxy/files/acme.hotplug
index 5a4dc5cdd..726d2b216 100644
--- a/net/haproxy/files/acme.hotplug
+++ b/net/haproxy/files/acme.hotplug
@@ -6,7 +6,3 @@ issued|renewed)
>"/etc/ssl/acme/$main_domain.combined.cer"
;;
esac
-
-if [ "$ACTION" = renewed ]; then
- /etc/init.d/haproxy reload
-fi
diff --git a/net/haproxy/files/haproxy.init b/net/haproxy/files/haproxy.init
index 01d80d781..51c0ebb65 100644
--- a/net/haproxy/files/haproxy.init
+++ b/net/haproxy/files/haproxy.init
@@ -18,6 +18,10 @@ start_service() {
procd_close_instance
}
+service_triggers() {
+ procd_add_raw_trigger acme.renew 5000 /etc/init.d/haproxy reload
+}
+
extra_command "check" "Check haproxy config"
check() {
$HAPROXY_BIN -c -q -V -f $HAPROXY_CONFIG
diff --git a/net/nginx/Makefile b/net/nginx/Makefile
index 41436aa39..0cb8c65b0 100644
--- a/net/nginx/Makefile
+++ b/net/nginx/Makefile
@@ -376,9 +376,6 @@ ifeq ($(CONFIG_NGINX_NAXSI),y)
endif
$(if $(CONFIG_NGINX_NAXSI),$($(INSTALL_BIN) $(PKG_BUILD_DIR)/nginx-naxsi/naxsi_config/naxsi_core.rules $(1)/etc/nginx))
$(if $(CONFIG_NGINX_NAXSI),$(chmod 0640 $(1)/etc/nginx/naxsi_core.rules))
-
- $(INSTALL_DIR) $(1)/etc/hotplug.d/acme
- $(INSTALL_DATA) ./files/acme.hotplug $(1)/etc/hotplug.d/acme/00-nginx
endef
Package/nginx-all-module/install = $(Package/nginx-ssl/install)
diff --git a/net/nginx/files/acme.hotplug b/net/nginx/files/acme.hotplug
deleted file mode 100644
index 74f1448d7..000000000
--- a/net/nginx/files/acme.hotplug
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ "$ACTION" = renewed ]; then
- /etc/init.d/nginx reload
-fi
diff --git a/net/nginx/files/nginx.init b/net/nginx/files/nginx.init
index 300a8c657..632a3f10a 100644
--- a/net/nginx/files/nginx.init
+++ b/net/nginx/files/nginx.init
@@ -66,6 +66,11 @@ reload_service() {
}
+service_triggers() {
+ procd_add_raw_trigger acme.renew 5000 /etc/init.d/nginx reload
+}
+
+
extra_command "relog" "Reopen log files (without reloading)"
relog() {
[ -d /var/log/nginx ] || mkdir -p /var/log/nginx