<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[First install on Linux: the order of operations, Debian to openSUSE]]></title><description><![CDATA[<p dir="auto">The order matters more than the commands. The package installs the server <strong>enabled and stopped</strong>, on purpose: it has no database yet, and nothing in a package can know which backend you have or its credentials. The full sequence, with the output each step prints, is <a href="https://www.progressiverobot.com/hmailserver-documentation/#353-installing" rel="nofollow ugc">§35.3</a>. Take the exact file names from the <a href="https://www.progressiverobot.com/hmailserver-downloads/" rel="nofollow ugc">downloads page</a>, and note the RPM carries a <code>-1</code> release field in its name.</p>
<p dir="auto"><strong>1. Install the package.</strong> <code>sudo apt install ./&lt;file&gt;.deb</code> on Debian and Ubuntu, <code>sudo dnf install ./&lt;file&gt;.rpm</code> on Fedora and RHEL, <code>sudo zypper install ./&lt;file&gt;.rpm</code> on openSUSE. The RPM is the same file. The maintainer script creates the <code>hmailserver</code> system user and group, creates the directories, and enables the unit without starting it. It deliberately does not walk or chown an existing store.</p>
<p dir="auto"><strong>2. If your backend is MySQL or MariaDB, install the client library now.</strong> The server opens it at run time and no package manager will pull it in: <code>libmariadb3</code> on Debian and Ubuntu, <code>mariadb-connector-c</code> on Fedora and RHEL, <code>mariadb-libs</code> on Arch. PostgreSQL needs nothing extra.</p>
<p dir="auto"><strong>3. Create the database role.</strong> Either let the role create its own database, or create an empty one yourself and leave the role without CREATEDB. <a href="https://www.progressiverobot.com/hmailserver-documentation/#354-creating-the-database" rel="nofollow ugc">§35.4</a> has both, and the SSL keys for a database on another host.</p>
<p dir="auto"><strong>4. Edit <code>/etc/hmailserver/hMailServer.ini</code>.</strong> Fill in <code>[Database]</code>. Two rules catch people. Only <code>;</code> starts a comment, and only at the start of a line. Text after a value on the same line is part of the value, so <code>Type=PostgreSQL ; the backend</code> matches no backend name. Write the port out: PostgreSQL wants 5432, MySQL and MariaDB want 3306. Leave <code>AdministratorPassword</code> alone.</p>
<p dir="auto"><strong>5. Set the administrator password.</strong> <code>sudo hmailserver --set-admin-password</code> reads it from standard input with echo off and writes the hash into the file. This is the one step that runs as root, because the file is <code>0640 root:hmailserver</code>.</p>
<p dir="auto"><strong>6. Create the schema.</strong> <code>sudo -u hmailserver hmailserver --create-database</code>.</p>
<p dir="auto"><strong>7. Check it before starting anything.</strong> <code>sudo -u hmailserver hmailserver --check-config</code>, as the service user and without <code>--config</code>, so the server has to find the configuration on its own. <code>Database type: 0</code> means the <code>Type</code> key did not take. It is a report and not a validator: it returns 0 unconditionally, so read the output rather than its exit status.</p>
<p dir="auto"><strong>8. Start it.</strong> <code>sudo systemctl start hmailserver</code>, then <code>journalctl -u hmailserver -f</code>.</p>
<p dir="auto">A freshly created database already holds four listeners: SMTP on 25 and 587, POP3 on 110 and IMAP on 143, bound to every address with connection security set to none. Those are database rows, not INI keys, so you change them over the API or the Control Deck's Ports view before this faces the internet.</p>
<p dir="auto"><strong>9. Turn on administration.</strong> Set <code>RestApiPort</code>, leave <code>RestApiBindAddress</code> on loopback, and reload. TLS is required unless the bind address is exactly <code>127.0.0.1</code>, <code>localhost</code> or <code>::1</code>, so tunnel over SSH rather than exposing it. <a href="https://www.progressiverobot.com/hmailserver-documentation/#359-certificates-on-linux" rel="nofollow ugc">§35.9</a> and <a href="https://www.progressiverobot.com/hmailserver-documentation/#3510-administering-a-linux-server" rel="nofollow ugc">§35.10</a> are the rest.</p>
<p dir="auto">Post what <code>--check-config</code> printed and the last lines of <code>journalctl -u hmailserver</code> if a step stops. <a href="https://www.progressiverobot.com/hmailserver-documentation/#3516-troubleshooting-a-linux-installation" rel="nofollow ugc">§35.16</a> lists the Linux-specific failures by symptom.</p>
]]></description><link>https://www.hmailserver.co.uk/topic/28190/first-install-on-linux-the-order-of-operations-debian-to-opensuse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 04:11:03 GMT</lastBuildDate><atom:link href="https://www.hmailserver.co.uk/topic/28190.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2026 01:25:00 GMT</pubDate><ttl>60</ttl></channel></rss>