ISPconfig : migrer Mailman2 vers Sympa

Debian 11 ne supporte plus mailman2, et mailman2 n’est plus maintenu depuis… (trop longtemps) il était donc grand temps de changer d’outil pour les mailings liste… Oui mais voilà, mon panel c’est ISPconfig et celui-ci ne supporte pour le moment QUE mailman2 🙁 (pas de mailman3 ni de sympa prévu)

Pour l’instant mon serveur est en Debian 10, mais dans l’optique d’un migration vers Debian 11 il fallait avancer. Après avoir tester mailman3 je me suis dit qu’il était très lourd (en ressources serveurs) par rapport à mon besoin (il s’avère être dimensionné pour les gros système) de plus il c’est un jeune logiciel alors que Sympa a de la bouteille, sont développement est encore soutenu, il est léger et des scripts de migration existe, ça serait donc Sympa !

A noter que beaucoup migre vers Discourse qui ouvre d’autres possibilités.

Tant pi pour l’intégration dans le panel ISPconfig pour le moment.. Un jour peut être…

Installation

Installation de sympa

Sur mon serveur Debian 10 j’ai commencé par installer Sympa en parallèle de Mailman2 :

# Pour éviter une erreur dpkg
echo "retzo.net" > /etc/mailname
apt install sympa # dire non à toutes les questions apt... on s'en occupe après...

Ensuite je crée la base de donnée MySql « sympa » avec un utilisateur restreint.

SELECT PASSWORD('MOTDEPASSE');
# Récupérer le hash du mot de passe
CREATE USER 'sympa'@'localhost' IDENTIFIED VIA mysql_native_password USING '*F72C19A910531DA39D6EC7BB91BEB11A37753023'; 
GRANT USAGE ON *.* TO 'sympa'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `sympa`;
GRANT ALL PRIVILEGES ON `sympa`.* TO 'sympa'@'localhost';
FLUSH PRIVILEGES;

Modification de l’URL (j’aime pas /wws/ je préfère /sympa ) dans le fichier /etc/apache2/conf-enabled/sympa.conf

-    ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
+    ScriptAlias /sympa /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi

Je modifie ensuite le fichier /etc/sympa/sympa/sympa.conf

- listmaster      listmaster@retzien.fr
+ listmaster      adresse-email-admin@retzo.net
- lang    en
+ lang    fr
- wwsympa_url     http://retzo.net/wws
+ wwsympa_url     http://lists.retzo.net/sympa
+ db_type        MySQL
+ db_host        localhost
+ db_port        3306
+ db_name        sympa
+ db_user        sympa
+ db_passwd      plvlOBpDuljmz0Dh

Je relance sympa pour qu’il crée les tables :

service sympa restart ; service apache2 restart

Lancer la commande suivante et lire les instructions selon votre cas

sympa_wizard --check

Pour ma part le check révèle surtout qu’il manque Data::Password

cpan install Data::Password

Intégration dans postfix (multi domaines)

Ensuite j’ai suivi la documentation pour les « multi-domaines » avec Postfix : https://sympa-community.github.io/manual/install/configure-mail-server-postfix.html#virtual-domain-setting

Pour la suite on va enter ces variables dans le terminal, ça nous simplifia la lecture :

SYSCONFDIR=/etc/sympa
EXPLDIR=/var/lib/sympa/list_data

Créer le fichier $SYSCONFDIR/list_aliases.tt2

#--- [% list.name %]@[% list.domain %]: list transport map created at [% date %]
[% list.name %]@[% list.domain %] sympa:[% list.name %]@[% list.domain %]
[% list.name %]-request@[% list.domain %] sympa:[% list.name %]-request@[% list.domain %]
[% list.name %]-editor@[% list.domain %] sympa:[% list.name %]-editor@[% list.domain %]
[% list.name %]-subscribe@[% list.domain %] sympa:[% list.name %]-subscribe@[%list.domain %]
[% list.name %]-unsubscribe@[% list.domain %] sympa:[% list.name %]-unsubscribe@[% list.domain %]
[% list.name %][% return_path_suffix %]@[% list.domain %] sympabounce:[% list.name %]@[% list.domain %]

Ajouter les lignes suivantes à la fin du fichier /etc/sympa/sympa/sympa.conf

sendmail_aliases /etc/sympa/sympa_transport
aliases_program postmap
aliases_db_type hash

Créer les fichiers qui vont bien :

touch $SYSCONFDIR/transport.sympa
touch $SYSCONFDIR/virtual.sympa
touch $SYSCONFDIR/sympa_transport
chmod 644 $SYSCONFDIR/sympa_transport
chown sympa:sympa $SYSCONFDIR/sympa_transport
postmap hash:$SYSCONFDIR/transport.sympa
postmap hash:$SYSCONFDIR/virtual.sympa
/usr/lib/sympa/bin/sympa_newaliases.pl
postmap hash:$SYSCONFDIR/sympa_transport
chmod 640 $SYSCONFDIR/sympa_transport $SYSCONFDIR/sympa_transport.db
chgrp postfix $SYSCONFDIR/sympa_transport $SYSCONFDIR/sympa_transport.db

Dans le fichier /etc/postfix/master.cf ajouter à la fin :

sympa   unix    -       n       n       -       -       pipe
flags=hqRu null_sender= user=sympa argv=/usr/lib/sympa/bin/queue ${nexthop}
sympabounce unix -     n       n       -       -       pipe
flags=hqRu null_sender= user=sympa argv=/usr/lib/sympa/bin/bouncequeue ${nexthop}

Modifier le fichier /etc/postfix/main.cf comme suite, supprimer ce qui est mailman au profil de sympa :

- alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
- alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
+ alias_maps = hash:/etc/aliases
+ alias_database = hash:/etc/aliases
- virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf
- virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
- virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
+ virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf, hash:/etc/sympa/virtual.sympa
+ virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf, hash:/etc/sympa/transport.sympa
+ virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf, hash:/etc/sympa/transport.sympa, hash:/etc/sympa/sympa_transport, hash:/etc/sympa/virtual.sympa
- transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
---
+ transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf, hash:/etc/sympa/transport.sympa, hash:/etc/sympa/sympa_transport

Attention : cette modification sera a faire à chaque mise à jours d’ISPconfig si vous choisissiez de reconfigurez les services.

Si vous voulez que cette modification soit « incluse » dans ISPconfig, même après mise à jour il vous fait récupérer le fichier du répertoire d’installation qui correspond à votre distribution (chez moi Debian) : ispconfig3/install/tpl/debian_postfix.conf.master et le mettre dans /usr/local/ispconfig/server/conf-custom/install/ sur votre serveur et d’appliquer les mêmes changements que précédemment cité dans le main.cf.

Ajouter les domaines

Contrairement à ce qui est dans la documentation : https://sympa-community.github.io/manual/install/configure-mail-server-postfix.html#virtual-domain-setting dans « Adding new domain »

Si vous ajouter dans le fichier transport.sympa la ligne

mail.example.org                error:User unknown in recipient table

SI ce domaine contient des boîtes e-mails dans ISPconfig, celles-ci ne fonctionneront plus. Il est donc préférable, dans notre cas de ne pas ajouter cette ligne (sauf si ce le nom de domaine est uniquement fait pour les mailings listes)

Un petit script script bash qui liste les domaines présent dans mailman et qui crée les configurations pour Sympa :

cat /var/lib/mailman/data/virtual-mailman | egrep -v "^$|^#|mailman" | cut -d@ -f2 | cut -d" " -f1 | sort | uniq > /tmp/mailman_domaine_liste
SYSCONFDIR=/etc/sympa
EXPLDIR=/var/lib/sympa/list_data
while read -r line;
do
    echo $line
    mkdir -m 755 $SYSCONFDIR/$line
    touch $SYSCONFDIR/$line/robot.conf
    chown -R sympa:sympa $SYSCONFDIR/$line
    mkdir -m 750 $EXPLDIR/$line
    chown sympa:sympa $EXPLDIR/$line
    echo "http_host  lists.$line
listmaster adresse-email-admin@retzo.net
create_list  listmaster
wwsympa_url     http://lists.$line/sympa" > $SYSCONFDIR/$line/robot.conf
    echo "sympa@$line          sympa:sympa@$line
listmaster@$line     sympa:listmaster@$line
bounce@$line         sympabounce:sympa@$line
abuse-feedback-report@$line  sympabounce:sympa@$line" >>  $SYSCONFDIR/transport.sympa
    echo "sympa-request@$line  postmaster@retzo.net
sympa-owner@$line    postmaster@retzo.net" >>  $SYSCONFDIR/virtual.sympa
done < /tmp/mailman_domaine_liste
postmap hash:$SYSCONFDIR/transport.sympa
postmap hash:$SYSCONFDIR/virtual.sympa

Migration avec mailman2sympa

Il existe un script « mailman2sympa » : https://www.sympa.org/contribs/migration_and_archives/index#mailman2sympa après usage j’ai contribué à son amélioration (débugge) sur Github : https://github.com/LAKostis/mailman2sympa/pulls?q=is%3Apr+author%3Akepon85 le mainteneur du dépôt git n’est pas l’auteur du script : https://github.com/LAKostis/mailman2sympa/commit/f628cd2b968b2e1959f0e631e895b189e8110f1d

Quelques dépendances non satisfaite chez moi :

apt install jq libjson-perl procmail

Téléchargement du script :

cd ~
git clone https://github.com/LAKostis/mailman2sympa.git
cd mailman2sympa
mv conf/mailman2sympa.conf.debian conf/mailman2sympa.conf

Modifier le fichier conf/mailman2sympa.conf

- DOMAIN=''
+ DOMAIN="retzo.net"
- PASSWORDDB=""
+ PASSWORDDB="zXne&375"
- DEFAULT_OWNER=""
+ DEFAULT_OWNER="adresse-email-admin@retzo.net"

Puis lancer le script de migration :

rm -fr /tmp/mailman ; bash mailman2sympa.sh

Si, comme moi vous avez plusieurs domaine il vous faut recommencer en éditant conf/mailman2sympa.conf :

- DOMAIN="retzo.net
+ DOMAIN="autredomaine.net

Et relancer le script mailman2sympa.sh, boucler tant que vous avez des domaines à importer…

A propos des archives, à la fin, connectez vous http://lists.retzo.net/sympa/serveradmin/archives (utiliser « première connexion » la première fois) et lancer une reconstitution des archives

Enfin re-générer le fichier sympa_transport précisé dans la variable sendmail_aliases du fichier sympa.conf

root@srvmail:~# /usr/lib/sympa/bin/sympa.pl --make_alias_file
Sympa aliases file /var/spool/sympa/tmp/sympa_aliases.179676 was made.  You probably need to install it in your SMTP engine.
root@srvmail:~# cat  /var/spool/sympa/tmp/sympa_aliases.179676 > /etc/sympa/sympa_transport
root@srvmail:~# postmap /etc/sympa/sympa_transport

Désactiver mailman

Avant de le désinstaller on peut passer par une période de transition en désactivant l’interface par exemple, dans le fichier /etc/mailman/apache.conf

-ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
+RedirectPermanent /cgi-bin/mailman/ /sympa/

DKIM / DMARC

Pour sympa il y a pas mal de configuration DMARc/DKIM : https://www.sympa.org/doc/formation/sympa_avance

Pour que ça fonctionne avec ISPconfig il faut ajouter l’utilisateur « sympa » au groupe « amavis »

usermod -a -G amavis sympa

Ensuite dans les fichiers « robot.conf » (/etc/sympa/DOMAIN/robot.conf) il faut ajouter en fin de fichier :

dkim_feature on
dkim_private_key_path	/var/lib/amavis/dkim/retzo.net.private
dkim_signature_apply_on any
dkim_signer_domain	retzo.net
dkim_selector	default
dmarc_protection_mode dmarc_reject

Redirection de la page du panel ISPconfig

ISPconfig ne supoprte pas Sympa mais Mailman, pour éviter que des utilisateurs crée des listes mailman (et donc génère des erreurs) je redirige la page « Mailing list » du panel vers la documentation. Pour ça modifier la page /usr/local/ispconfig/interface/web/mail/templates/mail_mailinglist_list.htm

+ <script type="text/javascript">
+ window.location.href = "https://lists.retzo.net/";
+ </script>
+ 
+ <p>Cette page du panel n'est plus à utiliser, vous allez être rediriger vers la page de Sympa : <a href="https://lists.retzo.net/">https://lists.retzo.net/</a></p>
+ 
+ <!--
73c80
-     
---
+ -->

file2link : Stockage de fichier temporaire contre lien

Depuis que Framasoft à annoncé sa Déframasoftisons Internet, en tant que membre des CHATONS (avec zici.fr & retzien.fr), je me suis dis que c’était l’heure de se retrousser les manches.

Faire un framadrop ça me semblait accessible, par contre Lufi (utilisé par framadrop) c’est codé en Perl et sur les serveurs de l’asso on est plus en mode PHP (et j’essaie de pas trop me disperser et pas héberger : un coup du perl, un coup du python, un coup du ruby, du node.js… c’est plus facile à maintenir) Sauf qu’en PHP je n’ai pas trouvé de logiciel maintenu similaire qui répondent à mes attentes, du coup j’en ai pondu un : file2link.

Bien sûr tout est libre de droit, file2link est sous licence beerware.

Petit tour en images :

Si vous l’utilisez, dites le moi, ça me parait pertinent qu’on fasse du lien avec toutes les instances…

Fonctionnalités

Dans sa version 0.1 le logiciel permet :

  • Uploader des fichier (plusieurs possible) et de recevoir des liens en échanges :
    • Lien direct
    • Lien de téléchargement forcé
    • Lien vers un zip contenant tout les fichiers
  • Images redimensionné à l’upload possible
  • Mémorisation des fichiers précédaient uploadé (via le storages local du navigateur
  • Se configure avec un fichier YAML
  • Configure with YAML file :
    • Limite dans le temps
    • Limite le type de fichier (via mime)
    • Limite le nombre de fichier envoyé simultanément
    • Limite de type de fichier
  • Bar de progression en HTML5
  • Multi-langue (français / anglais pour le moment)
  • Ménage des fichiers expiré par tâche cron (cron.php) ou par traffic sur la page d’accueil (web cron)
  • Personnalisation du contenu de la page avec la possibilité de créer des pages header-page.php, header.php, footer-page.php, footer.php, start-home.php, end-home.php
  • Ajout d’un menu vers des pages HTML pour créer des pages « contact » « mention légal »…

Installation

Pré-requis :

  • Un serveur http configuré compatible avec htaccess / url rewriting (apache2 typiquement
  • PHP 5.6 minimum
  • Lib php : GD & ZIP

Envoyer le contenu du dépôt sur votre serveur :

git clone https://framagit.org/kepon/file2link.git

Déplacer le fichier de conf distribué :

mv config.yaml.exemple config.yaml

Modifier le fichier config.yaml, changé le baseUrl et autres paramètres que vous souhaitez personnalisé. Assuré vous de la cohérence des paramètres :

  • maxUploadPerFile doit être similaire à la config PHP upload_max_filesize and post_max_size
  • maxUploadNbdoit doit être similaire à la config PHP config max_file_uploads

Assurez vous que le répertoire « files » soit accessible en écriture pour le servuer

Option : si vous voulez faire le ménage par tâche cron modifier la valeur expireCron par « cron » dans le fichier config.yaml et ajouter votre tâche cron :

* * * * * cd /var/www/file2link/ ; php cron.php

Et voilà, fin de chantier !

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer