Migration réalisée sur bulbe par quidame le 2017-07-28, lors du passage de la machine à Stretch.
Préliminaires
Le passage de Schleuder 2 à Schleuder 3 est marqué par une récriture complète du code, donc pas mal de changements (petits et gros) à prendre en compte.
Tout d'abord, Schleuder 3 n'est pas disponible dans Debian Stretch (nouvelle
stable au moment de l'écriture), mais dans Buster (testing), alors que
Schleuder 2 est maintenu sur bulbe à partir des dépôts de Wheezy
(oldoldstable). Schleuder 3 a aussi au moins une dépendance (versionnée) dans
testing : rake
.
Ensuite, la documentation du paquet Debian nous apprend que la migration des
listes éxistantes depuis une version inférieure à 3.0 est prise en charge par
par la commande schleuder migrate /chemin/de/la/liste
. Difficile de faire
plus simple.
Enfin, les fichiers globaux de configuration ont conservé le même format (yaml) mais ont changé de nom, alors que les fichiers de configuration propres aux listes (id de clef de la liste, phrase de passe de cette clef, ACL, liste des membres et leurs attribruts) ont été remplacés par une base de données sqlite. Le comportement de certaines options a évolué sans que ces options aient changé de nom, alors que d'autres options ont changé de nom sans changer de comportement.
Contrairement à leurs prédécesseurs, qui étaient entièrement commentés, les nouveaux fichiers fournis par le paquet contiennent trois douzaines d'options déclarées. La plupart vont être gardées en l'état parce que :
- le programme a changé et on va faire confiance aux nouveaux paramètres par défaut tant qu'on ne comprend pas ou ne maîtrise pas ces paramètres ;
- elles correspondent déjà à nos usages (des options plus ou moins identiques sont explicitement déclarées dans les fichiers de configuration des listes)
Bref, on met toutes les chances de notre côté pour que :
- ça fonctionne
- ça fonctionne comme avant (plutôt mieux, même)
Préparation de l'installation de Schleuder 3
Cette migration a été réalisée en même temps que celle du système lui-même, qui impliquait déjà des changements dans la configuration d'APT. On y ajoute :
/etc/apt/preferences.d/schleuder
# schleuder dependency
Package: rake
Pin: release n=buster
Pin-Priority: 999
/etc/apt/sources.list.d/buster.list
deb http://ftp.nl.debian.org/debian/ buster main
Préparation des nouveaux fichiers de configuration
Après la mise à jour du système, et donc aussi de schleuder.
/etc/schleuder/schleuder.yml
Ce fichier remplace schleuder.conf
dans le même répertoire.
Ajouter, décommenter œt/ou modifier les options suivantes :
log_level: info
(c'est temporaire, on reviendra àerror
quand il n'y aura plus d'erreur, justement)keyserver: hkps://hkps.pool.sks.keyservers.net
superadmin: schleuder-admins@nos-oignons.net
(remplacesuperadminaddr
)
/etc/schleuder/list-defaults.yml
Ce fichier remplace default-list.conf
dans le même répertoire. On le garde
en l'état.
Migration des listes
Lors de la mise à jour, le script postinst
du nouveau paquet effectue une
sauvegarde des listes éxistantes, dans /var/backup/schleuder
. Cependant,
comme nos listes étaient configurées à partir de fichiers se trouvant dans
/etc/schleuder/lists
, il a fallu tout de même copier ces fichiers en tant
que list.conf
dans les répertoires correspondants de /var/backup/schleuder
pour que la commande de migration des listes fonctionne.
Toutes les opérations sont effectuées en tant que schleuder
. Les commandes
sont données ici dans une boucle, mais en réalité, la liste adminsys@
a été
traitée séparément, pour servir de test.
sudo -Hsu schleuder
for list in adminsys ca deontologie machines; do
mv /etc/schleuder/lists/nos-oignons.net/${list}.conf \
/var/backup/schleuder/nos-oignons.net/${list}/list.conf
schleuder migrate /var/backup/schleuder/nos-oignons.net/${list}/
done
Chacune de ces migrations réussies renvoie une notice :
Please note: the following options have been *removed*:
* `default_mime` for lists (we only support pgp/mime for now),
* `archive` for lists,
* `gpg_passphrase` for lists,
* `log_file`, `log_io`, `log_syslog` for lists (we only log to
syslog (before list-creation) and a file (after it) for now),
* `mime` for subscriptions/members (we only support pgp/mime for now),
* `send_encrypted_only` for members/subscriptions.
If you really miss any of them please tell us.
Please also note that the following keywords have been renamed:
* list-members => list-subscriptions
* add-member => subscribe
* delete-member => unsubscribe
Please notify the users and admins of this list of these changes.
List adminsys@nos-oignons.net migrated to schleuder v3.
Intégration avec Postfix et SpamAssassin
Le transport schleuder
défini dans /etc/postfix/master.cf
passe par
un script ruby maison, /usr/local/bin/schleuder-spamc
qui ne fonctionne
plus. En attendant que ce script soit mis à jour, on a modifié le transport
dans master.cf
:
schleuder unix - n n - - pipe
flags=DRhu user=schleuder argv=/usr/bin/schleuder work ${recipient}
À noter que même si on n'utilisait pas ce script, il aurait fallu modifier
master.cf
quand même, pour y ajouter la commande interne work
de
schleuder, qui n'existait pas avant.
Puis un petit script shell /usr/local/bin/spamc-schleuder
est venu remplacer
l'autre :
#!/bin/sh
# This script is going to be called by Postfix master(8) with stderr
# so we must be careful to capture any error messages in a log file.
# Exit on errors
set -e
# As we must process the email multiple times, let's capture it in
# a temporary file (and ensure it gets deleted once we're done).
trap 'rm -f "$MESSAGE"' EXIT
MESSAGE="$(mktemp --tmpdir=/var/lib/schleuder spamc-schleuder.XXXXXXX)"
cat > "$MESSAGE"
(
echo "$(date --iso-8601=seconds) --- spamc-schleuder called for ${1} ---"
echo
# ensure message is no spam, log spam report otherwise
if ! spamc --full-spam < "$MESSAGE" | grep --text ^; then
# send the message to schleuder for processing
schleuder work "$1" < "$MESSAGE"
fi
echo
) >>/var/log/schleuder/spamc-schleuder.log 2>&1
On l'appelle alors depuis master.cf
:
schleuder unix - n n - - pipe
flags=DRhu user=schleuder argv=/usr/local/bin/spamc-schleuder ${recipient}
Pour que cette solution fonctionne correctement, il faut que debian-spamd
puisse écrire dans le répertoire .spamassassin
de schleuder
, mais c'est
pas tout à fait ce qu'on veut. On a donc fait en sorte de satisfaire tout le
monde : debian-spamd
continuera d'écrire dans SON répertoire .spamassassin
en pensant écrire dans celui de schleuder
. Cela nécessite une ACL et un lien
symbolique :
sudo setfacl -m group:debian-spamd:x /srv/schleuder
sudo -u schleuder ln -s /var/lib/spamassassin/.spamassassin /srv/schleuder
Autres
Cette mise à jour a rendu obsolètes les scripts maison schleuder-gen-revoke
et schleuder-refresh-keys
. La tâche cron qui lançait régulièrement le
second a été supprimée. Cette fonctionnalité est intégrée à la version 3.