]> nos-oignons.net Git - gestion-adh.git/blobdiff - README
Switch to Mailman 3 REST API for “ag” subscriptions
[gestion-adh.git] / README
diff --git a/README b/README
index 45d324b6ecd9f1efe4d5b355252e16d45f17db86..123a38ad591bc0d6749230ce815fb0efcd8fec1b 100644 (file)
--- a/README
+++ b/README
@@ -100,8 +100,16 @@ le dépôt central du wiki du C.A. (via un lien symbolique dans
 
 Met à jour la liste des adresses email inscrites à la liste *ag@* par rapport
 aux membres à jour de cotisation. À exécuter à travers un *cron*. A besoin de
-pouvoir lancer les commandes `list_members`, `add_members` et `remove_members`
-via `sudo` sur le compte `list`.
+pouvoir se connecter à l’API REST de Mailman 3.
+
+La variable d’environnement suivante doit être
+définie `NOS_OIGNONS_MAILMAN_REST_API_URL` avec par exemple :
+`https://user:password@mailman.example.org`
+
+À défaut, cette dernière sera lue depuis le fichier `mailman-rest-url`
+dans le dossier indiqué par la variable d’environnemnet `CREDENTIALS_DIRECTORY`
+(voir [System and Service Credentials](https://systemd.io/CREDENTIALS/) et
+la procédure de déploiement indiqué plus bas).
 
 `send-membership-reminders`
 ---------------------------
@@ -145,26 +153,24 @@ Développement
 L'essentiel du code est en Ruby. Les dépendances sont gérées avec Bundler. Les
 tests d'intégrations sont faits avec Cucumber.
 
-Installer les paquets Debian qui vont bien (sur Wheezy) :
+Installer les paquets Debian qui vont bien (sur Jessie) :
 
-    apt-get install ruby1.9.1 bundler
+    apt-get install bundler
 
 Pour récupérer les dépendances :
 
-    ruby1.9.1 /usr/bin/bundle install --path=vendor/bundle
+    bundle install --path=vendor/bundle
 
 Déploiement
 ===========
 
 Installer les paquets Debian qui vont bien (sur Wheezy) :
 
-    apt-get install ruby1.9.1 bundler
+    apt-get install bundler
 
 Installer les dépendances :
 
-    ruby1.9.1 /usr/bin/bundle install --deployment \
-                                      --without=development \
-                                      --path=vendor/bundle
+    bundle install --deployment --without=development --path=vendor/bundle
     chmod -R o+rX vendor/bundle
 
 Il faut donner les droits d'écriture à `wiki-ca` sur le répertoire `var`.
@@ -178,29 +184,106 @@ Pour rendre facilement accessible `list-members-emails`, on peut ajouter dans
 
 Ne pas oublier de le rendre exécutable.
 
-Pour permettre au script `update-ag-subscribers` de fonctionner, il est
-nécessaire de l'autoriser à exécuter certaines commandes de Mailman.
-Pour cela, on va créer un fichier dans `/etc/sudoers.d` :
+On va utiliser des
+[services](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
+et des [timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html)
+systemd pour les scripts à utiliser régulièrement.
+
+Dans `/etc/systemd/system/gestion-adh-update-ag-subscribers.service` :
+
+    [Unit]
+    Description=Update subscribers of the `ag` mailing list according to memberships
+
+    [Service]
+    Type=oneshot
+    WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
+    User=wiki-ca
+    ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers
+    Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
+    SyslogIdentifier=update-ag-subscribers
+    ProtectSystem=strict
+    ProtectHome=true
+    PrivateTmp=yes
+    PrivateDevices=yes
+
+Dans `/etc/systemd/system/gestion-adh-update-ag-subscribers.timer` :
+
+    [Unit]
+    Description=Run update-ag-subscribers every hour
+
+    [Timer]
+    RandomizedDelaySec=30min
+    OnCalendar=hourly
+
+    [Install]
+    WantedBy=timers.target
+
+Il est également nécessaire de configurer le *credential* avec les informations
+de connexion à Mailman :
+
+    echo -n 'https://USER:SECRET_PASSWORD@localhost:8001' | sudo systemd-creds encrypt --name=mailman-rest-url -p - - | sudo tee -a /etc/systemd/system/gestion-adh-update-subscribers.service.d/overrides.conf
+
+Dans `/etc/systemd/system/gestion-adh-send-membership-reminders.service` :
+
+    [Unit]
+    Description=Send reminders to renew membership
+
+    [Service]
+    Type=oneshot
+    WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
+    User=wiki-ca
+    ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders
+    Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
+    SyslogIdentifier=send-membership-reminders
+    ProtectSystem=strict
+    ProtectHome=true
+    PrivateTmp=yes
+    PrivateDevices=yes
+    ReadWritePaths=/srv/ikiwiki/wiki-ca/gestion-adh/var
+
+Dans `/etc/systemd/system/gestion-adh-send-membership-reminders.timer` :
+
+    [Unit]
+    Description=Run send-membership-reminders every day
+
+    [Timer]
+    OnCalendar=06:42
+
+    [Install]
+    WantedBy=timers.target
+
+Dans `/etc/systemd/system/gestion-adh-send-member-emails-to-advisors.service` :
+
+    [Unit]
+    Description=Send member emails to the advisory board
 
-    Defaults:wiki-ca !requiretty
+    [Service]
+    Type=oneshot
+    WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
+    User=wiki-ca
+    ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors
+    Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
+    SyslogIdentifier=send-member-emails-to-advisors
+    ProtectSystem=strict
+    ProtectHome=true
+    PrivateTmp=yes
+    PrivateDevices=yes
 
-    Cmnd_Alias AG_MANAGEMENT = /usr/sbin/list_members ag,\
-                               /usr/sbin/add_members -r - ag,\
-                               /usr/sbin/remove_members -f - ag
+Dans `/etc/systemd/system/gestion-adh-send-member-emails-to-advisors.timer` :
 
-    wiki-ca ALL = (list) NOPASSWD: AG_MANAGEMENT
+    [Unit]
+    Description=Run send-member-emails-to-advisors monthly
 
-Ensuite, pour exécuter régulièrement les scripts via le *crontab* du compte
-`wiki-ca`, il faut y ajouter :
+    [Timer]
+    OnCalendar=monthly
 
-    42 * * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers
-    42 6 * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders
-    21 0 1 * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors
+    [Install]
+    WantedBy=timers.target
 
 Pour installer le `pre-commit` *hook* sur le dépôt utilisé par
 Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` :
 
-    if ! BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-commit-hook; then
+    if ! BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-commit-hook; then
             # Reset changes that do not pass the pre-commit hook to prevent
             # wrong changes to lay in the Ikiwiki source directory.
             git reset --hard
@@ -213,7 +296,7 @@ Pour installer le `pre-receive` *hook* sur le dépôt central, on met dans
 `/srv/git/.gitolite/hooks/wiki-ca/hooks/pre-receive` :
 
     #!/bin/sh
-    BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-receive-hook
+    BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-receive-hook
 
 Ne pas oublier de le rendre exécutable. Il faut ensuite faire un lien symbolique :