2016-07-07 10:32:16 +00:00
|
|
|
# Re2o
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2016-07-31 10:20:28 +00:00
|
|
|
Gnu public license v2.0
|
|
|
|
|
2016-07-07 10:32:16 +00:00
|
|
|
## Avant propos
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
|
|
|
se veut agnostique au réseau considéré, de manière à être installable en
|
|
|
|
quelques clics.
|
|
|
|
|
|
|
|
Il utilise le framework django avec python3. Il permet de gérer les adhérents,
|
|
|
|
les machines, les factures, les droits d'accès, les switchs et la topologie du
|
|
|
|
réseau.
|
|
|
|
De cette manière, il est possible de pluguer très facilement des services
|
|
|
|
dessus, qui accèdent à la base de donnée en passant par django (ex : dhcp), en
|
|
|
|
chargeant la liste de toutes les mac-ip, ou la liste des mac-ip autorisées sur
|
|
|
|
le réseau (adhérent à jour de cotisation).
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2017-11-07 00:50:51 +00:00
|
|
|
# Installation
|
2016-12-27 22:51:30 +00:00
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
## Installation des dépendances
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
L'installation comporte 3 partie : le serveur web où se trouve le depot re2o
|
|
|
|
ainsi que toutes ses dépendances, le serveur bdd (mysql ou pgsql) et le
|
|
|
|
serveur ldap. Ces 3 serveurs peuvent en réalité être la même machine, ou séparés
|
|
|
|
(recommandé en production).
|
|
|
|
Le serveur web sera nommé serveur A, le serveur bdd serveur B et le serveur ldap
|
|
|
|
serveur C.
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
### Prérequis sur le serveur A
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
Voici la liste des dépendances à installer sur le serveur principal (A).
|
|
|
|
|
|
|
|
### Avec apt :
|
|
|
|
|
|
|
|
#### Sous debian 9
|
|
|
|
|
|
|
|
Paquets obligatoires:
|
|
|
|
* python3-django (1.10, stretch)
|
|
|
|
* python3-dateutil (stretch)
|
|
|
|
* texlive-latex-base (stretch)
|
|
|
|
* texlive-fonts-recommended (strech)
|
|
|
|
* python3-djangorestframework (stretch)
|
|
|
|
* python3-django-reversion (stretch)
|
|
|
|
* python3-pip (stretch)
|
|
|
|
|
|
|
|
Paquet recommandés:
|
|
|
|
* python3-django-extensions (stretch)
|
|
|
|
|
2016-07-31 02:09:14 +00:00
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
### Autres dépendances :
|
|
|
|
|
2017-01-15 16:38:37 +00:00
|
|
|
Paquets préalables à installer avec apt :
|
|
|
|
* libsasl2-dev (stable)
|
|
|
|
* libldap2-dev (stable)
|
|
|
|
* libssl-dev (stable)
|
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
Avec pip3 (pip3 install):
|
|
|
|
* django-bootstrap3
|
2016-07-31 02:09:14 +00:00
|
|
|
* django-ldapdb
|
2017-06-19 01:39:20 +00:00
|
|
|
* django-macaddress
|
2016-07-07 10:28:20 +00:00
|
|
|
|
|
|
|
Moteur de db conseillé (mysql), postgresql fonctionne également.
|
2016-12-27 18:47:42 +00:00
|
|
|
Pour mysql, il faut installer :
|
2017-06-19 01:39:20 +00:00
|
|
|
* python3-mysqldb
|
2016-12-27 18:47:42 +00:00
|
|
|
* mysql-client
|
|
|
|
|
|
|
|
### Prérequis sur le serveur B
|
|
|
|
|
2017-06-19 01:39:20 +00:00
|
|
|
Sur le serveur B, installer mysql ou postgresql, dans la version stretch.
|
|
|
|
* mysql-server (stretch) ou postgresql (stretch)
|
2016-12-27 18:47:42 +00:00
|
|
|
|
|
|
|
### Prérequis sur le serveur C
|
|
|
|
Sur le serveur C (ldap), avec apt :
|
2017-06-19 01:39:20 +00:00
|
|
|
* slapd (stretch)
|
2016-12-27 18:47:42 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
### Installation sur le serveur principal A
|
2016-12-27 18:47:42 +00:00
|
|
|
|
|
|
|
Cloner le dépot re2o à partir du gitlab, par exemple dans /var/www/re2o.
|
2017-10-02 22:47:56 +00:00
|
|
|
Ensuite, il faut créer le fichier settings_local.py dans le sous dossier re2o,
|
|
|
|
un settings_local.example.py est présent. Les options sont commentées, et des
|
|
|
|
options par défaut existent.
|
2016-12-27 18:47:42 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
En particulier, il est nécessaire de générer un login/mdp admin pour le ldap et
|
|
|
|
un login/mdp pour l'utilisateur sql (cf ci-dessous), à mettre dans
|
|
|
|
settings_local.py
|
2016-12-27 18:47:42 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
### Installation du serveur mysql/postgresql sur B
|
2016-12-27 18:47:42 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de
|
|
|
|
donnée re2o, ainsi qu'un user re2o et un mot de passe associé.
|
|
|
|
Ne pas oublier de faire écouter le serveur mysql ou postgresql avec les acl
|
|
|
|
nécessaire pour que A puisse l'utiliser.
|
2016-12-27 18:47:42 +00:00
|
|
|
|
2017-10-02 22:51:26 +00:00
|
|
|
#### Mysql
|
2016-12-27 18:47:42 +00:00
|
|
|
Voici les étapes à éxecuter pour mysql :
|
2017-08-30 13:28:04 +00:00
|
|
|
* CREATE DATABASE re2o collate='utf8_general_ci';
|
2016-12-27 18:47:42 +00:00
|
|
|
* CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
|
|
|
|
* GRANT ALL PRIVILEGES ON re2o.* TO 'newuser'@'localhost';
|
|
|
|
* FLUSH PRIVILEGES;
|
2016-07-07 10:32:16 +00:00
|
|
|
|
2017-10-02 22:51:26 +00:00
|
|
|
#### Postgresql
|
|
|
|
* CREATE DATABASE re2o ENCODING 'UTF8' LC_COLLATE='fr_FR.UTF-8'
|
|
|
|
LC_CTYPE='fr_FR.UTF-8';
|
|
|
|
* CREATE USER newuser with password 'password';
|
|
|
|
* ALTER DATABASE re2o owner to newuser;
|
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Si les serveurs A et B ne sont pas la même machine, il est nécessaire de
|
|
|
|
remplacer localhost par l'ip avec laquelle A contacte B dans les commandes
|
|
|
|
du dessus.
|
|
|
|
Une fois ces commandes effectuées, ne pas oublier de vérifier que newuser et
|
|
|
|
password sont présents dans settings_local.py
|
2016-10-02 21:22:52 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
### Installation du serveur ldap sur le serveur C
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2016-12-27 18:47:42 +00:00
|
|
|
Ceci se fait en plusieurs étapes :
|
|
|
|
* générer un login/mdp administrateur (par example mkpasswd sous debian)
|
2017-10-02 22:47:56 +00:00
|
|
|
* Copier depuis re2o/install_utils (dans le dépot re2o) les fichiers db.ldiff
|
|
|
|
et schema.ldiff (normalement sur le serveur A) sur le serveur C
|
|
|
|
(par ex dans /tmp)
|
|
|
|
* Hasher le mot de passe généré en utilisant la commande slappasswd
|
|
|
|
(installée par slapd)
|
|
|
|
* Remplacer toutes les sections FILL_IN par le hash dans schema.ldiff et
|
|
|
|
db.ldiff
|
|
|
|
* Remplacer dans schema.ldiff et db.ldiff 'dc=example,dc=org' par le
|
|
|
|
suffixe de l'organisation
|
2016-12-27 22:51:30 +00:00
|
|
|
* Arréter slapd
|
2017-10-02 22:47:56 +00:00
|
|
|
* Supprimer les données existantes : '''rm -rf /etc/ldap/slapd.d/*''' et
|
|
|
|
'''rm -rf /var/lib/ldap/*'''
|
|
|
|
* Injecter le nouveau schéma :
|
|
|
|
'''slapadd -n 0 -l schema.ldiff -F /etc/ldap/slapd.d/''' et
|
|
|
|
'''slapadd -n 1 -l db.ldiff'''
|
|
|
|
* Réparer les permissions (chown -R openldap:openldap /etc/ldap/slapd.d et
|
|
|
|
chown -R openldap:openldap /var/lib/ldap) puis relancer slapd
|
|
|
|
|
|
|
|
Pour visualiser et éditer le ldap, l'utilisation de shelldap est fortement
|
2017-10-03 00:04:44 +00:00
|
|
|
recommandée, en utilisant en binddn et basedn tous deux égaux à 'cn=config' et
|
2017-10-02 22:47:56 +00:00
|
|
|
binddpw le mot de passe admin.
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2017-10-03 00:04:44 +00:00
|
|
|
Rajouter (exemple de chemin de fichier avec un certif LE):
|
|
|
|
`olcTLSCertificateKeyFile: /etc/letsencrypt/live/HOSTNAME/privkey.pem
|
|
|
|
olcTLSCACertificateFile: /etc/letsencrypt/live/HOSTNAME/chain.pem
|
|
|
|
olcTLSCertificateFile: /etc/letsencrypt/live/HOSTNAME/cert.pem `
|
|
|
|
|
|
|
|
Mettre à jour la partie ldap du `settings_local.py` (mettre 'TLS' à True
|
|
|
|
si besoin, user cn=config,dc=example,dc=org et mot de passe
|
|
|
|
ldap choisi précédemment).
|
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
## Configuration initiale
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
Normalement à cette étape, le ldap et la bdd sql sont configurées correctement.
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Il faut alors lancer dans le dépot re2o '''python3 manage.py migrate''' qui
|
|
|
|
va structurer initialement la base de données.
|
|
|
|
Les migrations sont normalement comitées au fur et à mesure, néanmoins cette
|
|
|
|
étape peut crasher, merci de reporter les bugs.
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
## Démarer le site web
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Il faut utiliser un moteur pour servir le site web. Nginx ou apache2 sont
|
|
|
|
recommandés.
|
2016-12-27 22:51:30 +00:00
|
|
|
Pour apache2 :
|
|
|
|
* apt install apache2
|
|
|
|
* apt install libapache2-mod-wsgi-py3 (pour le module wsgi)
|
2016-10-13 00:42:23 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
Un example de site apache2 se trouve dans install_utils ( re2o.conf)
|
|
|
|
re2o/wsgi.py permet de fonctionner avec apache2 en production
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
## Configuration avancée
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
Une fois démaré, le site web devrait être accessible.
|
2017-10-02 22:47:56 +00:00
|
|
|
Pour créer un premier user, faire '''python3 manage.py createsuperuser'''
|
|
|
|
qui va alors créer un user admin.
|
2018-01-21 17:17:41 +00:00
|
|
|
Il est conseillé de créer un user portant le nom de
|
|
|
|
l'association/organisation, qui possedera l'ensemble des machines, à indiquer
|
|
|
|
dans le menu reglages sur l'interface.
|
2016-07-07 10:28:20 +00:00
|
|
|
|
2016-12-27 23:43:30 +00:00
|
|
|
## Installations Optionnelles
|
|
|
|
### Générer le schéma des dépendances
|
|
|
|
|
|
|
|
Pour cela :
|
|
|
|
* apt install python3-django-extensions
|
|
|
|
* python3 manage.py graph_models -a -g -o re2o.png
|
|
|
|
|
2016-12-27 22:51:30 +00:00
|
|
|
# Fonctionnement interne
|
2016-07-07 11:19:03 +00:00
|
|
|
|
2016-12-27 23:43:30 +00:00
|
|
|
## Fonctionnement général
|
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Re2o est séparé entre les models, qui sont visible sur le schéma des
|
|
|
|
dépendances. Il s'agit en réalité des tables sql, et les fields etant les
|
|
|
|
colonnes.
|
|
|
|
Ceci dit il n'est jamais nécessaire de toucher directement au sql, django
|
|
|
|
procédant automatiquement à tout cela.
|
|
|
|
On crée donc différents models (user, right pour les droits des users,
|
|
|
|
interfaces, IpList pour l'ensemble des adresses ip, etc)
|
2016-12-27 23:43:30 +00:00
|
|
|
|
2017-10-02 22:47:56 +00:00
|
|
|
Du coté des forms, il s'agit des formulaire d'édition des models. Il
|
|
|
|
s'agit de ModelForms django, qui héritent des models très simplement, voir la
|
|
|
|
documentation django models forms.
|
2016-12-27 23:43:30 +00:00
|
|
|
|
|
|
|
Enfin les views, générent les pages web à partir des forms et des templates.
|
|
|
|
|
2016-07-07 11:19:03 +00:00
|
|
|
## Fonctionnement avec les services
|
|
|
|
|
2016-12-27 23:43:30 +00:00
|
|
|
Les services dhcp.py, dns.py etc accèdent aux données via des vues rest.
|
2017-10-02 22:47:56 +00:00
|
|
|
Celles-ci se trouvent dans machines/views.py. Elles sont générées via
|
|
|
|
machines/serializers.py qui génère les vues. IL s'agit de vues en json utilisées
|
|
|
|
par re2o-tools pour récupérer les données.
|
|
|
|
Il est nécessaire de créer un user dans re2o avec le droit serveur qui permet
|
|
|
|
d'accéder à ces vues, utilisé par re2o-tools.
|
2016-12-27 23:43:30 +00:00
|
|
|
|
|
|
|
# Requète en base de donnée
|
|
|
|
|
|
|
|
Pour avoir un shell, il suffit de lancer '''python3 manage.py shell'''
|
2017-10-02 22:47:56 +00:00
|
|
|
Pour charger des objets, example avec User, faire :
|
|
|
|
''' from users.models import User'''
|
|
|
|
Pour charger les objets django, il suffit de faire User.objects.all()
|
|
|
|
pour tous les users par exemple.
|
|
|
|
Il est ensuite aisé de faire des requètes, par exemple
|
|
|
|
User.objects.filter(pseudo='test')
|
|
|
|
Des exemples et la documentation complète sur les requètes django sont
|
|
|
|
disponible sur le site officiel.
|