DEV Community

nabbisen
nabbisen

Posted on • Edited on • Originally published at obsd.solutions

Mailman mailing list on OpenBSD 6.7

Summary

With mail servers, Just forwarding emails to multiple addresses is easy.
Also, we can build an advanced mailing list system.
This post is about how to build a GNU Mailman server on OpenBSD.

Environment

  • OS: OpenBSD 6.7
  • MTA (Mail Transfer Agent): OpenSMTPD
  • Mailing List Server: GNU Mailman 2.1

Tutorial

The package manager is available and useful because it provides well-configured setting files as well as applications.
Just run:

# pkg_add mailman
Enter fullscreen mode Exit fullscreen mode

The result is:

quirks-3.325 signed on 2020-06-04T16:43:21Z
mailman-2.1.32:python-2.7.18p0: ok
mailman-2.1.32:py-setuptools-41.6.0v0: ok
mailman-2.1.32:py-dnspython-1.16.0p2: ok
File /var/spool/mailman/data/sitelist.cfg could not be installed:
    No such file or directory
mailman-2.1.32: ok
The following new rcscripts were installed: /etc/rc.d/mailman
See rcctl(8) for details.
New and changed readme(s):
    /usr/local/share/doc/pkg-readmes/mailman
Enter fullscreen mode Exit fullscreen mode

Well, it is useful to read /usr/local/share/doc/pkg-readmes/mailman above.

Then, edit the config file:

# # (optional) make a backup beforehand:
# # cp -p /usr/local/lib/mailman/Mailman/mm_cfg.py /usr/local/lib/mailman/Mailman/mm_cfg.py.org

# nvim /usr/local/lib/mailman/Mailman/mm_cfg.py
Enter fullscreen mode Exit fullscreen mode

to add the lines in the end of the file:

  # Put YOUR site-specific settings below this line.
+ MAILMAN_GROUP = '_mailman'
+ MAILMAN_USER = '_mailman'
Enter fullscreen mode Exit fullscreen mode

It is because, without them, the errors below occur at starting the mailman daemon:

    gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
KeyError: 'getgrnam(): name not found: '
Enter fullscreen mode Exit fullscreen mode
    uid = pwd.getpwnam(mm_cfg.MAILMAN_USER)[2]
KeyError: 'getpwnam(): name not found: '
Enter fullscreen mode Exit fullscreen mode

Next, you need to create the first list in order to escape from the error at starting the mailman daemon:

Site list is missing: mailman
Enter fullscreen mode Exit fullscreen mode

The detail is here in the official documentation.

Run the Mailman command:

# /usr/local/lib/mailman/bin/newlist mailman
Enter fullscreen mode Exit fullscreen mode

which is followed by:

Enter the email of the person running the list: <your@email.address>
Initial mailman password: 
Enter fullscreen mode Exit fullscreen mode
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:

## mailman mailing list
mailman:              "|/usr/local/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/usr/local/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/usr/local/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/usr/local/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/usr/local/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/usr/local/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/usr/local/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/usr/local/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/usr/local/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/usr/local/lib/mailman/mail/mailman unsubscribe mailman"

Hit enter to notify mailman owner...
Enter fullscreen mode Exit fullscreen mode

In order to follow the messages, edit it:

# nvim /etc/mail/aliases
Enter fullscreen mode Exit fullscreen mode

and run:

# newaliases
/etc/mail/aliases: xx aliases
Enter fullscreen mode Exit fullscreen mode

As it is written in /usr/local/share/doc/pkg-readmes/mailman, it is necessary to add a group to the MTA user:

# usermod -G _mailmanq _smtpd
Enter fullscreen mode Exit fullscreen mode

It is almost done.

Well, optionally, I had two additional modification.

#1. I had to modify /etc/mail/smtpd.conf to let OpenSMTPD accept requests from egress to the mailing list domain.
I modified /etc/mail/smtpd.conf like:

  ...
  listen on egress \
          tls pki <pki> \
          auth-optional \
          tag MTA
  ...
  action "local" maildir alias <aliases>
  ...
+ match tag MTA   from any                for domain "<fqdn>" action "local"
  ...
Enter fullscreen mode Exit fullscreen mode

#2. I set up default list settings.

# nvim /usr/local/lib/mailman/Mailman/mm_cfg.py
Enter fullscreen mode Exit fullscreen mode
  # Put YOUR site-specific settings below this line.
  ...
+ DEFAULT_URL_HOST = '<mail-server-fqdn>'
+ DEFAULT_EMAIL_HOST = '<mailing-list-domain>'
+ add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
Enter fullscreen mode Exit fullscreen mode

Let's start the mailing list system:

# rcctl -f -d start mailman
doing _rc_parse_conf
doing _rc_quirks
mailman_flags empty, using default >-s start<
doing _rc_parse_conf /var/run/rc.d/mailman
doing _rc_quirks
doing rc_check
mailman
doing rc_start
doing _rc_wait start
doing rc_check
Starting Mailman's master qrunner.
doing _rc_write_runfile
(ok)
Enter fullscreen mode Exit fullscreen mode

Now you may operate lists via command line :)
The commands MailMan provides are here.
For example, running /usr/local/lib/mailman/bin/newlist <list-name> will create your first list.

Have you decided to use Mailman?
If so, the last steps are registering cron jobs and enabling the daemon to let it start at boot.

# crontab -u _mailman /usr/local/lib/mailman/cron/crontab.in
Enter fullscreen mode Exit fullscreen mode
# rcctl enable mailman
Enter fullscreen mode Exit fullscreen mode

Thank you for your reading.
I hope you enjoy the networks :)

Top comments (0)