From 4ca23b7340fe2a84de9810b8e2cce0cee679a4fa Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Tue, 27 Dec 2016 17:55:22 +0000 Subject: [PATCH 1/5] mme si c'est optionnel, l'argument ne l'est pas --- re2o/settings_local.example.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/re2o/settings_local.example.py b/re2o/settings_local.example.py index e88f365d..2d0fea28 100644 --- a/re2o/settings_local.example.py +++ b/re2o/settings_local.example.py @@ -99,3 +99,5 @@ RADIUS_VLAN_DECISION = { 'VLAN_NOK' : 42, 'VLAN_OK' : 69, } + +OPTIONNAL_APPS = () From 08107ae49d42616f35c217cb76cce719672e211e Mon Sep 17 00:00:00 2001 From: Chirac Date: Tue, 27 Dec 2016 19:47:42 +0100 Subject: [PATCH 2/5] Update README.md --- README.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 515964d4..4598a15f 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,19 @@ Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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). -## Installation +## Installation des dépendances -### Prérequis +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. -Dépendances : +### Prérequis sur le serveur A -Avec apt (recommandé): +Voici la liste des dépendances à installer sur le serveur principal (A). + +### Avec apt : + +#### Sous debian 8 +Paquets obligatoires: * python3-django (1.8, jessie-backports) * python3-django-macaddress (stretch) * python3-dateutil (jessie-backports) @@ -24,22 +30,73 @@ Avec apt (recommandé): * texlive-fonts-recommended (jessie) * python3-djangorestframework (jessie) * python3-django-reversion (stretch) - * slapd (jessie) + * python3-pip (jessie) -Avec pip3: - * django-bootstrap3 (pip install) +Paquet recommandés: + * python3-django-extensions (jessie) + +#### Sous debian 9 + +Paquets obligatoires: + * python3-django (1.10, stretch) + * python3-dateutil (stretch) + * texlive (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) + + +### Autres dépendances : + +Avec pip3 (pip3 install): + * django-bootstrap3 * django-ldapdb Moteur de db conseillé (mysql), postgresql fonctionne également. -Pour mysql, il faut installer : - +Pour mysql, il faut installer : * python3-mysqldb (jessie-backports) + * mysql-client -Sur le serveur mysql : - * mysql-server (jessie) +### Prérequis sur le serveur B -## Installation du ldap, opérations à réaliser en root +Sur le serveur B, installer mysql ou postgresql, dans la version jessie ou stretch. + * mysql-server (jessie/stretch) ou postgresql (jessie-stretch) +### Prérequis sur le serveur C +Sur le serveur C (ldap), avec apt : + * slapd (jessie/stretch) + +## Installation sur le serveur principal A + +Cloner le dépot re2o à partir du gitlab, par exemple dans /var/www/re2o. +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. + +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 + +## Installation du serveur mysql/postgresql sur B + +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. + +Voici les étapes à éxecuter pour mysql : + * CREATE DATABASE re2o; + * CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; + * GRANT ALL PRIVILEGES ON re2o.* TO 'newuser'@'localhost'; + * FLUSH PRIVILEGES; + +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 + +### Installation du serveur ldap + +Ceci se fait en plusieurs étapes : + * générer un login/mdp administrateur (par example mkpasswd sous debian) + * 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) + * ### Insérer le mot de passe dans FILL_IN du schema.ldiff et db.ldiff, en hashant le mdp à l'aide de slappasswd ### Remplacer dans schema.ldiff et db.ldiff 'dc=example,dc=org' par le suffixe de l'association From 591730761d19dbe1ea7742660ca2fc29788a6358 Mon Sep 17 00:00:00 2001 From: Chirac Date: Tue, 27 Dec 2016 23:51:30 +0100 Subject: [PATCH 3/5] Update README.md --- README.md | 74 +++++++++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 4598a15f..13726a22 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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). +#Installation + ## Installation des dépendances 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). @@ -71,14 +73,14 @@ Sur le serveur B, installer mysql ou postgresql, dans la version jessie ou stret Sur le serveur C (ldap), avec apt : * slapd (jessie/stretch) -## Installation sur le serveur principal A +### Installation sur le serveur principal A Cloner le dépot re2o à partir du gitlab, par exemple dans /var/www/re2o. 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. 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 -## Installation du serveur mysql/postgresql sur B +### Installation du serveur mysql/postgresql sur B 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. @@ -91,58 +93,48 @@ Voici les étapes à éxecuter pour mysql : 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 -### Installation du serveur ldap +### Installation du serveur ldap sur le serveur C Ceci se fait en plusieurs étapes : * générer un login/mdp administrateur (par example mkpasswd sous debian) * 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) - * -### Insérer le mot de passe dans FILL_IN du schema.ldiff et db.ldiff, en hashant le mdp à l'aide de slappasswd + * 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 + * Arréter slapd + * 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 -### Remplacer dans schema.ldiff et db.ldiff 'dc=example,dc=org' par le suffixe de l'association +Normalement le serveur ldap démare et est fonctionnel. Par défaut tls n'est pas activé, il faut pour cela modifier le schéma pour indiquer l'emplacement du certificat. +Pour visualiser et éditer le ldap, l'utilisation de shelldap est fortement recommandée, en utilisant en binddn cn=admin,dc=ldap,dc=example,dc=org et binddpw le mot de passe admin. -### Arréter slapd +## Configuration initiale -service slapd stop +Normalement à cette étape, le ldap et la bdd sql sont configurées correctement. -### Supprimer les données existantes +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. -rm -rf /etc/ldap/slapd.d/* +## Démarer le site web -rm -rf /var/lib/ldap/* - -mkdir /var/lib/ldap/accesslog - -### Ajoute les données et le schema - -slapadd -n 0 -l schema.ldiff -F /etc/ldap/slapd.d/ - -slapadd -n 1 -l db.ldiff - -chown -R openldap:openldap /etc/ldap/slapd.d - -chown -R openldap:openldap /var/lib/ldap - -service slapd start - -## Installation du sql et démarage django - -Installer mysql ou postgresql - -Créer la base de donnée re2o, en créant un utilisateur re2o avec des droits sur une bdd re2o - -### Créer settings_local.py à partir de settings_local.example.py - -## Configuration - -Le site est prêt a fonctionner, il faut simplement créer la base de donnée (par défaut re2o), et régler les variables présentes dans setting_local.py -Un fichier d'exemple est disponible. -Ensuite, effectuer les migrations. Un squelette de base de donnée, via un mysqldump peut être fourni. - -## Mise en production avec apache +Il faut utiliser un moteur pour servir le site web. Nginx ou apache2 sont recommandés. +Pour apache2 : + * apt install apache2 + * apt install libapache2-mod-wsgi-py3 (pour le module wsgi) +Un example de site apache2 se trouve dans install_utils ( re2o.conf) re2o/wsgi.py permet de fonctionner avec apache2 en production +## Configuration avancée + +Une fois démaré, le site web devrait être accessible. +Pour créer un premier user, faire '''python3 manage.py createsuperuser''' qui va alors créer un user admin. +Il est conseillé de créer alors les droits cableur, bureau, trésorier et infra, qui n'existent pas par défaut dans le menu adhérents. +Il est également conseillé de créer un user portant le nom de l'association/organisation, qui possedera l'ensemble des machines. + +# Fonctionnement interne + ## Fonctionnement avec les services Pour charger les objets django, il suffit de faire User.objects.all() pour tous les users par exemple. From f216e834a99972f87621bdc42f162f37524b1a6e Mon Sep 17 00:00:00 2001 From: Chirac Date: Wed, 28 Dec 2016 00:43:30 +0100 Subject: [PATCH 4/5] Update README.md --- README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 13726a22..4fc4b2e9 100644 --- a/README.md +++ b/README.md @@ -133,9 +133,35 @@ Pour créer un premier user, faire '''python3 manage.py createsuperuser''' qui v Il est conseillé de créer alors les droits cableur, bureau, trésorier et infra, qui n'existent pas par défaut dans le menu adhérents. Il est également conseillé de créer un user portant le nom de l'association/organisation, qui possedera l'ensemble des machines. +## 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 + # Fonctionnement interne +## Fonctionnement général + +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) + +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. + +Enfin les views, générent les pages web à partir des forms et des templates. + ## Fonctionnement avec les services +Les services dhcp.py, dns.py etc accèdent aux données via des vues rest. +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. + +# Requète en base de donnée + +Pour avoir un shell, il suffit de lancer '''python3 manage.py shell''' +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. -Cependant, pour que les services fonctionnent de manière simple, des fonctions toutes prètes existent deja pour charger la liste des users autorisés à se connecter ( has_access(user)), etc. Ces fonctions sont personnalisables, et permettent un fonctionnement très simple des services. +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. From 0d99a3827f230cc7ca2282fe3a35e49baf7b9e36 Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Thu, 5 Jan 2017 23:48:45 +0100 Subject: [PATCH 5/5] Pas de cname sur les mx --- machines/forms.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/machines/forms.py b/machines/forms.py index 99c2c570..822c5faa 100644 --- a/machines/forms.py +++ b/machines/forms.py @@ -141,7 +141,11 @@ class MxForm(ModelForm): class Meta: model = Mx fields = ['zone', 'priority', 'name'] - + + def __init__(self, *args, **kwargs): + super(MxForm, self).__init__(*args, **kwargs) + self.fields['name'].queryset = Domain.objects.exclude(interface_parent=None) + class DelMxForm(ModelForm): mx = forms.ModelMultipleChoiceField(queryset=Mx.objects.all(), label="MX actuels", widget=forms.CheckboxSelectMultiple)