diff --git a/Dockerfile b/Dockerfile index f13df638..089c3a11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -117,8 +117,7 @@ RUN sed -i -r "/^#?compress/c\compress\ncopytruncate" /etc/logrotate.conf && \ sed -i -r 's|/var/log/mail|/var/log/mail/mail|g' /etc/logrotate.d/rsyslog # Get LetsEncrypt signed certificate -RUN curl -s https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /etc/ssl/certs/lets-encrypt-x1-cross-signed.pem && \ - curl -s https://letsencrypt.org/certs/lets-encrypt-x2-cross-signed.pem > /etc/ssl/certs/lets-encrypt-x2-cross-signed.pem +RUN curl -s https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > /etc/ssl/certs/lets-encrypt-x3-cross-signed.pem COPY ./target/bin /usr/local/bin # Start-mailserver script diff --git a/target/start-mailserver.sh b/target/start-mailserver.sh index 03d82c53..778e4a4a 100644 --- a/target/start-mailserver.sh +++ b/target/start-mailserver.sh @@ -98,7 +98,8 @@ function register_functions() { ################### >> daemon funcs - _register_start_daemon "_start_daemons_sys" + _register_start_daemon "_start_daemons_cron" + _register_start_daemon "_start_daemons_rsyslog" if [ "$ENABLE_ELK_FORWARDER" = 1 ]; then _register_start_daemon "_start_daemons_filebeat" @@ -203,44 +204,71 @@ function notify () { notification_type=$1 notification_msg=$2 + notification_format=$3 msg="" case "${notification_type}" in - 'inf') - if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then - msg="${c_green} * ${c_reset}${notification_msg}" - fi - ;; - 'err') - msg="${c_red} * ${c_reset}${notification_msg}" - ;; - 'warn') - msg="${c_brown} * Warning => ${notification_msg}" - ;; - 'task') - if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then - msg="${notification_msg}" - fi - ;; 'taskgrp') msg="${c_bold}${notification_msg}${c_reset}" ;; + 'task') + if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then + msg=" ${notification_msg}${c_reset}" + fi + ;; + 'inf') + if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then + msg="${c_green} * ${notification_msg}${c_reset}" + fi + ;; + 'started') + msg="${c_green} ${notification_msg}${c_reset}" + ;; + 'warn') + msg="${c_brown} * ${notification_msg}${c_reset}" + ;; + 'err') + msg="${c_red} * ${notification_msg}${c_reset}" + ;; 'fatal') - msg="${c_red}Error: ${notification_msg}${c_red}" + msg="${c_red}Error: ${notification_msg}${c_reset}" ;; *) msg="" ;; esac - [[ ! -z "${msg}" ]] && echo -e "${msg}" + case "${notification_format}" in + 'n') + options="-ne" + ;; + *) + options="-e" + ;; + esac + + [[ ! -z "${msg}" ]] && echo $options "${msg}" } function defunc() { - notify 'fatal' "Please fix the failures. Exiting..." + notify 'fatal' "Please fix your configuration. Exiting..." exit 1 } +function display_startup_daemon() { + $1 &>/dev/null + res=$? + if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then + if [ $res = 0 ]; then + notify 'started' " [ OK ]" + else + echo "false" + notify 'err' " [ FAILED ]" + fi + fi + return $res +} + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! CARE --> DON'T CHANGE, except you know exactly what you are doing # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -299,7 +327,7 @@ function _setup_default_vars() { for var in ${!DEFAULT_VARS[@]}; do echo "export $var=${DEFAULT_VARS[$var]}" >> /root/.bashrc - # [ $? != 0 ] && notify 'err' "Unable to set $var=${DEFAULT_VARS[$var]}" && return 1 + [ $? != 0 ] && notify 'err' "Unable to set $var=${DEFAULT_VARS[$var]}" && return 1 notify 'inf' "Set $var=${DEFAULT_VARS[$var]}" done } @@ -758,7 +786,7 @@ function fix() { notify 'taskgrg' "Post-configuration checks..." for _func in "${FUNCS_FIX[@]}";do $_func - # [ $? != 0 ] && defunc + [ $? != 0 ] && defunc done } @@ -830,57 +858,58 @@ function start_daemons() { done } -function _start_daemons_sys() { - notify 'task' 'Starting Cron' - cron +function _start_daemons_cron() { + notify 'task' 'Starting cron' 'n' + display_startup_daemon "cron" +} - notify 'task' 'Starting rsyslog' - /etc/init.d/rsyslog start +function _start_daemons_rsyslog() { + notify 'task' 'Starting rsyslog' 'n' + display_startup_daemon "/etc/init.d/rsyslog start" } function _start_daemons_saslauthd() { - notify "task" "Starting saslauthd" - /etc/init.d/saslauthd start + notify 'task' 'Starting saslauthd' 'n' + display_startup_daemon "/etc/init.d/saslauthd start" } function _start_daemons_fail2ban() { - notify 'task' 'Starting fail2ban' + notify 'task' 'Starting fail2ban' 'n' touch /var/log/auth.log # Delete fail2ban.sock that probably was left here after container restart if [ -e /var/run/fail2ban/fail2ban.sock ]; then rm /var/run/fail2ban/fail2ban.sock fi - /etc/init.d/fail2ban start + display_startup_daemon "/etc/init.d/fail2ban start" } function _start_daemons_opendkim() { - notify 'task' 'Starting opendkim' - /etc/init.d/opendkim start + notify 'task' 'Starting opendkim' 'n' + display_startup_daemon "/etc/init.d/opendkim start" } function _start_daemons_opendmarc() { - notify 'task' 'Starting opendmarc' - /etc/init.d/opendmarc start + notify 'task' 'Starting opendmarc' 'n' + display_startup_daemon "/etc/init.d/opendmarc start" } function _start_daemons_postfix() { - notify 'task' 'Starting postfix' - /etc/init.d/postfix start + notify 'task' 'Starting postfix' 'n' + display_startup_daemon "/etc/init.d/postfix start" } function _start_daemons_dovecot() { # Here we are starting sasl and imap, not pop3 because it's disabled by default - notify 'task' "Starting dovecot services" - /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf + notify 'task' 'Starting dovecot services' 'n' + display_startup_daemon "/usr/sbin/dovecot -c /etc/dovecot/dovecot.conf" if [ "$ENABLE_POP3" = 1 ]; then - notify 'inf' "Starting POP3 services" + notify 'task' 'Starting pop3 services' 'n' mv /etc/dovecot/protocols.d/pop3d.protocol.disab /etc/dovecot/protocols.d/pop3d.protocol - /usr/sbin/dovecot reload + display_startup_daemon "/usr/sbin/dovecot reload" fi if [ -f /tmp/docker-mailserver/dovecot.cf ]; then - notify 'inf' "Adding file 'dovecot.cf' to the Dovecot configuration" cp /tmp/docker-mailserver/dovecot.cf /etc/dovecot/local.conf /usr/sbin/dovecot reload fi @@ -896,25 +925,24 @@ function _start_daemons_dovecot() { } function _start_daemons_filebeat() { - notify 'task' 'Starting FileBeat' - /etc/init.d/filebeat start + notify 'task' 'Starting filebeat' 'n' + display_startup_daemon "/etc/init.d/filebeat start" } function _start_daemons_fetchmail() { - notify 'task' 'Starting fetchmail' + notify 'task' 'Starting fetchmail' 'n' /usr/local/bin/setup-fetchmail - echo "Fetchmail enabled" - /etc/init.d/fetchmail start + display_startup_daemon "/etc/init.d/fetchmail start" } function _start_daemons_clamav() { - notify 'task' "Starting clamav" - /etc/init.d/clamav-daemon start + notify 'task' 'Starting clamav' 'n' + display_startup_daemon "/etc/init.d/clamav-daemon start" } function _start_daemons_amavis() { - notify 'task' 'Starting Daemon Amavis' - /etc/init.d/amavis start + notify 'task' 'Starting amavis' 'n' + display_startup_daemon "/etc/init.d/amavis start" # @TODO fix: on integration test of mail_with_ldap amavis fails because of: # Starting amavisd: The value of variable $myhostname is "ldap", but should have been @@ -923,7 +951,7 @@ function _start_daemons_amavis() { # in /etc/amavis/conf.d/05-node_id, or fix what uname(3) provides as a host's # network name! - # > temporary workaround to passe integration test + # > temporary workaround to pass integration test return 0 } ########################################################################## @@ -939,6 +967,17 @@ function _start_daemons_amavis() { # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # >> +if [[ ${DEFAULT_VARS["DMS_DEBUG"]} == 1 ]]; then +notify 'taskgrp' "" +notify 'taskgrp' "#" +notify 'taskgrp' "#" +notify 'taskgrp' "# ENV" +notify 'taskgrp' "#" +notify 'taskgrp' "#" +notify 'taskgrp' "" +printenv +fi + notify 'taskgrp' "" notify 'taskgrp' "#" notify 'taskgrp' "#" diff --git a/test/tests.bats b/test/tests.bats index e97ad579..a0811ee1 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -402,13 +402,8 @@ [ "$status" -eq 0 ] } -@test "checking ssl: lets-encrypt-x1-cross-signed.pem is installed" { - run docker exec mail grep 'BEGIN CERTIFICATE' /etc/ssl/certs/lets-encrypt-x1-cross-signed.pem - [ "$status" -eq 0 ] -} - -@test "checking ssl: lets-encrypt-x2-cross-signed.pem is installed" { - run docker exec mail grep 'BEGIN CERTIFICATE' /etc/ssl/certs/lets-encrypt-x2-cross-signed.pem +@test "checking ssl: lets-encrypt-x3-cross-signed.pem is installed" { + run docker exec mail grep 'BEGIN CERTIFICATE' /etc/ssl/certs/lets-encrypt-x3-cross-signed.pem [ "$status" -eq 0 ] }