prosody-docker/entrypoint.sh

22 lines
542 B
Bash
Raw Normal View History

2021-01-16 15:33:16 +00:00
#!/bin/bash -e
set -e
data_dir_owner="$(stat -c %u "/var/lib/prosody/")"
if [[ "$(id -u prosody)" != "$data_dir_owner" ]]; then
usermod -u "$data_dir_owner" prosody
fi
if [[ "$(stat -c %u /var/run/prosody/)" != "$data_dir_owner" ]]; then
chown "$data_dir_owner" /var/run/prosody/
fi
if [[ "$1" != "prosody" ]]; then
exec prosodyctl "$@"
exit 0;
fi
2021-01-16 15:33:16 +00:00
if [[ "$LOCAL" && "$PASSWORD" && "$DOMAIN" ]]; then
prosodyctl register "$LOCAL" "$DOMAIN" "$PASSWORD"
fi
Fix signal handling and allow graceful shutdown Although cc88073a798d ("Fix signal handling") fixed the signal handling and signals don't end up in `entrypoint.sh` anymore, there's still no clean graceful shutdown. The reason is runuser. It runs as PID 1 and prosody only runs as child process. A SIGTERM sent to runuser lets runuser forward SIGTERM to the child process. However it does not wait, but send SIGKILL right after it. (Confirmed by looking at runuser source code in util-linux.) The output on `docker stop [prosodycontainer]` is therefore: Session terminated, killing shell...mod_posix warn Received SIGTERM portmanager info Deactivated service 'c2s' ...killed. The additional messages in between prosody log output come from runuser. This is obviously no graceful shutdown. Because prosody fordibs running as uid 0 (root) we have to run it as unpriviledged user. The docker best practices recommend to use *gosu* and gosu lists some alternatives. Instead of installing gosu to the image, we use *setpriv* from the already installed util-linux now. The version in Debian buster, on which the prosody image is based currently, is recent enough to already contain setpriv. After that, prosody itself runs with PID 1, but as unpriviledged user now, and the output of `docker stop` looks like this: mod_posix warn Received SIGTERM portmanager info Deactivated service 'c2s' general info Shutting down... general info Shutdown status: Cleaning up general info Shutdown complete Link: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint Signed-off-by: Alexander Dahl <post@lespocky.de>
2021-03-21 19:57:07 +00:00
exec setpriv --reuid=prosody --regid=prosody --init-groups "$@"