mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
c314c9c471
* chore: Remove requirement for `postfix-accounts.cf` This is an old requirement from when the change detector service was first introduced. It's no longer relevant. * chore: Do not needlessly create `postfix-aliases.cf` The config was created regardless to workaround early change detection support. No longer necessary to require the file to exist. * chore: Drop guards requiring `/tmp/docker-mailserver` to exist Legacy guards when this was the only location change detection location supported. There does not appear to be any need for changing into this directory at the start of `check-for-changes.sh` as we use absolute filepaths (originally monitored files were checked with relative paths to this config dir). * chore: Revise inline docs * chore: Add change detection monitoring for extra configs These are also handled at run-time in the current change detection support, so it makes sense to allows these config updates to also trigger change events.
78 lines
2.4 KiB
Bash
78 lines
2.4 KiB
Bash
#! /bin/bash
|
|
|
|
# This helper supports the changedetector service. Used by:
|
|
# - check-for-changes.sh
|
|
# - test/test_helper/common.bash:wait_for_changes_to_be_detected_in_container()
|
|
# - test/test_helper.bats
|
|
# - start-mailserver.sh --> setup-stack.sh:_setup (to initialize the CHKSUM_FILE state)
|
|
|
|
# Global checksum file used to track when monitored files have changed in content:
|
|
# shellcheck disable=SC2034
|
|
CHKSUM_FILE=/tmp/docker-mailserver-config-chksum
|
|
|
|
# Once container startup scripts complete, take a snapshot of
|
|
# the config state via storing a list of files content hashes.
|
|
function _prepare_for_change_detection
|
|
{
|
|
_log 'debug' 'Setting up configuration checksum file'
|
|
|
|
_log 'trace' "Creating '${CHKSUM_FILE}'"
|
|
_monitored_files_checksums >"${CHKSUM_FILE}"
|
|
}
|
|
|
|
# Returns a list of changed files, each line is a value pair of:
|
|
# <SHA-512 content hash> <changed file path>
|
|
function _monitored_files_checksums
|
|
{
|
|
# If a wildcard path pattern (or an empty ENV) would yield an invalid path
|
|
# or no results, `shopt -s nullglob` prevents it from being added.
|
|
shopt -s nullglob
|
|
declare -a STAGING_FILES CHANGED_FILES
|
|
|
|
# Supported user provided configs:
|
|
local DMS_DIR=/tmp/docker-mailserver
|
|
if [[ -d ${DMS_DIR} ]]
|
|
then
|
|
STAGING_FILES+=(
|
|
"${DMS_DIR}/postfix-accounts.cf"
|
|
"${DMS_DIR}/postfix-virtual.cf"
|
|
"${DMS_DIR}/postfix-regexp.cf"
|
|
"${DMS_DIR}/postfix-aliases.cf"
|
|
"${DMS_DIR}/postfix-relaymap.cf"
|
|
"${DMS_DIR}/postfix-sasl-password.cf"
|
|
"${DMS_DIR}/dovecot-quotas.cf"
|
|
"${DMS_DIR}/dovecot-masters.cf"
|
|
)
|
|
fi
|
|
|
|
# SSL certs:
|
|
if [[ ${SSL_TYPE:-} == 'manual' ]]
|
|
then
|
|
# When using "manual" as the SSL type,
|
|
# the following variables may contain the certificate files
|
|
STAGING_FILES+=(
|
|
"${SSL_CERT_PATH:-}"
|
|
"${SSL_KEY_PATH:-}"
|
|
"${SSL_ALT_CERT_PATH:-}"
|
|
"${SSL_ALT_KEY_PATH:-}"
|
|
)
|
|
elif [[ ${SSL_TYPE:-} == 'letsencrypt' ]]
|
|
then
|
|
# React to any cert changes within the following LetsEncrypt locations:
|
|
STAGING_FILES+=(
|
|
/etc/letsencrypt/acme.json
|
|
/etc/letsencrypt/live/"${SSL_DOMAIN}"/*.pem
|
|
/etc/letsencrypt/live/"${HOSTNAME}"/*.pem
|
|
/etc/letsencrypt/live/"${DOMAINNAME}"/*.pem
|
|
)
|
|
fi
|
|
|
|
# If the file actually exists, add to CHANGED_FILES
|
|
# and generate a content hash entry:
|
|
for FILE in "${STAGING_FILES[@]}"
|
|
do
|
|
[[ -f "${FILE}" ]] && CHANGED_FILES+=("${FILE}")
|
|
done
|
|
sha512sum -- "${CHANGED_FILES[@]}"
|
|
}
|