From 1773ab7af2eaa0fd41036bc35c4a6071b82137da Mon Sep 17 00:00:00 2001 From: Hugo Sales Date: Wed, 24 Mar 2021 22:31:43 +0000 Subject: [PATCH] [DOCKER][MAIL] Update config and change the way mail docker handles it, so the edits aren't visible from the outside, polluting the git staging area --- bin/configure | 79 ++++++++----------- docker/bootstrap/bootstrap.sh | 2 +- docker/mail/Dockerfile | 54 ++----------- docker/mail/config/dovecot/dovecot.conf | 15 ++-- docker/mail/config/opendkim/TrustedHosts | 2 +- docker/mail/config/postfix/main.cf | 41 ++++++---- docker/mail/config/postfix/master.cf | 21 ++--- docker/mail/docker-compose.fragment.sh | 4 + docker/mail/entrypoint.sh | 51 ++++++++++++ docker/mail/etc/mail/postfix/aliases | 10 +++ .../mail/{rootfs => }/etc/service/dovecot/run | 0 .../{rootfs => }/etc/service/opendkim/run | 0 .../mail/{rootfs => }/etc/service/postfix/run | 0 .../mail/{rootfs => }/etc/service/rsyslog/run | 0 docker/mail/rootfs/usr/bin/start.sh | 21 ----- docker/mail/setup.sh | 48 ----------- docker/nginx/domain.sh | 2 +- 17 files changed, 149 insertions(+), 201 deletions(-) create mode 100755 docker/mail/entrypoint.sh create mode 100644 docker/mail/etc/mail/postfix/aliases rename docker/mail/{rootfs => }/etc/service/dovecot/run (100%) rename docker/mail/{rootfs => }/etc/service/opendkim/run (100%) rename docker/mail/{rootfs => }/etc/service/postfix/run (100%) rename docker/mail/{rootfs => }/etc/service/rsyslog/run (100%) delete mode 100644 docker/mail/rootfs/usr/bin/start.sh delete mode 100755 docker/mail/setup.sh diff --git a/bin/configure b/bin/configure index 0316f34b44..1a34a22e72 100755 --- a/bin/configure +++ b/bin/configure @@ -96,14 +96,15 @@ while true; do done if [ "${DBMS}" = 'postgres' ]; then DB_USER="postgres"; else DB_USER="social"; fi -while true; do - DB_USER=$(${WHIPTAIL} --title 'GNU social DB user' --clear --backtitle 'GNU social' \ - --inputbox "\nEnter a user name for social to connect to the database under" 0 0 "${DB_USER}" \ - 3>&1 1>&2 2>&3) - validate_exit $? - if [ -n "${DB_USER}" ]; then break; fi -done - +if echo "${DOCKER}" | grep -Fvq '"db"'; then + while true; do + DB_USER=$(${WHIPTAIL} --title 'GNU social DB user' --clear --backtitle 'GNU social' \ + --inputbox "\nEnter a user name for social to connect to the database under" 0 0 "${DB_USER}" \ + 3>&1 1>&2 2>&3) + validate_exit $? + if [ -n "${DB_USER}" ]; then break; fi + done +fi while true; do DB_PASSWORD=$(${WHIPTAIL} --title 'GNU social DB password' --clear --backtitle 'GNU social' \ --passwordbox "\nEnter a password for social to connect to the database with" 0 0 \ @@ -224,17 +225,25 @@ validate_exit $? # ------------ Mail server -------------- -if echo "${DOCKER}" | grep -Fq '"mail"'; then +MAILER_DSN='sendmail://localhost' +if echo "${DOCKER}" | grep -Fvq '"mail"'; then while true; do MAILER_DSN=$(${WHIPTAIL} --title 'GNU social mail server DSN' --clear --backtitle 'GNU social' \ - --inputbox "\nEnter a DSN/URL social will use to connect to the mail server" 0 0 'sendmail://localhost' \ + --inputbox "\nEnter a DSN/URL social will use to connect to the mail server" 0 0 "${MAILER_DSN}" \ 3>&1 1>&2 2>&3) validate_exit $? if [ -n "${MAILER_DSN}" ]; then break; fi done + while true; do + MAIL_DOMAIN=$(${WHIPTAIL} --title 'GNU social mail server domain' --clear --backtitle 'GNU social' \ + --inputbox "\nEnter the domain social will use to serve mail" 0 0 "${DOMAIN_ROOT}" \ + 3>&1 1>&2 2>&3) + validate_exit $? + if [ -n "${MAIL_DOMAIN}" ]; then break; fi + done fi -if echo "${DOCKER}" | grep -Fvq '"mail"'; then +if echo "${DOCKER}" | grep -Fq '"mail"'; then while true; do MAIL_DOMAIN_ROOT=$(${WHIPTAIL} --title 'GNU social mail server domain' --clear --backtitle 'GNU social' \ --inputbox "\nEnter the root domain social will use to serve mail" 0 0 "${DOMAIN_ROOT}" \ @@ -256,7 +265,7 @@ if echo "${DOCKER}" | grep -Fvq '"mail"'; then while true; do MAIL_SENDER_USER=$(${WHIPTAIL} --title 'GNU social mail sender user' --clear --backtitle 'GNU social' \ - --inputbox "\nEnter the user emails should be sent from" 0 0 \ + --inputbox "\nEnter the user emails should be sent from (email without @domain)" 0 0 \ 3>&1 1>&2 2>&3) validate_exit $? if [ -n "${MAIL_SENDER_USER}" ]; then break; fi @@ -264,7 +273,7 @@ if echo "${DOCKER}" | grep -Fvq '"mail"'; then while true; do MAIL_SENDER_NAME=$(${WHIPTAIL} --title 'GNU social mail sender name' --clear --backtitle 'GNU social' \ - --inputbox "\nEnter the name emails should be sent from (name without @domain)" 0 0 \ + --inputbox "\nEnter the name emails should be sent from" 0 0 "${NODE_NAME}" \ 3>&1 1>&2 2>&3) validate_exit $? if [ -n "${MAIL_SENDER_NAME}" ]; then break; fi @@ -331,7 +340,7 @@ SOCIAL_DB=${DB_NAME} SOCIAL_USER=${DB_USER} SOCIAL_PASSWORD=${DB_PASSWORD} SOCIAL_DOMAIN=${DOMAIN} -SOCIAL_SITENAME=${SITENAME} +SOCIAL_NODE_NAME=${NODE_NAME} SOCIAL_ADMIN_EMAIL=${EMAIL} SOCIAL_SITE_PROFILE=${PROFILE} MAILER_DSN=${MAILER_DSN} @@ -347,40 +356,18 @@ EOF # --------------- Write mail configuration, and setup ---------------------- mkdir -p "${INSTALL_DIR}/docker/mail" -cat > "${INSTALL_DIR}/docker/mail/mail.env" < "${INSTALL_DIR}/docker/mail/config/domains" -echo "${MAIL_USER} ${MAIL_USER}" > "${INSTALL_DIR}/docker/mail/config/aliases" -echo "${MAIL_USER} ${MAIL_DOMAIN}/${MAIL_USER}/" > "${INSTALL_DIR}/docker/mail/config/mailboxes" -echo "${MAIL_USER}:${HASHED_PASSWORD}" > "${INSTALL_DIR}/docker/mail/config/passwd" +cat > "${INSTALL_DIR}/docker/mail/mail.env" < /etc/mail/domains +if ! grep -Fq 'root:' /etc/mail/aliases; then echo "root: ${MAIL_USER}" >> /etc/mail/aliases; fi +echo "${MAIL_USER} ${MAIL_DOMAIN}/${MAIL_USER}/" > /etc/mail/mailboxes +echo "${MAIL_USER}:${HASHED_PASSWORD}" > /etc/mail/passwd + +# Run opendkim +if [ ! -e "/var/opendkim/keys/default.private" ] +then + opendkim-genkey -d "${MAIL_DOMAIN}" -D "/var/opendkim/keys/" +fi + +newaliases +postmap /etc/mail/aliases /etc/mail/domains /etc/mail/mailboxes /etc/mail/passwd +postfix reload +dovecot + +# # Run services +# s6-svscan /etc/service diff --git a/docker/mail/etc/mail/postfix/aliases b/docker/mail/etc/mail/postfix/aliases new file mode 100644 index 0000000000..7b1630e29d --- /dev/null +++ b/docker/mail/etc/mail/postfix/aliases @@ -0,0 +1,10 @@ +mailer-daemon: postmaster +postmaster: root +nobody: root +hostmaster: root +usenet: root +news: root +webmaster: root +www: root +ftp: root +abuse: root diff --git a/docker/mail/rootfs/etc/service/dovecot/run b/docker/mail/etc/service/dovecot/run similarity index 100% rename from docker/mail/rootfs/etc/service/dovecot/run rename to docker/mail/etc/service/dovecot/run diff --git a/docker/mail/rootfs/etc/service/opendkim/run b/docker/mail/etc/service/opendkim/run similarity index 100% rename from docker/mail/rootfs/etc/service/opendkim/run rename to docker/mail/etc/service/opendkim/run diff --git a/docker/mail/rootfs/etc/service/postfix/run b/docker/mail/etc/service/postfix/run similarity index 100% rename from docker/mail/rootfs/etc/service/postfix/run rename to docker/mail/etc/service/postfix/run diff --git a/docker/mail/rootfs/etc/service/rsyslog/run b/docker/mail/etc/service/rsyslog/run similarity index 100% rename from docker/mail/rootfs/etc/service/rsyslog/run rename to docker/mail/etc/service/rsyslog/run diff --git a/docker/mail/rootfs/usr/bin/start.sh b/docker/mail/rootfs/usr/bin/start.sh deleted file mode 100644 index 0ca9e6e0b2..0000000000 --- a/docker/mail/rootfs/usr/bin/start.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# Run openssl -if [ ! -e "${SSL_CERT}" ] -then - mkdir -p "$(dirname ${SSL_CERT})" "$(dirname $SSL_KEY)" - openssl req -x509 -nodes -newkey rsa:2018 -days 365 -keyout "${SSL_CERT}" -out "${SSL_KEY}" -fi - -# Run opendkim -if [ ! -e "/var/opendkim/keys/default.private" ] -then - opendkim-genkey -d "${DOMAINNAME}" -D "/var/opendkim/keys/" -fi - -postmap /etc/mail/aliases /etc/mail/domains /etc/mail/mailboxes /etc/mail/passwd -postfix reload -dovecot reload - -# Run services -s6-svscan /etc/service diff --git a/docker/mail/setup.sh b/docker/mail/setup.sh deleted file mode 100755 index f9b0773a6b..0000000000 --- a/docker/mail/setup.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh - -ROOT="$(git rev-parse --show-toplevel)" -. $ROOT/docker/mail/mail.env - -cd "${0%/*}" - -if [ -z "${MAIL_SUBDOMAIN}" ] -then - domain="${MAIL_DOMAIN_ROOT}" -else - domain="${MAIL_SUBDOMAIN}.${MAIL_DOMAIN_ROOT}" -fi - -PASSHASH="{SHA512-CRYPT}$(mkpasswd -m sha-512 -R 5000 ${MAIL_PASSWORD})" - -cat > mail.env < config/domains -echo "${USER} ${USER}" > config/aliases -echo "${USER} ${DOMAINNAME}/${MAIL_USER}/" > config/mailboxes -echo "${USER}:${PASSHASH}" > config/passwd diff --git a/docker/nginx/domain.sh b/docker/nginx/domain.sh index 5af504258e..1fa3475085 100755 --- a/docker/nginx/domain.sh +++ b/docker/nginx/domain.sh @@ -2,5 +2,5 @@ # Can't do sed inplace, because the file would be busy cat /var/nginx/social.conf | \ - sed -r "s/%hostname%/${DOMAIN}/g;" > \ + sed -r "s/%hostname%/${WEB_DOMAIN}/g;" > \ /etc/nginx/conf.d/social.conf