commit
14f151ac9c
10 changed files with 82 additions and 42 deletions
|
@ -4,6 +4,7 @@ ACME=/usr/lib/acme/client/acme.sh
|
||||||
LOG_TAG=acme-acmesh
|
LOG_TAG=acme-acmesh
|
||||||
# webroot option deprecated, use the hardcoded value directly in the next major version
|
# webroot option deprecated, use the hardcoded value directly in the next major version
|
||||||
WEBROOT=${webroot:-/var/run/acme/challenge}
|
WEBROOT=${webroot:-/var/run/acme/challenge}
|
||||||
|
NOTIFY=/usr/lib/acme/notify
|
||||||
|
|
||||||
# shellcheck source=net/acme/files/functions.sh
|
# shellcheck source=net/acme/files/functions.sh
|
||||||
. /usr/lib/acme/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 CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
|
||||||
export NO_TIMESTAMP=1
|
export NO_TIMESTAMP=1
|
||||||
|
|
||||||
cmd="$1"
|
case $1 in
|
||||||
|
|
||||||
case $cmd in
|
|
||||||
get)
|
get)
|
||||||
set --
|
set --
|
||||||
[ "$debug" = 1 ] && set -- "$@" --debug
|
[ "$debug" = 1 ] && set -- "$@" --debug
|
||||||
|
@ -38,20 +37,25 @@ get)
|
||||||
staging_moved=1
|
staging_moved=1
|
||||||
else
|
else
|
||||||
set -- "$@" --renew --home "$state_dir" -d "$main_domain"
|
set -- "$@" --renew --home "$state_dir" -d "$main_domain"
|
||||||
log info "$*"
|
log info "$ACME $*"
|
||||||
trap 'ACTION=renewed-failed hotplug-call acme;exit 1' INT
|
trap '$NOTIFY renew-failed;exit 1' INT
|
||||||
"$ACME" "$@"
|
$ACME "$@"
|
||||||
status=$?
|
status=$?
|
||||||
trap - INT
|
trap - INT
|
||||||
|
|
||||||
case $status in
|
case $status in
|
||||||
0) ;; # renewed ok, handled by acme.sh hook, ignore.
|
0)
|
||||||
2) ;; # renew skipped, ignore.
|
$NOTIFY renewed
|
||||||
|
exit;;
|
||||||
|
2)
|
||||||
|
# renew skipped, ignore.
|
||||||
|
exit
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
ACTION=renew-failed hotplug-call acme
|
$NOTIFY renew-failed
|
||||||
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -83,6 +87,9 @@ get)
|
||||||
elif [ "$calias" ]; then
|
elif [ "$calias" ]; then
|
||||||
set -- "$@" --challenge-alias "$calias"
|
set -- "$@" --challenge-alias "$calias"
|
||||||
fi
|
fi
|
||||||
|
if [ "$dns_wait" ]; then
|
||||||
|
set -- "$@" --dnssleep "$dns_wait"
|
||||||
|
fi
|
||||||
elif [ "$standalone" = 1 ]; then
|
elif [ "$standalone" = 1 ]; then
|
||||||
set -- "$@" --standalone --listen-v6
|
set -- "$@" --standalone --listen-v6
|
||||||
else
|
else
|
||||||
|
@ -92,11 +99,11 @@ get)
|
||||||
|
|
||||||
set -- "$@" --issue --home "$state_dir"
|
set -- "$@" --issue --home "$state_dir"
|
||||||
|
|
||||||
log info "$*"
|
log info "$ACME $*"
|
||||||
trap 'ACTION=issue-failed hotplug-call acme;exit 1' INT
|
trap '$NOTIFY issue-failed;exit 1' INT
|
||||||
"$ACME" "$@" \
|
"$ACME" "$@" \
|
||||||
--pre-hook 'ACTION=prepare hotplug-call acme' \
|
--pre-hook "$NOTIFY prepare" \
|
||||||
--renew-hook 'ACTION=renewed hotplug-call acme'
|
--renew-hook "$NOTIFY renewed"
|
||||||
status=$?
|
status=$?
|
||||||
trap - INT
|
trap - INT
|
||||||
|
|
||||||
|
@ -106,7 +113,7 @@ get)
|
||||||
ln -s "$domain_dir/$main_domain.key" /etc/ssl/acme
|
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/fullchain.cer" "/etc/ssl/acme/$main_domain.fullchain.cer"
|
||||||
ln -s "$domain_dir/ca.cer" "/etc/ssl/acme/$main_domain.chain.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
|
if [ "$staging_moved" = 1 ]; then
|
||||||
|
@ -117,8 +124,7 @@ get)
|
||||||
mv "$domain_dir" "$failed_dir"
|
mv "$domain_dir" "$failed_dir"
|
||||||
log err "State moved to $failed_dir"
|
log err "State moved to $failed_dir"
|
||||||
fi
|
fi
|
||||||
ACTION=issue-failed hotplug-call acme
|
$NOTIFY issue-failed
|
||||||
return 0
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=acme-common
|
PKG_NAME:=acme-common
|
||||||
PKG_VERSION:=1.0.0
|
PKG_VERSION:=1.0.1
|
||||||
|
|
||||||
PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
|
PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
|
||||||
PKG_LICENSE:=GPL-3.0-only
|
PKG_LICENSE:=GPL-3.0-only
|
||||||
|
@ -34,17 +34,19 @@ define Package/acme-common/conffiles
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/acme-common/install
|
define Package/acme-common/install
|
||||||
$(INSTALL_DIR) $(1)/etc/acme
|
$(INSTALL_DIR) $(1)/etc/ssl/acme
|
||||||
$(INSTALL_DIR) $(1)/etc/config
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
$(INSTALL_CONF) ./files/acme.config $(1)/etc/config/acme
|
$(INSTALL_CONF) ./files/acme.config $(1)/etc/config/acme
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
$(INSTALL_BIN) ./files/acme.sh $(1)/usr/bin/acme
|
$(INSTALL_BIN) ./files/acme.sh $(1)/usr/bin/acme
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/acme
|
$(INSTALL_DIR) $(1)/usr/lib/acme
|
||||||
$(INSTALL_DATA) ./files/functions.sh $(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_DIR) $(1)/etc/init.d
|
||||||
$(INSTALL_BIN) ./files/acme.init $(1)/etc/init.d/acme
|
$(INSTALL_BIN) ./files/acme.init $(1)/etc/init.d/acme
|
||||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||||
$(INSTALL_DATA) ./files/acme.uci-defaults $(1)/etc/uci-defaults/acme
|
$(INSTALL_DATA) ./files/acme.uci-defaults $(1)/etc/uci-defaults/acme
|
||||||
|
$(INSTALL_DIR) $(1)/etc/hotplug.d/acme
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/acme/postinst
|
define Package/acme/postinst
|
||||||
|
|
17
net/acme-common/files/acme-notify.sh
Normal file
17
net/acme-common/files/acme-notify.sh
Normal file
|
@ -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
|
|
@ -5,7 +5,7 @@ config acme
|
||||||
|
|
||||||
config cert 'example_wildcard'
|
config cert 'example_wildcard'
|
||||||
option enabled 0
|
option enabled 0
|
||||||
option use_staging 1
|
option staging 1
|
||||||
list domains example.org
|
list domains example.org
|
||||||
list domains sub.example.org
|
list domains sub.example.org
|
||||||
list domains *.sub.example.org
|
list domains *.sub.example.org
|
||||||
|
@ -17,6 +17,6 @@ config cert 'example_wildcard'
|
||||||
|
|
||||||
config cert 'example'
|
config cert 'example'
|
||||||
option enabled 0
|
option enabled 0
|
||||||
option use_staging 1
|
option staging 1
|
||||||
list domains example.org
|
list domains example.org
|
||||||
list domains sub.example.org
|
list domains sub.example.org
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
#
|
#
|
||||||
# Authors: Toke Høiland-Jørgensen <toke@toke.dk>
|
# Authors: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||||
|
|
||||||
export state_dir='/etc/acme'
|
export state_dir=/etc/acme
|
||||||
export account_email=
|
export account_email=
|
||||||
export debug=0
|
export debug=0
|
||||||
export challenge_dir='/var/run/acme/challenge'
|
export run_dir=/var/run/acme
|
||||||
NFT_HANDLE=
|
NFT_HANDLE=
|
||||||
HOOK=/usr/lib/acme/hook
|
HOOK=/usr/lib/acme/hook
|
||||||
LOG_TAG=acme
|
LOG_TAG=acme
|
||||||
|
@ -23,6 +23,9 @@ LOG_TAG=acme
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
log debug "cleaning up"
|
log debug "cleaning up"
|
||||||
|
if [ -e $run_dir/lock ]; then
|
||||||
|
rm $run_dir/lock
|
||||||
|
fi
|
||||||
if [ "$NFT_HANDLE" ]; then
|
if [ "$NFT_HANDLE" ]; then
|
||||||
# $NFT_HANDLE contains the string 'handle XX' so pass it unquoted to nft
|
# $NFT_HANDLE contains the string 'handle XX' so pass it unquoted to nft
|
||||||
nft delete rule inet fw4 input $NFT_HANDLE
|
nft delete rule inet fw4 input $NFT_HANDLE
|
||||||
|
@ -33,7 +36,7 @@ load_options() {
|
||||||
section=$1
|
section=$1
|
||||||
|
|
||||||
# compatibility for old option name
|
# compatibility for old option name
|
||||||
config_get_bool use_staging "$section" staging
|
config_get_bool staging "$section" use_staging
|
||||||
if [ -z "$staging" ]; then
|
if [ -z "$staging" ]; then
|
||||||
config_get_bool staging "$section" staging 0
|
config_get_bool staging "$section" staging 0
|
||||||
fi
|
fi
|
||||||
|
@ -56,11 +59,13 @@ load_options() {
|
||||||
export days
|
export days
|
||||||
config_get standalone "$section" standalone 0
|
config_get standalone "$section" standalone 0
|
||||||
export standalone
|
export standalone
|
||||||
|
config_get dns_wait "$section" dns_wait
|
||||||
|
export dns_wait
|
||||||
|
|
||||||
config_get webroot "$section" webroot
|
config_get webroot "$section" webroot
|
||||||
export webroot
|
export webroot
|
||||||
if [ "$webroot" ]; then
|
if [ "$webroot" ]; then
|
||||||
log warn "Option \"webroot\" is deprecated, please remove it and change your web server's config so it serves ACME challenge requests from /var/run/acme/challenge."
|
log warn "Option \"webroot\" is deprecated, please remove it and change your web server's config so it serves ACME challenge requests from $run_dir/challenge."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +117,15 @@ load_globals() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd_get() {
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
config_load acme
|
||||||
|
config_foreach load_globals acme
|
||||||
|
|
||||||
|
config_foreach get_cert cert
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: acme <command> [arguments]
|
Usage: acme <command> [arguments]
|
||||||
|
@ -128,12 +142,14 @@ fi
|
||||||
|
|
||||||
case $1 in
|
case $1 in
|
||||||
get)
|
get)
|
||||||
config_load acme
|
mkdir -p $run_dir
|
||||||
config_foreach load_globals acme
|
{
|
||||||
|
if ! flock -n 200; then
|
||||||
mkdir -p /etc/ssl/acme
|
log err "Another ACME instance is already running."
|
||||||
trap cleanup EXIT
|
exit 1
|
||||||
config_foreach get_cert cert
|
fi
|
||||||
|
cmd_get "$@"
|
||||||
|
} 200>$run_dir/lock
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
usage
|
usage
|
||||||
|
|
|
@ -6,7 +6,3 @@ issued|renewed)
|
||||||
>"/etc/ssl/acme/$main_domain.combined.cer"
|
>"/etc/ssl/acme/$main_domain.combined.cer"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$ACTION" = renewed ]; then
|
|
||||||
/etc/init.d/haproxy reload
|
|
||||||
fi
|
|
||||||
|
|
|
@ -18,6 +18,10 @@ start_service() {
|
||||||
procd_close_instance
|
procd_close_instance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service_triggers() {
|
||||||
|
procd_add_raw_trigger acme.renew 5000 /etc/init.d/haproxy reload
|
||||||
|
}
|
||||||
|
|
||||||
extra_command "check" "Check haproxy config"
|
extra_command "check" "Check haproxy config"
|
||||||
check() {
|
check() {
|
||||||
$HAPROXY_BIN -c -q -V -f $HAPROXY_CONFIG
|
$HAPROXY_BIN -c -q -V -f $HAPROXY_CONFIG
|
||||||
|
|
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=nginx
|
PKG_NAME:=nginx
|
||||||
PKG_VERSION:=1.21.3
|
PKG_VERSION:=1.21.3
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=3
|
||||||
|
|
||||||
PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://nginx.org/download/
|
PKG_SOURCE_URL:=https://nginx.org/download/
|
||||||
|
@ -376,9 +376,6 @@ ifeq ($(CONFIG_NGINX_NAXSI),y)
|
||||||
endif
|
endif
|
||||||
$(if $(CONFIG_NGINX_NAXSI),$($(INSTALL_BIN) $(PKG_BUILD_DIR)/nginx-naxsi/naxsi_config/naxsi_core.rules $(1)/etc/nginx))
|
$(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))
|
$(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
|
endef
|
||||||
|
|
||||||
Package/nginx-all-module/install = $(Package/nginx-ssl/install)
|
Package/nginx-all-module/install = $(Package/nginx-ssl/install)
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
if [ "$ACTION" = renewed ]; then
|
|
||||||
/etc/init.d/nginx reload
|
|
||||||
fi
|
|
|
@ -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)"
|
extra_command "relog" "Reopen log files (without reloading)"
|
||||||
relog() {
|
relog() {
|
||||||
[ -d /var/log/nginx ] || mkdir -p /var/log/nginx
|
[ -d /var/log/nginx ] || mkdir -p /var/log/nginx
|
||||||
|
|
Loading…
Reference in a new issue