Einer der Kunden, für die ich ab und zu ein wenig in IT mache, hat laut darüber nachgedacht, einen eigenen Mailserver zu betreiben. Außerdem hätte man gerne eine Möglichkeit, Mails zu archivieren. Die gute Nachricht: Es gibt eine Anwendung, die ein solches Mailarchiv bereitstellt: Mailpiler. Die schlechte Nachricht: Die Installation hat mit dem, was heutzutage unter Linux Gang und Gäbe ist, nichts zu tun – viele Anwendungen stellen ein Skript bereit, dass den Benutzer ein paar Dinge fragt und dann die Anwendung einrichtet. Bei Mailpiler ist das mehr so wie vor 15 Jahren: Man installiert die Voraussetzungen von Hand (mit Glück gibt’s die in den Paketquellen der Distribution), kompiliert die Anwendung, installiert sie und richtet sie dann ein.

Leider gibt es zu diesem Thema keine aktuelle Anleitung und die Dokumentation auf der Webseite des Herstellers ist (vorsichtig ausgedrückt) ausbaufähig. Ich habe zwei Dokus gefunden, die mir wahnsinnig weitergeholfen haben: Die eine stammt von Patrik Kernstock, die andere von Jonas Leder. Ohne diese Anleitungen hätte ich den Piler wahrscheinlich nie zum Fliegen gekriegt.

Bevor wir uns an die Installation machen, wollen wir einmal kurz gucken, wie dieses Archiv funktioniert: Die Software spannt einen SMTP-Server auf, der Mails entgegen nimmt und archiviert. Über eine Weboberfläche kann man dann mehr oder weniger komfortabel (das kann ich noch nicht genau einschätzen, weil in meinem Archiv erst zwei Mails liegen) suchen kann. Die Mails lassen sich dann als .eml-Dateien wiederherstellen. Als Suchmaschine kommt Manticore zum Einsatz – darüber erfolgt die Indizierung der Mails.

Damit nun Mails im Archiv landen, müssen sie dorthin geschickt werden. Natürlich könnte man nun den Anwendern sagen „Schick jede deiner Mails zusätzlich noch ans Archiv“. Das ist aber aus zwei Gründen nicht praktikabel: Zum einen hat der Anwender damit die Möglichkeit, zu entscheiden, was er archivieren will (und wir hätten gerne alles archiviert); außerdem gibt es Anwender, bei denen ich als Admin froh bin, wenn sie ihren PC unfallfrei eingeschaltet kriegen – von denen so etwas zu verlangen, ist nahezu utopisch. Zum anderen würden damit nur ausgehende Mails archiviert werden; schön wäre aber auch eine Archivierung eingehender Mails. Deshalb nutzen wir die Adressumschreibung auf unserem Mailserver (das folgt in einem anderen Artikel): Wir definieren auf dem Mailserver eine Regel, die besagt, dass alles was an unsere Maildomain (egal, welche Adresse) geschickt oder von ihr verschickt wird, per BCC an die Adresse unseres Archivs geschickt werden soll. Der Anwender muss daher nichts machen, und wir kriegen wirklich jede Mail zu fassen.

Ich habe den Piler unter Ubuntu 22.04 installiert – und bis auf eine Kleinigkeit glaube ich, dass der Weg, den ich eingeschlagen habe, nicht völlig verkehrt war. Als erstes legen wir zwei Variablen an:

PILER_DOMAIN="piler.domain.tld"
MAILSERVER_DOMAIN="mail.domain.tld"

$PILER_DOMAIN ist der Hostname des Pilers. $MAILSERVER_DOMAIN ist der FQDN unseres Mailservers. Beide brauchen wir später, wenn wir die Anwendung von Hand konfigurieren…

Dann geht’s weiter mit der Installation einiger Pakete, die das Kompilieren der Anwendung ermöglichen:

apt install sysstat build-essential libwrap0-dev libpst-dev tnef libytnef0-dev unrtf catdoc libtre-dev tre-agrep poppler-utils libzip-dev unixodbc libpq5 software-properties-common libpoppler-dev openssl libssl-dev python3-mysqldb memcached pwgen telnet

Der Piler fährt zweigleisig: Die Emals werden als Dateien auf der Festplatte gespeichert (natürlich verschlüsselt, damit man keine Änderungen vornehmen kann – Revisionssicherheit und so); die Metadaten werden in einer Datenbank gespeichert. Daher installieren wir gleich noch MariaDB:

apt install mariadb-{server,client} libmariadb-client-lgpl-dev-compat

Der Mailpiler braucht ein paar bestimmte Einstellungen; die schreiben wir in die Datei /etc/mysql/conf.d/mailpiler.conf und starten den Datenbankserver einmal neu:

cat > /etc/mysql/conf.d/mailpiler.conf <<EOF
innodb_buffer_pool_size=256M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_log_file_size=16M
query_cache_size=0
query_cache_type=0
query_cache_limit=2M
EOF

systemctl restart mariadb

Da das Archiv über eine Weboberfläche dargestellt wird, brauchen wir noch einen Webserver und PHP. Als ich diesen Artikel geschrieben habe (Ende März 2024), war PHP 8.1 in den offiziellen Paketquellen von Ubuntu enthalten – wir installieren also Nginx und PHP sowie einige benötigte Module:

apt install nginx php8.1-{fpm,common,ldap,mysql,cli,opcache,phpdbg,gd,memcache,readline,zip}

Mailpiler hat früher mal Sphinxsearch eingesetzt, ist aber mittlerweile auf Manticore umgestiegen. Das lässt sich unter Ubuntu leicht installieren:

wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
dpkg -i manticore-repo.noarch.deb
apt update

apt install manticore manticore-extra

Laut der Kernstock-Anleitung wird auch noch xmhtml benötigt. Das müssen wir zu Fuß installieren.

mkdir -p /root/mailpiler/xlhtml/
cd /root/mailpiler/xlhtml/
wget https://bitbucket.org/jsuto/piler/downloads/xlhtml-0.5.1-sj-mod.tar.gz
tar xzf xlhtml-0.5.1-sj-mod.tar.gz
cd xlhtml-0.5.1-sj-mod/
./configure
make
make install
ldconfig

Damit sind die Vorarbeiten erledigt – und dieser Artikel schon wieder ganz schön lang. Wir werden daher die eigentliche Installation des Pilers in einem weiteren Artikel vornehmen…