#!/usr/bin/env bash set -o pipefail if [[ "$(uname -r)" =~ ^4\.15\.0-60 ]]; then echo "DO NOT RUN mailcow ON THIS UBUNTU KERNEL!"; echo "Please update to 5.x or use another distribution." exit 1 fi if [[ "$(uname -r)" =~ ^4\.4\. ]]; then if grep -q Ubuntu <<< $(uname -a); then echo "DO NOT RUN mailcow ON THIS UBUNTU KERNEL!"; echo "Please update to linux-generic-hwe-16.04 by running \"apt-get install --install-recommends linux-generic-hwe-16.04\"" exit 1 fi fi if grep --help 2>&1 | grep -q -i "busybox"; then echo "BusyBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\"" exit 1 fi if cp --help 2>&1 | grep -q -i "busybox"; then echo "BusyBox cp detected, please install coreutils, \"apk add --no-cache --upgrade coreutils\"" exit 1 fi for bin in openssl curl docker-compose docker git awk sha1sum; do if [[ -z $(which ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi done if [ -f mailcow.conf ]; then read -r -p "A config file exists and will be overwritten, are you sure you want to continue? [y/N] " response case $response in [yY][eE][sS]|[yY]) mv mailcow.conf mailcow.conf_backup chmod 600 mailcow.conf_backup ;; *) exit 1 ;; esac fi echo "Press enter to confirm the detected value '[value]' where applicable or enter a custom value." while [ -z "${MAILCOW_HOSTNAME}" ]; do read -p "Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: " -e MAILCOW_HOSTNAME DOTS=${MAILCOW_HOSTNAME//[^.]}; if [ ${#DOTS} -lt 2 ] && [ ! -z ${MAILCOW_HOSTNAME} ]; then echo "${MAILCOW_HOSTNAME} is not a FQDN" MAILCOW_HOSTNAME= fi done if [ -a /etc/timezone ]; then DETECTED_TZ=$(cat /etc/timezone) elif [ -a /etc/localtime ]; then DETECTED_TZ=$(readlink /etc/localtime|sed -n 's|^.*zoneinfo/||p') fi while [ -z "${MAILCOW_TZ}" ]; do if [ -z "${DETECTED_TZ}" ]; then read -p "Timezone: " -e MAILCOW_TZ else read -p "Timezone [${DETECTED_TZ}]: " -e MAILCOW_TZ [ -z "${MAILCOW_TZ}" ] && MAILCOW_TZ=${DETECTED_TZ} fi done MEM_TOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo) if [ ${MEM_TOTAL} -le "2621440" ]; then echo "Installed memory is <= 2.5 GiB. It is recommended to disable ClamAV to prevent out-of-memory situations." echo "ClamAV can be re-enabled by setting SKIP_CLAMD=n in mailcow.conf." read -r -p "Do you want to disable ClamAV now? [Y/n] " response case $response in [nN][oO]|[nN]) SKIP_CLAMD=n ;; *) SKIP_CLAMD=y ;; esac else SKIP_CLAMD=n fi if [ ${MEM_TOTAL} -le "2097152" ]; then echo "Disabling Solr on low-memory system." SKIP_SOLR=y elif [ ${MEM_TOTAL} -le "3670016" ]; then echo "Installed memory is <= 3.5 GiB. It is recommended to disable Solr to prevent out-of-memory situations." echo "Solr is a prone to run OOM and should be monitored. The default Solr heap size is 1024 MiB and should be set in mailcow.conf according to your expected load." echo "Solr can be re-enabled by setting SKIP_SOLR=n in mailcow.conf but will refuse to start with less than 2 GB total memory." read -r -p "Do you want to disable Solr now? [Y/n] " response case $response in [nN][oO]|[nN]) SKIP_SOLR=n ;; *) SKIP_SOLR=y ;; esac else SKIP_SOLR=n fi [ ! -f ./data/conf/rspamd/override.d/worker-controller-password.inc ] && echo '# Placeholder' > ./data/conf/rspamd/override.d/worker-controller-password.inc cat << EOF > mailcow.conf # ------------------------------ # mailcow web ui configuration # ------------------------------ # example.org is _not_ a valid hostname, use a fqdn here. # Default admin user is "admin" # Default password is "moohoo" MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} # Password hash algorithm # Only certain password hash algorithm are supported. For a fully list of supported schemes, # see https://mailcow.github.io/mailcow-dockerized-docs/model-passwd/ MAILCOW_PASS_SCHEME=BLF-CRYPT # ------------------------------ # SQL database configuration # ------------------------------ DBNAME=mailcow DBUSER=mailcow # Please use long, random alphanumeric strings (A-Za-z0-9) DBPASS=$(LC_ALL=C data/web/inc/app_info.inc.php echo ' $MAILCOW_GIT_VERSION="'$mailcow_git_version'";' >> data/web/inc/app_info.inc.php echo ' $MAILCOW_GIT_URL="'$mailcow_git_url'";' >> data/web/inc/app_info.inc.php echo '?>' >> data/web/inc/app_info.inc.php else echo ' data/web/inc/app_info.inc.php echo ' $MAILCOW_GIT_VERSION="";' >> data/web/inc/app_info.inc.php echo ' $MAILCOW_GIT_URL="";' >> data/web/inc/app_info.inc.php echo '?>' >> data/web/inc/app_info.inc.php echo -e "\e[33mCannot determine current git repository version...\e[0m" fi