{"id":2263,"date":"2026-04-28T13:01:39","date_gmt":"2026-04-28T11:01:39","guid":{"rendered":"https:\/\/grupp-web.de\/cms\/?p=2263"},"modified":"2026-04-29T11:21:10","modified_gmt":"2026-04-29T09:21:10","slug":"stalwart-verzeichnisse-anpassen-upgrade-v0-16-vorbereitung","status":"publish","type":"post","link":"https:\/\/grupp-web.de\/cms\/2026\/04\/28\/stalwart-verzeichnisse-anpassen-upgrade-v0-16-vorbereitung\/","title":{"rendered":"Stalwart-Verzeichnisse anpassen &#8211; Upgrade-v0.16 Vorbereitung"},"content":{"rendered":"\n<p>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\u00f6ffentlicht das einiges an \u00c4nderungen mit sich bringt. Es dient u.a. auch als Vorbereitung auf die Version 1.0 und r\u00e4umt mit &#8222;ein paar&#8220; Altlasten auf.<\/p>\n\n\n\n<p>Es ist aus meiner pers\u00f6nlichen Sicht sinnvoll vor dem Upgrade, noch in der v0.15.5-Installation, mindestens die folgenden Punkte abzuarbeiten.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Account Namen m\u00fcssen nun E-Mail-Adressen sein<\/li>\n\n\n\n<li>Bei Anwendung des Installations-Skripts bis incl. v0.15.5 wurde Stalwart komplett (Konfiguration, Daten, Binary, Logs) in Verzeichnisse unterhalb von <code>\/opt\/stalwart<\/code> installiert. Beim Upgrade auf Version 0.16.0 wird aber davon ausgegangen, dass die Verzeichnisse dem <strong>File System Hierarchy Standard (FHS)<\/strong> gen\u00fcgen &#8211; konkret also\n<ul class=\"wp-block-list\">\n<li><code>\/usr\/local\/bin\/stalwart<\/code> als Platz f\u00fcr das Stalwart-Binary<\/li>\n\n\n\n<li><code>\/etc\/stalwart\/config.toml<\/code> als Platz f\u00fcr die toml-Konfigurationsdatei<\/li>\n\n\n\n<li><code>\/var\/lib\/stalwart<\/code> f\u00fcr den Data Store (bei Single-Node RocksDB)<\/li>\n\n\n\n<li><code>\/var\/log\/stalwart\/<\/code> f\u00fcr Log-Dateien<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Nachfolgend eine exemplarische Anleitung um diese Voraussetzungen in einer simplen Single-Node Stalwart-Installation (so wie ich sie <a href=\"https:\/\/media.ccc.de\/v\/clt26-369-e-mail-kalender-kontakte-und-dateien-mit-stalwart\" data-type=\"link\" data-id=\"https:\/\/media.ccc.de\/v\/clt26-369-e-mail-kalender-kontakte-und-dateien-mit-stalwart\" target=\"_blank\" rel=\"noreferrer noopener\">in diesem Vortrag<\/a> vorgestellt habe) zu realisieren.<\/p>\n\n\n\n<p><strong>ACHTUNG:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Erstellen Sie unbedingt vorab ein vollst\u00e4ndiges Backup des Mailsystems!<\/li>\n\n\n\n<li>Falls Sie die M\u00f6glichkeit dazu haben erstellen Sie einen Snapshot des Servers<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Account-Namen<\/h2>\n\n\n\n<p>User vorab informieren, dann in der internen User-Verwaltung die Accounts anpassen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a  href=\"https:\/\/grupp-web.de\/cms\/wp-content\/uploads\/2026\/04\/grafik.png\" data-rel=\"lightbox-gallery-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"235\" src=\"https:\/\/grupp-web.de\/cms\/wp-content\/uploads\/2026\/04\/grafik.png\" alt=\"Screenshot eines Accounts, im Edit-Mode, bei dem der Login-Namen schon als E-Mailadresse konfiguriert ist\" class=\"wp-image-2264\" srcset=\"https:\/\/grupp-web.de\/cms\/wp-content\/uploads\/2026\/04\/grafik.png 484w, https:\/\/grupp-web.de\/cms\/wp-content\/uploads\/2026\/04\/grafik-300x146.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Verzeichnisse entsprechend FHS-Standard<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Stalwart stoppen, <code>etc<\/code>-Verzeichnis &amp; Binaries passend platzieren<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Stalwart stoppen\nsystemctl stop stalwart.service\n# etc-Verzeichnis an die richtige Stelle schieben\nmkdir \/etc\/stalwart\nchown stalwart:stalwart \/etc\/stalwart\ncp -p \/opt\/stalwart\/etc\/config.toml \/etc\/stalwart\/\n# Bei mir waren vorher noch SymLinks von \/usr\/local\/bin auf\n# die beiden Binaries stalwart und stalwart-cli die noch unter\n# \/opt\/stalwart\/bin lagen. Diese SymLinks habe ich vorher gel\u00f6scht\n# und dann die Binaries wie folgt an die richtige Stelle geschoben\ncp \/opt\/stalwart\/bin\/stalwart \/usr\/local\/bin\ncp \/opt\/stalwart\/bin\/stalwart-cli \/usr\/local\/bin\nchown stalwart:stalwart \/usr\/local\/bin\/stalwart*<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><code>systemd<\/code>-Service-Datei anpassen<\/h3>\n\n\n\n<p>Nun die zugeh\u00f6rige <code>systemd<\/code>-Datei <code>\/etc\/systemd\/system\/stalwart.service<\/code> anpassen. Die sah im alten Zustand so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">[Unit]\nDescription=Stalwart\nConflicts=postfix.service sendmail.service exim4.service\nConditionPathExists=\/opt\/stalwart\/etc\/config.toml\nAfter=network-online.target\n\n[Service]\nType=simple\nLimitNOFILE=65536\nKillMode=process\nKillSignal=SIGINT\nRestart=on-failure\nRestartSec=5\nExecStart=\/opt\/stalwart\/bin\/stalwart --config=\/opt\/stalwart\/etc\/config.toml\nSyslogIdentifier=stalwart\nUser=stalwart\nGroup=stalwart\nAmbientCapabilities=CAP_NET_BIND_SERVICE\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>Im neuen Zustand muss diese Datei dann erst mal so aussehen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">[Unit]\nDescription=Stalwart\nConflicts=postfix.service sendmail.service exim4.service\nConditionPathExists=\/etc\/stalwart\/config.toml\nAfter=network-online.target\n\n[Service]\nType=simple\nLimitNOFILE=65536\nKillMode=process\nKillSignal=SIGINT\nRestart=on-failure\nRestartSec=5\nExecStart=\/usr\/local\/bin\/stalwart --config=\/etc\/stalwart\/config.toml\nSyslogIdentifier=stalwart\nUser=stalwart\nGroup=stalwart\nAmbientCapabilities=CAP_NET_BIND_SERVICE\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>Oder als <code>diff<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># diff stalwart.service.v0.15.x stalwart.service\n\n4c4\n&lt; ConditionPathExists=\/opt\/stalwart\/etc\/config.toml\n---\n&gt; ConditionPathExists=\/etc\/stalwart\/config.toml\n14c14\n&lt; ExecStart=\/opt\/stalwart\/bin\/stalwart --config=\/opt\/stalwart\/etc\/config.toml\n---\n&gt; ExecStart=\/usr\/local\/bin\/stalwart --config=\/etc\/stalwart\/config.toml<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">RocksDB und Logs verschieben<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">mv \/opt\/stalwart\/data \/var\/lib\/stalwart\nmv \/opt\/stalwart\/logs \/var\/log\/stalwart\nchmod 750 \/var\/lib\/stalwart\nchmod 750 \/var\/log\/stalwart<\/code><\/pre>\n\n\n\n<p>Noch die <code>\/etc\/stalwart\/config.toml<\/code> anpassen. Der Parameter &#8230;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>store.rocksdb.path<\/code> muss auf <code>\"\/var\/lib\/stalwart\"<\/code><\/li>\n\n\n\n<li><code>tracer.log.path<\/code> muss auf <code>\"\/var\/log\/stalwart\"<\/code><\/li>\n<\/ul>\n\n\n\n<p>&#8230; ge\u00e4ndert werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stalwart mit aktualisierter Services-Datei neu starten<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">systemctl daemon-reload\nsystemctl start stalwart<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Damit ist Stalwart, <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nach wie vor in der Version 0.15.5 und<\/li>\n\n\n\n<li>f\u00fcr den Fall eines einfache Single-Node-Setups<\/li>\n<\/ul>\n\n\n\n<p>grunds\u00e4tzlich mal auf den v0.16.0- bzw. v0.16.1-Upgrade vorbereitet. Weitere Anleitung f\u00fcr das konkrete Upgrade folgt.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00f6ffentlicht das einiges an \u00c4nderungen mit sich bringt. Es dient u.a. auch als Vorbereitung auf die Version 1.0 und r\u00e4umt mit &#8222;ein paar&#8220; Altlasten auf. Es ist aus meiner pers\u00f6nlichen Sicht sinnvoll vor dem Upgrade, noch &#8230; <a title=\"Stalwart-Verzeichnisse anpassen &#8211; Upgrade-v0.16 Vorbereitung\" class=\"read-more\" href=\"https:\/\/grupp-web.de\/cms\/2026\/04\/28\/stalwart-verzeichnisse-anpassen-upgrade-v0-16-vorbereitung\/\" aria-label=\"Mehr Informationen \u00fcber Stalwart-Verzeichnisse anpassen &#8211; Upgrade-v0.16 Vorbereitung\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":2270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,5],"tags":[],"class_list":["post-2263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-anleitung","category-linux"],"_links":{"self":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/comments?post=2263"}],"version-history":[{"count":7,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2263\/revisions"}],"predecessor-version":[{"id":2274,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2263\/revisions\/2274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/media\/2270"}],"wp:attachment":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/media?parent=2263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/categories?post=2263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/tags?post=2263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}