diff --git a/data/Dockerfiles/clamd/Dockerfile b/data/Dockerfiles/clamd/Dockerfile index 6f38e359..3f1aa157 100644 --- a/data/Dockerfiles/clamd/Dockerfile +++ b/data/Dockerfiles/clamd/Dockerfile @@ -2,18 +2,26 @@ FROM debian:bullseye-slim LABEL maintainer "André Peters " -ARG CLAMAV=0.103.5 +ARG CLAMAV=0.104.2 +ARG TINI_VERSION=v0.19.0 + RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ - zlib1g-dev \ - libcurl4-openssl-dev \ - libncurses5-dev \ - libzip-dev \ - libpcre2-dev \ - libxml2-dev \ - libssl-dev \ build-essential \ + pkg-config \ + python3 \ + python3-pip \ + valgrind \ + check \ + libbz2-dev \ + libcurl4-openssl-dev \ libjson-c-dev \ + libmilter-dev \ + libncurses5-dev \ + libpcre2-dev \ + libssl-dev \ + libxml2-dev \ + zlib1g-dev \ curl \ bash \ wget \ @@ -22,39 +30,47 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ rsync \ dos2unix \ netcat \ + && python3 -m pip install cmake \ && rm -rf /var/lib/apt/lists/* \ && wget -O - https://www.clamav.net/downloads/production/clamav-${CLAMAV}.tar.gz | tar xfvz - \ && cd clamav-${CLAMAV} \ - && ./configure \ - --prefix=/usr \ - --libdir=/usr/lib \ - --sysconfdir=/etc/clamav \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --disable-llvm \ - --with-user=clamav \ - --with-group=clamav \ - --with-dbdir=/var/lib/clamav \ - --enable-clamdtop \ - --enable-bigstack \ - --with-pcre \ - && make -j4 \ - && make install \ - && make clean \ + && cmake . \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=/usr/lib \ + -D APP_CONFIG_DIRECTORY=/etc/clamav \ + -D CMAKE_INSTALL_MANDIR=/usr/share/man \ + -D CMAKE_INSTALL_INFODIR=/usr/share/info \ + -D CLAMAV_USER=clamav \ + -D CLAMAV_GROUP=clamav \ + -D DATABASE_DIRECTORY=/var/lib/clamav \ + -D ENABLE_APP=ON \ + -D ENABLE_JSON_SHARED=OFF \ + -D CMAKE_BUILD_TYPE=MinSizeRel \ + && cmake --build . -j4 \ + && cmake --build . --target install \ && cd .. && rm -rf clamav-${CLAMAV} \ && apt-get -y --auto-remove purge build-essential \ - && apt-get -y purge zlib1g-dev \ - libncurses5-dev \ - libzip-dev \ - libpcre2-dev \ - libxml2-dev \ - libssl-dev \ + && apt-get -y purge pkg-config \ + python3 \ + python3-pip \ + valgrind \ + check \ + libbz2-dev \ + libcurl4-openssl-dev \ libjson-c-dev \ + libmilter-dev \ + libncurses5-dev \ + libpcre2-dev \ + libssl-dev \ + libxml2-dev \ + zlib1g-dev \ + && addgroup --system --gid 700 clamav \ && adduser --system --no-create-home --home /var/lib/clamav --uid 700 --gid 700 --disabled-login clamav \ && rm -rf /tmp/* /var/tmp/* COPY clamd.sh ./ -COPY tini /sbin/tini +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /sbin/tini +RUN chmod +x /sbin/tini CMD ["/sbin/tini", "-g", "--", "/clamd.sh"] diff --git a/data/Dockerfiles/clamd/tini b/data/Dockerfiles/clamd/tini deleted file mode 100755 index 03af82f0..00000000 Binary files a/data/Dockerfiles/clamd/tini and /dev/null differ diff --git a/data/Dockerfiles/dovecot/Dockerfile b/data/Dockerfiles/dovecot/Dockerfile index ee30eec8..68fb7332 100644 --- a/data/Dockerfiles/dovecot/Dockerfile +++ b/data/Dockerfiles/dovecot/Dockerfile @@ -1,10 +1,10 @@ -FROM debian:buster-slim +FROM debian:bullseye-slim LABEL maintainer "Andre Peters " ARG DEBIAN_FRONTEND=noninteractive -ARG DOVECOT=2.3.17.1 +ARG DOVECOT=2.3.18 ENV LC_ALL C -ENV GOSU_VERSION 1.12 +ENV GOSU_VERSION 1.14 # Add groups and users before installing Dovecot to not break compatibility RUN groupadd -g 5000 vmail \ @@ -84,12 +84,23 @@ RUN groupadd -g 5000 vmail \ syslog-ng-core \ syslog-ng-mod-redis \ wget \ + git \ + build-essential \ + autoconf \ + automake \ + libtool \ + make \ + libxapian-dev \ + libicu-dev \ + zlib1g-dev \ + pkg-config \ + sudo \ && dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" \ && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \ && chmod +x /usr/local/bin/gosu \ && gosu nobody true \ && apt-key adv --fetch-keys https://repo.dovecot.org/DOVECOT-REPO-GPG \ - && echo "deb https://repo.dovecot.org/ce-${DOVECOT}/debian/buster buster main" > /etc/apt/sources.list.d/dovecot.list \ + && echo "deb https://repo.dovecot.org/ce-${DOVECOT}/debian/bullseye bullseye main" > /etc/apt/sources.list.d/dovecot.list \ && apt-get update \ && apt-get -y --no-install-recommends install \ dovecot-lua \ @@ -101,13 +112,32 @@ RUN groupadd -g 5000 vmail \ dovecot-core \ dovecot-pop3d \ dovecot-imapd \ - dovecot-solr \ - && pip3 install mysql-connector-python html2text jinja2 redis \ + dovecot-dev + #dovecot-solr \ +RUN cd /tmp && wget https://oligarchy.co.uk/xapian/1.4.19/xapian-core-1.4.19.tar.xz && tar xf xapian-core-1.4.19.tar.xz && cd xapian-core-1.4.19 \ + && ./configure --prefix=/opt \ + && make && sudo make install + +RUN cd /tmp && git clone https://github.com/grosjo/fts-xapian && cd fts-xapian \ + && autoupdate \ + && autoreconf -vi \ + && ./configure --with-dovecot=/usr/lib/dovecot \ + && make && sudo make install + +RUN pip3 install mysql-connector-python html2text jinja2 redis \ && apt-get autoremove --purge -y \ + && apt-get purge -y \ + make \ + libxapian-dev \ + libicu-dev \ + zlib1g-dev \ + pkg-config \ + build-essential \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* \ - && rm -rf /tmp/* /var/tmp/* /root/.cache/ + && rm -rf /tmp/* /var/tmp/* /root/.cache/ +COPY decode2text.sh /usr/local/bin/decode2text.sh COPY trim_logs.sh /usr/local/bin/trim_logs.sh COPY clean_q_aged.sh /usr/local/bin/clean_q_aged.sh COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf @@ -126,6 +156,7 @@ COPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh COPY quarantine_notify.py /usr/local/bin/quarantine_notify.py COPY quota_notify.py /usr/local/bin/quota_notify.py COPY repl_health.sh /usr/local/bin/repl_health.sh +RUN chmod +x /usr/local/bin/decode2text.sh ENTRYPOINT ["/docker-entrypoint.sh"] CMD exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf diff --git a/data/Dockerfiles/dovecot/decode2text.sh b/data/Dockerfiles/dovecot/decode2text.sh new file mode 100644 index 00000000..1c881ff9 --- /dev/null +++ b/data/Dockerfiles/dovecot/decode2text.sh @@ -0,0 +1,105 @@ +#!/bin/sh + +# Example attachment decoder script. The attachment comes from stdin, and +# the script is expected to output UTF-8 data to stdout. (If the output isn't +# UTF-8, everything except valid UTF-8 sequences are dropped from it.) + +# The attachment decoding is enabled by setting: +# +# plugin { +# fts_decoder = decode2text +# } +# service decode2text { +# executable = script /usr/local/libexec/dovecot/decode2text.sh +# user = dovecot +# unix_listener decode2text { +# mode = 0666 +# } +# } + +libexec_dir=`dirname $0` +content_type=$1 + +# The second parameter is the format's filename extension, which is used when +# found from a filename of application/octet-stream. You can also add more +# extensions by giving more parameters. +formats='application/pdf pdf +application/x-pdf pdf +application/msword doc +application/mspowerpoint ppt +application/vnd.ms-powerpoint ppt +application/ms-excel xls +application/x-msexcel xls +application/vnd.ms-excel xls +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.presentation odp +' + +if [ "$content_type" = "" ]; then + echo "$formats" + exit 0 +fi + +fmt=`echo "$formats" | grep -w "^$content_type" | cut -d ' ' -f 2` +if [ "$fmt" = "" ]; then + echo "Content-Type: $content_type not supported" >&2 + exit 1 +fi + +# most decoders can't handle stdin directly, so write the attachment +# to a temp file +path=`mktemp` +trap "rm -f $path" 0 1 2 3 14 15 +cat > $path + +xmlunzip() { + name=$1 + + tempdir=`mktemp -d` + if [ "$tempdir" = "" ]; then + exit 1 + fi + trap "rm -rf $path $tempdir" 0 1 2 3 14 15 + cd $tempdir || exit 1 + unzip -q "$path" 2>/dev/null || exit 0 + find . -name "$name" -print0 | xargs -0 cat | + $libexec_dir/xml2text +} + +wait_timeout() { + childpid=$! + trap "kill -9 $childpid; rm -f $path" 1 2 3 14 15 + wait $childpid +} + +LANG=en_US.UTF-8 +export LANG +if [ $fmt = "pdf" ]; then + /usr/bin/pdftotext $path - 2>/dev/null& + wait_timeout 2>/dev/null +elif [ $fmt = "doc" ]; then + (/usr/bin/catdoc $path; true) 2>/dev/null& + wait_timeout 2>/dev/null +elif [ $fmt = "ppt" ]; then + (/usr/bin/catppt $path; true) 2>/dev/null& + wait_timeout 2>/dev/null +elif [ $fmt = "xls" ]; then + (/usr/bin/xls2csv $path; true) 2>/dev/null& + wait_timeout 2>/dev/null +elif [ $fmt = "odt" -o $fmt = "ods" -o $fmt = "odp" ]; then + xmlunzip "content.xml" +elif [ $fmt = "docx" ]; then + xmlunzip "document.xml" +elif [ $fmt = "xlsx" ]; then + xmlunzip "sharedStrings.xml" +elif [ $fmt = "pptx" ]; then + xmlunzip "slide*.xml" +else + echo "Buggy decoder script: $fmt not handled" >&2 + exit 1 +fi +exit 0 diff --git a/data/Dockerfiles/dovecot/docker-entrypoint.sh b/data/Dockerfiles/dovecot/docker-entrypoint.sh index 9ac2dc64..09594c0c 100755 --- a/data/Dockerfiles/dovecot/docker-entrypoint.sh +++ b/data/Dockerfiles/dovecot/docker-entrypoint.sh @@ -109,17 +109,19 @@ EOF echo -n ${ACL_ANYONE} > /etc/dovecot/acl_anyone -if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then +if [[ "${SKIP_XAPIAN}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify listescape replication' > /etc/dovecot/mail_plugins echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify listescape replication mail_log' > /etc/dovecot/mail_plugins_imap echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl notify listescape replication' > /etc/dovecot/mail_plugins_lmtp else -echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify fts fts_solr listescape replication' > /etc/dovecot/mail_plugins -echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify mail_log fts fts_solr listescape replication' > /etc/dovecot/mail_plugins_imap -echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl fts fts_solr notify listescape replication' > /etc/dovecot/mail_plugins_lmtp +echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify fts fts_xapian listescape replication' > /etc/dovecot/mail_plugins +echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify mail_log fts fts_xapian listescape replication' > /etc/dovecot/mail_plugins_imap +echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl fts fts_xapian notify listescape replication' > /etc/dovecot/mail_plugins_lmtp fi chmod 644 /etc/dovecot/mail_plugins /etc/dovecot/mail_plugins_imap /etc/dovecot/mail_plugins_lmtp /templates/quarantine.tpl +sed -i 's/vsz_limit.*/vsz_limit = '${XAPIAN_HEAP}m/g /etc/dovecot/FTS-Xapian.conf + cat < /etc/dovecot/sql/dovecot-dict-sql-userdb.conf # Autogenerated by mailcow driver = mysql diff --git a/data/Dockerfiles/dovecot/syslog-ng-redis_slave.conf b/data/Dockerfiles/dovecot/syslog-ng-redis_slave.conf index f6905092..ea2bcfbf 100644 --- a/data/Dockerfiles/dovecot/syslog-ng-redis_slave.conf +++ b/data/Dockerfiles/dovecot/syslog-ng-redis_slave.conf @@ -1,4 +1,4 @@ -@version: 3.19 +@version: 3.28 @include "scl.conf" options { chain_hostnames(off); diff --git a/data/Dockerfiles/dovecot/syslog-ng.conf b/data/Dockerfiles/dovecot/syslog-ng.conf index bdaca9cb..2ee4f624 100644 --- a/data/Dockerfiles/dovecot/syslog-ng.conf +++ b/data/Dockerfiles/dovecot/syslog-ng.conf @@ -1,4 +1,4 @@ -@version: 3.19 +@version: 3.28 @include "scl.conf" options { chain_hostnames(off); diff --git a/data/conf/dovecot/FTS-Xapian.conf b/data/conf/dovecot/FTS-Xapian.conf new file mode 100644 index 00000000..2fefd6a0 --- /dev/null +++ b/data/conf/dovecot/FTS-Xapian.conf @@ -0,0 +1,20 @@ +plugin { + fts = xapian + fts_xapian = partial=3 full=20 verbose=0 + fts_autoindex = yes + fts_enforced = yes + fts_autoindex_exclude = \Trash + fts_decoder = decode2text +} + +service indexer-worker { + vsz_limit = 1024m +} + +service decode2text { + executable = script /usr/local/bin/decode2text.sh + user = dovecot + unix_listener decode2text { + mode = 0666 + } +} diff --git a/data/conf/dovecot/dovecot.conf b/data/conf/dovecot/dovecot.conf index b7aca757..cf5ad597 100644 --- a/data/conf/dovecot/dovecot.conf +++ b/data/conf/dovecot/dovecot.conf @@ -297,6 +297,7 @@ replication_dsync_parameters = -d -l 30 -U -n INBOX !include_try /etc/dovecot/extra.conf !include_try /etc/dovecot/sogo-sso.conf !include_try /etc/dovecot/shared_namespace.conf +!include_try /etc/dovecot/FTS-Xapian.conf # default_client_limit = 10400 default_vsz_limit = 1024 M diff --git a/data/web/lang/lang.es.json b/data/web/lang/lang.es.json index 87be8b4d..098dfa2c 100644 --- a/data/web/lang/lang.es.json +++ b/data/web/lang/lang.es.json @@ -18,7 +18,8 @@ "spam_score": "Puntuación de spam", "syncjobs": "Trabajos de sincronización", "tls_policy": "Póliza de TLS", - "unlimited_quota": "Cuota ilimitada para buzones" + "unlimited_quota": "Cuota ilimitada para buzones", + "app_passwds": "Gestionar las contraseñas de aplicaciones" }, "add": { "activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.", diff --git a/docker-compose.yml b/docker-compose.yml index d706d2dc..56147f98 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -58,7 +58,7 @@ services: - redis clamd-mailcow: - image: mailcow/clamd:1.43 + image: mailcow/clamd:1.44 restart: always dns: - ${IPV4_NETWORK:-172.22.1}.254 @@ -151,7 +151,7 @@ services: - API_KEY_READ_ONLY=${API_KEY_READ_ONLY:-invalid} - API_ALLOW_FROM=${API_ALLOW_FROM:-invalid} - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized} - - SKIP_SOLR=${SKIP_SOLR:-y} + - SKIP_XAPIAN=${SKIP_XAPIAN:-y} - SKIP_CLAMD=${SKIP_CLAMD:-n} - SKIP_SOGO=${SKIP_SOGO:-n} - ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n} @@ -212,7 +212,7 @@ services: - sogo dovecot-mailcow: - image: mailcow/dovecot:1.159 + image: mailcow/dovecot:1.160 depends_on: - mysql-mailcow dns: @@ -246,7 +246,8 @@ services: - ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n} - MAILDIR_GC_TIME=${MAILDIR_GC_TIME:-7200} - ACL_ANYONE=${ACL_ANYONE:-disallow} - - SKIP_SOLR=${SKIP_SOLR:-y} + - SKIP_XAPIAN=${SKIP_XAPIAN:-y} + - XAPIAN_HEAP=${XAPIAN_HEAP:-1024} - MAILDIR_SUB=${MAILDIR_SUB:-} - MASTER=${MASTER:-y} - REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-} @@ -277,7 +278,7 @@ services: ofelia.job-exec.dovecot_sarules.schedule: "@every 24h" ofelia.job-exec.dovecot_sarules.command: "/bin/bash -c \"/usr/local/bin/sa-rules.sh\"" ofelia.job-exec.dovecot_fts.schedule: "@every 24h" - ofelia.job-exec.dovecot_fts.command: "/usr/bin/curl http://solr:8983/solr/dovecot-fts/update?optimize=true" + ofelia.job-exec.dovecot_fts.command: "doveadm fts optimize -A" ofelia.job-exec.dovecot_repl_health.schedule: "@every 5m" ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\"" ulimits: @@ -523,22 +524,6 @@ services: aliases: - dockerapi - solr-mailcow: - image: mailcow/solr:1.8.1 - restart: always - volumes: - - solr-vol-1:/opt/solr/server/solr/dovecot-fts/data:Z - ports: - - "${SOLR_PORT:-127.0.0.1:18983}:8983" - environment: - - TZ=${TZ} - - SOLR_HEAP=${SOLR_HEAP:-1024} - - SKIP_SOLR=${SKIP_SOLR:-y} - networks: - mailcow-network: - aliases: - - solr - olefy-mailcow: image: mailcow/olefy:1.8.1 restart: always @@ -594,7 +579,6 @@ services: - netfilter-mailcow - watchdog-mailcow - dockerapi-mailcow - - solr-mailcow environment: - TZ=${TZ} image: robbertkl/ipv6nat @@ -626,7 +610,6 @@ volumes: mysql-socket-vol-1: redis-vol-1: rspamd-vol-1: - solr-vol-1: postfix-vol-1: crypt-vol-1: sogo-web-vol-1: diff --git a/generate_config.sh b/generate_config.sh index e6f322ac..f08b802c 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -86,23 +86,23 @@ else fi if [ ${MEM_TOTAL} -le "2097152" ]; then - echo "Disabling Solr on low-memory system." - SKIP_SOLR=y + echo "Disabling Xapian (full text search, build in Dovecot) on low-memory system." + SKIP_XAPIAN=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 + echo "Installed memory is <= 3.5 GiB. We suggest you to disable Xapian (full text search, build in Dovecot) to prevent out-of-memory situations." + echo "The default Xapian heap size is 1024 MiB and should be set in mailcow.conf according to your expected load." + echo "Xapian can be re-enabled by setting SKIP_XAPIAN=n in mailcow.conf but will refuse to start with less than 2 GB total memory." + read -r -p "Do you want to disable the FTS Xapian now? [Y/n] " response case $response in [nN][oO]|[nN]) - SKIP_SOLR=n + SKIP_XAPIAN=n ;; *) - SKIP_SOLR=y + SKIP_XAPIAN=y ;; esac else - SKIP_SOLR=n + SKIP_XAPIAN=n fi [ ! -f ./data/conf/rspamd/override.d/worker-controller-password.inc ] && echo '# Placeholder' > ./data/conf/rspamd/override.d/worker-controller-password.inc @@ -169,7 +169,6 @@ POPS_PORT=995 SIEVE_PORT=4190 DOVEADM_PORT=127.0.0.1:19991 SQL_PORT=127.0.0.1:13306 -SOLR_PORT=127.0.0.1:18983 REDIS_PORT=127.0.0.1:7654 # Your timezone @@ -247,14 +246,14 @@ SKIP_CLAMD=${SKIP_CLAMD} SKIP_SOGO=n -# Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1. +# Skip Xapian (FTS) on low-memory systems or if you do not want to store a readable index of your mails in vmail-index-vol-1. -SKIP_SOLR=${SKIP_SOLR} +SKIP_XAPIAN=${SKIP_XAPIAN} -# Solr heap size in MB, there is no recommendation, please see Solr docs. -# Solr is a prone to run OOM and should be monitored. Unmonitored Solr setups are not recommended. +# Xapian heap size in MB, there is no recommendation, please see Xapians docs. +# Xapian is replacing solr completely. It is supposed to be much more efficient in CPU and RAM consumption. -SOLR_HEAP=1024 +XAPIAN_HEAP=1024 # Allow admins to log into SOGo as email user (without any password) diff --git a/update.sh b/update.sh index a9291d62..8cfa210f 100755 --- a/update.sh +++ b/update.sh @@ -294,8 +294,8 @@ CONFIG_ARRAY=( "MAILDIR_GC_TIME" "MAILDIR_SUB" "ACL_ANYONE" - "SOLR_HEAP" - "SKIP_SOLR" + "XAPIAN_HEAP" + "SKIP_XAPIAN" "ENABLE_SSL_SNI" "ALLOW_ADMIN_EMAIL_LOGIN" "SKIP_HTTP_VERIFICATION" @@ -405,20 +405,20 @@ for option in ${CONFIG_ARRAY[@]}; do echo '# Otherwise a user might share data with too many other users.' >> mailcow.conf echo 'ACL_ANYONE=disallow' >> mailcow.conf fi - elif [[ ${option} == "SOLR_HEAP" ]]; then + elif [[ ${option} == "XAPIAN_HEAP" ]]; then if ! grep -q ${option} mailcow.conf; then - echo "Adding new option \"${option}\" to mailcow.conf" - echo '# Solr heap size, there is no recommendation, please see Solr docs.' >> mailcow.conf - echo '# Solr is a prone to run OOM on large systems and should be monitored. Unmonitored Solr setups are not recommended.' >> mailcow.conf - echo '# Solr will refuse to start with total system memory below or equal to 2 GB.' >> mailcow.conf - echo "SOLR_HEAP=1024" >> mailcow.conf + echo "Replacing SOLR_HEAP with \"${option}\" in mailcow.conf" + sed -i '/# Solr heap size in MB, there is no recommendation, please see Solr docs./c\# Xapian heap size in MB, there is no recommendation, please see Xapians docs.' mailcow.conf + sed -i '/# Solr is a prone to run OOM on large systems and should be monitored. Unmonitored Solr setups are not recommended./c\# Xapian is replacing solr completely. It is supposed to be much more efficient in CPU and RAM consumption.' mailcow.conf + sed -i '/SOLR_HEAP=/c\XAPIAN_HEAP=' mailcow.conf fi - elif [[ ${option} == "SKIP_SOLR" ]]; then + elif [[ ${option} == "SKIP_XAPIAN" ]]; then if ! grep -q ${option} mailcow.conf; then - echo "Adding new option \"${option}\" to mailcow.conf" - echo '# Solr is disabled by default after upgrading from non-Solr to Solr-enabled mailcows.' >> mailcow.conf - echo '# Disable Solr or if you do not want to store a readable index of your mails in solr-vol-1.' >> mailcow.conf - echo "SKIP_SOLR=y" >> mailcow.conf + echo "Replacing SKIP_SOLR with \"${option}\" in mailcow.conf" + sed -i '/# Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1./c\# Skip Xapian (FTS) on low-memory systems or if you do not want to store a readable index of your mails in vmail-index-vol-1.' mailcow.conf + sed -i '/SKIP_SOLR=/c\SKIP_XAPIAN=' mailcow.conf + echo "Removing Solr-Port Binding from mailcow.conf" + sed -i '/SOLR_PORT=/d' mailcow.conf fi elif [[ ${option} == "ENABLE_SSL_SNI" ]]; then if ! grep -q ${option} mailcow.conf; then