Original version from BALUG:
https://wiki.sluug.org/mailman_2_-_mailman_3
Thanks!!
—
## Mailman 3
### Debian
* Debian 10 “Buster”
* balug-sf-lug-v2.balug.org (balug.org)
```sh
#!/bin/sh
umask 022 &&
unset LC_ALL &&
LANG=en_US.UTF-8 export LANG &&
case "$(id -n -u)" in
list)
umask 022 &&
exec mailman "$@"
;;
*)
umask 022 &&
exec sudo -u list \
mailman "$@"
;;
esac
```
* Typical commands:
```sh /usr/share/mailman3-web/manage.py # help manage.py createsuperuser manage.py changepassword <login_name> ```
* Databases (SQLite examples):
Backup command:
```sh sqlite3 /path/to/mailman3web.db \ ".backup '/path/to/mailman3web.BACKUP.db'" ```
* Example list: `balug-test3@lists.balug.org`
### Archiving & Import Behavior
* Headers like `X-Archive`, `X-No-Archive` respected; conflicts result in no archive.
* Imported archives:
* Archives stored in database tables like `hyperkitty_email` ([wiki.balug.org][1])
* Downloadable via `.mbox.gz`, e.g.:
`https://lists.balug.org/mailman3/hyperkitty/list/…/export/….mbox.gz` ([wiki.balug.org][1])
* Email obfuscation:
### Managing Messages & Lists
* Delete individual messages via admin UI or directly in DB (`hyperkitty_email`) ([wiki.balug.org][1]) * Rename lists and adjust archive and posting settings through Postorius UI ([wiki.balug.org][1]) * Prevent archiving while allowing posting via disabling “Active archivers” in settings 
### Migration Checklist
| Task | test | admin | talk | announce |
| ————————————- | :–: | :—: | :–: | :——: |
| lock old | y | y | y | y |
| handle pending | y | y | y | y |
| create/rename target | y | y | y | y |
| migrate config | y | y | y | y |
| migrate archive | y | y | y | y |
| index archive | y | y | y | y |
| archive \*.pck files | y | y | y | y |
| archive info pages | y | y | y | y |
| remove Mailman 2 list (keep archives) | y | y | y | y |
| update lists.balug.org site | y | y | y | y |
| update links on balug.org | y | y | y | y |
| set Mailman 2→3 redirects | ir | ir | ir | ir |
| update Mailman 2 archive links | n | n | n | n |
| customize templates | i | i | i | i |
| update monthly stats | - | y | - | - |
Legend:
* y = done * n = not done * ir = redirects are in place * i = in progress
### Migration Procedure & Notes
1. Ensure Debian supports it (e.g., Buster → Bookworm). 2. Lock/suspend Mailman 2:
3. Create corresponding Mailman 3 lists via Postorius or CLI. 4. Import config:
```sh mailman import21 <list> /var/lib/mailman/lists/*/config.pck ```
5. Import and index archives:
```sh manage.py hyperkitty_import -l <list> --since 1968 /var/lib/mailman/archives/private/*.mbox manage.py update_index_one_list <list> manage.py update_index -s 1970-01-01T00:00:00 ```
6. Remove old Mailman 2 list:
```sh /usr/lib/mailman/bin/rmlist <list> ```
7. Update site redirects, links, and stats reporting (e.g. cron scripts for monthly summaries). 8. Optional: mass-export/import user preferences, but user logins differ (per-list vs. per-account) ([wiki.balug.org][1])
### Feature & Configuration Mapping
* Delivery status, digest preferences, moderation options, and user settings generally map 1:1 from Mailman 2 to Mailman 3 (with some exceptions due to default settings or absence of certain flags) ([wiki.balug.org][1]) * Some template formatting quirks (e.g. line-wrapping at 70 chars). Use leading whitespace to avoid unwanted wrapping ([wiki.balug.org][1]) * Gravatar leakage issue fixed in HyperKitty ≥ 1.3.4; disable via `HYPERKITTY_ENABLE_GRAVATAR` in later versions ([wiki.balug.org][1])
—
Let me know if you'd like this as a downloadable Markdown file, cleaned up further, or reformatted to match another wiki syntax!
[1]: https://www.wiki.balug.org/wiki/doku.php?id=system%3Amailman3&utm_source=chatgpt.com "system:mailman3 [BALUG Wiki]"