vmail-stack/install-mm3.sh
2024-12-30 09:27:37 -08:00

108 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
if [ "${EUID}" -ne 0 ]; then
echo "You must be root to run this installer."
exit
fi
# check Debian 12 (bookworm)
os_codename=`lsb_release -cs`
if [[ $os_codename != bookworm ]]; then
echo "This installer only runs on Debian 12 (Bookworm), bailing out."
exit 1
fi
# Check for vmail-stack & vhost-stack installs
if [ ! -f "/usr/local/bin/vhost.sh" ] || [ ! -f "/usr/local/bin/vmail.sh" ]; then
echo "You must install vhost-stack & vmail-stack first."
exit 1
fi
FQDN=`hostname -f`
# install mailman3-full
apt -y install python3-pymysql python3-mysqldb
echo "mailman3 mailman3/database-type select mysql" | debconf-set-selections
echo "mailman3-web mailman3-web/database-type select mysql" | debconf-set-selections
echo "mailman3-web mailman3-web/superuser-mail string webmaster@$FQDN" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get -y install mailman3-full
systemctl stop mailman3.service
systemctl stop mailman3-web.service
# enable apache proxy_uwsgi_module for mailman3
a2enmod proxy_uwsgi
# Enable Mailman3 admin on default server hostname
sed -i "s|#Include /etc/mailman3/apache.conf|Include /etc/mailman3/apache.conf|g" /etc/apache2/sites-available/001-default-ssl.conf
# configure mailman-hyperkitty.cfg
sed -i "s|base_url: http://localhost/mailman3/hyperkitty/|base_url: https://$FQDN/mailman3/hyperkitty/|g" /etc/mailman3/mailman-hyperkitty.cfg
MAILMAN_ARCHIVER_KEY=`grep MAILMAN_ARCHIVER_KEY /etc/mailman3/mailman-web.py | cut -d ' ' -f 3 | xargs`
sed -i "s|SecretArchiverAPIKey|$MAILMAN_ARCHIVER_KEY|g" /etc/mailman3/mailman-hyperkitty.cfg
# configure mailman-web.py
TIMEZONE=`cat /etc/timezone`
IP=`ip route get 1.1.1.1| head -n 1 | cut -d ' ' -f 7`
sed -i "s|root@localhost|webmaster@$FQDN|g" /etc/mailman3/mailman-web.py
sed -i "s|MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')|MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '$IP')|g" /etc/mailman3/mailman-web.py
sed -i "s|'django_mailman3.lib.auth.fedora',|#'django_mailman3.lib.auth.fedora',|g" /etc/mailman3/mailman-web.py
# the multiple slashes in the append are for adding spaces
sed -i "/'OPTIONS': {/a \ \ \ \ \ \ \ \ \ \ \ \ 'charset': 'utf8mb4'," /etc/mailman3/mailman-web.py
sed -i "/'OPTIONS': {/a \ \ \ \ \ \ \ \ \ \ \ \ # use utf8mb4, which is what the tables should already be set to" /etc/mailman3/mailman-web.py
sed -i 's|# SECURE_PROXY_SSL_HEADER =|SECURE_PROXY_SSL_HEADER =|g' /etc/mailman3/mailman-web.py
sed -i "s|TIME_ZONE =.*|TIME_ZONE = '$TIMEZONE'|g" /etc/mailman3/mailman-web.py
sed -i "s|localhost.local|$FQDN|g" /etc/mailman3/mailman-web.py
sed -i 's|postorius@{}|webmaster@{}|g' /etc/mailman3/mailman-web.py
sed -i 's|root@{}|webmaster@{}|g' /etc/mailman3/mailman-web.py
sed -i "s|^POSTORIUS_TEMPLATE_BASE_URL.*|POSTORIUS_TEMPLATE_BASE_URL = 'https://$FQDN/mailman3/'|g" /etc/mailman3/mailman-web.py
echo "" >> /etc/mailman3/mailman-web.py
echo "# fix retry must be larger than timeout error" >> /etc/mailman3/mailman-web.py
echo "Q_CLUSTER = {" >> /etc/mailman3/mailman-web.py
echo " 'timeout': 300," >> /etc/mailman3/mailman-web.py
echo " 'retry': 360," >> /etc/mailman3/mailman-web.py
echo " 'save_limit': 100," >> /etc/mailman3/mailman-web.py
echo " 'orm': 'default'," >> /etc/mailman3/mailman-web.py
echo " 'poll': 5," >> /etc/mailman3/mailman-web.py
echo "}" >> /etc/mailman3/mailman-web.py
echo "" >> /etc/mailman3/mailman-web.py
echo "# Default primary key field type to use, required to avoid mysql errors."
echo "DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'" >> /etc/mailman3/mailman-web.py
echo "" >> /etc/mailman3/mailman-web.py
echo "# Make DISPLAY NAME header based on virtualhost" >> /etc/mailman3/mailman-web.py
echo "SITE_ID = 0" >> /etc/mailman3/mailman-web.py
echo "" >> /etc/mailman3/mailman-web.py
echo "# Only show lists that match domain. Currently seems to only work for HyperKitty (archives)" >> /etc/mailman3/mailman-web.py
echo "FILTER_VHOST = True" >> /etc/mailman3/mailman-web.py
# configure mailman.cfg
sed -i "s|changeme@example.com|webmaster@$FQDN|g" /etc/mailman3/mailman.cfg
sed -i 's|noreply_address: noreply|noreply_address: webmaster|g' /etc/mailman3/mailman.cfg
sed -i 's|#incoming: mailman.mta.exim4.LMTP|incoming: mailman.mta.exim4.LMTP|g' /etc/mailman3/mailman.cfg
sed -i 's|incoming: mailman.mta.postfix.LMTP|#incoming: mailman.mta.postfix.LMTP|g' /etc/mailman3/mailman.cfg
sed -i 's|#configuration: python:mailman.config.exim4|configuration: python:mailman.config.exim4|g' /etc/mailman3/mailman.cfg
sed -i 's|configuration: python:mailman.config.postfix|#configuration: python:mailman.config.postfix|g' /etc/mailman3/mailman.cfg
echo "" >> /etc/mailman3/mailman.cfg
echo "# strip dkim, outgoing will be re-signed" >> /etc/mailman3/mailman.cfg
echo "remove_dkim_headers: yes" >> /etc/mailman3/mailman.cfg
echo "" >> /etc/mailman3/mailman.cfg
echo "[archiver.hyperkitty]" >> /etc/mailman3/mailman.cfg
echo "class: mailman_hyperkitty.Archiver" >> /etc/mailman3/mailman.cfg
echo "enable: yes" >> /etc/mailman3/mailman.cfg
echo "configuration: /etc/mailman3/mailman-hyperkitty.cfg" >> /etc/mailman3/mailman.cfg
# restart mailman3 services
systemctl start mailman3.service
systemctl start mailman3-web.service
systemctl reload apache2.service
echo ""
echo "To finish setting up Mailman3:"
echo "letsencrypt-certonly.sh -d $FQDN"
echo "a2ensite 001-default-ssl.conf"
echo "systemctl reload apache2"
echo "mailman-web createsuperuser"
echo "https://$FQDN/mailman3/admin"
echo " Sites -> change example.com to $FQDN"
echo "sed -i 's|SITE_ID = 1|SITE_ID = 0|g' /etc/mailman3/mailman-web.py"
echo "systemctl restart mailman3-web.service"