Projet

Général

Profil

Doc-geting-started » Historique » Version 9

Philippe Caseiro, 19/09/2012 16:04

1 1 Philippe Caseiro
h1. Premiers pas
2 1 Philippe Caseiro
3 6 Lionel Morin
Dans ce document vous trouverez toutes les étapes pour utiliser le dépôt standard Eole pour le packaging.
4 1 Philippe Caseiro
5 6 Lionel Morin
L'idée de départ de ce dépôt est de fournir un outil qui vous permet de disposer d'un environnement prêt à l'emploi
6 1 Philippe Caseiro
pour construire un paquet "Eole".
7 1 Philippe Caseiro
8 1 Philippe Caseiro
Il suffit de mettre les fichiers dans les bons répertoires.
9 1 Philippe Caseiro
10 1 Philippe Caseiro
h2. Le dépôt
11 1 Philippe Caseiro
12 7 Lionel Morin
Voici l’arborescence type d'un dépôt "standardisé" :
13 1 Philippe Caseiro
14 2 Philippe Caseiro
* */src/*
15 1 Philippe Caseiro
** *<appli>-<version>/*
16 1 Philippe Caseiro
** *plugins-<version>/nom/*
17 1 Philippe Caseiro
** *lang-<version>/nom/*
18 1 Philippe Caseiro
* */tmpl/*
19 1 Philippe Caseiro
* */dicos/*
20 1 Philippe Caseiro
* */pretemplate/*
21 1 Philippe Caseiro
* */posttemplate/*
22 1 Philippe Caseiro
* */postservice/*
23 1 Philippe Caseiro
* */sql/*
24 1 Philippe Caseiro
** *gen/*
25 1 Philippe Caseiro
** *updates/*
26 1 Philippe Caseiro
** *conf/*
27 1 Philippe Caseiro
*** *gen/*
28 1 Philippe Caseiro
*** *updates/*
29 1 Philippe Caseiro
*** *pwd/*
30 1 Philippe Caseiro
* */sso/*
31 1 Philippe Caseiro
** *filtres/*
32 1 Philippe Caseiro
** *user-info/*
33 1 Philippe Caseiro
* */ldap/*
34 1 Philippe Caseiro
** *pwd/*
35 1 Philippe Caseiro
* */sharenvole/*
36 3 Philippe Caseiro
* _Makefile_
37 3 Philippe Caseiro
* _eole.mk_
38 3 Philippe Caseiro
* _apps.mk_
39 1 Philippe Caseiro
40 1 Philippe Caseiro
Commentaires :
41 1 Philippe Caseiro
42 1 Philippe Caseiro
table{border:1px solid black}.
43 9 Philippe Caseiro
| */src/*                   | _Répertoire de destination des sources de l'application_                                                                                      |
44 2 Philippe Caseiro
| */src/<appli>-<version>/* | _Code source de l'application avec la possibilité de faire cohabiter plusieurs versions lors des mises à jour_                                |
45 1 Philippe Caseiro
| */src/plugins-<version>/* | _Répertoire contenant les plugins externes et ceux développés en interne pour cette version de l'application (un sous-répertoire par plugin)_ |
46 2 Philippe Caseiro
| */src/lang-<version>/*    | _Répertoire des traductions pour cette version (un sous-répertoire par langue)_                                                               |
47 2 Philippe Caseiro
| */tmpl/*                  | _Répertoire des templates eole_                                                                                                               |
48 9 Philippe Caseiro
| */dicos/*                 | _Répertoire des dictionnaires eole (XX_<appli>.xml[1])                                                                                        |
49 2 Philippe Caseiro
| */pretemplate/*           | _Répertoire des scripts (shell ou python) de pretemplate_                                                                                     |
50 2 Philippe Caseiro
| */posttemplate/*          | _Répertoire des scripts (shell ou python) de posttemplate_                                                                                    |
51 2 Philippe Caseiro
| */postservice/*           | _Répertoire des scripts (shell ou python) de postservice_                                                                                     |
52 2 Philippe Caseiro
| */sql/*                   | _Répertoire des configurations pour la génération et la gestion des mise à jours des bases de données_                                        |
53 6 Lionel Morin
| */sql/gen/*               | _Répertoire des scripts sql à exécuter lors de la génération de la base de données_                                                           |
54 6 Lionel Morin
| */sql/updates*            | _Répertoire des scripts sql à exécuter lors de mise à jour de la base de données_                                                             |
55 2 Philippe Caseiro
| */sql/conf/*              | _Répertoire des configurations pour la gestion de la bases de données_                                                                        |
56 2 Philippe Caseiro
| */sql/conf/gen*           | _Répertoire du fichier de configuration de génération de la base de données_                                                                  |
57 9 Philippe Caseiro
| */sql/conf/updates*       | _Répertoire du fichier de configuration des mises à jour de la base de données_                                                               |
58 9 Philippe Caseiro
| */sql/conf/passwords*     | _Répertoire du fichier de configuration pour la gestion de mots de passe d'accès à la base de données_                                        |
59 2 Philippe Caseiro
| */sso/*                   | _Répertoire des configurations pour la gestion du SSO_                                                                                        |
60 2 Philippe Caseiro
| */sso/filtres/*           | _Répertoire des filtres sso (<appli>.ini, <appli>_apps.ini)_                                                                                  |
61 9 Philippe Caseiro
| */sso/user-info/*         | _Répertoire du profil sso (profil_<appli>.py)                                                                                                 |
62 1 Philippe Caseiro
| */ldap/*                  | _Répertoire des configurations pour la gestion des mots de passe d'accès au serveur ldap_                                                     |
63 1 Philippe Caseiro
| */ldap/passwords/*        | _Répertoire du fichier de  configuration du mot de passe ldap (<appli>.ini)_                                                                  |
64 9 Philippe Caseiro
| */sharenvole/*            | _Répertoire des scripts historiques d'aide à l'installation des applications envole (à éviter si possible)_                                   |
65 2 Philippe Caseiro
| Makefile                  | _Fichier de règles de "compilation"_                                                                                                          |
66 2 Philippe Caseiro
| eole.mk                   | _Règles standard Eole ! ne pas changer ce fichier_                                                                                            |
67 6 Lionel Morin
| apps.mk                   | _Règles pour l'installation de l'application web._                                                                                            |
68 9 Philippe Caseiro
69 9 Philippe Caseiro
fn1. XX = Ordre de traitement du dictionnaire (de 00 à 99).
70 9 Philippe Caseiro
71 1 Philippe Caseiro
72 1 Philippe Caseiro
h2. Etape 1 : Cloner le dépôt
73 3 Philippe Caseiro
74 3 Philippe Caseiro
@git clone http://dev-eole.ac-dijon.fr/git/eole-skeletor@
75 3 Philippe Caseiro
<pre>
76 3 Philippe Caseiro
Cloning into 'eole-skeletor'...
77 3 Philippe Caseiro
remote: Counting objects: 83, done.
78 3 Philippe Caseiro
remote: Compressing objects: 100% (71/71), done.
79 3 Philippe Caseiro
remote: Total 83 (delta 26), reused 0 (delta 0)
80 3 Philippe Caseiro
Unpacking objects: 100% (83/83), done.
81 3 Philippe Caseiro
</pre>
82 3 Philippe Caseiro
83 3 Philippe Caseiro
Vous disposez désormais d'un répertoire _eole-skeletor_. 
84 7 Lionel Morin
Ce répertoire contient un exemple type de dépôt standard.
85 3 Philippe Caseiro
86 3 Philippe Caseiro
h2. Etape 2: Créer votre propre dépôt
87 3 Philippe Caseiro
88 3 Philippe Caseiro
Lancer les commandes suivantes : 
89 3 Philippe Caseiro
90 3 Philippe Caseiro
@mkdir eole-monappli@
91 3 Philippe Caseiro
@cd eole-monappli@
92 3 Philippe Caseiro
@git init .@
93 3 Philippe Caseiro
@cp ../eole-skeletor/*.mk ../eole-skeletor/Makefile .@
94 3 Philippe Caseiro
@git add .@
95 3 Philippe Caseiro
@git commit -am "Premier commit : Ajout des fichiers Makefile standard"@
96 3 Philippe Caseiro
97 4 Philippe Caseiro
<pre>
98 4 Philippe Caseiro
user@host:code $ mkdir eole-monappli
99 4 Philippe Caseiro
user@host:code $ cd eole-monappli
100 4 Philippe Caseiro
user@host:code/eole-monappli $ git init .
101 4 Philippe Caseiro
Initialized empty Git repository in /tmp/eole-monappli/.git/
102 4 Philippe Caseiro
user@host:code/eole-monappli $ cp ../eole-skeletor/*.mk ../eole-skeletor/Makefile .
103 4 Philippe Caseiro
user@host:code/eole-monappli $ git add .
104 4 Philippe Caseiro
user@host:code/eole-monappli $ git commit -am "Premier commit : Ajout des fichiers Makefile standard"
105 4 Philippe Caseiro
[master (root-commit) 1be6951] Premier commit : Ajout des fichiers Makefile standard
106 4 Philippe Caseiro
3 files changed, 195 insertions(+)
107 4 Philippe Caseiro
create mode 100644 Makefile
108 4 Philippe Caseiro
create mode 100644 apps.mk
109 4 Philippe Caseiro
create mode 100644 eole.mk
110 4 Philippe Caseiro
user@host:code/eole-monappli $
111 4 Philippe Caseiro
</pre>
112 3 Philippe Caseiro
113 7 Lionel Morin
h2. Etape 3: Mise en place des fichiers (dico, templates, sources, configurations...)
114 4 Philippe Caseiro
115 7 Lionel Morin
Pour que le "Makefile" installe votre fichier au bon endroit, il suffit de créer le répertoire adéquat et
116 7 Lionel Morin
d'y mettre votre fichier.
117 4 Philippe Caseiro
118 7 Lionel Morin
h3. Exemple d'ajout d'un dictionnaire "Eole" :
119 4 Philippe Caseiro
120 4 Philippe Caseiro
Il suffit de lancer les commandes suivantes : 
121 4 Philippe Caseiro
122 4 Philippe Caseiro
@mkdir dicos@
123 4 Philippe Caseiro
@cp XX_nom_appli.xml dicos@
124 4 Philippe Caseiro
125 3 Philippe Caseiro
<pre>
126 4 Philippe Caseiro
user@host:code/eole-monappli $ mkdir dicos
127 4 Philippe Caseiro
user@host:code/eole-monappli $ ls
128 4 Philippe Caseiro
apps.mk  dicos/  eole.mk  Makefile
129 4 Philippe Caseiro
user@host:code/eole-monappli $ cp /emplacement/de/mon/dico/XX_nom_appli.xml dicos
130 4 Philippe Caseiro
user@host:code/eole-monappli $ ls dicos
131 4 Philippe Caseiro
XX_nom_appli.xml
132 3 Philippe Caseiro
</pre>
133 4 Philippe Caseiro
134 7 Lionel Morin
Pour l'ajout d'un template la procédure est la même avec le répertoire tmpl.
135 4 Philippe Caseiro
136 4 Philippe Caseiro
h3. Exemple d'ajout de la génération d'une base de données
137 4 Philippe Caseiro
138 4 Philippe Caseiro
h4. Création de l'arborescence:
139 4 Philippe Caseiro
140 4 Philippe Caseiro
<pre>
141 4 Philippe Caseiro
├── sql
142 4 Philippe Caseiro
│   ├── conf
143 4 Philippe Caseiro
│   │   ├── gen
144 4 Philippe Caseiro
│   │   │   └── mon_appi.py
145 4 Philippe Caseiro
│   │   └── passwords
146 4 Philippe Caseiro
│   │       └── monappli.ini
147 4 Philippe Caseiro
│   └── gen
148 4 Philippe Caseiro
│       ├── premier_script.sql
149 4 Philippe Caseiro
│       └── second_script.sql
150 4 Philippe Caseiro
</pre>
151 4 Philippe Caseiro
152 4 Philippe Caseiro
@mkdir -p sql/conf/gen sql/conf/passwords sql/gen@
153 4 Philippe Caseiro
154 4 Philippe Caseiro
<pre>
155 4 Philippe Caseiro
user@host:code/eole-monappli $ mkdir -p sql/conf/gen sql/conf/passwords sql/gen
156 4 Philippe Caseiro
user@host:code/eole-monappli $ ls -R sql 
157 4 Philippe Caseiro
sql:
158 4 Philippe Caseiro
conf/  gen/
159 4 Philippe Caseiro
160 4 Philippe Caseiro
sql/conf:
161 4 Philippe Caseiro
gen/  passwords/
162 4 Philippe Caseiro
163 4 Philippe Caseiro
sql/conf/gen:
164 4 Philippe Caseiro
165 4 Philippe Caseiro
sql/conf/passwords:
166 4 Philippe Caseiro
167 4 Philippe Caseiro
sql/gen:
168 4 Philippe Caseiro
user@host:code/eole-monappli $ tree 
169 4 Philippe Caseiro
sql
170 4 Philippe Caseiro
├── conf
171 4 Philippe Caseiro
│   ├── gen
172 4 Philippe Caseiro
│   └── passwords
173 4 Philippe Caseiro
└── gen
174 4 Philippe Caseiro
</pre>
175 4 Philippe Caseiro
176 7 Lionel Morin
h4. Création des fichiers de configuration
177 4 Philippe Caseiro
178 4 Philippe Caseiro
Pour créer une base de données il faut plusieurs fichiers. 
179 4 Philippe Caseiro
* Un fichier de configuration pour la génération
180 4 Philippe Caseiro
* Un fichier de configuration pour la gestion des mots de passe d'accès à la base
181 7 Lionel Morin
* Les scripts SQL pour la création et l'initialisation de la base de données
182 4 Philippe Caseiro
183 4 Philippe Caseiro
h5. Fichier de Configuration pour la génération : 
184 4 Philippe Caseiro
185 7 Lionel Morin
Ce fichier contient les instructions nécessaires à la génération de la bases :
186 4 Philippe Caseiro
187 4 Philippe Caseiro
<pre><code class="python">
188 4 Philippe Caseiro
#-*-coding:utf-8-*-
189 4 Philippe Caseiro
###########################################################################
190 4 Philippe Caseiro
# Eole NG - 2011
191 4 Philippe Caseiro
# Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
192 4 Philippe Caseiro
# Licence CeCill  cf /root/LicenceEole.txt
193 4 Philippe Caseiro
# eole@ac-dijon.fr
194 4 Philippe Caseiro
#
195 4 Philippe Caseiro
# gepi.py
196 4 Philippe Caseiro
#
197 4 Philippe Caseiro
# Création de la base de données mysql de gepi
198 4 Philippe Caseiro
#
199 4 Philippe Caseiro
###########################################################################
200 4 Philippe Caseiro
"""
201 4 Philippe Caseiro
Config pour gepi
202 4 Philippe Caseiro
"""
203 4 Philippe Caseiro
from eolesql.db_test import db_exists, test_var
204 4 Philippe Caseiro
205 4 Philippe Caseiro
GEPI_TABLEFILENAMES = ['/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql',
206 4 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-1-structure.sql',
207 4 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-2-data.sql',
208 4 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-3-ajouteole.sql']
209 4 Philippe Caseiro
def test():
210 4 Philippe Caseiro
    """
211 4 Philippe Caseiro
    test l'existence de la base gepi
212 4 Philippe Caseiro
    """
213 4 Philippe Caseiro
    return test_var('activer_gepi') and not db_exists('gepi')
214 4 Philippe Caseiro
215 4 Philippe Caseiro
conf_dict = dict(filenames=GEPI_TABLEFILENAMES,
216 4 Philippe Caseiro
                 test=test)
217 4 Philippe Caseiro
</code></pre>
218 5 Philippe Caseiro
Il faut placer ce fichier dans le répertoire _*sql/conf/gen*_.
219 5 Philippe Caseiro
220 5 Philippe Caseiro
h5. Fichier de configuration de gestion des mots de passe
221 5 Philippe Caseiro
222 7 Lionel Morin
Ce fichier contient les instructions nécessaires au renouvellement des mots de passe
223 7 Lionel Morin
des utilisateurs ayant accès à la base de données. Les applications disposent d'un utilisateur
224 5 Philippe Caseiro
qui a des droits d'écriture dans les tables de la base, cet utilisateur a un mot de passe
225 7 Lionel Morin
qui est renouvelé régulièrement par les mécanismes "Eole". Ce fichier sert à faire en sorte
226 5 Philippe Caseiro
que la configuration de l'application soit mise à jour lors du changement du mot de passe.
227 5 Philippe Caseiro
228 5 Philippe Caseiro
Voici un exemple de fichier : 
229 5 Philippe Caseiro
230 5 Philippe Caseiro
231 5 Philippe Caseiro
<pre><code class="bash">
232 5 Philippe Caseiro
[gepi]
233 5 Philippe Caseiro
username=gepi
234 5 Philippe Caseiro
container=web
235 5 Philippe Caseiro
template=$dbPass="
236 5 Philippe Caseiro
filename=/var/www/html/gepi/secure/connect.inc.php
237 5 Philippe Caseiro
owner=root:www-data
238 5 Philippe Caseiro
chmod=660
239 5 Philippe Caseiro
</code></pre>
240 5 Philippe Caseiro
241 5 Philippe Caseiro
Quelques petites précisions : 
242 7 Lionel Morin
* username= nom de l'utilisateur utilisé par l'application pour accéder à la base
243 7 Lionel Morin
* container= nom du conteneur lxc où l'application est hébergée
244 7 Lionel Morin
* template= chaîne qui préfixe le mot de passe dans le fichier de configuration
245 7 Lionel Morin
* filname= fichier de configuration à mettre à jour
246 7 Lionel Morin
* owner= utilisateur et groupe propriétaire du fichier de configuration au format user:group
247 7 Lionel Morin
* chmod= droits du fichier au format XXX
248 5 Philippe Caseiro
249 5 Philippe Caseiro
Il faut placer ce fichier dans le répertoire _*sql/conf/passwords*_.
250 5 Philippe Caseiro
251 5 Philippe Caseiro
h5. Scripts SQL de création et d'initialisation de la base
252 5 Philippe Caseiro
253 7 Lionel Morin
Un seul script est obligatoire, le script de création (toujours le premier de la liste) 
254 5 Philippe Caseiro
<pre><code class="python">
255 7 Lionel Morin
# Liste des fichiers sql à exécuter (dans l'ordre)
256 5 Philippe Caseiro
GEPI_TABLEFILENAMES = ['/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql',
257 5 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-1-structure.sql',
258 5 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-2-data.sql',
259 5 Philippe Caseiro
                       '/usr/share/eole/mysql/gepi/gen/gepi-create-3-ajouteole.sql']
260 5 Philippe Caseiro
</code></pre>
261 5 Philippe Caseiro
262 5 Philippe Caseiro
Dans l'exemple c'est le script _*/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql*_.
263 5 Philippe Caseiro
264 7 Lionel Morin
Ce script est très souvent un "template" eole car on a besoin d'informations contenues dans la configuration "Eole".
265 5 Philippe Caseiro
266 7 Lionel Morin
Exemple :
267 5 Philippe Caseiro
268 5 Philippe Caseiro
<pre><code class="sql">
269 7 Lionel Morin
-- création de la base de données
270 5 Philippe Caseiro
CREATE DATABASE gepi CHARACTER SET utf8 COLLATE utf8_general_ci;
271 5 Philippe Caseiro
272 5 Philippe Caseiro
-- création du user de la base
273 5 Philippe Caseiro
grant all privileges on gepi.* to gepi@%%adresse_ip_web identified by 'gepi';
274 5 Philippe Caseiro
flush privileges ;
275 5 Philippe Caseiro
276 5 Philippe Caseiro
-- connexion à la base
277 5 Philippe Caseiro
\r gepi
278 5 Philippe Caseiro
279 5 Philippe Caseiro
280 5 Philippe Caseiro
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
281 5 Philippe Caseiro
</code></pre>
282 5 Philippe Caseiro
283 7 Lionel Morin
Comme ce fichier est un template il doit être placé dans le répertoire _*tmpl*_ et configuré dans le dico (dicos/XX_nom_appli.xml).
284 5 Philippe Caseiro
285 7 Lionel Morin
Les autres fichiers de la liste sont des scripts sql très souvent fournis par l'application et sont à placer dans le répertoire _*sql/gen*_.
286 5 Philippe Caseiro
287 5 Philippe Caseiro
h2. Tester l'installation via le Makefile standard