Skip to content

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:

systemctl stop mysql
dnf remove mysql*

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:

dnf install MariaDB-common MariaDB-shared MariaDB-devel

To protect your MariaDB installation from automatic updates by dnf update, lock your version with

dnf install yum-plugin-versionlock
dnf versionlock add MariaDB-server

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:

systemctl enable mariadb
systemctl start mariadb

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

dnf install MariaDB-client MariaDB-devel

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