 
            I am about to migrate from mailma2 on CentOS to mailman3 on Ubuntu. Are there any special gotchas of which I need to be aware? TIA.
 
            dap1--- via Mailman-users writes:
I am about to migrate from mailma2 on CentOS to mailman3 on Ubuntu. Are there any special gotchas of which I need to be aware? TIA.
- The Ubuntu packages are old, and not well-supported by Ubuntu or the Mailman project. Mailman 3 is not a hyperactive project, but we are making steady progress and many new Mailman 3 users have issues or requests for enhancement for 2-, 3-year-old packages that have been fixed or implemented in the most recent releases. For these reasons, we strongly recommend installing from source or from PyPI in a virtual environment: https://docs.mailman3.org/en/latest/install/virtualenv.html#virtualenv-insta... (Installing from source is not hard, but it's more work than using pre-built packages. Source is required for beta testers and developers, but not recommended for most production environments.) 
- If your preferred RDBMS is in the MySQL family: 
- Make sure the Mailman database(s) have the utf8mb4 charset option set. Otherwise all emoji and some Asian characters will cause your database to throw errors (I think this is mostly an issue for HyperKitty and maybe a few users who put them in their display names in Postorius and Mailman core). This is not needed for PostgreSQL or SQLite3.
- You may want to increase the timeout for startup (I think this is in the systemd units for mailman and mailmanweb). The issue is that the mysqld doesn't exit until the journal has been flushed to the main database (or something like that), and this may take many seconds. This is not an issue for SQLite3 (it's a library) or PostgreSQL (it uses dbus to notify systemd that it's ready).
- The migration scripts for list database and web databases are quite good, but not 100%. 
- The user model is completely different. Ordinary subscribers will probably be happy or won't notice, but there are some traps for administration roles. The most important is that some list owners will give the owner password to moderators so they can do work like use mass subscribe, but put them on the moderator list attribute so they get the moderation notices. These moderators will lose the "owner" capabilities like mass subscribe. 
- If you're looking at a multinode installation with Mailman core, Postorius and HyperKitty distributed across several hosts or containers, configuration can be finicky. I don't recommend it unless you're familiar with such distributed operations. 
Steve
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/17/2025 3:09 AM, Stephen J. Turnbull wrote:
dap1--- via Mailman-users writes:
I am about to migrate from mailma2 on CentOS to mailman3 on Ubuntu. Are there any special gotchas of which I need to be aware? TIA.
The Ubuntu packages are old, and not well-supported by Ubuntu or the Mailman project. Mailman 3 is not a hyperactive project, but we are making steady progress and many new Mailman 3 users have issues or requests for enhancement for 2-, 3-year-old packages that have been fixed or implemented in the most recent releases. For these reasons, we strongly recommend installing from source or from PyPI in a virtual environment: https://docs.mailman3.org/en/latest/install/virtualenv.html#virtualenv-insta... (Installing from source is not hard, but it's more work than using pre-built packages. Source is required for beta testers and developers, but not recommended for most production environments.)
If your preferred RDBMS is in the MySQL family:
- Make sure the Mailman database(s) have the utf8mb4 charset option set. Otherwise all emoji and some Asian characters will cause your database to throw errors (I think this is mostly an issue for HyperKitty and maybe a few users who put them in their display names in Postorius and Mailman core). This is not needed for PostgreSQL or SQLite3.
- You may want to increase the timeout for startup (I think this is in the systemd units for mailman and mailmanweb). The issue is that the mysqld doesn't exit until the journal has been flushed to the main database (or something like that), and this may take many seconds. This is not an issue for SQLite3 (it's a library) or PostgreSQL (it uses dbus to notify systemd that it's ready).
The migration scripts for list database and web databases are quite good, but not 100%.
The user model is completely different. Ordinary subscribers will probably be happy or won't notice, but there are some traps for administration roles. The most important is that some list owners will give the owner password to moderators so they can do work like use mass subscribe, but put them on the moderator list attribute so they get the moderation notices. These moderators will lose the "owner" capabilities like mass subscribe.
If you're looking at a multinode installation with Mailman core, Postorius and HyperKitty distributed across several hosts or containers, configuration can be finicky. I don't recommend it unless you're familiar with such distributed operations.
Steve
Hi Steve,
Thanks for the info. I thought I had followed everything but I an unable to start mailman3 because all the expected directories in /var are missing. What steps did I miss?
The instructions are a bit confusing because I had to keep switching between mailman and admin for setting up various files such as /etc/mailman3. There was no step to make mailman a sudoers. I hope I didn't mess up the installation by switching back and forth.
 
            Dennis Putnam via Mailman-users writes:
Thanks for the info. I thought I had followed everything but I an unable to start mailman3 because all the expected directories in /var are missing. What steps did I miss?
If you are setting up according to the virtual environment instructions, Mailman shouldn't be looking for anything in /var that you didn't explicitly configure to be there.
With the venv active, try running just "mailman info". If that succeeds and reports something other than /etc/mailman3/mailman.cfg, then check the file it reports for "layout" and "var_dir" settings, and remove the var_dir hierachy because it's just confusing. Then run
mailman -C /etc/mailman3/mailman.cfg infoIf that succeeds, try starting Mailman with
mailman -f -C /etc/mailman3/mailman.cfg startThe "-f" is short for "--force" and it just cleans up any stale lock files that might prevent Mailman from starting. (We now recommend using it in the init script or systemd unit file ExecStart command.)
If either of those fails, or Mailman starts but "doesn't work", look in the logs (systemctl status, journalctl -eu, and $var_dir/logs/mailman.log for error messages, and send those along with /etc/mailman3/mailman.cfg to us. In the case of "doesn't work", tell us what you mean by "doesn't work": Mailman doesn't accept mail, Mailman crashes, Mailman doesn't send mail, etc.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/19/2025 2:42 AM, Stephen J. Turnbull wrote:
Dennis Putnam via Mailman-users writes:
Thanks for the info. I thought I had followed everything but I an unable to start mailman3 because all the expected directories in /var are missing. What steps did I miss?
If you are setting up according to the virtual environment instructions, Mailman shouldn't be looking for anything in /var that you didn't explicitly configure to be there.
With the venv active, try running just "mailman info". If that succeeds and reports something other than /etc/mailman3/mailman.cfg, then check the file it reports for "layout" and "var_dir" settings, and remove the var_dir hierachy because it's just confusing. Then run
mailman -C /etc/mailman3/mailman.cfg infoIf that succeeds, try starting Mailman with
mailman -f -C /etc/mailman3/mailman.cfg startThe "-f" is short for "--force" and it just cleans up any stale lock files that might prevent Mailman from starting. (We now recommend using it in the init script or systemd unit file ExecStart command.)
If either of those fails, or Mailman starts but "doesn't work", look in the logs (systemctl status, journalctl -eu, and $var_dir/logs/mailman.log for error messages, and send those along with /etc/mailman3/mailman.cfg to us. In the case of "doesn't work", tell us what you mean by "doesn't work": Mailman doesn't accept mail, Mailman crashes, Mailman doesn't send mail, etc.
Hi Steve,
Thanks again. I think I found the problem. When I created the mailman.cfg file, for some reason everything was commented out. After saving I didn't bother to look at it. My bad. I then went though and uncommented as appropriate however I have one problem. I don't know what to do with this section for MySQL.
[database] class: mailman.database.postgresql.PostgreSQLDatabase url: postgresql://mailman:MYPASSWORD@localhost/mailman
Just as an FYI here is my full mailman.cfg:
# /etc/mailman3/mailman.cfg [paths.here] var_dir: /opt/mailman/mm/var
[mailman] layout: here # # This address is the "site owner" address. Certain messages which must be # # delivered to a human, but which can't be delivered to a list owner (e.g. a # # bounce from a list owner), will be sent to this address. It should point to # # a human. site_owner: xxxxxx@ddddddddddd
[database] class: mailman.database.postgresql.PostgreSQLDatabase url: postgresql://mailman:MYPASSWORD@localhost/mailman
[archiver.prototype] enable: yes
# # For the HyperKitty archiver. [archiver.hyperkitty] class: mailman_hyperkitty.Archiver enable: yes configuration: /etc/mailman3/mailman-hyperkitty.cfg
[shell] history_file: $var_dir/history.py
[mta] verp_confirmations: yes verp_personalized_deliveries: yes verp_delivery_interval: 1
 
            On 10/19/2025 2:42 AM, Stephen J. Turnbull wrote:
Dennis Putnam via Mailman-users writes:
Thanks for the info. I thought I had followed everything but I an unable to start mailman3 because all the expected directories in /var are missing. What steps did I miss?
If you are setting up according to the virtual environment instructions, Mailman shouldn't be looking for anything in /var that you didn't explicitly configure to be there.
With the venv active, try running just "mailman info". If that succeeds and reports something other than /etc/mailman3/mailman.cfg, then check the file it reports for "layout" and "var_dir" settings, and remove the var_dir hierachy because it's just confusing. Then run
mailman -C /etc/mailman3/mailman.cfg infoIf that succeeds, try starting Mailman with
mailman -f -C /etc/mailman3/mailman.cfg startThe "-f" is short for "--force" and it just cleans up any stale lock files that might prevent Mailman from starting. (We now recommend using it in the init script or systemd unit file ExecStart command.)
If either of those fails, or Mailman starts but "doesn't work", look in the logs (systemctl status, journalctl -eu, and $var_dir/logs/mailman.log for error messages, and send those along with /etc/mailman3/mailman.cfg to us. In the case of "doesn't work", tell us what you mean by "doesn't work": Mailman doesn't accept mail, Mailman crashes, Mailman doesn't send mail, etc.
Hi Steve,
I found the docs for MySQL and I THINK I have it working. However this line from the status is concerning:
*Oct 19 15:41:29 dap002 systemd[1]: mailman3.service: Can't open PID file /opt/mailman/mm/var/master.pid (yet?) after start: No such file or directory*
This is the full status output:
*● mailman3.service - GNU Mailing List Manager Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: enabled) Active: active (running) since Sun 2025-10-19 15:41:31 UTC; 3min 28s ago Process: 17256 ExecStart=/opt/mailman/venv/bin/mailman start (code=exited, status=0/SUCCESS) Main PID: 17369 (python3) Tasks: 16 (limit: 8814) Memory: 814.1M (peak: 814.6M) CPU: 27.707s CGroup: /system.slice/mailman3.service ├─17369 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/master -C /etc/mailman3/mailman.cfg ├─17374 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=archive:0:1 ├─17375 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=bounces:0:1 ├─17376 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=command:0:1 ├─17377 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=in:0:1 ├─17378 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=lmtp:0:1 ├─17379 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=out:0:1 ├─17380 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=pipeline:0:1 ├─17381 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1 ├─17382 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=retry:0:1 ├─17383 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=task:0:1 ├─17384 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=virgin:0:1 ├─17385 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=digest:0:1 ├─17391 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1 └─17392 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1
Oct 19 15:40:50 dap002 systemd[1]: mailman3.service: Scheduled restart job, restart counter is at 3757. Oct 19 15:40:50 dap002 systemd[1]: Starting mailman3.service - GNU Mailing List Manager... Oct 19 15:41:29 dap002 mailman[17256]: Starting Mailman's master runner Oct 19 15:41:29 dap002 mailman[17256]: Generating MTA alias maps Oct 19 15:41:29 dap002 systemd[1]: mailman3.service: Can't open PID file /opt/mailman/mm/var/master.pid (yet?) after start: No such file or directory Oct 19 15:41:31 dap002 systemd[1]: Started mailman3.service - GNU Mailing List Manager. Oct 19 15:41:41 dap002 mailman[17381]: /opt/mailman/venv/lib/python3.12/site-packages/falcon/request.py:2486: DeprecatedWarning: The RequestOptions.auto_parse> Oct 19 15:41:41 dap002 mailman[17381]: warnings.warn(*
My next step is to migrate the mailman2 data into this mailman3. However, I want to make sure I have it working correctly before I attempt that step.
Mailman's content filtering has removed the following MIME parts from this message.
Replaced multipart/alternative part with first alternative.
 
            On 10/19/25 08:49, Dennis Putnam via Mailman-users wrote:
I found the docs for MySQL and I THINK I have it working. However this line from the status is concerning:
*Oct 19 15:41:29 dap002 systemd[1]: mailman3.service: Can't open PID file /opt/mailman/mm/var/master.pid (yet?) after start: No such file or directory*
This is not a concern as long as /opt/mailman/mm/var/master.pid exists now and contains the PID of the running master process.
The message occurs because systemd checks before the master has created. That's why there is a (yet?) in the message.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            Mark Sapiro writes:
On 10/19/25 08:49, Dennis Putnam via Mailman-users wrote:
*Oct 19 15:41:29 dap002 systemd[1]: mailman3.service: Can't open PID file /opt/mailman/mm/var/master.pid (yet?) after start: No such file or directory*
This is not a concern as long as /opt/mailman/mm/var/master.pid exists now and contains the PID of the running master process.
The message occurs because systemd checks before the master has created. That's why there is a (yet?) in the message.
FYI, I'm working on a patch to fix this using a systemd-dbus package.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
participants (4)
- 
                 dap1@bellsouth.net dap1@bellsouth.net
- 
                 Dennis Putnam Dennis Putnam
- 
                 Mark Sapiro Mark Sapiro
- 
                 Stephen J. Turnbull Stephen J. Turnbull