Stalwart-Verzeichnisse anpassen – Upgrade-v0.16 Vorbereitung

Am 20. April 2026 wurde mit Stalwart v0.16.0 (die Tage daruf dann noch v0.16.1 und v0.16.2) ein neues Release veröffentlicht das einiges an Änderungen mit sich bringt. Es dient u.a. auch als Vorbereitung auf die Version 1.0 und räumt mit „ein paar“ Altlasten auf.

Es ist aus meiner persönlichen Sicht sinnvoll vor dem Upgrade, noch in der v0.15.5-Installation, mindestens die folgenden Punkte abzuarbeiten.

  1. Account Namen müssen nun E-Mail-Adressen sein
  2. Bei Anwendung des Installations-Skripts bis incl. v0.15.5 wurde Stalwart komplett (Konfiguration, Daten, Binary, Logs) in Verzeichnisse unterhalb von /opt/stalwart installiert. Beim Upgrade auf Version 0.16.0 wird aber davon ausgegangen, dass die Verzeichnisse dem File System Hierarchy Standard (FHS) genügen – konkret also
    • /usr/local/bin/stalwart als Platz für das Stalwart-Binary
    • /etc/stalwart/config.toml als Platz für die toml-Konfigurationsdatei
    • /var/lib/stalwart für den Data Store (bei Single-Node RocksDB)
    • /var/log/stalwart/ für Log-Dateien

Nachfolgend eine exemplarische Anleitung um diese Voraussetzungen in einer simplen Single-Node Stalwart-Installation (so wie ich sie in diesem Vortrag vorgestellt habe) zu realisieren.

ACHTUNG:

  • Erstellen Sie unbedingt vorab ein vollständiges Backup des Mailsystems!
  • Falls Sie die Möglichkeit dazu haben erstellen Sie einen Snapshot des Servers

Account-Namen

User vorab informieren, dann in der internen User-Verwaltung die Accounts anpassen.

Screenshot eines Accounts, im Edit-Mode, bei dem der Login-Namen schon als E-Mailadresse konfiguriert ist

Verzeichnisse entsprechend FHS-Standard

Stalwart stoppen, etc-Verzeichnis & Binaries passend platzieren

# Stalwart stoppen
systemctl stop stalwart.service
# etc-Verzeichnis an die richtige Stelle schieben
mkdir /etc/stalwart
chown stalwart:stalwart /etc/stalwart
cp -p /opt/stalwart/etc/config.toml /etc/stalwart/
# Bei mir waren vorher noch SymLinks von /usr/local/bin auf
# die beiden Binaries stalwart und stalwart-cli die noch unter
# /opt/stalwart/bin lagen. Diese SymLinks habe ich vorher gelöscht
# und dann die Binaries wie folgt an die richtige Stelle geschoben
cp /opt/stalwart/bin/stalwart /usr/local/bin
cp /opt/stalwart/bin/stalwart-cli /usr/local/bin
chown stalwart:stalwart /usr/local/bin/stalwart*

systemd-Service-Datei anpassen

Nun die zugehörige systemd-Datei /etc/systemd/system/stalwart.service anpassen. Die sah im alten Zustand so aus:

[Unit]
Description=Stalwart
Conflicts=postfix.service sendmail.service exim4.service
ConditionPathExists=/opt/stalwart/etc/config.toml
After=network-online.target

[Service]
Type=simple
LimitNOFILE=65536
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=5
ExecStart=/opt/stalwart/bin/stalwart --config=/opt/stalwart/etc/config.toml
SyslogIdentifier=stalwart
User=stalwart
Group=stalwart
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Im neuen Zustand muss diese Datei dann erst mal so aussehen:

[Unit]
Description=Stalwart
Conflicts=postfix.service sendmail.service exim4.service
ConditionPathExists=/etc/stalwart/config.toml
After=network-online.target

[Service]
Type=simple
LimitNOFILE=65536
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/stalwart --config=/etc/stalwart/config.toml
SyslogIdentifier=stalwart
User=stalwart
Group=stalwart
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Oder als diff:

# diff stalwart.service.v0.15.x stalwart.service

4c4
< ConditionPathExists=/opt/stalwart/etc/config.toml
---
> ConditionPathExists=/etc/stalwart/config.toml
14c14
< ExecStart=/opt/stalwart/bin/stalwart --config=/opt/stalwart/etc/config.toml
---
> ExecStart=/usr/local/bin/stalwart --config=/etc/stalwart/config.toml

RocksDB und Logs verschieben

mv /opt/stalwart/data /var/lib/stalwart
mv /opt/stalwart/logs /var/log/stalwart
chmod 750 /var/lib/stalwart
chmod 750 /var/log/stalwart

Noch die /etc/stalwart/config.toml anpassen. Der Parameter …

  • store.rocksdb.path muss auf "/var/lib/stalwart"
  • tracer.log.path muss auf "/var/log/stalwart"

… geändert werden.

Stalwart mit aktualisierter Services-Datei neu starten

systemctl daemon-reload
systemctl start stalwart

Fazit

Damit ist Stalwart,

  • nach wie vor in der Version 0.15.5 und
  • für den Fall eines einfache Single-Node-Setups

grundsätzlich mal auf den v0.16.0- bzw. v0.16.1-Upgrade vorbereitet. Weitere Anleitung für das konkrete Upgrade folgt.

Schreibe einen Kommentar