27 Apr
2023
27 Apr
'23
7:59 p.m.
Hi Lars,
I did the same thing this weekend (upgraded mailman to latest and python from 3.7 to 3.11) as part of a process to do some work I've promised Mark :-)
Here are my notes (to I can repeat it next time). I'm on Debian 10. My mailman install is based on Brian Carpenters install notes: https://wiki.list.org/DOC/Howto_Install_Mailman3_On_Debian10
- IF UPGRADING: copy /static folder, /venv folder and base config files to new backup folder (e.g. config_bak)
- Install desired python e.g 3.11 (from source if necessary) and be sure to include: apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
- IF UPGRADING: Stop the mailman related services: systemctl stop mailman qcluster gunicorn
- Create local venv at: python3.11 -m venv /opt/mailman/mm/venv (backup old one first to backup folder)
- Set ownership of venv folder and subfolders/files: chown -R mailman.mailman venv
- Switch to owner: su mailman
- Activate venv: source /opt/mailman/mm/venv/bin/activate
- Check pip uses the intended python version: pip -V
- Upgrade PIP if necessary: pip install --upgrade pip
- Install mailman3 basics: pip install --upgrade mailman hyperkitty postorius
- Install additional if missing: pip install --upgrade django-mailman3 mailmanclient mailman-hyperkitty
- Install DB connector: pip install pylibmc psycopg2 python3-psycopg2 python3-pil python3-psycopg2 whoosh python3-whoosh python3-httplib2
- Update /opt/mailman/mm/urls.py with desired paths (django)
- IF UPGRADING RUN: bin/django-admin migrate PLUS: bin/mailman-post-update (or individually below) bin/django-admin collectstatic --clear --noinput --verbosity 0 bin/django-admin compress bin/django-admin compilemessages
- Exit venv environment: deactivate and Exit mailman user: exit
- Start mailman: systemctl start mailman (check status: systemctl status mailman.service)
- Start qrunner: systemctl start qcluster (check status: systemctl status qcluster.service)
- Start gunicorn: systemctl start gunicorn (check status: systemctl status gunicorn.service)
Note:
- /django-admin is the same as /mailman-web in some installation notes.
- The bin/mailman-post-update script Brian used does everything except the "migrate" step
- I don't know if all the pip psycopg2/whoosh modules are needed - I didn't take the chance.
- My system now uses django 4.1.8 so I didn't need to worry about the psycopg2-binary install (I don't think I did - it seems to all work)
- The 3.8 release notes contain a breaking change with the postgresql connection command. I changed that before upgrading. (assuming you are using postgresql!)
- What I haven't covered here is checking the autostart, service settings and crons are working as that is in the documentation and may already/still be running on your server.
Hope that helps :-)
Cheers,
Duane