mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2025-07-15 03:44:56 +02:00
Update check (#1951)
* mail binary * initial work * make env vars available * typo * some fixes * make script ugly, to satisfy linter.. * mailserver.env updated * Version to welcome message added * remove VERSION file references * VERSION --> DMS_VERSION * fetch remote version * variable usage * Quoting added * edge test & docu * dash removed * subject changed * re-add VERSION * VERSION added * new file: VERSION * rewrite * unnecessary additions from fail2ban PR removed * UPDATE_CHECK_INTERVAL added * syntax check & _log function * comment added * final commit
This commit is contained in:
parent
225e21edb7
commit
bab0277723
9 changed files with 109 additions and 15 deletions
|
@ -33,6 +33,7 @@ VARS[ENABLE_QUOTAS]="${ENABLE_QUOTAS:=1}"
|
|||
VARS[ENABLE_SASLAUTHD]="${ENABLE_SASLAUTHD:=0}"
|
||||
VARS[ENABLE_SPAMASSASSIN]="${ENABLE_SPAMASSASSIN:=0}"
|
||||
VARS[ENABLE_SRS]="${ENABLE_SRS:=0}"
|
||||
VARS[ENABLE_UPDATE_CHECK]="${ENABLE_UPDATE_CHECK:=1}"
|
||||
VARS[FAIL2BAN_BLOCKTYPE]="${FAIL2BAN_BLOCKTYPE:=drop}"
|
||||
VARS[FETCHMAIL_POLL]="${FETCHMAIL_POLL:=300}"
|
||||
VARS[FETCHMAIL_PARALLEL]="${FETCHMAIL_PARALLEL:=0}"
|
||||
|
@ -64,6 +65,7 @@ VARS[SRS_SENDER_CLASSES]="${SRS_SENDER_CLASSES:=envelope_sender}"
|
|||
VARS[SSL_TYPE]="${SSL_TYPE:=}"
|
||||
VARS[SUPERVISOR_LOGLEVEL]="${SUPERVISOR_LOGLEVEL:=warn}"
|
||||
VARS[TLS_LEVEL]="${TLS_LEVEL:=modern}"
|
||||
VARS[UPDATE_CHECK_INTERVAL]="${UPDATE_CHECK_INTERVAL:=1d}"
|
||||
VARS[VIRUSMAILS_DELETE_DELAY]="${VIRUSMAILS_DELETE_DELAY:=7}"
|
||||
|
||||
export HOSTNAME DOMAINNAME CHKSUM_FILE
|
||||
|
@ -168,6 +170,7 @@ function register_functions
|
|||
_register_start_daemon '_start_daemons_rsyslog'
|
||||
|
||||
[[ ${SMTP_ONLY} -ne 1 ]] && _register_start_daemon '_start_daemons_dovecot'
|
||||
[[ ${ENABLE_UPDATE_CHECK} -eq 1 ]] && _register_start_daemon '_start_daemons_update_check'
|
||||
|
||||
# needs to be started before SASLauthd
|
||||
_register_start_daemon '_start_daemons_opendkim'
|
||||
|
@ -249,16 +252,13 @@ function _defunc
|
|||
# shellcheck source=./startup/daemons-stack.sh
|
||||
. /usr/local/bin/daemons-stack.sh
|
||||
|
||||
# source DMS_VERSION variable
|
||||
. /root/.bashrc
|
||||
|
||||
# ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
|
||||
# ? << Sourcing all stacks
|
||||
# ––
|
||||
# ? >> Executing all stacks
|
||||
# ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
|
||||
|
||||
_notify 'tasklog' "Welcome to docker-mailserver ${DMS_VERSION}"
|
||||
_notify 'tasklog' "Welcome to docker-mailserver $(</VERSION)"
|
||||
_notify 'inf' 'ENVIRONMENT'
|
||||
[[ ${DMS_DEBUG} -eq 1 ]] && printenv
|
||||
|
||||
|
|
|
@ -152,3 +152,9 @@ function _start_changedetector
|
|||
_notify 'task' 'Starting changedetector'
|
||||
supervisorctl start changedetector
|
||||
}
|
||||
|
||||
function _start_daemons_update_check
|
||||
{
|
||||
_notify 'task' 'Starting update-check'
|
||||
supervisorctl start update-check
|
||||
}
|
||||
|
|
60
target/scripts/update-check.sh
Executable file
60
target/scripts/update-check.sh
Executable file
|
@ -0,0 +1,60 @@
|
|||
#! /bin/bash
|
||||
|
||||
VERSION=$(</VERSION)
|
||||
VERSION_URL="https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/VERSION"
|
||||
CHANGELOG="https://github.com/docker-mailserver/docker-mailserver/blob/master/CHANGELOG.md"
|
||||
|
||||
function _log
|
||||
{
|
||||
DATE=$(date '+%F %T')
|
||||
echo "${DATE} ${1}"
|
||||
}
|
||||
|
||||
# check for correct syntax
|
||||
# number + suffix. suffix must be 's' for seconds, 'm' for minutes, 'h' for hours or 'd' for days.
|
||||
if [[ ! ${UPDATE_CHECK_INTERVAL} =~ ^[0-9]+[smhd]{1}$ ]]
|
||||
then
|
||||
_log "Error: Invalid UPDATE_CHECK_INTERVAL value: ${UPDATE_CHECK_INTERVAL}"
|
||||
_log "Info: Fallback to daily update checks"
|
||||
UPDATE_CHECK_INTERVAL="1d"
|
||||
fi
|
||||
|
||||
while true
|
||||
do
|
||||
# get remote version information
|
||||
LATEST=$(curl -Lsf "${VERSION_URL}")
|
||||
|
||||
# did we get a valid response?
|
||||
if [[ ${LATEST} =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
|
||||
then
|
||||
_log "Info: Remote version information fetched"
|
||||
|
||||
# compare versions
|
||||
if dpkg --compare-versions "${VERSION}" lt "${LATEST}"
|
||||
then
|
||||
# send mail notification to postmaster
|
||||
read -r -d '' MAIL << EOM
|
||||
Hello ${POSTMASTER_ADDRESS}!
|
||||
|
||||
There is a docker-mailserver update available on your host: $(hostname -f)
|
||||
|
||||
Current version: ${VERSION}
|
||||
Latest version: ${LATEST}
|
||||
|
||||
Changelog: ${CHANGELOG}
|
||||
EOM
|
||||
echo "${MAIL}" | mail -s "Mailserver update available! [ ${VERSION} --> ${LATEST} ]" "${POSTMASTER_ADDRESS}" && \
|
||||
|
||||
_log "Info: Update available [ ${VERSION} --> ${LATEST} ]" && \
|
||||
|
||||
# only notify once
|
||||
exit 0
|
||||
else
|
||||
_log "Info: No update available"
|
||||
fi
|
||||
else
|
||||
_log "Error: Update check failed."
|
||||
fi
|
||||
# check again in one day
|
||||
sleep "${UPDATE_CHECK_INTERVAL}"
|
||||
done
|
Loading…
Add table
Add a link
Reference in a new issue