Projet

Général

Profil

EnvoleBonnesPratiques » Historique » Version 54

Lionel Morin, 25/07/2012 14:12

1 21 Gérald Schwartzmann
h2. !http://dev-eole.ac-dijon.fr/attachments/download/9/puce.png! Environnement Libre Ouvert Evolutif - Envole
2 21 Gérald Schwartzmann
{{include(eole:menu)}}
3 1 Gérald Schwartzmann
4 1 Gérald Schwartzmann
h1. Les Bonnes Pratiques
5 22 Gérald Schwartzmann
6 22 Gérald Schwartzmann
{{include(ModeleEbauche)}}
7 6 Gérald Schwartzmann
8 7 Gérald Schwartzmann
h2. Documentations, sources et articles wiki
9 8 Gérald Schwartzmann
10 50 Gérald Schwartzmann
Voici les bonnes pratiques sur le nommage des applications EOLE : http://dev-eole.ac-dijon.fr/projects/documentations/wiki/DokielGuideBonnesPratiques
11 6 Gérald Schwartzmann
12 9 Gérald Schwartzmann
h2. Git
13 6 Gérald Schwartzmann
14 7 Gérald Schwartzmann
h3. Placement
15 1 Gérald Schwartzmann
16 11 Gérald Schwartzmann
Les applications de Envole sont des sous-projets de "Envole":http://dev-eole.ac-dijon.fr/projects/envole .
17 13 Gérald Schwartzmann
Dans le dépôt ils apparaissent les un à côté des autres (à plat).
18 1 Gérald Schwartzmann
19 13 Gérald Schwartzmann
h3. Les Bonnes Pratiques
20 1 Gérald Schwartzmann
21 50 Gérald Schwartzmann
Les Bonnes Pratiques de Git généralité et autres : http://dev-eole.ac-dijon.fr/projects/eole/wiki/GitBonnesPratiques
22 50 Gérald Schwartzmann
Recueil de commandes Git : http://dev-eole.ac-dijon.fr/projects/eole/wiki/RecueilGit
23 1 Gérald Schwartzmann
24 27 Gérald Schwartzmann
Lorsque le master existe il contient les sources de la première version du paquet.
25 27 Gérald Schwartzmann
Créer une nouvelle branche en vue d'ajouter des développements
26 27 Gérald Schwartzmann
27 27 Gérald Schwartzmann
<pre>
28 27 Gérald Schwartzmann
$ git checkout -b devel
29 27 Gérald Schwartzmann
$ git push --all
30 27 Gérald Schwartzmann
</pre>
31 27 Gérald Schwartzmann
32 32 Gérald Schwartzmann
h3. prompt sympa pour git
33 32 Gérald Schwartzmann
34 32 Gérald Schwartzmann
Ajouter les lignes suivantes à votre .bashrc pour un peu plus de confort
35 32 Gérald Schwartzmann
36 32 Gérald Schwartzmann
<pre>
37 32 Gérald Schwartzmann
toUpper() {
38 32 Gérald Schwartzmann
          echo $1 | tr "[:lower:]" "[:upper:]"
39 32 Gérald Schwartzmann
}
40 32 Gérald Schwartzmann
41 32 Gérald Schwartzmann
parse_git_branch() {
42 32 Gérald Schwartzmann
        branch=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'`
43 32 Gérald Schwartzmann
        if [ "$branch" != "" ];then
44 32 Gérald Schwartzmann
                label=`toUpper $branch`
45 32 Gérald Schwartzmann
        fi
46 32 Gérald Schwartzmann
        echo $label
47 32 Gérald Schwartzmann
}
48 32 Gérald Schwartzmann
</pre>
49 32 Gérald Schwartzmann
50 1 Gérald Schwartzmann
h3. Nommage
51 8 Gérald Schwartzmann
52 14 Gérald Schwartzmann
Le nom des sous-projets doivent être en minuscule
53 6 Gérald Schwartzmann
54 13 Gérald Schwartzmann
Exemple dans la liste des sous-projets : http://dev-eole.ac-dijon.fr/projects/envole
55 6 Gérald Schwartzmann
56 14 Gérald Schwartzmann
h3. Structure du Master
57 6 Gérald Schwartzmann
58 53 Lionel Morin
Puisque votre développement n'est pas la branche d'un projet déjà existant on réalise un master.
59 1 Gérald Schwartzmann
Pour cela il faut créer selon les besoins de votre application les fichiers et répertoires suivant :
60 53 Lionel Morin
* /src/
61 53 Lionel Morin
> * appli-version/
62 54 Lionel Morin
> * plugins/nom-version/
63 54 Lionel Morin
> * lang/nom-version/
64 53 Lionel Morin
* /tmpl/
65 53 Lionel Morin
* /dicos/
66 53 Lionel Morin
* /pretemplate/
67 53 Lionel Morin
* /posttemplate/
68 53 Lionel Morin
* /postservice/
69 1 Gérald Schwartzmann
* /sql/
70 1 Gérald Schwartzmann
> * gen/
71 53 Lionel Morin
> * updates/
72 53 Lionel Morin
> * conf/
73 54 Lionel Morin
> > * gen/
74 54 Lionel Morin
> > * updtates/
75 54 Lionel Morin
> > * passwords/
76 1 Gérald Schwartzmann
* /sso/
77 53 Lionel Morin
* /ldap/
78 53 Lionel Morin
* Makefile
79 53 Lionel Morin
80 53 Lionel Morin
Commentaires :
81 53 Lionel Morin
* /src/ : répertoire des sources de l'application
82 53 Lionel Morin
* /src/appli-version/ : sources de l'application avec la possibilité de faire cohabiter plusieurs versions lors des mises à jour
83 54 Lionel Morin
* /src/plugins/ : dossier contenant les plugins externes et ceux développés en interne
84 53 Lionel Morin
* /src/lang/ : dossier des traductions
85 53 Lionel Morin
* /tmpl/ : répertoire des templates eole
86 53 Lionel Morin
* /dicos/ : dictionnaire eole (XX_appli.xml)
87 53 Lionel Morin
* /pretemplate/, /posttemplate/, /postservice/ : scripts shell ou python
88 53 Lionel Morin
* /sql/gen/ et /sql/updates : fichiers sql de création ou de mise à jour de la base
89 53 Lionel Morin
* /sql/conf/ : sous-répertoires de configuration
90 53 Lionel Morin
* /sso/ : filtres sso (appli.ini)
91 53 Lionel Morin
* /ldap/ : configuration du mot de passe ldap (appli.ini)
92 53 Lionel Morin
93 53 Lionel Morin
Les patchs sont gérés dans la branche de packaging.
94 6 Gérald Schwartzmann
95 14 Gérald Schwartzmann
Exemple : http://dev-eole.ac-dijon.fr/projects/dokuwiki/repository
96 6 Gérald Schwartzmann
97 7 Gérald Schwartzmann
h2. Les fichiers templates
98 8 Gérald Schwartzmann
99 49 Lionel Morin
Le nom d'un fichier templétisé ne doit pas porter le même nom qu'un autre pour cela il faut préfixer le nom du fichier avec le nom de l'application.
100 6 Gérald Schwartzmann
101 6 Gérald Schwartzmann
Exemple du fichier config.php qui est présent dans une bonne partie des applications :
102 6 Gérald Schwartzmann
103 6 Gérald Schwartzmann
taskfreak_config.php
104 6 Gérald Schwartzmann
105 7 Gérald Schwartzmann
h2. Dico
106 8 Gérald Schwartzmann
107 7 Gérald Schwartzmann
h3. Nommage
108 8 Gérald Schwartzmann
109 6 Gérald Schwartzmann
Les applications du socle
110 6 Gérald Schwartzmann
<pre>5x_nom_de_l_application.xml</pre>
111 6 Gérald Schwartzmann
Les applications supplémentaires au socle
112 6 Gérald Schwartzmann
<pre>6x_nom_de_l_application.xml</pre>
113 6 Gérald Schwartzmann
x étant supérieur à 0
114 6 Gérald Schwartzmann
115 7 Gérald Schwartzmann
h3. construction du fichier
116 8 Gérald Schwartzmann
117 15 Gérald Schwartzmann
{{include(ModeleFixme)}}
118 6 Gérald Schwartzmann
119 7 Gérald Schwartzmann
h2. Paquetage
120 8 Gérald Schwartzmann
121 24 Gérald Schwartzmann
h3. nommage du paquet
122 25 Gérald Schwartzmann
123 6 Gérald Schwartzmann
eole-nom_de_l_application
124 24 Gérald Schwartzmann
125 24 Gérald Schwartzmann
h3. fichiers postinst postrm
126 25 Gérald Schwartzmann
127 24 Gérald Schwartzmann
dans les fichiers postinst et postrm il faut utiliser des chemins absolus pour les commandes :
128 26 Gérald Schwartzmann
<pre>/bin/cp</pre>
129 6 Gérald Schwartzmann
130 7 Gérald Schwartzmann
h2. Apache
131 1 Gérald Schwartzmann
132 15 Gérald Schwartzmann
h3. nommage du fichier de conf dans sites-enabled
133 15 Gérald Schwartzmann
134 6 Gérald Schwartzmann
Un fichier de conf apache par application :
135 1 Gérald Schwartzmann
<pre>apache-nom_de_l_application.conf</pre>
136 15 Gérald Schwartzmann
137 15 Gérald Schwartzmann
h3. contenu du fichier de conf dans sites-enabled
138 15 Gérald Schwartzmann
139 19 Gérald Schwartzmann
Le chemin de l'application doit être son nom
140 19 Gérald Schwartzmann
141 16 Gérald Schwartzmann
Si un projet ne contient pas de .htaccess il faut ajouter la directive *AllowOverride None*.
142 16 Gérald Schwartzmann
Celle-ci permet de diminuer le délai d'attente en lui évitant de partir à la recherche de fichier .htaccess dans chaque répertoire qu'il visite.
143 16 Gérald Schwartzmann
144 18 Gérald Schwartzmann
Date d'expiration du cache proxy ou navigateur.
145 18 Gérald Schwartzmann
Régler correctement et finement le cache des clients permet d'éviter un grand nombre de requête.
146 18 Gérald Schwartzmann
En prévision de l'activation du *mod_expires* sur le serveur Apache, on peut ajouter la directive *ExpiresActive On* suivit de directive *ExpiresByType type "durée de vie dans le cache"*
147 18 Gérald Schwartzmann
148 18 Gérald Schwartzmann
<pre>
149 18 Gérald Schwartzmann
<IfModule mod_expires.c>
150 18 Gérald Schwartzmann
                ExpiresActive On
151 18 Gérald Schwartzmann
                ExpiresByType text/html "access plus 1 day"
152 18 Gérald Schwartzmann
</IfModule>
153 18 Gérald Schwartzmann
</pre>
154 18 Gérald Schwartzmann
155 18 Gérald Schwartzmann
Exemple complet d'un fichier de configuration d'une application :
156 16 Gérald Schwartzmann
157 16 Gérald Schwartzmann
<pre>
158 16 Gérald Schwartzmann
# Envole Infos
159 16 Gérald Schwartzmann
# Equipe EOLE
160 16 Gérald Schwartzmann
Alias /envole-infos /var/www/html/envole-infos
161 16 Gérald Schwartzmann
<Directory "/var/www/html/envole-infos">
162 17 Gérald Schwartzmann
        AllowOverride None
163 16 Gérald Schwartzmann
        AddDefaultCharset UTF-8
164 16 Gérald Schwartzmann
        DirectoryIndex index.php
165 16 Gérald Schwartzmann
        Order Allow,Deny
166 16 Gérald Schwartzmann
        Allow from All
167 16 Gérald Schwartzmann
        <IfModule mod_expires.c>
168 16 Gérald Schwartzmann
                ExpiresActive On
169 16 Gérald Schwartzmann
                ExpiresByType text/html "access plus 1 day"
170 16 Gérald Schwartzmann
                ExpiresByType text/xml "access plus 1 day"
171 16 Gérald Schwartzmann
                ExpiresByType image/gif "access plus 1 week"
172 16 Gérald Schwartzmann
                ExpiresByType image/jpg "access plus 1 week"
173 16 Gérald Schwartzmann
                ExpiresByType image/png "access plus 1 week"
174 16 Gérald Schwartzmann
                ExpiresByType video/quicktime "access plus 1 month"
175 16 Gérald Schwartzmann
                ExpiresByType audio/mpeg "access plus 1 month"
176 16 Gérald Schwartzmann
                ExpiresByType application/pdf "access plus 1 month"
177 16 Gérald Schwartzmann
                ExpiresByType application/ps "access plus 1 month"
178 16 Gérald Schwartzmann
                ExpiresByType text/css "access plus 1 day"
179 16 Gérald Schwartzmann
                ExpiresByType application/x-shockwave-flash "access plus 1 day"
180 16 Gérald Schwartzmann
                ExpiresByType text/js "access plus 1 week"
181 16 Gérald Schwartzmann
                ExpiresByType text/javascript "access plus 1 week"
182 16 Gérald Schwartzmann
                ExpiresByType application/x-javascript "access plus 1 week"
183 16 Gérald Schwartzmann
                ExpiresByType image/x-icon "access plus 1 day"
184 16 Gérald Schwartzmann
        </IfModule>
185 16 Gérald Schwartzmann
</Directory>
186 16 Gérald Schwartzmann
</pre>
187 15 Gérald Schwartzmann
188 48 Lionel Morin
h2. répertoire debian (empaquetage)
189 47 Gérald Schwartzmann
190 47 Gérald Schwartzmann
h3. le changelog
191 47 Gérald Schwartzmann
192 47 Gérald Schwartzmann
<pre>
193 47 Gérald Schwartzmann
eole-envole-tools (1.0-eole1) eole-2.2-dev; urgency=low
194 47 Gérald Schwartzmann
195 47 Gérald Schwartzmann
  * Initial release
196 47 Gérald Schwartzmann
197 47 Gérald Schwartzmann
 -- Equipe Eole <eole@ac-dijon.fr>  Fri, 20 May 2011 09:25:40 +0200
198 47 Gérald Schwartzmann
</pre>
199 47 Gérald Schwartzmann
200 47 Gérald Schwartzmann
La date s'obtient avec la commande date -R
201 47 Gérald Schwartzmann
202 15 Gérald Schwartzmann
h3. les droits dans /var/www/html/
203 6 Gérald Schwartzmann
204 23 Gaston TJEBBES
Application des droits minimaux sur les répertoires:
205 1 Gérald Schwartzmann
206 23 Gaston TJEBBES
<pre>
207 23 Gaston TJEBBES
# Définition du propriétaire du répertoire
208 23 Gaston TJEBBES
/bin/chown -R root:www-data /var/www/html/votre_appli<br />
209 23 Gaston TJEBBES
# Définition des droits minimaux pour les répertoires (ont besoin d'être exécutables)
210 23 Gaston TJEBBES
/bin/chmod -R 750 /var/www/html/votre_appli<br />
211 23 Gaston TJEBBES
# Définition des droits minimaux pour les fichiers
212 23 Gaston TJEBBES
/usr/bin/find /var/www/html/votre_appli -type f -exec /bin/chmod ugo-x {} \;
213 23 Gaston TJEBBES
</pre>
214 23 Gaston TJEBBES
215 49 Lionel Morin
Pour des raisons de sécurité seuls les fichiers nécessitant d'être modifiés par l'application sont éditables par l'utilisateur avec lequel est lancé apache à savoir www-data.
216 23 Gaston TJEBBES
<pre>
217 23 Gaston TJEBBES
/bin/chmod 770 /var/www/html/votre_appli/datas
218 23 Gaston TJEBBES
/bin/chmod 660 /var/www/html/votre_appli/datas/*.*
219 23 Gaston TJEBBES
</pre>
220 6 Gérald Schwartzmann
221 7 Gérald Schwartzmann
h2. Base de données
222 8 Gérald Schwartzmann
223 6 Gérald Schwartzmann
<pre>scribe-nom_de_l_application.sql</pre>
224 6 Gérald Schwartzmann
225 29 Gérald Schwartzmann
Si la bdd nécessite une templétisation il est préférable de découper la bdd en deux fichiers MySql.
226 29 Gérald Schwartzmann
L'un avec la partie à templétiser et l'autre avec le reste.
227 29 Gérald Schwartzmann
Cette découpe fait gagner un temps considérable lors du reconfigure.
228 7 Gérald Schwartzmann
229 28 Gérald Schwartzmann
h2. Stockage des données
230 6 Gérald Schwartzmann
231 46 Gérald Schwartzmann
FIXME : méthode obsolète -> méthode bacula
232 46 Gérald Schwartzmann
233 29 Gérald Schwartzmann
Exemple de Dokuwiki
234 28 Gérald Schwartzmann
Pour être prise en charge par la sauvegarde Bacula les données des applications sont stockées dans :
235 28 Gérald Schwartzmann
<pre>
236 28 Gérald Schwartzmann
/home/www-data/var/www/html/nom_de_l'application
237 28 Gérald Schwartzmann
</pre>
238 46 Gérald Schwartzmann
239 46 Gérald Schwartzmann
h2. CASsifier une application
240 46 Gérald Schwartzmann
241 46 Gérald Schwartzmann
Se référer à la documentation suivante :
242 46 Gérald Schwartzmann
http://dev-eole.ac-dijon.fr/projects/eole-php5-cas/wiki
243 27 Gérald Schwartzmann
244 27 Gérald Schwartzmann
h2. Commandes systèmes
245 27 Gérald Schwartzmann
246 35 Gérald Schwartzmann
h3. Patch
247 35 Gérald Schwartzmann
248 27 Gérald Schwartzmann
==Création d'un patch==
249 43 Gaston TJEBBES
<pre>diff -uNr toto/ toto.new/ > patch/toto.patch</pre>
250 42 Gaston TJEBBES
251 43 Gaston TJEBBES
NB : Utilisez des chemins relatifs
252 27 Gérald Schwartzmann
253 27 Gérald Schwartzmann
==Application d'un patch==
254 27 Gérald Schwartzmann
<pre>patch -d /home/username/travail -p0 < toto.patch</pre>
255 27 Gérald Schwartzmann
256 36 Gérald Schwartzmann
[[patchAvance|Patch avancé]]
257 35 Gérald Schwartzmann
258 39 Gérald Schwartzmann
h3. Mot de passe
259 1 Gérald Schwartzmann
260 40 Gérald Schwartzmann
Changer les mots de passe PhpMyAdmin (mode interactif)
261 39 Gérald Schwartzmann
<pre>/usr/share/eole/mysql_pwd.py</pre>
262 1 Gérald Schwartzmann
263 1 Gérald Schwartzmann
Changer le mot de passe root de PhpMyAdmin
264 39 Gérald Schwartzmann
<pre>
265 40 Gérald Schwartzmann
/usr/share/eole/mysql_pwd.py monMotDePass
266 39 Gérald Schwartzmann
</pre>
267 39 Gérald Schwartzmann
268 39 Gérald Schwartzmann
Remettre un mot de passe aléatoire
269 39 Gérald Schwartzmann
<pre>
270 39 Gérald Schwartzmann
/usr/share/eole/mysql_pwd.py `/usr/bin/pwgen -1`
271 39 Gérald Schwartzmann
</pre>
272 35 Gérald Schwartzmann
273 44 Gérald Schwartzmann
h3. Debugger
274 44 Gérald Schwartzmann
275 44 Gérald Schwartzmann
Usage :
276 44 Gérald Schwartzmann
<pre>
277 44 Gérald Schwartzmann
include('envolePHP/logger.php');
278 44 Gérald Schwartzmann
$monlogger = new Logger("/var/log/monfichier.log");
279 44 Gérald Schwartzmann
$monlogger->debug('msg');
280 44 Gérald Schwartzmann
$monlogger->error('erreur');
281 44 Gérald Schwartzmann
</pre>
282 44 Gérald Schwartzmann
283 51 Lionel Morin
h2. Intégration au bureau Posh
284 51 Lionel Morin
285 51 Lionel Morin
Voici la marche à suivre pour que votre nouvelle application apparaisse automatiquement dans les items de bureau de Posh.
286 51 Lionel Morin
287 51 Lionel Morin
Dans le paquet eole-posh, mettre l’icône (32x32) de la nouvelle application dans :
288 51 Lionel Morin
<pre>
289 51 Lionel Morin
plugins/plugin_desktop/icones
290 51 Lionel Morin
</pre>
291 51 Lionel Morin
Puis ajouter l'item de bureau dans le fichier :
292 51 Lionel Morin
<pre>
293 51 Lionel Morin
eole/tmpls/poshprofile-update.sql
294 51 Lionel Morin
</pre>
295 51 Lionel Morin
Exemple :
296 51 Lionel Morin
<pre>
297 51 Lionel Morin
-- piwigo (Galerie de photos)
298 51 Lionel Morin
%if %%is_defined('activer_piwigo') and %%activer_piwigo == 'oui'
299 51 Lionel Morin
CALL InsertDesktopItem('piwigo', 'Galerie<br />de photos', '/piwigo', '%%alias_envole/includes/plugins/plugin_desktop/icones/piwigo.png');
300 51 Lionel Morin
%end if
301 51 Lionel Morin
302 51 Lionel Morin
</pre>
303 51 Lionel Morin
304 35 Gérald Schwartzmann
h2. Logiciels
305 35 Gérald Schwartzmann
306 38 Gérald Schwartzmann
h3. Firebug
307 38 Gérald Schwartzmann
308 35 Gérald Schwartzmann
Très pratique dans la conception de page web.
309 1 Gérald Schwartzmann
Console permettant le debbugage Javascript et Css :
310 38 Gérald Schwartzmann
https://addons.mozilla.org/firefox/1843/
311 31 Gérald Schwartzmann
312 33 Gérald Schwartzmann
h2. Batterie de tests
313 33 Gérald Schwartzmann
314 33 Gérald Schwartzmann
h3. Tester la compilation du paquet (postinst, Makefile, ...)
315 33 Gérald Schwartzmann
316 33 Gérald Schwartzmann
Il est possible de tester la compilation de votre paquet sur une machine perso :
317 33 Gérald Schwartzmann
exporter vos sources :
318 33 Gérald Schwartzmann
<pre>
319 33 Gérald Schwartzmann
git archive nomDeBranche | tar -x -C /somewhere/else
320 33 Gérald Schwartzmann
</pre>
321 41 Gérald Schwartzmann
Se rendre dans le répertoire des sources et compiler sans signer (-uc -us)
322 33 Gérald Schwartzmann
<pre>
323 41 Gérald Schwartzmann
fakeroot dpkg-buildpackage -uc -us
324 33 Gérald Schwartzmann
</pre>
325 33 Gérald Schwartzmann
Le paquet est disponible dans le répertoire parent.
326 33 Gérald Schwartzmann
327 33 Gérald Schwartzmann
h3. Tester le paquet
328 34 Gérald Schwartzmann
329 33 Gérald Schwartzmann
Le nouveau paquet doit être testé en fresh install et en update (cas de figure où l'application est en production).
330 33 Gérald Schwartzmann
331 33 Gérald Schwartzmann
h3. Test de l'application
332 34 Gérald Schwartzmann
333 49 Lionel Morin
L'application doit être testée avec tous les types de comptes utilisateurs.
334 33 Gérald Schwartzmann
335 33 Gérald Schwartzmann
h2. Documentation
336 33 Gérald Schwartzmann
337 33 Gérald Schwartzmann
h3. Première mouture
338 33 Gérald Schwartzmann
339 33 Gérald Schwartzmann
Il faut documenter une application avant son passage en candidat.
340 49 Lionel Morin
Ouvrez une page wiki et y mettre les changements majeurs concernant
341 33 Gérald Schwartzmann
l'installation, les rôles, les consignes diverses ...
342 49 Lionel Morin
Ses informations doivent permettre de faciliter la vie du testeur.
343 33 Gérald Schwartzmann
344 33 Gérald Schwartzmann
h3. Finalisation
345 33 Gérald Schwartzmann
346 33 Gérald Schwartzmann
L'utilisateur doit trouver la doc à jour au moment où il en a besoin.
347 33 Gérald Schwartzmann
Aussi votre documentation doit être faite avant la sortie du paquet en stable.
348 33 Gérald Schwartzmann
Si vous n'avez pas accès au logiciel pour élaborer la doc, posez un signalement dans "Documentations" en mettant le lien vers la page wiki.
349 33 Gérald Schwartzmann
350 31 Gérald Schwartzmann
h2. Fioritures
351 31 Gérald Schwartzmann
352 31 Gérald Schwartzmann
Les couleurs pour uniformiser les applications.
353 31 Gérald Schwartzmann
jaune pâle max #fff999
354 31 Gérald Schwartzmann
jaune pâle mini #ffffcc
355 31 Gérald Schwartzmann
jaune orangé logo Eole #ffcc29
356 31 Gérald Schwartzmann
mauve logo Eole #57537e
357 45 Benoit Vila
358 45 Benoit Vila
h2. Divers
359 45 Benoit Vila
360 45 Benoit Vila
Logiciel de packaging Epack : http://test-eoleng.ac-dijon.fr/eoleng/eole-2.2-security/all/eolepack_2.2-eole37_all.deb