3 General Requirements
This document will guide you through some necessary steps, which are needed to install and configure EMM. It requires a solid knowledge of Linux system administration, some knowledge of Oracle or MariaDB database administration (depending on the DBMS you plan to use) and basic knowledge of Domain Name Services (DNS) to configure the domain names for various servers.
3.1 Hardware Requirements
The hardware requirements of EMM depend on your plans: If you run a single mailing list with a few ten thousand recipients, an installation on a single x64 server would be fine. However, if you plan to send out several million emails daily, you should operate a whole server farm. Please contact the AGNITAS support at support@agnitas.com for further discussion.
3.2 Software Stack
EMM runs on top of a well proven Open Source software stack without any further dependencies to any commercial software. These are the software components required by EMM Inhouse 26.05:
- 64-bit version of Linux distribution RHEL 8 or 9, AlmaLinux 8 or 9 or SLES 15
- Java Open JDK 21 (LTS version)
- Apache Tomcat 11
- Python 3.11 or later (see chapter Deployment of Python 3 for details)
- DBMS: MariaDB 10.6.10 or later (we use 10.11.7 and 11.4.9, see MariaDB for details); Oracle DBMS 11g SE1 or 19c SE2
- MTA: Postfix 3.5 or later
- Node.js 22 or later
It may be that EMM also runs on later versions than the ones listed above, but this has not been tested in a production environment, yet.
To install EMM and the required software stack you need a shell access (like bash) for all servers as user root. All command-line examples are based on RHEL or SLES. Except as otherwise noted, you should run all commands as user root to make sure you own and you can grant the required permissions.
Instructions that are valid only for RHEL, are introduced with a header line RHEL and are ended with a horizontal line. Instructions that are valid only for SLES, are introduced with a header line SLES and are ended with a horizontal line, too. The same goes for MariaDB and Oracle.
3.2.1 Software Stack Roadmap / End of Life
Here are some additional information on the software stack requirement of future versions of EMM Inhouse, so that you have enough lead time for your release plannings:
- tbd
3.3 Operating System
Make sure that service cron is enabled on all servers and that SELinux (RHEL) and AppArmor (SLES) are disabled on all servers. Disable SELinux by changing parameter SELINUX to value "permissive" or "disabled" in file config of directory /etc/selinux and reboot the server.
If a legacy file timezone exists in directory /etc of your servers, please make sure that this file uses your local timezone, because EMM picks up this timezone. If file timezone does not exist, check if symlink localtime in directory /etc points to your local timezone.
For SLES, start Yast and activate SUSE Linux Enterprise Software Development x86_64 in menu Software -> Product Registration -> Select Extensions.
Update the operating system to its latest release. This will keep your system in the most stable state and harden it against various intrusion attempts.
Please be advised that if you have configured your operating systems to do automatic updates, these updates may cause problems. Example: The operating system updates the Java version EMM uses to a new version while EMM is running. This will require a restart of EMM to get rid of any inconsistencies caused by mixing the old and new Java version at runtime.
Install all required packages as noted below. Further dependencies will be resolved and installed automatically by the repository management software.
RHEL:
dnf update
dnf install libxml2 sqlite-devel gdbm-devel readline-devel gcc make openssl openssl-devel
SLES:
zypper update
zypper install libxml2 sqlite3-devel gdbm-devel readline-devel gcc make openssl openssl-devel
3.4 MariaDB
If you want to use EMM with a MariaDB database, you have to install the database software before you install the MariaDB database driver module for Python. If MySQL is preinstalled on any of your servers, you have to remove it first before installing MariaDB:
Even officially published versions of MariaDB may contain serious bugs, including severe data corruption, performance problems or security issues (see public bugtracker at https://jira.mariadb.org). Therefore, we can not recommend to blindly install the latest version available because of the potential risk of data loss. For example, we used MariaDB 10.6.8 for the EMM public cloud and for us this version worked fine (while the following version 10.6.9 contained a crash level bug and did not work at all with EMM).
Please note that MariaDB 10.6.8 will no longer work with RHEL 9 or AlmaLinux 9, because some required dependencies are no longer available in the repositories of these Linux versions. Also, MariaDB 10.6.8 does not work with Python 3.11, which is required by EMM. For AlmaLinux 9 and Python 3.11, we use MariaDB 10.11.7 and 11.4.9 in our production environment and this version works fine for us.
3.4.1 Installation of MariaDB Repository
We recommend to install the MariaDB RPM files from the official MariaDB repository. If you want to use the same version we use, download the version mentioned above. We urge you to also read section Database Driver for Python 3 first for arguments why to use the packages from the repository provided by MariaDB.
For the DBMS server you need the server and client component of MariaDB. At first, enable the MariaDB repository so that the required dependencies are installed automatically:
wget https://r.mariadb.com/downloads/mariadb_repo_setup
bash mariadb_repo_setup --mariadb-server-version="mariadb-10.11"
3.4.2 Installation for DBMS Server
For the DBMS server you need the server and client components of MariaDB. Install the MariaDB-server package (including dependencies) first. For RHEL 9 use
dnf install https://archive.mariadb.org/mariadb-10.11.7/yum/almalinux9-amd64/rpms/MariaDB-server-10.11.7-1.el9.x86_64.rpm
and for RHEL 8
dnf install https://archive.mariadb.org/mariadb-10.11.7/yum/almalinux8-amd64/rpms/MariaDB-server-10.11.7-1.el8.x86_64.rpm
Afterwards, install the remaining package MariaDB-devel (needed for Python/PIP) with:
To protect your MariaDB installation from automatic updates by dnf update, lock your version with
Edit the master configuration file my.cnf in directory /etc:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mariadb/mariadb.log
innodb_stats_persistent=0
!includedir /etc/my.cnf.d
To start MariaDB and to make sure it launches every time the server is rebooted:
After installation of MariaDB, we strongly recommend to tweak its configuration for best performance. See section MariaDB Database Tuning for details.
3.4.3 Installation for EMM Servers
Except for the DBMS server, all other servers running EMM services do only need the client components of MariaDB to access the database, and servers running only a mailer service do not need access to the database at all, i.e. for those servers you can skip this section.
Install the required MariaDB packages with
3.5 EMM Services
This is a list of all services of EMM with the servers needing the respective service and the name of the user running this service:
| Backend Services | Server Needing this Service | User of Service |
|---|---|---|
| merger service | merger server, EMM server (aka frontend), redirect server | merger |
| mailer service | mail server, EMM server (aka frontend), redirect server | mailout |
| mailloop service | filter server | mailloop |
| Frontend Services | Server Needing this Service | User of Service |
|---|---|---|
| GUI service ("emm") | EMM server | console |
| statistics service ("statistics") | EMM server | console |
| webservices 2.0 ("webservices") | EMM server | console |
| redirect service ("rdir") | redirect server | rdir |
These global parameters have to be defined in advance:
| Parameter | Description | Example |
|---|---|---|
| EMM hostname | FQDN of EMM server (aka frontend) | emm.domain.com |
| sender domain name | domain name for system mails of EMM | domain.com |
| merger hostname | FQDN of merger server | merger.domain.com |
| merger IP address | internal IP address used by merger server to access other EMM servers | 127.0.0.1 (and all other IP addresses of the merger server) |
| mailer hostname | FQDN of mail server (excluding redirect server) | mailer1.domain.com, mailer2.domain.com |
| filter server hostname | FQHN of filter server | filter.domain.com |
| mailloop service domain name | FQDN for which mailloop service should provide bounce management, autoresponder detection and feedback forwarding; must be different from filter server hostname so that the Postfix installation of the filter server treats the mailloop service as a remote destination | mailloop.domain.com |
| filter MX record | MX record for filter server running the mailloop service | mailloop.domain.com IN MX filter.domain.com |
| redirect service domain name | domain name of redirect service | rdir.domain.com |
| redirect server hostname | FQDN of redirect server offering redirect service | rdir1.domain.com, rdir2.domain.com |