ここここここ辺りを参考にしてmailmanをインストール。

# apt install mailman

参考にしたサイトにあるようにjaがインストールされないので、

# dpkg-reconfigure mailman

で再度enとjaを指定して更新。
/etc/mailman/mm_cfg.pyの以下の行を変更、追加

MTA=’Postfix’
######## added following lines ########
USE_MAILDIR = Yes
QRUNNERS.append(('MaildirRunner', 1))
DEFAULT_LIST_ADVERTISED = No
OWNERS_CAN_DELETE_THEIR_OWN_LISTS = Yes
DEFAULT_MAX_NUM_RECIPIENTS = 100
DEFAULT_MAX_MESSAGE_SIZE = 16384           #  KB
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%04d] "
DEFAULT_REPLY_GOES_TO_LIST = 1

Mailmanに必要なファイルを作成し、ファイル属性などをフィックス。

# touch /var/lib/mailman/data/aliases
# touch /var/lib/mailman/data/virtual-mailman
# chown list:list /var/lib/mailman/data/aliases
# chown list:list /var/lib/mailman/data/virtual-mailman
# postmap /var/lib/mailman/data/aliases
# postmap /var/lib/mailman/data/virtual-mailman
# check_perms -f

シンボリックリンクの部分で10個エラーが残るがこれは無視して、
Mailmanのapache2コンフィグレーションを有効化する。

# ln -s /etc/mailman/apache.conf /etc/apache2/conf-available/mailman.conf
# a2enconf mailman.conf

apach2でcgiを有効化する。

a2enmod cgi.load

Mailman管理用のパスワードを設定。

# mmsitepass
New site password:
Again to confirm password:
Password changed.

管理用のメーリングリストの作成とコンフィグレーション。

# newlist mailman
Enter the email of the person running the list: 
Initial mailman password: 
Hit enter to notify mailman owner…
# config_list -i /var/lib/mailman/data/sitelist.cfg mailman
Non-standard property restored: personalize

/etc/postfix/main.cfを修正する。

alias_maps = hash:/etc/aliases,hash:/var/lib/mailman/data/aliases

mailmanのデフォルトではmessage-idがオリジナルのメールと同一となり、gmailを使っていると自分への配信が捨てられしまって届かないように見える。こちらのサイトを参考にして以下の最後の4行を/usr/lib/mailman/Mailman/Handlers/CookHeaders.pyに追加してmessage-idを書き換える。

def prefix_subject(mlist, msg, msgdata):
    # Add the subject prefix unless the message is a digest or is being fast
    # tracked (e.g. internally crafted, delivered to a single user such as the
    # list admin).
    prefix = mlist.subject_prefix.strip()
    if not prefix:
        return

    # overwrite message-id. for Google Email!
    msg['X-Original-Message-ID'] = msg.get('message-id', '')
    del msg['message-id']
    msg['Message-ID'] = Utils.unique_message_id(mlist)