Projet

Général

Profil

EnvoleEoleDB » Historique » Version 9

Gérald Schwartzmann, 27/01/2016 12:20

1 9 Gérald Schwartzmann
h1. Comment migrer une application Envole à EoleDB
2 1 Philippe Caseiro
3 1 Philippe Caseiro
h2. Un mot sur EoleDB
4 1 Philippe Caseiro
5 1 Philippe Caseiro
EoleDB est une re-implémentation de l'ancien système eole-sql avec trois objectifs principaux : 
6 1 Philippe Caseiro
# Avoir 1 seul fichier de configuration.
7 1 Philippe Caseiro
# Supporter nativement plusieurs types de bases de données (mysql, postgresql, sqlite, ...).
8 1 Philippe Caseiro
# Supporter nativement l'externalisation des baes de données sur d'autres serveurs.
9 1 Philippe Caseiro
10 3 Philippe Caseiro
EoleDB dispose d'un fichier de configuration par défaut, _*/etc/eole/eole-db.conf*_, ce fichier
11 2 Philippe Caseiro
au format yaml définis le comportement par défaut de EoleDB si aucune configuration spécifique 
12 2 Philippe Caseiro
n'est définie par l'application.
13 2 Philippe Caseiro
14 2 Philippe Caseiro
L'application dispose d'un fichier de configuration au format yaml qui surcharge le comportement
15 3 Philippe Caseiro
de EoleDB. Les fichiers de configurations sont dans _*/etc/eole/eole-db.d/*_**.
16 1 Philippe Caseiro
Les fichiers de configuration spécifiques aux applications redéfinissent le comportement de EoleDB.
17 2 Philippe Caseiro
18 3 Philippe Caseiro
h3. Les options de configuration possibles pour _/etc/eole/eole-db.conf_:
19 3 Philippe Caseiro
20 2 Philippe Caseiro
* *dbcont*: Définition du conteneur par défaut de la base de données en mode conteneur
21 2 Philippe Caseiro
* *dbhost*: Définition de l'adresse du serveur de base de données par défaut
22 1 Philippe Caseiro
* *dbport*: Définition du port d'écoute du serveur de base de données par défaut
23 1 Philippe Caseiro
* *dbroot*: Définition du nom de l'utilisateur ayant des droits "Administrateur" sur le serveur de base de données par défaut
24 1 Philippe Caseiro
* *dbrootpwd*: Définition du mot de passe part défaut de l'utilisateur définis par l'option *dbroot*
25 1 Philippe Caseiro
* *dbtype* : Définition du type de base de données par défaut du serveur de base de données (mysql, pgsql, sqlite, ...)
26 3 Philippe Caseiro
* *client_hosts*: Liste des noms d'hôtes ou IP depuis lesquels les utilisateurs pourrons ouvrir des sessions sur le serveur de base de données. 
27 3 Philippe Caseiro
* *dbcliconf* : Définition d'un fichier de paramètrage par défaut (utile pour mysql)
28 3 Philippe Caseiro
29 3 Philippe Caseiro
*Attention :* 
30 3 Philippe Caseiro
31 6 Philippe Caseiro
Les options passées dans le fichier définis dans *dbcliconf* rendent inutiles les options *dbhost*, *dbport*, *dbroot*, *dbrootpwd* et *dbtype*
32 3 Philippe Caseiro
33 7 Philippe Caseiro
L'option *dbrootpwd* ne prend pas un mot de passe en clair, mais un fichier qui contiens le mot de passe. Comme le .reader du LDAP.
34 3 Philippe Caseiro
35 3 Philippe Caseiro
 h3. Les options de configuration possibles pour les fichiers spécifiques aux applications (_/etc/eole/eole-db.d/*.yml_:
36 3 Philippe Caseiro
37 3 Philippe Caseiro
* *dbhost*: définition de l'adresse du serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
38 3 Philippe Caseiro
* *dbport*: définition du port d'écoute du serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
39 3 Philippe Caseiro
* *dbroot*: Définition du nom de l'utilisateur ayant des droits "Administrateur" sur le serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
40 3 Philippe Caseiro
* *dbrootpwd*: Définition du mot de passe part défaut de l'utilisateur définis par l'option *dbroot* (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
41 3 Philippe Caseiro
42 3 Philippe Caseiro
* *dbname*: Nom de la base de données de l'application
43 3 Philippe Caseiro
* *dbuser*: Nom de l'utilisateur utilisé par l'application pour accéder à la base définies dans *dbname*
44 3 Philippe Caseiro
* *dbpass*: Mot de passe utilisé par l'application pour l'utilisateur définis dans *dbuser*
45 3 Philippe Caseiro
* *createscript*: Script SQL de création de la base de données définie dans *dbname*
46 3 Philippe Caseiro
* *sqlscripts*: Scripts SQL a lancer après le script de création définis dans *createscript*
47 3 Philippe Caseiro
* *updatescripts*: Scripts de mise à jour lancée sur la base définie dans *dbname* (lancé uniquement si la base existe déjà)
48 3 Philippe Caseiro
* *pwd_files* : Définition des fichiers à mettre à jour après le changement du mot de passe de l'utilisateur définis dans *dbuser*
49 3 Philippe Caseiro
50 3 Philippe Caseiro
Note sur l'option *pwd_files*:
51 3 Philippe Caseiro
52 3 Philippe Caseiro
L'option pwd_files prend une liste de "dictionnaires" au sens python, cette option attend donc quelque chose comme ça :
53 3 Philippe Caseiro
54 3 Philippe Caseiro
<pre>
55 3 Philippe Caseiro
pwd_files:
56 3 Philippe Caseiro
    - {file: '/var/www/html/posh/includes/config.inc.php',
57 3 Philippe Caseiro
       container: 'web',
58 3 Philippe Caseiro
       pattern: 'define("__PASS","',
59 3 Philippe Caseiro
       end_pattern: ');',
60 3 Philippe Caseiro
       owner: 'root:www-data',
61 3 Philippe Caseiro
       mod: '660' }
62 3 Philippe Caseiro
    - {file: '/usr/share/envole/eoledb/posh',
63 3 Philippe Caseiro
       pattern: 'dbpassPOSH="',
64 3 Philippe Caseiro
       owner: 'root:root',
65 3 Philippe Caseiro
       mod: '600' }
66 3 Philippe Caseiro
</pre>
67 3 Philippe Caseiro
68 3 Philippe Caseiro
Voici la liste des options possibles pour les "structures" (dictionnaires au sens python) possibles pour un élément de la liste *pwd_files*:
69 3 Philippe Caseiro
70 3 Philippe Caseiro
* file : Chemin complet du fichier a modifier, *cette option est obligatoire*
71 3 Philippe Caseiro
* pattern : Modèle de ligne qui contiens le mot de passe entre ''. *cette option est obligatoire*
72 3 Philippe Caseiro
* container: Conteneur ou ce trouve le fichier a modifier (valable uniquement en mode conteneur) 
73 3 Philippe Caseiro
* end_pattern: caractères a ajouter après le mot de passe sur la ligne lors de la modification du fichier
74 3 Philippe Caseiro
* owner: Propriétaire, au format "user:group", a définir après la modification du mot de passe
75 3 Philippe Caseiro
* mod: Droits au format unix (ex: 600) a définir après la modification du mot de passe
76 3 Philippe Caseiro
77 3 Philippe Caseiro
Note sur l'option *pattern*:
78 3 Philippe Caseiro
79 3 Philippe Caseiro
L'option pattern permet de définir le modèle de ligne qui contiens le mot de passe, il est important de définir la totalité de ce qui précède le mot de passe dans la ligne.
80 3 Philippe Caseiro
81 3 Philippe Caseiro
Par exemple si la ligne a changer est la suivante : 
82 3 Philippe Caseiro
83 3 Philippe Caseiro
<pre>
84 3 Philippe Caseiro
password: "JeSuiSunMauvaisPassowrd"
85 3 Philippe Caseiro
</pre>
86 3 Philippe Caseiro
87 3 Philippe Caseiro
Il faut définir la valeur suivante pour l'option *pattern*:
88 3 Philippe Caseiro
<pre>
89 3 Philippe Caseiro
pwd_files:
90 3 Philippe Caseiro
   - {file: "/monfichier.conf",
91 3 Philippe Caseiro
      pattern: 'password: "'
92 3 Philippe Caseiro
</pre>
93 3 Philippe Caseiro
Le " est important car lorsqu'il est définis EoleDB détermine automatiquement qu'il faut qu'il ferme les " après 
94 3 Philippe Caseiro
la mise en place du nouveau mot de passe.
95 3 Philippe Caseiro
96 3 Philippe Caseiro
Si le pattern de votre mot de passe doit être entre des ' il faut préférer le format suivant : 
97 3 Philippe Caseiro
<pre>
98 3 Philippe Caseiro
pattern: "password: '"
99 3 Philippe Caseiro
</pre>
100 3 Philippe Caseiro
101 3 Philippe Caseiro
EoleDB gère également la fermeture des '
102 3 Philippe Caseiro
103 3 Philippe Caseiro
EoleDB détecte également les ";" en fin de ligne ce qui fait que si votre ligne de mot de passe ce termine par un ";" , il ajouteras automatiquement le ";" final. Si vous avez des problèmes avec la terminaison automatique de la ligne avec le ";" ou que votre ligne ce termine par autre chose que ";" vous pouvez utiliser l'option *end_pattern*.
104 3 Philippe Caseiro
105 3 Philippe Caseiro
Note sur l'option *end_pattern*:
106 3 Philippe Caseiro
107 3 Philippe Caseiro
Cette option permet de définir les caractères a ajouter a la fin de la ligne juste après le nouveau mot de passe.
108 3 Philippe Caseiro
109 3 Philippe Caseiro
Par exemple si votre ligne de mot de passe à le format suivant : 
110 3 Philippe Caseiro
<pre>
111 3 Philippe Caseiro
define('DBPASS': 'JeSuisUnMauvaisPassword');
112 3 Philippe Caseiro
</pre>
113 3 Philippe Caseiro
114 3 Philippe Caseiro
Sans l'option *end_pattern* EoleDB vas produire la ligne suivante:
115 3 Philippe Caseiro
116 3 Philippe Caseiro
<pre>
117 3 Philippe Caseiro
define('DBPASS': 'Sv;434up<'
118 3 Philippe Caseiro
</pre>
119 3 Philippe Caseiro
120 3 Philippe Caseiro
Pour que votre ligne soit correctement fermée il faut défnir *end_pattern* de la manière suivante:
121 1 Philippe Caseiro
122 3 Philippe Caseiro
<pre>
123 3 Philippe Caseiro
   end_pattern: ");",
124 4 Philippe Caseiro
</pre>
125 3 Philippe Caseiro
126 3 Philippe Caseiro
Il faut noter que le *end_pattern * ne contiens pas le ' fermant car EoleDB gère automatiquement la fermeture des " il est donc inutil de le préciser. Avec cette définition la ligne produite par EoleDB sera:
127 3 Philippe Caseiro
128 3 Philippe Caseiro
<pre>
129 3 Philippe Caseiro
define('DBPASS': 'Sv;434up<');
130 3 Philippe Caseiro
</pre>
131 8 Philippe Caseiro
132 8 Philippe Caseiro
133 8 Philippe Caseiro
Voici un exemple tiré du projet eole-posh après migration a EoleDB : 
134 8 Philippe Caseiro
135 8 Philippe Caseiro
<pre>dbtype: mysql
136 8 Philippe Caseiro
dbname: posh
137 8 Philippe Caseiro
dbuser: posh
138 8 Philippe Caseiro
dbpass: "MOTDEPASSE"
139 8 Philippe Caseiro
createscript: "/usr/share/eole/mysql/posh/gen/posh-create-1.sql"
140 8 Philippe Caseiro
sqlscripts: ["/usr/share/eole/mysql/posh/updates/posh-update-1.sql"]
141 8 Philippe Caseiro
pwd_files:
142 8 Philippe Caseiro
    - {file: '/var/www/html/posh/includes/config.inc.php',
143 8 Philippe Caseiro
       container: 'web',
144 8 Philippe Caseiro
       pattern: 'define("__PASS","',
145 8 Philippe Caseiro
       end_pattern: ');',
146 8 Philippe Caseiro
       owner: 'root:www-data',
147 8 Philippe Caseiro
       mod: '660' }
148 8 Philippe Caseiro
    - {file: '/usr/share/envole/eoledb/posh',
149 8 Philippe Caseiro
       pattern: 'dbpassPOSH="',
150 8 Philippe Caseiro
       owner: 'root:root',
151 8 Philippe Caseiro
       mod: '600' }
152 8 Philippe Caseiro
    - {file: '/usr/share/eole/postservice/10-posh',
153 8 Philippe Caseiro
       pattern: 'POSHPASS=',
154 8 Philippe Caseiro
       owner: 'root:root',
155 8 Philippe Caseiro
       mod: '700' }
156 8 Philippe Caseiro
    - {file: '/var/www/html/sap/config/mysql.inc.php',
157 8 Philippe Caseiro
       container: 'web',
158 8 Philippe Caseiro
       pattern: '$dbpwd="',
159 8 Philippe Caseiro
       end_pattern: ';',
160 8 Philippe Caseiro
       owner: 'root:www-data',
161 8 Philippe Caseiro
       mod: '660' }
162 8 Philippe Caseiro
163 8 Philippe Caseiro
164 8 Philippe Caseiro
</pre>