[mailman] init
This commit is contained in:
parent
53ac4523ac
commit
2cfb26dfc8
313
content/mailman.rst
Normal file
313
content/mailman.rst
Normal file
@ -0,0 +1,313 @@
|
||||
mailman
|
||||
#######
|
||||
|
||||
:date: 2021-06-21 13:00
|
||||
:modified: 2021-06-21 13:00
|
||||
:tags: mail mailing-list
|
||||
:category: documentation
|
||||
:slug: mailman
|
||||
:authors: Ms.Leave-A-Mix
|
||||
|
||||
|
||||
We have a mailman instance on the mail server that runs on Alpine Linux. Here's
|
||||
a how-to install this mailman server.
|
||||
|
||||
|
||||
I did this after a failed upgrade caused to Pip packages that I installed in the
|
||||
same repository that alpine python packages. That caused troubles during the
|
||||
upgrade from python3.8 to python3.9.
|
||||
|
||||
I backuped and removed /usr/lib/python3.{7,8}.
|
||||
|
||||
|
||||
I'll barely follow the mailman documentation on "how to install mailman on a
|
||||
virtual env".
|
||||
|
||||
|
||||
--------
|
||||
cleaning
|
||||
--------
|
||||
|
||||
I had a huge problem with my previous mailman installation, that I did with Pip.
|
||||
Pip mixed PyPi packages with my alpine-repo python packages (those that begins
|
||||
with py3... and some others).
|
||||
|
||||
Here's how I did to clean my server :
|
||||
|
||||
I listed all installed packages and their content.
|
||||
|
||||
:code:`apk list -I|awk -F'[\}\{]' '{print $2}'|xargs -I'{}' apk info -L "{}" > /tmp/installed_packages_content`
|
||||
|
||||
Then I checked all the pacckages that had at least one file installed in the
|
||||
:code:`/usr/lib/python3.9/site-packages` directory.
|
||||
|
||||
:code:`grep -E '((site-packages.*__init__.py)|(:$))' ./installed_packages_content |awk '/:$/{package=$0}/^usr/{usr=$0;if(prev!=package){print package;print $usr};prev=package}'|rev|cut -d'/ ' -f2-|rev`
|
||||
|
||||
|
||||
I quickly realized that many of the directories in
|
||||
:code:`/usr/lib/python3.9/site-packages` where created by pip. So I simply backuped this
|
||||
folder, and then removed it. Then I looped on the list of alpine packages I got
|
||||
to reinstall them.
|
||||
|
||||
:code:`apk list -I|awk -F'[\}\{]' '{print $2}'|xargs apk fix`
|
||||
|
||||
I saw that the py3-* packages and some others (certbot, certbot-nginx and
|
||||
py-augeas) where causing errors. So I just reinstalled them.
|
||||
|
||||
:code:`apk del py3-* py-augeas certbot certbot-nginx`
|
||||
|
||||
:code:`grep "^py3" /tmp/installed_packages|xargs apk add`
|
||||
|
||||
:code:`apk add certbot certbot-nginx py-augeas`
|
||||
|
||||
|
||||
------------
|
||||
installation
|
||||
------------
|
||||
|
||||
mailman
|
||||
-------
|
||||
|
||||
https://docs.mailman3.org/en/latest/install/virtualenv.html
|
||||
|
||||
As I already had a mailman instance, I just had to do the following to create a
|
||||
virtual environment.
|
||||
|
||||
.. code-block:: bash
|
||||
cd /opt/mailman
|
||||
chown -R mailman:mailman .
|
||||
su mailman
|
||||
python3.9 -m venv venv
|
||||
source ./venv/bin/activate
|
||||
echo 'source /opt/mailman/venv/bin/activate' >> /opt/mailman/.bashrc
|
||||
|
||||
Check if the version of pip you use is really the one of the virtual env :
|
||||
|
||||
.. code-block:: bash
|
||||
(venv) {13:24} mail:/opt/mailman$ which pip
|
||||
/opt/mailman/venv/bin/pip
|
||||
|
||||
|
||||
:code:`pip install wheel mailman`
|
||||
|
||||
-- An error occured because "pg_config" did not exist. As I won't need psycopg2, I
|
||||
-- just avoid this and install pymysql instead (I run a mysql database for my mail
|
||||
-- server).
|
||||
|
||||
:code:`pip install pymysql`
|
||||
|
||||
I'll modify the mailman init to point to the one in the virtual environment.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
vim /etc/init.d/mailman
|
||||
|
||||
|
||||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2004 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
NAME="mailman"
|
||||
CONF=/etc/mailman.cfg
|
||||
PIDFILE=`grep -o "^pid_file:.*" "$CONF"|cut -d' ' -f2`
|
||||
BIN="/opt/mailman/venv/bin/mailman"
|
||||
USER="mailman"
|
||||
ENV_="MAILMAN_CONFIG_FILE=$CONF"
|
||||
|
||||
extra_commands="info conf"
|
||||
|
||||
depend() {
|
||||
need mta
|
||||
use logger
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
sleep 0
|
||||
}
|
||||
|
||||
start() {
|
||||
ebegin "Starting mailman"
|
||||
mkdir -p -m 0750 /var/run/mailman
|
||||
chown mailman: /var/run/mailman
|
||||
mkdir -p -m 0750 /var/log/mailman
|
||||
chown mailman: /var/log/mailman
|
||||
mkdir -p -m 0750 /var/lock/mailman
|
||||
chown mailman: /var/lock/mailman
|
||||
|
||||
start-stop-daemon -S -p $PIDFILE -u $USER -e $ENV_ \
|
||||
-x $BIN start --
|
||||
eend 0
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin "Stopping mailman"
|
||||
start-stop-daemon -K -p $PIDFILE -e $ENV_ \
|
||||
-x $BIN stop --
|
||||
|
||||
eend 0
|
||||
}
|
||||
|
||||
status() {
|
||||
ebegin "Mailman status"
|
||||
eval $ENV_
|
||||
$BIN status
|
||||
eend 0
|
||||
}
|
||||
|
||||
info() {
|
||||
ebegin "Mailman info"
|
||||
eval $ENV_
|
||||
$BIN info
|
||||
|
||||
eend 0
|
||||
}
|
||||
|
||||
conf() {
|
||||
ebegin "Mailman configuration"
|
||||
eval $ENV_
|
||||
$BIN conf
|
||||
|
||||
eend 0
|
||||
}
|
||||
|
||||
svc_restart() {
|
||||
ebegin "Restarting mailman"
|
||||
start-stop-daemon -K -p $PIDFILE -u $USER -e $ENV_ \
|
||||
-x $BIN restart --
|
||||
|
||||
eend 0
|
||||
}
|
||||
|
||||
|
||||
Modify mailman.cfg according to new configuration (path.fhs.bin_dir)
|
||||
|
||||
.. code-block:: ini
|
||||
[mailman]
|
||||
layout: fhs
|
||||
site_owner: root@freepoteries.fr
|
||||
noreply_address: no-reply
|
||||
|
||||
[mta]
|
||||
incoming: mailman.mta.postfix.LMTP
|
||||
outcoming: mailman.mta.deliver.deliver
|
||||
lmtp_host: 127.0.0.1
|
||||
lmtp_port: 8025
|
||||
smtp_host: 127.0.0.1
|
||||
smtp_port: 25
|
||||
|
||||
[webservice]
|
||||
hostname: 0.0.0.0
|
||||
port: 8081
|
||||
use_https: no
|
||||
admin_user: root
|
||||
admin_pass: password
|
||||
api_version: 3.1
|
||||
|
||||
[database]
|
||||
class: mailman.database.mysql.MySQLDatabase
|
||||
url: mysql+pymysql://mailman:password@maria.freepoteries.fr/mailman?charset=utf8&use_unicode=1
|
||||
debug: yes
|
||||
|
||||
|
||||
[paths.fhs]
|
||||
# Filesystem Hiearchy Standard 2.3
|
||||
# http://www.pathname.com/fhs/pub/fhs-2.3.html
|
||||
|
||||
# BEGIN(MODIFY THIS)
|
||||
bin_dir: /opt/mailman/venv/bin
|
||||
# END
|
||||
|
||||
var_dir: /var/mail/mailman
|
||||
queue_dir: /var/spool/mailman
|
||||
log_dir: /var/log/mailman
|
||||
lock_dir: /var/lock/mailman
|
||||
etc_dir: /etc
|
||||
ext_dir: /etc/mailman.d
|
||||
pid_file: /var/run/mailman/master.pid
|
||||
|
||||
[language.master]
|
||||
description: English (USA)
|
||||
charset: utf-8
|
||||
enabled: yes
|
||||
|
||||
[language.fr]
|
||||
description: Français
|
||||
charset: utf-8
|
||||
enabled: yes
|
||||
|
||||
|
||||
|
||||
I also removed /etc/mailman/conf.d/mailman.cfg as it was unused.
|
||||
|
||||
|
||||
Start the service and test a mailing list (i.e. test@lists.freepoteries.fr).
|
||||
|
||||
:code:`rc-service mailman start`
|
||||
|
||||
Check if the logs are not crying.
|
||||
|
||||
:code:`tail -n1000 /var/log/mailman/mailman.log`
|
||||
|
||||
|
||||
Freeze the requirements.
|
||||
|
||||
:code:`pip freeze > /opt/mailman/requirements.txt`
|
||||
|
||||
Add the crontabs.
|
||||
|
||||
:code:`EDITOR=vim crontab -e -u mailman`
|
||||
|
||||
.. code-block:: crontab
|
||||
|
||||
0 2 * * * /opt/mailman/venv/bin/mailman digests --periodic
|
||||
0 2 * * * /opt/mailman/venv/bin/mailman notify
|
||||
|
||||
|
||||
Git commit all those changes before continuing.
|
||||
|
||||
|
||||
mailman-web
|
||||
-----------
|
||||
|
||||
Let's take care of the web interface.
|
||||
|
||||
You can check the documentation in the mailman-web repo/docs/index.rst .
|
||||
|
||||
You should be in the same virtualenv as before.
|
||||
|
||||
|
||||
mailman-web needs the cryptography, as specified in the cryptography manual :
|
||||
|
||||
As If you are on Alpine or just want to compile it yourself then cryptography
|
||||
requires a C compiler, a Rust compiler, headers for Python (if you’re not
|
||||
using pypy), and headers for the OpenSSL and libffi libraries available on
|
||||
your system.
|
||||
|
||||
The rust package is the compilator, and the cargo is the rust package manager.
|
||||
|
||||
:code:`apk add rust cargo`
|
||||
|
||||
:code:`pip install mailman-web mailman-hyperkitty`
|
||||
|
||||
Freeze requirements and git the files.
|
||||
|
||||
:code:`pip freeze > /opt/mailman/requirements.txt`
|
||||
|
||||
|
||||
Migrate mailman new version.
|
||||
|
||||
:code:`mailman-web migrate`
|
||||
|
||||
:code:`mailman-web collectstatic`
|
||||
|
||||
:code:`mailman-web compress`
|
||||
|
||||
:code:`mailman-web compilemessages`
|
||||
|
||||
|
||||
uwsgi
|
||||
.....
|
||||
|
||||
"env pythonpath" was not taken into account by django, I changed the option by
|
||||
settings "env = PYTHONPATH=/etc/mailman3".
|
||||
|
||||
TODO: Archivage
|
||||
Loading…
Reference in New Issue
Block a user