Projet

Général

Profil

Doc-geting-started » Historique » Version 29

Version 28 (Emmanuel GARETTE, 21/01/2013 11:06) → Version 29/35 (Joël Cuissinat, 28/01/2013 09:50)

h1. Premiers pas

Dans ce document vous trouverez toutes les étapes pour utiliser le dépôt standard Eole pour le packaging.

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
pour construire un paquet "Eole".

Il suffit de mettre les fichiers dans les bons répertoires.

h2. Le dépôt

Voici l’arborescence type d'un dépôt "standardisé" :

* */src/*
** *<appli>-<version>/*
** *plugins-<version>/nom/*
** *lang-<version>/nom/*
* */tmpl/*
* */dicos/*
* */pretemplate/*
* */posttemplate/*
* */postservice/*
* */diagnose/*
* */firewall/*
* */schedule/*
** *pre/*
** *post/*
* */bacula/*
** *fichier/*
** *restore/*
* */sql/*
** *gen/*
** *updates/*
** *conf/*
*** *gen/*
*** *updates/*
*** *pwd/*
* */sso/*
** *filtres/*
** *user-info/*
* */ldap/*
** *passwords/* *pwd/*
* */ead/*
** *actions/*
** *perms/*
** *roles/*
* */zephir/*
** *configs/*
** *srv/*
* */lib/*
** *eole/*
** *<source>/*
* */sharenvole/*
* _Makefile_
* _eole.mk_
* _apps.mk_
* *<appli>.mk*

Commentaires :

table{border:1px solid black}.
| */src/* | _Répertoire de destination des sources de l'application_ |
| */src/<appli>-<version>/* | _Code source de l'application avec la possibilité de faire cohabiter plusieurs versions lors des mises à jour_ |
| */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)_ |
| */src/lang-<version>/* | _Répertoire des traductions pour cette version (un sous-répertoire par langue)_ |
| */tmpl/* | _Répertoire des templates eole_ |
| */dicos/* | _Répertoire des dictionnaires eole (XX_<appli>.xml[1]) |
| */pretemplate/* | _Répertoire des scripts (shell ou python) de pretemplate_ |
| */posttemplate/* | _Répertoire des scripts (shell ou python) de posttemplate_ |
| */postservice/* | _Répertoire des scripts (shell ou python) de postservice_ |
| */diagnose/* | _Répertoire des scripts de tests diagnose_ |
| */firewall/* | _Répertoire des fichiers eole-firewall (.fw) statiques_ |
| */schedule/pre/* | _Répertoire des scripts schedule "pre" _ |
| */schedule/post/* | _Répertoire des scripts schedule "post"_ |
| */bacula/fichier/* | _Répertoire de description des fichiers à sauvegarder par Bacula_ |
| */bacula/restore/* | _Répertoire des scripts de restaurationr Bacula_ |
| */sql/* | _Répertoire des configurations pour la génération et la gestion des mise à jours des bases de données_ |
| */sql/gen/* | _Répertoire des scripts sql à exécuter lors de la génération de la base de données_ |
| */sql/updates* | _Répertoire des scripts sql à exécuter lors de mise à jour de la base de données_ |
| */sql/conf/* | _Répertoire des configurations pour la gestion de la bases de données_ |
| */sql/conf/gen* | _Répertoire du fichier de configuration de génération de la base de données_ |
| */sql/conf/updates* | _Répertoire du fichier de configuration des mises à jour de la base de données_ |
| */sql/conf/passwords* | _Répertoire du fichier de configuration pour la gestion de mots de passe d'accès à la base de données_ |
| */sso/* | _Répertoire des configurations pour la gestion du SSO_ |
| */sso/filtres/* | _Répertoire des filtres sso (<appli>.ini, <appli>_apps.ini)_ |
| */sso/user-info/* | _Répertoire du profil sso (profil_<appli>.py) |
| */ldap/* | _Répertoire des configurations pour la gestion des mots de passe d'accès au serveur ldap_ |
| */ldap/passwords/* | _Répertoire du fichier de configuration du mot de passe ldap (<appli>.ini)_ |
| */ead/* | _Répertoire des configurations pour la gestion des actions EAD_ |
| */ead/actions/* | _Répertoire des configurations pour la gestion des actions de l'EAD_ |
| */ead/perms/* | _Répertoire des configurations pour la gestion des rôles de l'EAD_ |
| */ead/roles/* | _Répertoire des configurations pour la gestion des associations de rôle de l'EAD_ |
| */zephir/* | _Répertoire des configurations pour la gestion des agents Zéphir_ |
| */zephir/configs* | _Répertoire des configurations pour la gestion des configuration d'agents Zéphir_ |
| */zephir/srv* | _Répertoire des configurations pour la gestion des configuration d'agents de service Zéphir_ |
| */lib/* | _Répertoire pour les fichiers de librairie (/usr/lib)_ |
| */lib/eole/* | _Répertoire pour les fichiers de librairie EOLE_ |
| */lib/<source>/* | _Répertoire pour les fichiers de librairie spécifiques à l'application_ |
| */sharenvole/* | _Répertoire des scripts historiques d'aide à l'installation des applications envole (à éviter si possible)_ |
| Makefile | _Fichier de règles de "compilation"_ |
| eole.mk | _Règles standard Eole ! ne pas changer ce fichier_ |
| apps.mk | _Règles pour l'installation de l'application web._ |
| <appli>.mk | _Règles pour supplémentaire du développeur à inclure dans Makefile_ |

h2. Etape 1 : Cloner le dépôt

@git clone http://dev-eole.ac-dijon.fr/git/eole-skeletor@
<pre>
Cloning into 'eole-skeletor'...
remote: Counting objects: 83, done.
remote: Compressing objects: 100% (71/71), done.
remote: Total 83 (delta 26), reused 0 (delta 0)
Unpacking objects: 100% (83/83), done.
</pre>

Vous disposez désormais d'un répertoire _eole-skeletor_.
Ce répertoire contient un exemple type de dépôt standard.

h2. Etape 2: Créer votre propre dépôt

Lancer les commandes suivantes :

@mkdir eole-monappli@
@cd eole-monappli@
@git init .@
@cp ../eole-skeletor/*.mk ../eole-skeletor/Makefile .@
@git add .@
@git commit -am "Premier commit : Ajout des fichiers Makefile standard"@

<pre>
user@host:code $ mkdir eole-monappli
user@host:code $ cd eole-monappli
user@host:code/eole-monappli $ git init .
Initialized empty Git repository in /tmp/eole-monappli/.git/
user@host:code/eole-monappli $ cp ../eole-skeletor/*.mk ../eole-skeletor/Makefile .
user@host:code/eole-monappli $ git add .
user@host:code/eole-monappli $ git commit -am "Premier commit : Ajout des fichiers Makefile standard"
[master (root-commit) 1be6951] Premier commit : Ajout des fichiers Makefile standard
3 files changed, 195 insertions(+)
create mode 100644 Makefile
create mode 100644 apps.mk
create mode 100644 eole.mk
user@host:code/eole-monappli $
</pre>

h2. Etape 3: Mise en place des fichiers (Makefile, dico, templates, sources, configurations...)

La première chose a faire est de mettre à jour le fichier Makefile pour qu'il corresponde a votre application.
Il faut mettre à jour 4 variables, SOURCE, EOLE_VERSION, VERSION et PKGAPPS

* *SOURCE* contiens le nom de votre application
* *EOLE_VERSION* version EOLE cible, *2.3* ou *2.4* à l’heure actuelle
* *VERSION* contiens la version de votre application
* *PKGAPPS* contiens oui ou non, pour répondre à la question "voulez vous générer un paquet _monapplli-apps[2]_"

Pour que le "Makefile" installe votre fichier au bon endroit, il suffit de créer le répertoire adéquat et
d'y mettre votre fichier.

h3. Exemple d'ajout d'un dictionnaire "Eole" :

Il suffit de lancer les commandes suivantes :

@mkdir dicos@
@cp XX_nom_appli.xml dicos@

<pre>
user@host:code/eole-monappli $ mkdir dicos
user@host:code/eole-monappli $ ls
apps.mk dicos/ eole.mk Makefile
user@host:code/eole-monappli $ cp /emplacement/de/mon/dico/XX_nom_appli.xml dicos
user@host:code/eole-monappli $ ls dicos
XX_nom_appli.xml
</pre>

Pour l'ajout d'un template la procédure est la même avec le répertoire tmpl.

h3. Exemple d'ajout de la génération d'une base de données

h4. Création de l'arborescence:

<pre>
├── sql
│ ├── conf
│ │ ├── gen
│ │ │ └── mon_appi.py
│ │ └── passwords
│ │ └── monappli.ini
│ └── gen
│ ├── premier_script.sql
│ └── second_script.sql
</pre>

@mkdir -p sql/conf/gen sql/conf/passwords sql/gen@

<pre>
user@host:code/eole-monappli $ mkdir -p sql/conf/gen sql/conf/passwords sql/gen
user@host:code/eole-monappli $ ls -R sql
sql:
conf/ gen/

sql/conf:
gen/ passwords/

sql/conf/gen:

sql/conf/passwords:

sql/gen:
user@host:code/eole-monappli $ tree
sql
├── conf
│ ├── gen
│ └── passwords
└── gen
</pre>

h4. Création des fichiers de configuration

Pour créer une base de données il faut plusieurs fichiers.
* Un fichier de configuration pour la génération
* Un fichier de configuration pour la gestion des mots de passe d'accès à la base
* Les scripts SQL pour la création et l'initialisation de la base de données

h5. Fichier de Configuration pour la génération :

Ce fichier contient les instructions nécessaires à la génération de la bases :

<pre><code class="python">
#-*-coding:utf-8-*-
###########################################################################
# Eole NG - 2011
# Copyright Pole de Competence Eole (Ministere Education - Academie Dijon)
# Licence CeCill cf /root/LicenceEole.txt
# eole@ac-dijon.fr
#
# gepi.py
#
# Création de la base de données mysql de gepi
#
###########################################################################
"""
Config pour gepi
"""
from eolesql.db_test import db_exists, test_var

GEPI_TABLEFILENAMES = ['/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-1-structure.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-2-data.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-3-ajouteole.sql']
def test():
"""
test l'existence de la base gepi
"""
return test_var('activer_gepi') and not db_exists('gepi')

conf_dict = dict(filenames=GEPI_TABLEFILENAMES,
test=test)
</code></pre>
Il faut placer ce fichier dans le répertoire _*sql/conf/gen*_.

h5. Fichier de configuration de gestion des mots de passe

Ce fichier contient les instructions nécessaires au renouvellement des mots de passe
des utilisateurs ayant accès à la base de données. Les applications disposent d'un utilisateur
qui a des droits d'écriture dans les tables de la base, cet utilisateur a un mot de passe
qui est renouvelé régulièrement par les mécanismes "Eole". Ce fichier sert à faire en sorte
que la configuration de l'application soit mise à jour lors du changement du mot de passe.

Voici un exemple de fichier :

<pre><code class="bash">
[gepi]
username=gepi
container=web
template=$dbPass="
filename=/var/www/html/gepi/secure/connect.inc.php
owner=root:www-data
chmod=660
</code></pre>

Quelques petites précisions :
* username= nom de l'utilisateur utilisé par l'application pour accéder à la base
* container= nom du conteneur lxc où l'application est hébergée
* template= chaîne qui préfixe le mot de passe dans le fichier de configuration
* filname= fichier de configuration à mettre à jour
* owner= utilisateur et groupe propriétaire du fichier de configuration au format user:group
* chmod= droits du fichier au format XXX

Il faut placer ce fichier dans le répertoire _*sql/conf/passwords*_.

h5. Scripts SQL de création et d'initialisation de la base

Un seul script est obligatoire, le script de création (toujours le premier de la liste)
<pre><code class="python">
# Liste des fichiers sql à exécuter (dans l'ordre)
GEPI_TABLEFILENAMES = ['/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-1-structure.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-2-data.sql',
'/usr/share/eole/mysql/gepi/gen/gepi-create-3-ajouteole.sql']
</code></pre>

Dans l'exemple c'est le script _*/usr/share/eole/mysql/gepi/gen/gepi-create-0-initeole.sql*_.

Ce script est très souvent un "template" eole car on a besoin d'informations contenues dans la configuration "Eole".

Exemple :

<pre><code class="sql">
-- création de la base de données
CREATE DATABASE gepi CHARACTER SET utf8 COLLATE utf8_general_ci;

-- création du user de la base
grant all privileges on gepi.* to gepi@%%adresse_ip_web identified by 'gepi';
flush privileges ;

-- connexion à la base
\r gepi

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
</code></pre>

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).

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*_.

h2. Tester l'installation via le Makefile standard

Lancer la commandes suivante depuis votre dépôt:

@DESTDIR=/tmp/monappli make install@

<pre>
user@host code/mon_appi $ DESTDIR=/tmp/monappli make install
test ! -d sql/update || install -m 755 -d /tmp/monappli/usr/share/eole/mysql/eole-zarafa/updates
test ! -d sql/conf/gen || install -m 755 -d /tmp/monappli/usr/share/eole/applications/gen
install -m 755 -d /tmp/monappli/usr/share/eole
test ! -d zephir/srv || install -m 755 -d /services
test ! -d sso/user-info || install -m 755 -d /tmp/monappli/usr/share/sso/user_infos
install -m 755 -d /tmp/monappli/usr/share/eole/creole
test ! -d zephir/configs || install -m 755 -d /tmp/monappli/usr/share/zephir/monitor/configs
test ! -d zephir || install -m 755 -d /tmp/monappli/usr/share/zephir
test ! -d sso || install -m 755 -d /tmp/monappli/usr/share/sso
test ! -d lxc || install -m 755 -d /tmp/monappli/usr/share/eole/lxc
test ! -d sharenvole || install -m 755 -d /tmp/monappli/usr/share/envole/eole-zarafa
test ! -d sso/filtres || install -m 755 -d /tmp/monappli/usr/share/sso/app_filters
test ! -d posttemplate || install -m 755 -d /tmp/monappli/usr/share/eole/posttemplate
test ! -d lxc/fstab || install -m 755 -d /tmp/monappli/usr/share/eole/lxc/fstab
test ! -d postservice || install -m 755 -d /tmp/monappli/usr/share/eole/postservice
test ! -d tmpl || install -m 755 -d /tmp/monappli/usr/share/eole/creole/distrib
test ! -d pretemplate || install -m 755 -d /tmp/monappli/usr/share/eole/pretemplate
test ! -d sql/conf/passwords || install -m 755 -d /tmp/monappli/usr/share/eole/applications/passwords
test ! -d sql || install -m 755 -d /tmp/monappli/usr/share/eole/mysql/eole-zarafa
test ! -d dicos || install -m 755 -d /tmp/monappli/usr/share/eole/creole/dicos
test ! -d diagnose || install -m 755 -d /tmp/monappli/usr/share/eole/diagnose/module
test ! -d ldap/passwords || install -m 755 -d /tmp/monappli/usr/share/eole/annuaire/password_files
test ! -d sql/gen || install -m 755 -d /tmp/monappli/usr/share/eole/mysql/eole-zarafa/gen
if [ -d sql/update ]; then for file in `ls -1 sql/update/`; do install -m 644 sql/update/$file /tmp/monappli/usr/share/eole/mysql/eole-zarafa/updates || true; done; fi
if [ -d sql/conf/gen ]; then for file in `ls -1 sql/conf/gen/`; do install -m 644 sql/conf/gen/$file /tmp/monappli/usr/share/eole/applications/gen || true; done; fi
if [ -d zephir/srv ]; then for file in `ls -1 zephir/srv/`; do install -m 644 zephir/srv/$file /services || true; done; fi
if [ -d sso/user-info ]; then for file in `ls -1 sso/user-info/`; do install -m 644 sso/user-info/$file /tmp/monappli/usr/share/sso/user_infos || true; done; fi
if [ -d zephir/configs ]; then for file in `ls -1 zephir/configs/`; do install -m 644 zephir/configs/$file /tmp/monappli/usr/share/zephir/monitor/configs || true; done; fi
if [ -d zephir ]; then for file in `ls -1 zephir/`; do install -m 644 zephir/$file /tmp/monappli/usr/share/zephir || true; done; fi
if [ -d sso ]; then for file in `ls -1 sso/`; do install -m 644 sso/$file /tmp/monappli/usr/share/sso || true; done; fi
if [ -d lxc ]; then for file in `ls -1 lxc/`; do install -m 644 lxc/$file /tmp/monappli/usr/share/eole/lxc || true; done; fi
if [ -d sharenvole ]; then for file in `ls -1 sharenvole/`; do install -m 644 sharenvole/$file /tmp/monappli/usr/share/envole/eole-zarafa || true; done; fi
if [ -d sso/filtres ]; then for file in `ls -1 sso/filtres/`; do install -m 644 sso/filtres/$file /tmp/monappli/usr/share/sso/app_filters || true; done; fi
if [ -d lxc/fstab ]; then for file in `ls -1 lxc/fstab/`; do install -m 644 lxc/fstab/$file /tmp/monappli/usr/share/eole/lxc/fstab || true; done; fi
if [ -d tmpl ]; then for file in `ls -1 tmpl/`; do install -m 644 tmpl/$file /tmp/monappli/usr/share/eole/creole/distrib || true; done; fi
if [ -d sql/conf/passwords ]; then for file in `ls -1 sql/conf/passwords/`; do install -m 644 sql/conf/passwords/$file /tmp/monappli/usr/share/eole/applications/passwords || true; done; fi
if [ -d sql ]; then for file in `ls -1 sql/`; do install -m 644 sql/$file /tmp/monappli/usr/share/eole/mysql/eole-zarafa || true; done; fi
install: omission du répertoire « sql/conf »
if [ -d dicos ]; then for file in `ls -1 dicos/`; do install -m 644 dicos/$file /tmp/monappli/usr/share/eole/creole/dicos || true; done; fi
if [ -d ldap/passwords ]; then for file in `ls -1 ldap/passwords/`; do install -m 644 ldap/passwords/$file /tmp/monappli/usr/share/eole/annuaire/password_files || true; done; fi
if [ -d sql/gen ]; then for file in `ls -1 sql/gen/`; do install -m 644 sql/gen/$file /tmp/monappli/usr/share/eole/mysql/eole-zarafa/gen || true; done; fi
if [ -d posttemplate ]; then for file in `ls -1 posttemplate/`; do install -m 755 posttemplate/$file /tmp/monappli/usr/share/eole/posttemplate || true; done; fi
if [ -d postservice ]; then for file in `ls -1 postservice/`; do install -m 755 postservice/$file /tmp/monappli/usr/share/eole/postservice || true; done; fi
if [ -d pretemplate ]; then for file in `ls -1 pretemplate/`; do install -m 755 pretemplate/$file /tmp/monappli/usr/share/eole/pretemplate || true; done; fi
if [ -d diagnose ]; then for file in `ls -1 diagnose/`; do install -m 755 diagnose/$file /tmp/monappli/usr/share/eole/diagnose/module || true; done; fi
user@host code/mon_appi $ tree /tmp/monappli
/tmp/monappli
└── usr
└── share
└── eole
├── applications
│   ├── gen
│   └── passwords
├── creole
│   └── dicos
└── mysql
└── eole-monappli
└── gen
</pre>

Votre application a été installée dans _/tmp/monappli_ vous devriez y retrouver une arborescence similaire à celle de l'exemple.

fn1. XX = Ordre de traitement du dictionnaire (de 00 à 99).

fn2. Plus d'informations : http://dev-eole.ac-dijon.fr/projects/envole/wiki/EnvoleMigration23#%C3%89tape-3-la-division-des-paquets