X-Git-Url: https://nos-oignons.net/gitweb/gestion-adh.git/blobdiff_plain/6f0407b6532f52cb0726b2b7fe0070e1709dd5dc..HEAD:/README diff --git a/README b/README index 45d324b..123a38a 100644 --- 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 :