-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Glen Huang <i@glenhuang.com>
- Loading branch information
Showing
5 changed files
with
137 additions
and
171 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,137 @@ | ||
#!/bin/sh /etc/rc.common | ||
|
||
START=80 | ||
USE_PROCD=1 | ||
run_dir=/var/run/acme | ||
export CHALLENGE_DIR=$run_dir/challenge | ||
export CERT_DIR=/etc/ssl/acme | ||
NFT_HANDLE= | ||
HOOK=/usr/lib/acme/hook | ||
LOG_TAG=acme | ||
|
||
# shellcheck source=net/acme/files/functions.sh | ||
. /usr/lib/acme/functions.sh | ||
|
||
cleanup() { | ||
log debug "cleaning up" | ||
if [ -e $run_dir/lock ]; then | ||
rm $run_dir/lock | ||
fi | ||
if [ "$NFT_HANDLE" ]; then | ||
# $NFT_HANDLE contains the string 'handle XX' so pass it unquoted to nft | ||
nft delete rule inet fw4 input $NFT_HANDLE | ||
fi | ||
} | ||
|
||
load_options() { | ||
section=$1 | ||
|
||
# compatibility for old option name | ||
config_get_bool staging "$section" use_staging | ||
if [ -z "$staging" ]; then | ||
config_get_bool staging "$section" staging 0 | ||
fi | ||
export staging | ||
config_get calias "$section" calias | ||
export calias | ||
config_get dalias "$section" dalias | ||
export dalias | ||
config_get domains "$section" domains | ||
export domains | ||
export main_domain | ||
main_domain="$(first_arg $domains)" | ||
config_get keylength "$section" keylength ec-256 | ||
export keylength | ||
config_get dns "$section" dns | ||
export dns | ||
config_get acme_server "$section" acme_server | ||
export acme_server | ||
config_get days "$section" days | ||
export days | ||
config_get standalone "$section" standalone 0 | ||
export standalone | ||
config_get dns_wait "$section" dns_wait | ||
export dns_wait | ||
|
||
config_get webroot "$section" webroot | ||
export webroot | ||
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 $CHALLENGE_DIR." | ||
fi | ||
} | ||
|
||
first_arg() { | ||
echo "$1" | ||
} | ||
|
||
get_cert() { | ||
section=$1 | ||
|
||
config_get_bool enabled "$section" enabled 1 | ||
[ "$enabled" = 1 ] || return | ||
|
||
load_options "$section" | ||
if [ -z "$dns" ] && [ "$standalone" = 0 ]; then | ||
mkdir -p "$CHALLENGE_DIR" | ||
fi | ||
|
||
if [ "$standalone" = 1 ] && [ -z "$NFT_HANDLE" ]; then | ||
if ! NFT_HANDLE=$(nft -a -e insert rule inet fw4 input tcp dport 80 counter accept comment ACME | grep -o 'handle [0-9]\+'); then | ||
return 1 | ||
fi | ||
log debug "added nft rule: $NFT_HANDLE" | ||
fi | ||
|
||
load_credentials() { | ||
eval export "$1" | ||
} | ||
config_list_foreach "$section" credentials load_credentials | ||
|
||
"$HOOK" get | ||
} | ||
|
||
load_globals() { | ||
section=$1 | ||
|
||
config_get account_email "$section" account_email | ||
if [ -z "$account_email" ]; then | ||
log err "account_email option is required" | ||
exit 1 | ||
fi | ||
export account_email | ||
|
||
config_get state_dir "$section" state_dir | ||
if [ "$state_dir" ]; then | ||
log warn "Option \"state_dir\" is deprecated, please remove it. Certificates now exist in $CERT_DIR." | ||
mkdir -p "$state_dir" | ||
else | ||
state_dir=/etc/acme | ||
fi | ||
export state_dir | ||
|
||
config_get debug "$section" debug 0 | ||
export debug | ||
|
||
# only look for the first acme section | ||
return 1 | ||
} | ||
|
||
start_service() { | ||
mkdir -p $run_dir | ||
exec 200>$run_dir/lock | ||
if ! flock -n 200; then | ||
log err "Another ACME instance is already running." | ||
exit 1 | ||
fi | ||
|
||
trap cleanup EXIT | ||
|
||
config_load acme | ||
config_foreach load_globals acme | ||
|
||
config_foreach get_cert cert | ||
} | ||
|
||
service_triggers() { | ||
procd_add_config_trigger config.change acme \ | ||
/usr/bin/acme get | ||
/etc/init.d/acme start | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
#!/bin/sh | ||
|
||
grep -q '/usr/bin/acme' /etc/crontabs/root 2>/dev/null && exit 0 | ||
echo "0 0 * * * /usr/bin/acme get" >> /etc/crontabs/root | ||
grep -q '/etc/init.d/acme' /etc/crontabs/root 2>/dev/null && exit 0 | ||
echo "0 0 * * * /etc/init.d/acme start" >>/etc/crontabs/root |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
log() { | ||
prio="$1" | ||
shift | ||
if [ "$prio" != debug ] || [ "$debug" = 0 ]; then | ||
if [ "$prio" != debug ] || [ "$debug" = 1 ]; then | ||
logger -t "$LOG_TAG" -s -p "daemon.$prio" -- "$@" | ||
fi | ||
} |
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hgl PTAL
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this from building a firmware image?
If so, the build system seems to access
/etc/crontabs/root
and/usr/lib/acme/functions.sh
directly on the host environment?@tohojo Any idea how that could happen?
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hgl Yes
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not familiar with the image builder,
and it's unlikely this PR has caused the shown error, since how(multiple people reported the issue since this PR got merged)./etc/crontabs/root
is written was not changed, and/usr/lib/acme/functions.sh
was not deletedIt'd be helpful if someone could help answer the following questions:
These are my guesses on where the error stemmed from, but I'd be very surprised if the answer to all of them are yes.
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've met the same error, no change made on any files, just compile as usual, please have look, thanks
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@tohojo Do you think it has something to do with "start" being available?
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/openwrt/packages/blob/master/net/acme-common/Makefile#L42
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at some other postinst examples, they all seem to have checks like:
if [ -z "$${IPKG_INSTROOT}" ]; then
around all their logic. So yeah, looks like the script itself does need to deal with this.c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see, that means the answer to my three questions are yes. Will try to send the PR tomorrow. I guess that also means we can get rid of the uci-defaults.
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well, there are two ways to go about it:
Have the postinst script put the crontab entry into "$IPKG_INSTROOT/etc/crontabs/root" so it'll be shipped as part of the image
Have the postinst script bail out if $PKG_INSTROOT is set, and have the uci_defaults take care of setting the crontab entry on first boot
would probably require also creating the /etc/crontabs directory if it doesn't exist; but otherwise I don't really have any strong opinion on which method is better...
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hgl Have you been able to make any headway on this?
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Fail-Safe fix was merged into master, can you test if it’s addressed?
c6960a2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hgl Just re-built my image and it is back to working again. Many thanks!