Qu'est-ce qu'est re2o ? Je vous invite à lire cette page : https://intranet.auro.re/about/.
Re2o est activement développé par Federez ici : https://gitlab.federez.net/federez/re2o/.
De la documentation est disponible ici : https://gitlab.federez.net/federez/re2o/wikis/home.
Si vous comptez ajouter une fonctionnalité, corriger un bug… pensez à partir de la branche de développement, sinon votre travail sera difficile à mettre en place à terme.
Pour tester votre code, un serveur de test est disponible à Aurore au lien suivant : https://re2o-test.auro.re/.
Cette partie n'a pas été relu par un mainteneur, du coup elle peut contenir des informations fausses.
Il est possible de discuter avec re2o à travers une API.
Certains diront que c'est une API RESTful, mais parce qu'elle est dynamique ce n'est pas le cas (entre autre ce serait une mauvaise idée de mettre en cache les données et imaginer qu'elles ne changent que très rarement).
Si vous voulez ajouter une fonctionnalité à re2o, par exemple l'impression, vous pouvez vous basez sur cette API pour discuter et échanger des données.
L'API est volontairement limité. Par exemple des tâches sensibles tel que la création d'un utilisateur ne sont pas disponibles via l'API. Migrer un utilisateur
Cette partie n'a pas été relu par un mainteneur, du coup elle peut contenir des informations fausses.
Les fichiers de référence sont dans l'application ''users'' de re2o.
import users.models
# On crée un adhérent en utilisant l'UserManager.
# Ainsi on passe par des fonctions de vérification pour vérifier par exemple que le pseudo est compatible avec les noms d'utilisateur unix.
pseudo = 'erdnaxe'
surname = 'Famille'
email = 'supermail@protonmail.net'
adherent = users.models.Adherent.objects.create_user(pseudo, surname, email)
# L'adhérent a par défaut pour prénom son nom de famille.
adherent.name = 'Prénom'
# On met le telephone (optionnel)
adherent.telephone = '0100000000'
# Configuration du shell (optionnel)
user.shell = users.models.ListShell.objects.get_or_create(shell='/usr/bin/zsh')
# On écrit l'entrée en base de donnée
adherent.save()
Il est possible de le faire sur le serveur web re2o ou sur le serveur de la bdd re2o (re2o-db).
Depuis le serveur web re2o :
# pg_dump -h re2o-db.adm.auro.re -U re2o -W > re2o_dump_X_X_20.sql
Il est nécessaire de spécifier le mot de passe admin de la bdd re2o postgresql à l'invite de commande.
Il faut disposer d'un dump de la bdd de prod. Ensuite, en cli sur le serveur de test :
# sudo -u postgres psql
psql (11.7 (Debian 11.7-0+deb10u1), serveur 9.6.13)
Saisissez « help » pour l'aide.
postgres=# drop database re2o;
postgres=# CREATE DATABASE re2o ENCODING 'UTF8' LC_COLLATE='fr_FR.UTF-8' LC_CTYPE='fr_FR.UTF-8';
postgres=# ALTER DATABASE re2o owner to re2o;
Puis ensuite :
# sudo -u postgres psql -d re2o < dump.sql
Chaque mise à jour étant différente, il est fortement recommandé de non seulement lire le changelog.md et d'appliquer les recommandations pour éviter de casser l'installation.
Lancer simplement git pull
à la racine du dépot.
Toutes ces opérations sont automatiquement effectuées en invoquant la commande :
./install_re2o.sh update
Celle-ci va invoquer successivement :
$ cat apt_requirements.txt | xargs apt-get -y install
$ pip3 install pip_requirements.txt
$ python3 manage.py migrate
$ python3 manage.py collectstatics
$ python3 manage.py compilemessages
A la fin, on redémarre apache :
# service apache2 restart
Sur chaque radius, il y a un replica postgresql utilisé en local par le radius pour toutes les opérations.
Si (et seulement si) la mise à jour à appliqué une ou plusieurs migrations, alors la structure de la bdd maitre a été changé. Dans ce cas, les replica ne sont plus fonctionnels, même si la migration en question n'affecte pas les tables utilisées par le radius.
Dans ce cas là, il est essentiel d'invoquer un rôle ansible qui va détruire et restaurer ces replica.
ansible-playbook nuke_radius_dbs.yml --ask-vault-pass --limit radius-*.adm.auro.re