Installation & Exploitation

Dynacase Platform 3.2

Anakeen Labs <labs@anakeen.com>

Table des matières

Chapitre 1 Introduction

1.1 Abstract

Ce document décrit les procédures d'installation et de mise à jour de Dynacase Platform, et présente les principales procédures d'exploitation.

1.2 Présentation

L'installation d'un contexte Dynacase nécessite au préalable l'installation de Dynacase Control qui permet de créer et de gérer les contextes Dynacase. Dans un contexte Dynacase vous pouvez installer Dynacase Platform et les modules spécifiques à votre application.

1.3 Historique des modifications

1.3.1 Édition 12

1.3.2 Édition 11

1.3.3 Édition 10

1.3.4 Édition 9

1.3.5 Édition 8

1.3.6 Édition 7

1.3.7 Édition 6

Chapitre 2 Prérequis

Ce chapitre identifie l'ensemble des prérequis pour l'installation et l'utilisation de Dynacase Platform.

Seuls les prérequis pour les modules standards sont listés.

2.1 Nouveautés 3.2

2.1.1 php-intl

Installer le module php Intl (php5-intl habituellement) et penser à relancer le service apache.

Ce module est utilisé pour l'internationalisation.

2.1.2 Implémentation libc de Iconv

La fonction iconv doit être fournie par PHP compilé avec GLIBC.

Pour vérifier cela :

$ iconv --version
iconv (Ubuntu EGLIBC 2.11.1-0ubuntu7.8) 2.11.1  
...
$ php -r 'var_dump(ICONV_IMPL); var_dump(iconv("UTF-8", "ASCII//TRANSLIT", "\xc3\xa9t\xc3\xa8"));'  
string(5) "glibc"
string(3) "ete"

2.1.3 Locales fr_FR et en_US

Les locales fr_FR.UTF-8 et en_US.UTF-8 (ainsi que les dictionnaires aspell de langue fr et en) doivent être installés et disponibles sur le serveur.

2.1.4 Apache mod_headers

Installer et activer le module Apache mod_headers.

2.2 Poste client

Les navigateurs supportés sont :

3.2 R17 IE 8, 9, 10 et 11 / Chrome stable / Firefox stable

3.2 R11 IE 8, 9, 10 et 11 / Chrome stable / Firefox >= 4.0.1

3.2 R10 IE 8 et 9 / Chrome stable / Firefox > 3.6

2.3 Serveur

2.3.1 GNU/Linux

Dynacase fonctionne sur un système GNU/Linux (Debian, Ubuntu, RedHat, etc.).

2.3.1.1 Commandes système

Dynacase requiert les commandes système suivantes :

2.3.1.2 Locales

Dynacase requiert que les locales systèmes fr_FR.UTF-8 et en_US.UTF-8 soient actives et correctement configurées sur le système.

Dynacase requiert aussi que les dictionnaires de langue fr et en de la librairie aspell soient installés et accessibles pour l'extension pspell de PHP.

2.3.2 PHP

18 Fév 2019 5.6 / 7.0 / 7.1 / 7.2

3.2 R17 5.6 / 7.0 / 7.1

3.2 R15 5.6 / 7.0 (Les versions 5.4 et 5.5 restent compatibles mais ne sont pas supportés. Les éventuels problèmes dus à ces versions obsolètes de PHP ne sont pas supportés par Anakeen.)

3.2 R14 5.4.4 / 5.5 / 5.6

3.2 R12 5.4.4 / 5.5

3.2 R11 5.4.4 / 5.5

3.2 R11 5.3

La version 5.3 n'est plus compatible à compter de la release 3.2 R12.

2.3.2.1 Zend Server

Pour les distributions Linux qui ne fournissent pas la version PHP nécessaire, Zend Server fournit différentes versions de PHP pour les distributions Linux.

2.3.2.2 Extensions PHP

Les extensions notées (core) sont normalement incluses de manière statique dans PHP.

2.3.2.3 Composants PEAR

3.2 R15 Aucune dépendance sur les composants PEAR n'est requise.

3.2 R14 modules Webdesk et Webdesk Services :
XML_Parser (1.3.2) / XML_RSS (1.0.2)
3.2 R10module Core :
XML_Parser (1.3.2) / XML_RSS (1.0.2) / Net_SMTP (1.6.0) / Mail_Mime (1.8.0) / Crypt_CHAP (optionnel)

2.3.2.4 Paramétrage PHP

Certains paramètres de PHP doivent être modifiés afin que Dynacase Platform fonctionne au mieux et en fonction de votre utilisation. Ces valeurs préconisées doivent être revues en fonction de votre configuration réelle et de vos applications.

2.3.2.4.1 Paramètres INI
date.timezone

Ce paramètre permet de spécifier le fuseau horaire utilisé par les fonctions de manipulation de date.

date.timezone = 'Europe/Paris'
max_execution_time

Ce paramètre permet de spécifier le temps maximal (en seconde) de traitement d'une requête par PHP. Par défaut ce paramètre est à “30”.

max_execution_time = 300 ; 5 min.
max_file_uploads

Ce paramètre permet de spécifier le nombre maximum de fichiers qui seront pris en compte par PHP lors de la soumission d'un formulaire contenant des fichiers.

Cette valeur doit être en cohérence avec le nombre maximum de fichier pouvant être soumis lors de l'enregistrement d'un document.

Si ce n'est pas le cas, l'enregistrement du document est refusé à l'utilisateur et le message d'erreur suivant est présenté à l'utilisateur : "Trop de fichiers dans le formulaire. Veuillez contacter votre administrateur système pour augmenter max_file_uploads dans php.ini. Le maximum est de %s".

Par défaut ce paramètre est à “20”.

max_file_uploads = 100
max_input_vars

Ce paramètre permet de spécifier le nombre maximum de variables de formulaires prises en compte par PHP lors de la soumission des formulaires.

Si vous avez beaucoup d'attributs sur vos familles et que la valeur déclarée de ce paramètre est trop basse, le message d'erreur suivant est présenté à l'utilisateur lors de la soumission des formulaire d'édition de documents : "Variables d'entrée dépassées %s. Veuillez contacter votre administrateur système pour augmenter max_input_vars dans php.ini.".

Par défaut ce paramètre est à "1000".

max_input_vars = 1000
error_reporting

Ce paramètre permet de spécifier le niveau de reporting des notices/warnings/erreurs/etc. Il est nécessaire de ne pas afficher les messages de notices (E_NOTICE), de dépréciation (E_DEPRECATED) et de suggestion (E_STRICT) de PHP lors de l'utilisation de Dynacase Platform en production.

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors

Ce paramètre permet d'activer ou non l'affichage des erreurs PHP dans les réponses émises au client. En production, il est recommandé de désactiver le display_errors (les messages d'erreur/warning/suggestion de PHP seront alors consultables sur le serveur dans le fichier spécifié par le paramètre INI error_log).

Par défaut ce paramètre est à On.

display_errors = Off

2.3.2.5 htaccess

Les paramètres suivants sont définis dans le fichire .htaccess à la racine du contexte. Ils doivent êre redéfinis dans ce fichier, et doivent être repositionnés après chaque mise à jour de Dynacase.

post_max_size

Ce paramètre permet de spécifier la taille maximale d'une requête de type POST.

Par défaut ce paramètre est à "80M" (80 Mo).

post_max_size = "128M"
upload_max_filesize

Ce paramètre permet de spécifier la taille maximale d'un fichier téléversé. Si un fichier d'une taille supérieure est envoyé par le navigateur, il ne sera pas pris en compte par PHP.

Par défaut ce paramètre est à "80M" (80 Mo).

upload_max_filesize = "20M"

2.4 PostgreSQL

18 Fév 2019 9.1 / 9.2 / 9.3 / 9.4 / 9.5 / 9.6 / 10

3.2 R17 9.1 / 9.2 / 9.3 / 9.4 / 9.5 / 9.6

3.2 R15 9.1 / 9.2 / 9.3 / 9.4 / 9.5 (Les versions 9.1 / 9.2 / 9.3 restent compatibles. Néanmoins, les versions recommandées par Anakeen sont les dernières versions de Postgresql 9.4 et 9.5.)

3.2 R14 9.1 / 9.2 / 9.3 / 9.4

3.2 R12 9.1 / 9.2 / 9.3

3.2 R11 9.1 / 9.2 / 9.3

3.2 R11 8.4

La version 8.4 n'est plus compatible à compter de la release 3.2 R12

Les différentes optimisations, en particulier sur le calcul des droits ne sont effectives qu'avec la version 9.1 de PostgreSQL.

Dynacase utilise le fichier de service Postgresql (pg_service.conf) pour la définition des paramètres de connexion à la base de données :

Pour identifier l'emplacement du fichier pg_service.conf sur votre distribution Linux, vous pouvez utiliser la commande suivante :

# pg_config --sysconfdir

2.5 HTTPD Apache

Dynacase Platform nécessite le serveur HTTPD Apache en version 2.2 et 2.4.

Le répertoire dans lequel sera installé Dynacase doit avoir un AllowOverride All afin que les .htaccess livrée par Dynacase soient bien pris en compte par Apache :

L'utilisation avec Apache 2.4 requiert l'utilisation du module mod_access_compat :

2.5.1 Modules Apache

Les modules Apache suivants sont requis :

Si vous utilisez Apache 2.4, les modules suivants sont requis en plus des modules ci-dessus :

Chapitre 3 Installation de Dynacase Control

Dynacase Control est l'outil qui permet d'installer et de gérer des contextes Dynacase.

3.1 Téléchargement

Dynacase Control est téléchargeable ici : http://dynacase.anakeen.com/control/dynacase-control-current.tar.gz.

Vous pouvez vous reporter à l'annexe Vérification de l'intégrité des éléments téléchargés pour plus d'explication sur le contrôle de l'intégrité des données téléchargées.

3.2 Installation

L'installation s'effectue sous le compte root.
L'archive "tar.gz" récupérée doit être décompressée dans un répertoire servi par Apache, par exemple dans le DocumentRoot de la configuration Apache.

root@server: cd /var/www      # Debian/Ubuntu  
root@server: cd /var/www/html # RedHat/CentOS

Télécharger l'archive de Dynacase Control:

wget http://dynacase.anakeen.com/control/dynacase-control-current.tar.gz

Extraire l'archive et renommer le répertoire :

tar zxf dynacase-control-current.tar.gz
mv dynacase-control-*-* dynacase-control  

Modifier le propriétaire du répertoire de Dynacase Control pour être celui de l'utilisateur faisant tourner Apache.

chown -R www-data: dynacase-control # Debian/Ubuntu
chown -R apache: dynacase-control   # RedHat/Centos

3.3 Première connexion

L'url de connexion dépend de votre configuration Apache. Si Dynacase Control a été installé dans votre Document Root, l'URL de connexion est : http://localhost/dynacase-control/

Lors de la première connexion à Dynacase Control, vous devez saisir un login et un mot de passe afin de contrôler l'accès à l'interface de Dynacase Control.

définition du login d'accès à Dynacase Control

Figure 1. définition du login d'accès à Dynacase Control

Dynacase Control vous demande si vous souhaitez enregistrer ce dernier avec votre compte EEC.
Cet enregistrement vous permet de déclarer l'installation de Dynacase conformément à votre contrat EEC.

enregistrement EEC

Figure 2. enregistrement EEC

Si vous n'avez pas de compte EEC, cliquez sur le bouton '[Register later…]'

Si vous n'enregistrez pas Dynacase Control lors de cette première connexion, vous aurez toujours la possibilité de le faire depuis l'interface Control.

3.4 Dynacase Control

3.4.1 Setup

interface Dynacase Control

Figure 3. interface Dynacase Control

L'interface Control > Setup permet de configurer Dynacase Control. Vous pouvez, depuis cet écran:

interface setup Dynacase Control

Figure 4. interface setup Dynacase Control

3.4.1.1 Mise à jour de Dynacase Control

Lors de la connexion à l'interface Dynacase Control, celui-ci vérifie si une nouvelle version est disponible. Si c'est le cas, alors une popup propose de télécharger et d'appliquer la mise à jour :

mise à jour de Dynacase Control

Figure 5. mise à jour de Dynacase Control

Si vous refusez la mise à jour, il est alors possible d'appliquer ultérieurement la mise à jour en allant dans la section Setup > Dynacase Control Information, en cliquant sur le bouton [Update].

3.4.1.1.1 Configuration des mises-à-jour de Dynacase Control

Vous pouvez configurer l'hôte sur lequel Dynacase Control effectuera les recherches et téléchargements de mises-à-jour (c'est particulièrement utile lors de l'installation sur une machine n'ayant pas accès à internet). Par défaut, la configuration pointe sur le dépôt officiel Anakeen de Dynacase Control.

nom du paramètre valeur par défaut description
wiff-update-host http://dynacase.anakeen.com Le nom de l'hôte hébergeant les mises-à-jour avec le protocole à utiliser (“http://” ou “ftp://”)
wiff-update-path /control/ Le chemin d'accès au répertoire des mises-à-jour
wiff-update-login Login de connexion au serveur de mise à jour
wiff-update-password Mot de passe de connexion au serveur de mise à jour

3.4.1.2 Enregistrement de Dynacase Control

L'enregistrement permet d'associer une instance de Dynacase Control avec votre contrat EEC. Cet enregistrement va automatiquement envoyer sur les serveurs de Dynacase certaines informations de configuration de votre serveur, permettant de simplifier les éventuelles interventions ultérieures de support. Enfin, l'enregistrement avec votre compte EEC va également ajouter automatiquement à Dynacase Control la liste des dépôts de paquets privés associés à votre contrat.

3.4.1.3 Dépôts de paquets

La section Repositories permet d'ajouter, supprimer et éditer des dépôts de paquets qui pourront être utilisés pour créer un contexte Dynacase.

Lorsque vous souhaitez installer une version donnée de Dynacase, il vous faut ajouter de dépôt correspondant.

Édition de dépôt

Figure 6. Édition de dépôt

Lors de l'édition d'un dépôt, vous avez à renseigner les champs suivants:

Nom du paramètre description
Name Le nom du dépôt de paquets (caractère alpha-numérique uniquement).
Description Un champ libre de description du dépôt (optionnel)
Protocol Protocole d'accès au dépôt : (http, https, ftp, file)
Host Le nom d'hôte du serveur hébergeant le dépôt
Path Le chemin d'accès au répertoire webinst du dépôt
Default Cocher pour que ce dépôt soit activé par défaut lors de la création d'un contexte Dynacase
Authenticated Cocher si le dépôt de paquets requiet une authentification (comme dans le cas d'un dépôt EEC par exemple).
Login Le nom d'utilisateur (compte EEC) pour l'authentification du dépôt
Password Le mot de passe associé au login pour l'authentification du dépôt
Confirm password Confirmation du mot de passe
3.4.1.3.1 Dépôts pré-configurées

Par défaut, le dépôt de la version communautaire de Dynacase Platform est pré-configuré :

3.5 Utilisation d'un proxy

Si vos accès aux dépôts Dynacase Platform nécessitent l'utilisation d'un proxy HTTP, vous pouvez définir celui-ci avec les paramètres suivants :

Nom du paramètre description
use-proxy Cocher se choix si vous souhaitez utiliser un proxy et compléter les paramètres suivants
proxy-host Le nom DNS (ou adresse IP) du proxy HTTP (Exemple : “proxy.example.net”)
proxy-port Le numéro de port du proxy HTTP (Exemple : “3128”)
proxy-username Le nom d'utiliteur pour le proxy, s'il requiert une authentification
proxy-password le mot de passe associé si le proxy requiert une authentification

3.6 Délai de connexion

Le paramètre connect-timeout (par défaut à 3) permet de spécifier le temps d'attente maximum pour l'établissement d'une connexion HTTP (e.g. connexion à un dépôt de paquet pour vérifier son statut ou lister son contenu).

Nom du paramètre description
connect-timeout Temps d'attente maximum (en secondes) pour l'établissement d'une connexion HTTP

3.7 Journal des messages d'erreurs

control 1.5

Les messages d'erreurs émis par dynacase-control sont enregistrés de la manière suivante :

3.7.1 Paramétrage syslog

3.7.1.1 syslog-facility

La "facility" des messages émis par syslog est paramétrable par le paramètre syslog-facility qui peut prendre les valeurs suivantes :

LOG_AUTH, LOG_AUTHPRIV, LOG_CRON, LOG_DAEMON, LOG_KERN, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7, LOG_LPR, LOG_MAIL, LOG_NEWS, LOG_SYSLOG, LOG_USER, LOG_UUCP.

La valeur du paramètre n'est pas modifiable par l'interface Web Pour modifier sa valeur il faut éditer le fichier conf/params.xml et changer la propriété value du paramètre syslog-facility.

Exemple pour logger avec la "facility" LOG_LOCAL0 :

<param name="syslog-facility" mode="hidden" value="LOG_LOCAL0" />

Si la valeur de syslog-facility est vide, alors la "facility" LOG_USER est utilisée.

Si la valeur de syslog-facility n'est pas une "facility" valide, alors la "facility" LOG_USER est utilisée et un message d'erreur est émis indiquant que la "facility" spécifiée est invalide (Invalid syslog-facility 'XXX'. Using default facility.).

Chapitre 4 Installation d'un contexte

L'installation de Dynacase Platform et de ses modules est réalisée en créant un contexte Dynacase Control.

Un contexte regroupe l'ensemble des éléments nécessaires au fonctionnement d'une application Dynacase Platform : code des différents modules (installés ou générés), données et paramètres de configuration.

4.1 Création d'un contexte

L'item Create Context de l'interface Dynacase Control ouvre la fenêtre de création d'un nouveau contexte.

création d'un contexte

Figure 7. création d'un contexte

Vous êtes invité à saisir les paramètres du contexte :

Nom du paramètre description
Name Le nom du contexte
Root Chemin racine du répertoire d'installation du contexte. Il doit être accessible en lecture/écriture par Apache. Si le répertoire spécifié n'existe pas, Dynacase Control essayera de le créer.
Description Description du contexte (optionnel)
Url URL d'accès à Dynacase Platform, dépend de la configuration de votre serveur Apache (optionnel)
Registration Si Dynacase Control est enregistré avec votre compte EEC, vous pouvez enregistrer ce contexte avec votre compte EEC en cochant cette case.
Repositories Cocher la liste des dépôts de paquets que vous souhaitez utiliser pour installer ce contexte. Par défaut les dépôts de paquets configurés (dans l'interface Control > Setup > Repositories) avec “Default” seront pré-sélectionnés.

Lorsque le contexte est créé, celui-ci apparaît dans la rubrique Context de l'interface de Dynacase Control.

Vous pouvez vous reporter à l'annexe Vérification de l'intégrité des éléments téléchargés pour plus d'explication sur le contrôle de l'intégrité des données téléchargées.

4.2 Sélection des modules

En sélectionnant le contexte créé, son détail et la liste des modules disponibles sont affichés.

détail d'un contexte

Figure 8. détail d'un contexte

Vous pouvez maintenant sélectionner les modules que vous souhaitez installer parmi ceux proposés à la rubrique Available.

Les modules pré-sélectionnés (comme Dynacase Core) sont obligatoires.

En cliquant sur le bouton [Install Selection] , le processus d'installation commence. Dynacase Control vérifie les dépendances des paquets sélectionnés, et propose la liste des paquets qui seront installés.

contrôle des dépendances

Figure 9. contrôle des dépendances

Si vous êtes d'accord avec la liste proposée, vous pouvez valider cette liste et poursuivre l'installation.

4.3 Processus d'installation

Chacun des modules sélectionnés pour l'installation va suivre ce même processus d'installation :

process d'installation

Figure 10. process d'installation

Le panneau principal détaille l'exécution des processus de pré-installation, installation et post-installation.

La liste des modules à installer est présentée dans la liste “Module List”. Les modules installés avec succès sont marqués par une pastille verte.

Les téléchargements des modules sont lancés.

4.3.1 Licence

Si nécessaire, il vous est demandé d'accepter les contrats de licence affichés.

contrat de licence

Figure 11. contrat de licence

4.3.2 Paramètres

Les modules peuvent nécessiter des paramètres pour leur installation ou leur fonctionnement.

paramètres du module

Figure 12. paramètres du module

L'installation de Dynacase Core (exemple ci-dessus) requiert les paramètres suivants :

Nom du paramètre Description
client name information affichée sur la page d'authentification Dynacase
database postgresql service name le nom du service postgresql pour accéder à la base dédiée pour ce contexte
authenticate default mode mode d'authentification par défaut : “html” pour l'authentification par une page HTML et “basic” pour une authentification par le mécanisme HTTP Basic
output representation of date in database le format de représentation des dates en base de données
temporary folder chemin du répertoire où seront stockés les fichiers temporaires
admin password mot de passe du compte super administrateur admin
enable compression compression des données avec le module Apache mod_deflate

4.3.3 Fin de l'installation

À la fin de l'installation, les modules installés sont présentés dans la section “Installed”.

fin de l'installation

Figure 13. fin de l'installation

Chapitre 5 Gestion des contextes

5.1 Description d'un contexte

Lors de la sélection d'un contexte, les sections suivantes sont présentées :

Informations
Les caractéristiques du contexte
Installed
la liste des modules installés
Available
la liste des modules disponibles

5.1.1 Informations

La section “Informations” présente les informations et la configuration générale du contexte.

Champ Description
Root le chemin d'accès au répertoire dans lequel est installé le contexte.
Description description du contexte.
Url URL d'accès
Registration vous pouvez consulter les informations enregistrées. Si Dynacase Control est déclaré avec votre compte EEC, vous pouvez demander l'enregistrement de ce contexte.
Repositories liste les dépôts utilisée pour installer ou mettre à jour les modules

de plus, les actions suivates sont disponibles au travers des boutons :

Modify Context
Permet de modifier la description du contexte et la liste des dépôts utilisés par ce dernier.
Import Module
Permet d'installer un module format .webinst sans passer par les dépôts de paquets (voir les annexes pour la description des fichiers webinst). Lors de l'utilisation de ce menu, il vous sera demandé d'uploader le fichier webinst, puis de choisir entre les scénarios d'installation et de mise à jour du module.
Cette action ne devrait pas être utilisée en dehors des phases de développement.
Create Archive
Permet d'archiver le contexte (voir la gestion des archives)
Delete context
Permet de supprimer le contexte et ses éléments associés (base de donnée, vault, etc.)

5.1.2 Installed

Cette section présente la liste des modules qui sont installés dans le contexte. Lorsqu'un module a une mise-à-jour de disponible sur les dépôts de paquets, une icone apparaît en début de ligne d'un module et la nouvelle version disponible est présentée dans la colonne Available Version. Pour mettre à jour le module, il faut alors cocher la ligne du module et cliquer sur le bouton [Upgrade Selection].

5.1.3 Available

La section “Available” présente la liste des modules disponibles sur les dépôts de paquets. Vous pouvez cocher les modules que vous souhaitez installer dans le contexte, et lancer l'installation en cliquant sur le bouton [Install Selection].

5.2 Archivage et restauration de contexte

Une archive de contexte contient tous les éléments d'un contexte (base de donnée, fichiers, etc.) Ces archives peuvent permettre la restauration d'un contexte sur une autre machine.

Attention : Cette fonctionnalité ne doit pas se substituer à une sauvegarde réguière de vos données. c'est une commodité de développement (voir Les procédures d'exploitation).

5.2.1 Archivage

Lors de l'utilisation du bouton [archivage], un assistant s'ouvre pour vous permettre de créer une archive.

Archivage

Figure 14. Archivage

Il vous demande les éléments suivants :

Champ Description
Name Nom de l'archive
Description Description de l'archive
Exclude Vault Si cette case est cochée, l'archive générée ne contiendra pas les fichiers du vault

Le fichier généré sera une archive avec l'extension .fcz et stocké dans le sous-répertoire archived-contexts de dynacase-control. Cette archive contiendra :

5.2.2 Restauration

Les archives .fcz présentes dans le sous-répertoire archived-contexts de dynacase-control sont présentés dans la section "Archives" de l'interface de dynacase-control, sous la liste "Context".

Pour restaurer une archive il faut cliquer sur le bouton [Create Context] et remplir les informations demandées :

Champ Description
Root Le chemin d'accès du répertoire dans lequel les fichiers du contexte seront restaurés.
Core Database Service Le nom du service PostgreSQL dans lequel sera restauré le dump de la base de données.
Vault Root Le chemin d'accès du répertoire dans lequel les fichiers du vault seront restaurés.

Notes :

5.3 Suppression d'un contexte

Un contexte peut être supprimé via Informations > Delete context. Une demande de confirmation est alors affichée afin de confirmer ou non l'exécution de l'opération.

La suppression d'un contexte comporte deux phases :

La suppression "physique" d'un contexte supprime dans l'ordre les éléments suivants :

Si la suppression d'un de ces éléments retourne une erreur, l'opération de suppression se poursuit avec les éléments suivants, et à la fin de l'opération un récapitulatif des erreurs rencontrés est affiché.

À la fin de l'opération de suppression "physique" (qu'il y ait eu des erreurs ou non), le contexte est alors supprimé "logiquement" de la liste des contextes gérés par dynacase-control.

5.4 Enregistrement de contexte

La procédure d'enregistrement d'un contexte peut vous être demandée dans le cadre du support EEC.

Informations d'enregistrement du contexte

Figure 15. Informations d'enregistrement du contexte

Les informations collectées sont :

Chapitre 6 Procédures d'exploitation

6.1 Sauvegarde et restauration

La sauvegarde se différencie de l'archivage par le fait que la sauvegarde est une opération effectuée par le service d'exploitation système, et qu'il peut s'intégrer plus facilement dans les procédures mises en place par le service informatique.

Ce chapitre va donc présenter quels sont les éléments de Dynacase à sauvegarder sur un serveur afin de pouvoir remonter ces éléments en cas de perte totale de ce serveur.

6.1.1 Éléments à sauvegarder

Les éléments à sauvegarder sont les suivants :

6.1.2 Sauvegarde

La sauvegarde se déroulera selon les étapes suivantes:

  1. Sauvegarde de dynacase-control
  2. Mise en mode maintenance du contexte
  3. Sauvegarde de la base de données
  4. Sauvegarde du répertoire applicatif du contexte
  5. Sauvegarde du vault
  6. Sortie du mode maintenance du contexte

6.1.2.1 Sauvegarde de dynacase-control

La sauvegarde de dynacase-control permet de sauvegarder les "méta-données" du contexte (la liste des modules installés dans ce contexte avec leur version).

tar zcf /backup/dynacase-control.tar.gz /var/www/dynacase-control

Si vous avez des archives de contextes et que vous ne souhaitez pas les sauvegarder ou bien vous souhaitez réduire le temps ou la taille de la sauvegarde de dynacase-control, vous pouvez alors exclure ces archives en ne sauvegardant pas les fichiers contenus dans le sous-répertoire archived-contexts :

tar zcf /backup/dynacase-control.tar.gz --exclude archived-contexts/\* /var/www/dynacase-control

Note :

6.1.2.2 Mise en mode maintenance du contexte

Afin d'assurer l'intégrité des données, l'accès au contexte sera bloqué afin que les utilisateurs ne puissent pas modifier les données durant le déroulement de la sauvegarde.

Pour cela il faudra lancer le script ./wstop dans le contexte Dynacase qu'on sauvegarde :

/var/www/dynacase-control/wiff context <nomDuContexte> exec ./wstop

6.1.2.3 Sauvegarde de la base de données

La sauvegarde de la base de données s'effectue par un dump complet à l'aide de la commande pg_dump :

PGSERVICE=dynacase pg_dump | gzip > /backup/dynacase.pg_dump.gz

6.1.2.4 Sauvegarde du répertoire applicatif du contexte

Le répertoire du contexte contient des fichiers et des répertoires qui peuvent être sauvegardés de manière standard avec des outils comme tar :

tar zcf /backup/dynacase.context.tar.gz /var/www/dynacase

Afin de réduire la durée de sauvegarde vous pouvez exclure les éléments générés dynamiquement.

Ces éléments sont :

Vous pouvez aussi effectuer une sauvegarde incrémentale des fichiers du répertoire du contexte.

6.1.2.5 Sauvegarde du vault

Si vous avez conservé le vault dans son emplacement par défaut (par défaut dans le sous-répertoire vaultfs à la racine du contexte), alors le vault sera inclut dans la sauvegarde du répertoire applicatif du contexte ci-dessus.

Si vous avez déplacé le vault dans un répertoire distinct (ou que vous l'avez exclu de la sauvegarde du contexte ci-dessus), alors il vous faudra le sauvegarder de manière distincte.

Le vault, comme le répertoire du contexte, peut être sauvegardé avec des outils standards comme tar :

tar zcf /backup/dynacase.vault.tar.gz /data/vault

Une sauvegarde incrémentale est aussi possible pour ce répertoire.

6.1.2.6 Sortie du mode maintenance du contexte

Une fois les éléments sauvegardés, l'accès au contexte peut-être réouvert à l'aide du script wstart -m :

/var/www/dynacase-control/wiff wstart <nomDuContexte>

6.1.3 Restauration

L'ordre de restauration des éléments s'effectue de manière inverse à leur sauvegarde :

  1. Restauration du vault
  2. Restauration du répertoire applicatif du contexte
  3. Restauration de la base de données
  4. Sortie du mode maintenance du contexte
  5. Restauration de dynacase-control

6.1.3.1 Restauration du vault

Restauration des fichiers précédemment archivés :

tar -C / -zxf /backup/dynacase.vault.tar.gz

6.1.3.2 Restauration du répertoire applicatif du contexte

Restauration des fichiers du contexte :

tar -C / -zxf /backup/dynacase.context.tar.gz

6.1.3.3 Restauration de la base de données

Re-créer la base de données avec les paramètres PostgreSQL adéquats :

ALTER DATABASE dynacase SET standard_conforming_strings = off;
ALTER DATABASE dynacase SET DateStyle = 'ISO, DMY';

Restaurer le dump de la base :

gzip -dc /backup/dynacase.pg_dump.gz | PGSERVICE=dynacase psql

Note : Pour accélerer le chargement des données, vous pouvez consulter la section Bulk data loading pour un exemple de paramétrage de Postgresql.

6.1.3.4 Ré-enregistrement des crontabs

Réenregistrer la crontab de Dynacase :

/var/www/dynacase-control/wiff context <nomDuContexte> exec ./wsh.php --api=crontab --cmd=register --file=FREEDOM/freedom.cron

Si votre application possède ses propres crontab, il faudra alors réenregistrer ses crontabs :

/var/www/dynacase-control/wiff context <nomDuContexte> exec ./wsh.php --api=crontab --cmd=register --file=MON_APP/ma_crontab.cron

6.1.3.5 Sortie du mode maintenance du contexte

Comme la sauvegarde a été effectué en mode maintenance (wstop), il faut à la fin réouvrir l'accès avec ./wstart -m :

/var/www/dynacase-control/wiff context <nomDuContexte> exec ./wstart -m

6.1.3.6 Restauration de dynacase-control

tar -C / -zxf /backup/dynacase-control.tar.gz

6.1.4 Ajustement des références à la machine Nouveau

Si la restauration s'effectue sur une machine différente de celle sauvegardée, c'est-à-dire que les chemins d'accès aux fichiers ou que le service de base de données sont différents, il faudra alors modifier les éléments restaurés pour refléter ces changements.

Les éléments qui référencent des chemins ou service de base de données dépendant de la machine sont décrits ci-dessous.

6.1.4.1 Chemin racine du contexte

Le chemin d'accès à la racine du contexte est référencé dans les fichiers suivants :

supervisor/.htaccess
Modifier la directive AuthUserFile "/path/to/context/supervisor/.htpasswd" avec la nouvelle racine du contexte.
.htaccess
Modifier la directive php_value session.save_path "/path/to/context/var/session" avec la nouvelle racine du contexte.
supervisor/.htaccess
Modifier la directive AuthUserFile "/path/to/context/supervisor/.htpasswd" avec la nouvelle racine du contexte.
.htaccess
Modifier la directive php_value session.save_path "/path/to/context/var/session" avec la nouvelle racine du contexte.
WHAT/Lib.Prefix.php
Modifier la variable $pubdir = '/path/to/context'; avec la nouvelle racine du contexte.
Paramv CORE_PUBDIR

Modifier la valeur du paramv CORE_PUBDIR avec la nouvelle racine du contexte.

UPDATE paramv SET val ='/path/to/context' WHERE name = 'CORE_PUBDIR'

6.1.4.2 Chemin d'accès au vault

Le chemin d'accès à la racine du vault est référencé en base de données :

Table vaultdiskfsstorage, colonne r_path

Modifier le chemin r_path de la table vaultdiskfsstorage avec le nouvel emplacement du vault.

UPDATE vaultdiskfsstorage SET r_path = '/new/path/to/vaultfs' WHERE r_path = '/old/path/to/vaultfs';

6.1.4.3 Service de la base de donnée

Le nom du service de la base de donnée est référencée dans les fichiers suivants :

config/dbaccess.php
Modifier les variables $pgservice_core = 'pgServiceName'; et $pgservice_freedom = 'pgServiceName'; avec le nouveau nom du service de base de données.
config/dbaccess.php
Modifier les variables $pgservice_core = 'pgServiceName'; et $pgservice_freedom = 'pgServiceName'; avec le nouveau nom du service de base de données.

Le nom du service de base de données est aussi référencée dans la base de données elle même :

Paramv CORE_DB, FREEDOM_DB et WEBDAV_DB

Modifier la valeur des paramv CORE_DB, FREEDOM_DB et WEBDAV_DB avec le nouveau nom du service de base de données.

UPDATE paramv SET val = 'service=''' || 'newPgServiceName' || '''' WHERE name IN ('CORE_DB', 'FREEDOM_DB', 'WEBDAV_DB');  

6.1.4.4 Nom d'hôte et URL

Le nom d'hôte de la machine peut être référencé dans la base de données :

Paramv CORE_URLINDEX

Si ce paramètre est renseigné, modifier la valeur avec la nouvelle URL.

UPDATE paramv SET val = 'http://newURL/xxx' WHERE name = 'CORE_URLINDEX';
Paramv CORE_OPENURL

Si ce paramètre est renseigné, modifier la valeur avec la nouvelle URL.

UPDATE paramv SET val = 'http://newOpenURL/xxx' WHERE name = 'CORE_OPENURL';
Paramv TE_INDEXURL

Si ce paramètre est renseigné, modifier la valeur avec la nouvelle URL.

UPDATE paramv SET val = 'http://newTeCallbackURL/xxx' WHERE name = 'TE_INDEXURL';

6.2 Check base documentaire

Une liste de vérification de problèmes pouvant se produire sur une installation Dynacase est disponible dans le sous-répertoire supervisor/ du contexte et accessible par l'URL : http://<nomDuServeur>/supervisor/, rubrique DB consistency.

L'interface présente alors une liste de vérification avec un statut :

Liste des vérifications :

main connection db
Vérifie que Postgresql est bien lancé.
dateStyle
Indique le dateStyle utilisé par la base courante.
unreferenced user in group

Vérifie les inconsistances de la table groups vis à vis des utilisateurs. La table groups contient les liens entre les utilisateurs et les groupes, dans certains cas des utilisateurs supprimés peuvent persister dans cette table.

Solution : Supprimer les références erronées

DELETE FROM groups WHERE iduser NOT IN (SELECT id FROM users);
user as group

Par exemple user as group1 users detected as group 25. Peut arriver par un import SQL qui écraserait les utilisateurs. Peut aussi provenir de groupes supprimés qui n'existe plus dans la table users.

Solution : Soit mettre les utilisateurs comme groupe (mettre l'attribut isgroup à Y dans la table users) ou supprimer la référence dans la table groups, puis rafraîchir la table users :

dynacase=# BEGIN;
dynacase=# DELETE FROM groups WHERE idgroup NOT IN (SELECT id FROM users WHERE isgroup='Y');
DELETE 110
dynacase=# COMMIT;
COMMIT

puis :

/var/www/dynacase-control/wiff context <nomDuContexte> exec ./wsh --api=freedom_groups
unreference actions

peut arriver lors de la suppression d'applications.

Solution : Appliquer le fichier SQL /var/www/dynacase/WHAT/what_clean.sql sur la base principale.

unreference parameters

peut arriver lors de la suppression d'applications

Solution : Appliquer le fichier SQL /var/www/dynacase/WHAT/what_clean.sql sur la base principale.

unreference acl

peut arriver lors de la suppression d'applications

Solution : Appliquer le fichier SQL /var/www/dynacase/WHAT/what_clean.sql sur la base principale.

unreference permission

peut arriver lors de la suppression d'applications

Solution : Appliquer le fichier SQL /var/www/dynacase/WHAT/what_clean.sql sur la base principale.

double doc id

Plusieurs documents ont le même identifiant numérique. Peut arriver lors d'importation avec des identificateurs fixe ou lors d'importation avec des familles inexistantes.

Exemple :

1 double id detected  
Array  
(  
    [1178] => 2  
)

Solution : Supprimer l'un des doublons (ou les deux)

Obtenir la liste des identifiants posant problème :

dynacase=# SELECT id,COUNT(*) FROM doc GROUP BY id HAVING COUNT(*) > 1;
  id  | COUNT
------+-------
 1178 |     2

Obtenir le détail des enregistrements posant problème :

dynacase=# SELECT id, title, fromid, locked FROM doc WHERE id = 1178;
  id  |      title      | fromid | locked
------+-----------------+--------+--------
 1178 | Fiche de suivi  |      0 |      0
 1178 | Dossier EI auto |   1169 |      0

Suppression de l'enregistrement incorrect :

dynacase=# DELETE FROM doc WHERE id = 1178 AND fromid = 0;
DELETE 1
double doc name

plusieurs documents ont le même identifiant logique (propriété name)

Solution : Supprimer l'un des doublons (ou les deux)

family inheritance

L'héritage déclaré par la famille ne correspond pas à celle défini dans postgresql. Peut arriver si on change l'héritage d'une famille ou si une famille est créée avant sa famille père.

Exemple :

Family [44232]: fromid = 0, pg inherit=  
Family [44237]: fromid = 0, pg inherit=  
Family [44241]: fromid = 0, pg inherit=  
…  

Solution : restaurer l'héritage

Identifier les enregistrement posant problème :

dynacase=# SELECT id, title, fromid, locked, doctype FROM doc WHERE fromid = 0 AND doctype IS NULL;
  id   | title | fromid | locked | doctype
-------+-------+--------+--------+---------
 44232 |       |      0 |      0 |
 44237 |       |      0 |      0 |
 44241 |       |      0 |      0 |

Supprimer les enregistrements :

dynacase=# DELETE FROM doc WHERE fromid = 0 AND doctype IS NULL;
DELETE 14

Ou supprimer la table correspondante et lancer :

# /var/www/dynacase-control/wiff context <nomDuContexte> exec ./wsh --api=fdl_adoc --docid=<N°famille>
multiple alive revision

Plusieurs révisions sont vivantes pour un même document. Cela peut arriver sur d'ancienne version (< 2.14) lorsque deux tentatives de révisions simultanées sont créés ou si par programmation on force des restauration.

Exemple :

2 multiple alive  
Array (  
    [73780] => jean-raymond.durand@example.net  
    [85480] => Restauration groupe test  
)

Solution : utiliser l'API fixMultipleAliveRevision

Obtenir le détail des enregistrements posant problème :

dynacase=# SELECT id, title FROM docread WHERE id IN (SELECT m AS id FROM (SELECT MIN(id) AS m, initid, COUNT(initid) AS c FROM docread WHERE locked != -1 AND doctype != 'T' GROUP BY docread.initid) AS z WHERE z.c > 1);
  id   |                        title
-------+-----------------------------------------------------
 73780 | jean-raymond.durand@example.net
 85480 | Restauration groupe test
(2 lignes)

API fixMultipleAliveRevision :

# /var/www/dynacase-control/wiff context <nomDuContexte> exec ./wsh.php --api=fixMultipleAliveRevision
Fixing mutiple alive revision for (initid='35198', id='85480')
Fixing mutiple alive revision for (initid='56405', id='73780')
attribute type
Vérifie la cohérence entre le type Dynacase d'un attribut et le type SQL de la colonne associée à cet attribut.
attribute orphan

Vérifie la cohérence entre la liste des attributs logiques Dynacase déclarés pour une famille et les colonnes physiques de la table docXXX pour cette famille.

Cette vérification détecte donc les colonnes de la table docXXX d'une famille qui ne correspondent pas, ou plus, à un attribut de cette famille (table docattr).

Solution : appliquer les requêtes SQL données en résultat pour supprimer les colonnes physiques des tables docXXX des familles ayant cette incohérence.

cleanContext cron job execution

Vérifie que la crontab de Dynacase est correctement exécutée en vérifiant qu'il n'existe pas de documents temporaires plus vieux de 1 jour. La présence de documents temporaires plus vieux de 1 jour peut indiquer que la crontab n'est soit pas bien enregistrée, soit que le mécanisme cron général est défaillant.

Solution : vérifier les points indiquer dans le résultat de la vérification.

missing documents in docread

Vérifie s'il y a des documents dans la table doc qui ne sont pas présents dans la table de "cache" docread.

Solution : mettre à jour les documents pour qu'ils soient insérés dans la table de "cache" docread.

dynacase=# UPDATE doc SET id = id WHERE id < 1e9 AND NOT EXISTS (SELECT 1 FROM docread WHERE docread.id = doc.id);
spurious documents in docread

Vérifie s'il y a des documents dans la table de "cache" docread qui n'existent plus dans la table doc.

Solution : supprimer les documents qui n'existent plus dans la table de "cache" docread.

dynacase=# DELETE FROM docread WHERE id < 1e9 AND NOT EXISTS (SELECT 1 FROM doc WHERE docread.id = doc.id);
missing family name

Vérifie s'il existe des familles dont le nom logique n'existe pas dans la table docfam ou qui est mal référencé dans les tables docname et docread.

Exemple :

• 1 unnamed family in docfam:
{17087}

Solution :

Mettre à jour le nom de la famille :

dynacase=# UPDATE docfam SET name = 'NOM_DE_LA_FAMILLE' WHERE id = <id-famille-sans-nom>;

Puis, lancer un cleanContext :

$ ./wsh.php --api=cleanContext

Si dynacase-workspace est installé, les vérifications additionnelles suivantes sont faites :

connection db webdav
Vérifie la disponibilité de la table webdav (si le module WORKSPACE est installé)

Si dynacase-networkuser est installé, les vérifications additionnelles suivantes sont faites :

connection USER LDAP
Vérifie le lien avec le LDAP (si le module NETWORKUSER est installé)

6.3 Miroir local des paquets

Si la machine sur laquelle est installé Dynacase n'a pas accès à Internet, vous pouvez créer un miroir local HTTP/FTP du dépôt de paquets en ligne.

$ mkdir /var/www/mirror
$ cd /var/www/mirror
$ wget --mirror --level=1 --no-parent "http://dynacase.anakeen.com/control/?F=0"                                    # dynacase-control
$ wget --mirror --level=1 --no-parent --http-user=${EEC_USERNAME} --http-password=${EEC_PASSWD} "${EEC_REPO_URL}/?F=0" # Votre dépôt EEC Dynacase
$ wget --mirror --level=1 --no-parent "http://ftp.dynacase.org/third-party/?F=0"                                      # third-party elements

Les paquets du dépôt EEC font référence à des éléments additionnels téléchargés sur http://ftp.dynacase.org (dépôt third-party elements). Pour pouvoir être installés depuis le miroir il faut donc modifier ces paquets pour y inscrire la nouvelle racine pour le téléchargement de ces éléments additionnels.

Pour cela, dynacase-control fournit l'outils sedwebinst.php dans le sous-répertoire utils du répertoire d'installation de dynacase-control.

Cet outils prend 3 arguments qui sont :

  1. l'URL à modifier ;
  2. la nouvelle URL d'accès aux éléments de third-party sur votre miroir ;
  3. et enfin le répertoire d'accès au dépôt des paquets de Dynacase qui contient les fichiers webinst.
$ php /var/www/dynacase-control/utils/sedwebinst.php \
    http://ftp.dynacase.org/third-party \
    http://localhost/mirror/ftp.dynacase.org/third-party \
    /var/www/mirror/eec.anakeen.com/$EEC_USERNAME/

Configurer ensuite votre serveur Web pour servir ce répertoire mirror, et configurer un dépôt pointant sur ce répertoire (voir la gestion des dépôts).

Ajuster ensuite les paramètres wiff-update-host et wiff-update-path de l'installeur Dynacase-control pour chercher les mises-à-jour de l'installeur sur ce nouveau dépôt (voir la configuration des mises-à-jour de Dynacase Control).

6.4 Exploitation des logs

Les logs de Dynacase sont gérés au moyen de syslog.

Dynacase logue par défaut tous ses messages avec la facilité LOG_LOCAL6, à l'exception des erreurs d'authentification, qui sont journalisées avec la facilité LOG_AUTH (à moins que vous ayiez changé cette valeur au moyen du paramètre applicatif AUTH_LOGFACILITY).

Le formatage des logs suit la règle suivante: [<code>] Dynacase <application> <fonction> <message>, avec :

code
Le code de log, correspondant à la priorité :
application
l'application, si définie, sous la forme :application
fonction
la fonction, si définie, sous la forme :fonction

Après chaque exécution de procédures automatiques (cron), des logs sont enregistrés dans le syslog. Ils contiennent le titre et l'id du processus exécuté, ainsi que le statut de l'exécution (0 en cas de succès) et le temps d'exécution de la procédure:

Aug 30 10:18:15 pc-de-test [I] Dynacase:CORE:WELCOME: []  Default Master [1] - : Process FDL IMPCARD [3355] executed in 1.005 seconds

Le même système est en place à chaque exécution de timer (minuteur).

L'api dynacaseDbCleaner produit, elle aussi, des logs. Ces logs sont de la forme:

Aug 27 09:25:55 ubuntu1004server dynacaseDbCleaner(CORE_CLIENT): DELETE 0
Aug 27 09:25:55 ubuntu1004server dynacaseDbCleaner(CORE_CLIENT): Temps : 3,868 ms

Chaque commande sql lancée par le dynacasDbCleaner est enregistrée. Le nom du client (paramétré à la configuration) est affiché à la place de CORE_CLIENT.

6.5 Suppression dépôts de paquets freedom-ecm.org

Les premières versions de Freedom et Dynacase étaient hébergés sur des serveurs du domaine freedom-ecm.org.

Suite au changement de nom, ce domaine n'est plus valide et vous ne devez plus utiliser de dépôts de paquets qui font référence à ce domaine.

Pour supprimer les références à ces anciens dépôts de paquets, vous pouvez soit les supprimer manuellement, soit utiliser le script utils/remove_freedom_ecm_repos.php fourni avec les dernières versions de dynacase-control pour supprimer automatiquement ces dépôts.

Le script fonctionne en mode notification (pour vous informer de la présence de dépôts invalides) ou en mode suppression (pour supprimer les dépôts invalides rencontrés).

Mode notification (mode par défaut) :

# cd /var/www/dynacase-control
# php utils/remove_freedom_ecm_repos.php
* Inspecting repository list...
Found invalid repository 'invalid1' with host 'ftp.freedom-ecm.org'.
Found invalid repository 'invalid2' with host 'ftp.freedom-ecm.org'.
Re-run with '--remove' argument to remove the invalid repositories.

Mode suppression (option --remove) :

# cd /var/www/dynacase-control
# php utils/remove_freedom_ecm_repos.php --remove
* Inspecting repository list...
Found invalid repository 'invalid1' with host 'ftp.freedom-ecm.org'.
Found invalid repository 'invalid2' with host 'ftp.freedom-ecm.org'.
* Deactivating repository 'invalid1' on context 'c1'.
Done.
* Deactivating repository 'invalid1' on context 'c2'.
Done.
* Deactivating repository 'invalid2' on context 'c2'.
Done.
* Deleting repository 'invalid1'.
Done.
* Deleting repository 'invalid2'.
Done.

6.6 Répertoires de fichiers de cache et de fichiers temporaires

Les répertoires de cache et de fichiers temporaires sont localisés dans le sous-répertoire var du contexte Dynacase.

Le sous-répertoire var contient les répertoires suivants :

cache/file/
cache de fichiers générés par les applications Dynacase ;
cache/image/
cache d'images redimensionnées dynamiquement par Dynacase ;
session/
fichiers de session PHP ;
tmp/
fichiers temporaires (valeur par défaut ./var/tmp du paramètre applicatif CORE CORE_TMPDIR et FREEDOM_UPLOADDIR) ;
upload/
répertoire de stockage pour la fonction d'import d'archives.

Chapitre 7 Tuning PostgreSQL

Dans le cadre de son utilisation avec Dynacase, une couche d’abstraction logicielle Dynacase sur PostgreSQL permet d’optimiser son utilisation. Les éventuels tuning de la base PostgreSQL dépendent entièrement du modèle documentaire mis en œuvre par Dynacase. Ils sont réalisés ou préconisés si nécessaire lors de la mise en œuvre de la solution par un expert Anakeen.

7.1 Configuration de PostgreSQL

La plupart des distributions livrent PostgreSQL avec une configuration basique, passe-partout, qui n'est pas forcement adaptée au volume et au nombre de transactions que peut générer Dynacase. Voici quelques éléments de configuration pour une machine type avec 2 Go à 3 Go de RAM.

7.1.1 shared_buffers

Le paramètre shared_buffers permet de spécifier la taille de la mémoire partagée allouée par Postgresql. Il est à noter que ce paramètre PostgreSQL dépend d'un paramètre du kernel qui indique la valeur maximale de mémoire partagée disponible pour les processus. Il faudra donc au préalable augmenter la valeur de ce paramètre au niveau du noyau, pour ensuite augmenter la valeur dans PostgreSQL.
Sous Linux, la taille de la mémoire partagée maximale autorisée est définie par le paramètre sysctl kernel.shmmax :

# sysctl kernel.shmmax kernel.shmmax = 33554432

On voit dans ce cas que la valeur est de 32 Mo Sur une machine dédiée à PostgreSQL avec 2 à 3 Go de RAM on alloue entre 1 et 2 Go de mémoire partagée utilisable par les process :

 # sysctl -w kernel.shmmax=2147483648 kernel.shmmax = 2147483648

Pour rendre ce paramètre persistant au redémarrage, on enregistre celui-ci dans le fichier /etc/sysctl.conf.

Une fois le shmmax configuré sur le kernel, on définit le paramètres PostgreSQL shared_buffers.

# vi /var/lib/pgsql/data/postgresql.conf
[]
shared_buffers = 1024MB
[]

La prise en compte de ce paramètre est effective après re-démarrage de PostgreSQL :

# /etc/rc.d/init.d/postgresql restart

Si Postgresql ne redémarre pas, vérifier que la valeur de shared_buffers est bien inférieure à la valeur de kernel.shmmax.

7.1.2 effective_cache_size

Le paramètre effective_cache_size indique à PostgreSQL la mémoire restante une fois que PostgreSQL et tous les autres process du serveur tournent en fonctionnement normal. Cet espace "libre" est utilisé par le noyau pour gérer ses buffers et son cache. Cet espace est visualisable sous Linux avec la commande free sous la forme des valeurs de buffers et cached :

# free
             total       used       free    shared    buffers     cached
Mem:       3095688    1932116    1163572         0      62524    1433776
-/+ buffers/cache:     435816    2659872
Swap:      1044208      89816     954392

Dans le cas ci-dessus, on peut donc indiquer à PostgreSQL une valeur de effective_cache_size de 1400 Mo :

# vi /var/lib/pgsql/data/postgresql.conf
[]
effective_cache_size = 1400MB
[]

7.1.3 work_mem

Le paramètre work_mem spécifie la quantité de mémoire que peut utiliser un process PostgreSQL pour effectuer des tris. Une valeur plus grande lui permettra de pouvoir manipuler plus de données en mémoire vive (plutôt que d'avoir recours à des fichiers temporaires qui sont plus lents).
Ce paramètre doit être calibré en fonction du nombre maximum de connexions concurrentes déclaré par le paramètre max_connections. La mémoire allouée pour ces opérations étant alors égale à max_connections * work_mem.

# vi /var/lib/pgsql/data/postgresql.conf
[]
max_connections = 64
[]
work_mem = 16Mb
[]

Dans l'exemple ci-dessus, l'utilisation mémoire pourra monter à 64 * 16 Mo = 1 Go.

7.1.4 maintenance_work_mem

Le paramètre maintenance_work_mem spécifie la quantité de mémoire que peuvent utiliser les commandes/process PostgreSQL de VACUUM, création d'index et altération de table. Une valeur plus grande lui permettra de pouvoir manipuler plus de données en mémoire vive, et accélèrera le temps de traitement sur les VACUUM (freedom_clean) par exemple.

vi /var/lib/pgsql/data/postgresql.conf
[]
maintenance_work_mem = 128Mb
[]

7.1.5 WAL : Write Ahead Log

Le mécanisme de WAL (Write Ahead Log) est le mécanisme utilisé par Postgresql pour gérer les modifications des données de la base et assurer l'intégrité de la base de données en cas de crash du serveur.

Lorsqu'une donnée est modifiée, l'opération est d'abord enregistrée dans un fichier WAL sur le disque. Ensuite, de manière asynchrone, les opérations contenues dans les fichiers WAL sont écrites de manière définitive sur la base de données.

Suite à un crash, au redémarrage, le serveur Postgresql rejouera alors les opérations des fichiers WAL qui ne sont pas encore inscrites en base pour mettre à niveau la base de données.

7.1.5.1 wal_buffers

Le paramètre wal_buffers spécifie la taille d'un fichier de journal d'écriture "WAL" (Write-Ahead-Log).

Par défaut, la taille d'un WAL est de 64KB. Une petite valeur entraînera des écritures de petits fichiers WAL plus fréquentes, et une grande valeur entraînera des écritures de fichiers WAL de plus gros volume mais avec une fréquence moindre.

Il est admis qu'une valeur de 16MB est une bonne valeur pour un serveur de production :

wal_buffers = 16MB

7.1.6 checkpoint_segments, checkpoint_timeout et checkpoint_completion_target

Le paramètre checkpoint_segments spécifie le nombre de fichiers WAL qui sont conservés, en rotation, sur le disque.

Une grand nombre de checkpoint_segments réduit le nombre d'écritures sur la base de données, mais en cas de crash du serveur, cela fera un plus gros volume de données à rejouer lors du redémarrage du serveur pour qu'il remette sa base à niveau avec les derniers fichiers checkpoints.

Le paramètre checkpoint_timeout spécifie le temps maximal qu'un fichier WAL peut rester sur le disque avant d'être inscrit de manière définitive dans la base de données.

Le paramètre checkpoint_completion_target permet quand à lui de spécifier la périodicité d'écriture des fichiers WAL sur la base de données. Il permet de répartir les écritures des fichiers WAL au cours du temps et d'éviter d'avoir des pics d'écritures lorsque les fichiers WAL atteignent leur limite de temps au même moment.

Une estimation du nombre de fichiers WAL stockés sur le disque est donné par la formule suivante :

number of WAL files = ( 2 + checkpoint_completion_target ) * checkpoint_segments + 1

Les valeurs suivantes sont admises comme étant un bon compromis entre la réduction du nombre d'écritures sur la base et le temps de reprise en cas de crash.

checkpoint_segments = 32
checkpoint_timeout = 5min
checkpoint_completion_target = 0.9

Le volume occupé par les fichiers WAL sera alors approximativement de 1.5GB.

7.1.7 Bulk data loading

Dans le cas de la restauration d'une base de donnée, ou du chargement massif de données, ces paramètres de WAL peuvent être augmentés afin de réduire le nombre d'opérations d'écritures sur la base de donnée, moyennant une utilisation d'un plus grand volume par les fichiers WAL.

checkpoint_segments = 300
checkpoint_timeout = 3000
autovacuum = off

Attention : Ces paramètres ne doivent pas être utilisés en production, mais seulement temporairement pour la durée de l'opération de chargement/restauration des données.

7.1.8 Conclusion

Ces paramètres permettent donc de donner une plus grande liberté de mouvement à PostgreSQL comparés à ceux livrés par défaut. Les valeurs données ci-dessus sont des exemples qu'il faudra bien sûr adapter/moduler en fonction de la machine et de son utilisation dans le temps.

7.1.9 Liens utiles

Postgresql Tuning

7.1.10 Dépannage/troubleshoot

7.1.10.1 Voir les requêtes en cours d'exécution

Pour voir les requêtes en cours d'exécution, Postgresql dispose de la table pg_stat_activity :

postgres=# SELECT * FROM pg_stat_activity;
 datid  | datname  | procpid | usesysid | usename  | application_name | client_addr | client_port | backend_start                 | xact_start                    | query_start                   | waiting | current_query
--------+----------+---------+----------+----------+------------------+-------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+---------------------------------
 11874  | postgres | 40516   |    10    | postgres | psql90           |             | -1          | 2011-01-17 11:49:52.022024+01 | 2011-01-17 11:53:43.766623+01 | 2011-01-17 11:53:43.766623+01 | f       | SELECT * FROM pg_stat_activity;
 207531 | 3.0.16   | 40570   | 16391    | freedom  |                  | ::1         | 57914       | 2011-01-17 11:50:28.902947+01 |                               | 2011-01-17 11:51:30.213533+01 | f       | VACUUM FULL ANALYSE;
(2 ROWS)

Cette table présente le détail des requêtes en cours d'exécution :

current_query
La requête en cours d'exécution
procpid
le pid du process qui execute cette requête
backend_start
l'heure de reception de la requête
query_start
l'heure de début de traitement de la requête
waiting
le caractère « waiting » d'une requête si elle est bloqué ou en attente de libération d'une ressource par une autre requête.

La visualisation du champ current_query nécessite le paramètre track_activities = on (par défaut à on). Si ce paramètre n'était pas actif, vous pouvez le définir dans postgresql.conf et recharger la conf à chaud :

Modification de la configuration :

# vi /path/to/postgresql.conf
…
track_activities = on
…

rechargement de la configuration :

SELECT pg_reload_conf();
SHOW track_activities;
7.1.10.1.1 Journaliser les requêtes longues

Lorsque l'observation de longues requêtes par pg_stat_activity n'est pas possible (parce que le problème n'est pas reproductible ou observable à une heure précise de la journée par exemple), on peut indiquer à Postgresql de logger les requêtes qui mettent plus N secondes à s'exécuter. La durée est paramétrable via le paramètre log_min_duration_statement (par défaut '-1' : désactive le log). Vous pouvez soit le définir en global dans postgresql.conf, soit par base de données (via un ALTER DATABASE) :

Configuration globale commune à toutes les bases (ex. 5 minutes) :

vi /path/to/postgresql.conf
…
log_min_duration = 5min
…

rechargement de la configuration :

SELECT pg_reload_conf();

Paramétrage sur une base spécifique

ALTER DATABASE dynacase SET log_min_duration_statement = '5min';

Les logs apparaissent alors dans postgresql.log sous la forme :

2011-01-11 17:15:01 CET LOG: duration: 2.291 ms statement: SELECT * from paramv where type='G' or (type='A' and appid=1);

7.1.10.2 Connexion sécurisée (SSL)

Utilisation de la directive 'sslmode=require' dans pg_service.conf pour forcer la connexion du client par SSL :

[dynacase]
host=pg.example.net
port=5432
user=dynacase
password=secret
dbname=dynacase
sslmode=require

7.2 Performances avec PHP

7.2.1 Impact du mode SSL

L'utilisation du SSL entraîne une surcharge lors de l'établissement d'une connection TCP sur PostgreSQL.

Exemple de surcharge pour l'initiation d'une connexion par TCP sur un serveur PostgreSQL en écoute sur l'interface locale de la machine (127.0.0.1) :

.                           .--------------------------------.
                            | Temps pg_connect sur 127.0.0.1 |
,---------------------------+--------------------------------|
| sslmode=disable           | + 0  ms                        |
| sslmode=require (default) | + 15 ms                        |
'------------------------------------------------------------'
(Mesuré avec 1 x CPU Intel Core 2 Duo CPU T8300 @ 2.40GHz)

L'utilisation du SSL entraîne aussi une surcharge de traitement pour l'envoi du résultat au client. Cette surcharge de traitement est proportionnelle au volume de données à envoyer et donc à chiffrer.

Exemple de surcharge pour le transfert des N premiers éléments d'une table conmposée d'une colonne de type integer (requête SELECT * FROM foo LIMIT <N>) :

.             .------------------------.
              | Temps requête avec SSL |
,-------------+------------------------|
| LIMIT 10    | + 0,0551 ms            |
| LIMIT 100   | + 0,0729 ms            |
| LIMIT 1000  | + 0,401  ms            |
| LIMIT 10000 | + 6,863  ms            |
`--------------------------------------'
(Mesuré avec 1 x CPU Intel Core 2 Duo CPU T8300 @ 2.40GHz)

Conclusion :

Si le réseau entre le serveur Dynacase et la base de données est « sûr », et si le niveau de sécurité souhaité le permet, il peut être avantageux en terme de performance de désactiver le support SSL.

Chapitre 8 Tuning Apache2

8.1 MaxClients (et max_connections PostgreSQL)

La principale directive du mode MPM-Prefork de Apache est la directive MaxClients qui permet de configurer le nombre maximum de clients connectés et servis simultanément.

La valeur de ce paramètre dépend donc du nombre souhaité de clients servis en concurrent, mais aussi de la capacité du serveur : trop de processus Apache concurrents risquent d'entrainer une surcharge mémoire et forcer le système à utiliser son swap ce qui dégradera les temps de traitement.

L'utilisation mémoire depend de l'application qui est exécutée et doit donc être mesurée par l'exécution d'un scénario type par exemple.

Pour Journaliser l'utilisation mémoire de vos requêtes PHP vous pouvez insérer le log de la variable %{mod_php_memory_usage}n dans le LogFormat de votre fichier access_log.

Exemple :

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %{mod_php_memory_usage}n" combined

Important :

Référence :

8.2 KeepAlive

La directive keepAlive permet de réduire le nombre de connexions TCP initiés par les clients HTTP, et donc de réduire l'utilisation CPU de l'OS et du serveur Apache.

Le client pourra ainsi effectuer N requêtes (l'une à la suite de l'autre) sur cette même connexion TCP sans devoir faire N nouvelles connexions TCP pour chacune des requêtes.

Exemple :

KeepAlive On

Référence :

8.3 HostnameLookups et Logs

Outre le fait de servir des requêtes, le serveur Apache journalise des informations dans les fichiers access.log et error.log.

Lors de l'écriture d'entrées dans ces fichiers, le serveur Apache peut résoudre les adresses IP des clients connectés et inscrire leur nom DNS à la place de leur adresse IP.

Ces résolutions DNS prennent généralement du temps et il est donc recommandé de désactiver cette fonctionnalité :

HostnameLookups Off

Le fait que ces fichiers access.log et error.log soient stockés par défaut localement sur le serveur Web peut entrainer une surcharge sur la machine : un nombre important de requêtes entrainera un nombre important d'opérations d'écritures de messages dans ces fichiers.

Il peut donc être bénéfique de déplacer ces fichiers de logs sur des disques distinct afin de minimiser les E/S sur le disque des fichiers servis par le serveur Apache. L'écriture de ces logs peut aussi être déportée sur un serveur tiers via le protocole syslog.

Référence :

Chapitre 9 Dynacase Control en mode CLI

Le mode CLI de dynacase-control permet d'administrer les contextes Dynacase en ligne de commande.

9.1 Utilisation

La commande wiff permet de manipuler et administrer les contextes Dynacase. Les opérations actuellement accessibles à travers l'UI Web, seront accessibles en ligne de commande à l'aide de cette commande wiff. Cette commande doit être lancée sous root. Pour cela, vous pouvez soit vous logger sous le compte root, soit utiliser sudo pour l'exécuter (Dans ce cas, vous pouvez également autoriser la commande wiff sans mot de passe en éditant le fichier sudoers).

Si vous n'êtes pas root sur le serveur, et que les opérations d'administrations s'effectuent avec sudo :

$ sudo /var/www/dynacase-control/wiff help
Password: ******
[message d'aide]

Si vous avez accès au compte root sur le serveur :

# /var/www/dynacase-control/wiff help
[message d'aide]

Le CLI utilise un verrou afin de se prémunir contre l'exécution concurrente de plusieurs opérations de modification (voir détails Opérations verrouillées ci-dessous).

9.2 Commandes

9.2.1 Lister les contextes existants

Cette opération permet d'afficher les contextes installés.

Syntaxe :

list context [--pretty]

Exemple :

# /var/www/dynacase-control/wiff list context
developpement
test
production
# /var/www/dynacase-control/wiff list context --pretty
Name               Description                                                     
-----------------------------------------------------------------------------------
developpement      Développement
test               Test
production         Production

9.2.2 Créer un nouveau contexte

control 1.5

Cette opération permet de créer un nouveau contexte.

Syntaxe :

create context <context-name> <context-root>

Exemple :

# /var/www/dynacase-control/wiff create context test /var/www/test

9.2.3 Manipuler les propriétés d'un contexte

control 1.5

Les propriétés d'un contexte sont :

url
L'URL affichée sur le contexte.
description
La description affichée sur le contexte.

9.2.3.1 Voir la liste des propriétés d'un contexte

control 1.5

Cette opération permet de voir la liste des propriétés avec leur valeur.

Syntaxe :

context <context-name> property show

Exemple :

# /var/www/dynacase-control/wiff context test property show
url = /test/admin.php
description = Contexte de test.

9.2.3.2 Récupérer la valeur d'une propriété d'un contexte

control 1.5

Cette opération permet de voir la valeur d'un propriété.

Syntaxe :

context <context-name> property get <property-name>

Exemple :

# /var/www/dynacase-control/wiff test property get url
url = /test/admin.php

9.2.3.3 Modifier les propriétés d'un contexte

control 1.5

Cette opération permet de modifier les propriétés d'un contexte.

Syntaxe :

context <context-name> property set <property-name> <property-value>

Exemple :

# /var/www/dynacase-control/wiff context test property set url http://www.example.net/test/
# /var/www/dynacase-control/wiff context test property set description "Ceci n'est pas un contexte de test."

9.2.4 Modifier les dépôts de paquets utilisés par un contexte

control 1.5

Cette opération permet de voir/modifier la liste des dépôts de paquets utilisés par un contexte.

Les dépôts de paquets utilisables par un contexte doivent être déclarés au préalable dans dynacase-control (voir Gérer la liste des dépôts de paquets de dynacase-control ci-dessous).

9.2.4.1 Voir les dépôts actifs sur un contexte

control 1.5

Syntaxe :

context <context-name> repository list

Exemple :

# /var/www/dynacase-control/wiff context test repository list
dynacase
acme

9.2.4.2 Activer un dépôt sur un contexte

control 1.5

Syntaxe :

context <context-name> repository enable <repo-name>

Exemple :

# /var/www/dynacase-control/wiff context test repository enable foo

9.2.4.3 Désactiver un dépôt sur un contexte

control 1.5

Syntaxe :

context <context-name> repository disable <repo-name>

Exemple :

# /var/www/dynacase-control/wiff context test repository disable foo

9.2.4.4 Désactiver tous les dépôts sur un contexte

control 1.5

Syntaxe :

context <context-name> repository disable --all

Exemple :

# /var/www/dynacase-control/wiff context test repository disable --all

9.2.5 Supprimer un contexte

control 1.5

Syntaxe :

delete context [options] <context-name>

Les options disponibles sont :

Exemple :

# /var/www/dynacase-control/wiff delete context --force test

9.2.6 Manipuler les modules du contexte

9.2.6.1 Lister les modules installés

Cette opération affiche les modules installés dans le contexte sélectionné.

Syntaxe :

context <context-name> module list installed [--pretty]

Exemple :

# var/www/dynacase-control/wiff context test module list installed
dynacase-fckeditor (2.6.3-7)
dynacase-webdesk (1.2.2-1)
dynacase-extjs (3.1.1-8)
dynacase-core (3.2.5-1)
dynacase-extui (0.6.4-1)
dynacase-workspace (0.6.1-1)
dynacase-ecm (0.3.0-1)

9.2.6.2 Lister les modules disponibles

Cette opération affiche la liste des modules disponibles sur les dépôt de paquets accessibles par HTTP ou FTP.

Syntaxe :

context <context-name> module list available [--pretty]` 

Exemple :

# /var/www/dynacase-control/wiff context test module list available
dynacase-extjs (3.1.1-8)
dynacase-core (3.2.5-1)
dynacase-fckeditor (2.6.3-7)
dynacase-freeevent (2.6.0-0)
dynacase-webdesk (1.2.2-1)
[...]
dynacase-apisamples (0.1.3-1)
dynacase-familysamples (0.1.0-2)
dynacase-cas (0.0.2-1)
dynacase-theme (0.0.1-4)
dynacase-url (0.0.0-3)

9.2.6.3 Lister les modules avec mise à jour proposée

Cette opération permet d'afficher la liste des modules installés dont une mise-à-jour est disponible sur les dépôts de paquets.

Syntaxe :

context <context-name> module list upgrade [--pretty]

Exemple :

# /var/www/dynacase-control/wiff context test module list upgrade
dynacase-core (3.2.6-1)

9.2.6.4 Installer un module

Cette opération permet d'installer un module contenu dans un paquet local (archive .webinst stocké en local sur le serveur) ou à partir d'un paquet disponible sur un dépôt de paquets distant accessible par HTTP ou FTP.

Syntaxe :

context <context-name> module install [options] <localPackagePath>
context <context-name> module install [options] <moduleName>

Les options disponibles sont :

Exemple :

Installation d'un paquet distant :

# /var/www/dynacase-control/wiff context test module install dynacase-core
Will (i)nstall, (u)pgrade, or (r)eplace the following modules:
- dynacase-core-3.2.5-1.20130221.090413 (i)
- dynacase-jquery-installer-1.7.2-1.20120730.134605 (i)
- dynacase-jquery-ui-installer-1.8.21-2.20120817.154930 (i)
- dynacase-json2-1.0.0-0.20130214.114647 (i)
- dynacase-datajs-3.2.5-0.20130220.144720 (i)
- dynacase-jquery-dataTables-installer-1.9.1-0.20120622.121419 (i)
- dynacase-ckeditor-installer-4.0.1-0.20130213.174659 (i)
Proceed with installation ? [Y/n]
 
Processing module 'dynacase-core' (3.2.5-1.20130221.090413) for install.
Downloading module 'dynacase-core-3.2.5-1.20130221.090413'... [OK]
[...]
Done.

Installation d'un paquet local :

# /var/www/dynacase-control/wiff context test module install /tmp/foo-1.2.3-4.webinst
Processing required module 'foo' (1.2.3-4) for install.
[...]
Done.

Notes :

9.2.6.5 Upgrader un module

Cette opération permet d'upgrader un module à partir d'un paquet local (archive .webinst stocké en local sur le serveur) ou à partir d'un paquet disponible sur un dépôt de paquets distant accessible par HTTP ou FTP.

Syntaxe :

context <context-name> module upgrade [options] <localPackagePath>
context <context-name> module upgrade [options] <moduleName>

Les options disponibles sont :

Exemple :

# /var/www/dynacase-control/wiff context test module upgrade /tmp/foo-2.0.0-1.webinst
Processing required module 'foo' (2.0.0-1) for upgrade.
[...]
Done.

Notes :

9.2.7 Archives de contextes

9.2.7.1 Archiver un contexte

control 1.5

Syntaxe :

context <context-name> archive <archive-name> [--without-vault] [--description=<description>]

Les options disponibles sont :

Exemple :

# /var/www/dynacase-control/wiff context dev archive test
test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5

Note :

9.2.7.2 Lister les archives

control 1.5

Syntaxe :

list archive

Exemple :

# /var/www/dynacase-control/wiff list archive
test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5
pre-prod-838ac13e91d439d5c3a8bed86ea8adfee800c949

9.2.7.3 Voir les informations d'une archive

control 1.5

Syntaxe :

archive <archive-id> info

Exemple :

# /var/www/dynacase-control/wiff archive test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5 info
Archive 'test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5'
-------------------------------------------------------
 
id          = test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5
date        = 2014-12-15 09:03:04
name        = test
size        = 42.121 Mo
vault       = Yes
description = dev@2014-12-15T09:03:04
 
Installed modules:
- dynacase-core (3.2.17-1)
[...]

9.2.7.4 Restaurer l'archive d'un contexte

control 1.5

Syntaxe :

archive <archive-id> restore <context-name> <context-root> <pg-service-name> <vault-root>
                               [--remove-profiles --user-login=<login> --user-password=<password>]
                               [--clean-tmp-directory=<'yes'|'no'>]

Les options disponibles sont :

Exemple :

# /var/www/dynacase-control/wiff archive test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5 restore test2 /var/www/test2 db-test-2 /var/www/test2/vaultfs
Context 'test2' successfully created from archive 'test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5'.

9.2.8 Supprimer une archive de contexte

Syntaxe :

delete <archive-id>

Exemple :

# /var/www/dynacase-control/wiff delete archive test-1f84e69f127a5fb3f2d920c35beb12f2f2a6c4d5

9.2.9 Manipuler les paramètres des modules

9.2.9.1 Afficher la liste des paramètres d'un module

Cette opération permet d'afficher la liste des paramètres des modules installés.

Syntaxe :

context <context-name> param show [<moduleName>]

Exemple :

# /var/www/dynacase-control/wiff context test param show
dynacase-core:client_name = Test
dynacase-core:core_db = test
dynacase-core:authtype = html
dynacase-core:lcdate = iso : standard format 8601
dynacase-core:core_tmpdir = ./var/tmp
dynacase-core:core_admin_passwd =
dynacase-core:mod_deflate = yes
foo:bar = baz
foo:bir = biz
 
# /var/www/dynacase-control/wiff context test param show foo
foo:bar = baz
foo:bir = biz

9.2.9.2 Afficher la valeur d'un paramètre d'un module

Cette opération permet d'afficher la valeur d'un paramètre d'un module donné.

Syntaxe :

context <context-name> param get <module-name>:<param-name>

Exemple :

# /var/www/dynacase-control/wiff context test param get foo:bar
foo:bar = baz

9.2.9.3 Positionner la valeur d'un paramètre d'un module

Cette opération permet de positionner la valeur d'un paramètre d'un module donné.

Syntaxe :

context <context-name> param set <module-name>:<param-name> <param-value>

Exemple :

# /var/www/dynacase-control/wiff context <context-name> param set foo:bar buzz
foo:bar = buzz

9.2.10 Gérer la liste des dépôts de paquets de dynacase-control

control 1.5

Cette opération permet de gérer la liste de dépôts de paquets connus par dynacase-control.

9.2.10.1 Afficher la liste des dépôts de paquets

control 1.5

Syntaxe :

repository list

Exemple :

# /var/www/dynacase-control/wiff repository list
dynacase    http://dynacase.anakeen.com/3.2/webinst/
local    http://localhost/repo/

9.2.10.2 Ajouter un dépôt de paquets

control 1.5

Syntaxe :

repository add <repo-name> <repo-url> [<repo-username> [<repo-password>]]

Exemple :

# /var/www/dynacase-control/wiff repository add foo "http://example.net/foo/"
# /var/www/dynacase-control/wiff repository add acme "http://example.net/acme/" "john.doe" "s3cr3t"

Notes :

9.2.10.3 Supprimer un dépôt de paquets

control 1.5

Syntaxe :

repository delete <repo-name>

Exemple :

# /var/www/dynacase-control/wiff repository delete foo

Notes :

9.2.10.4 Supprimer tous les dépôts de paquets

control 1.5

Syntaxe :

repository delete --all

Exemple :

# /var/www/dynacase-control/wiff repository delete --all

Notes :

9.2.11 Gérer les paramètres de dynacase-control

control 1.5

Cette opération permet de voir/modifier les paramètres de dynacase-control.

9.2.11.1 Liste des paramètres de dynacase-control

wiff-update-host
Base de l'URL de recherche des mises à jour de dynacase-control.
wiff-update-path
Chemin pour la recherche des mises à jour de dynacase-control.
wiff-update-file
Nom du fichier de la dernière version de dynacase-control.
wiff-update-login (optionnel)
Nom d'utilisateur pour la recherche des mises à jour (si authentification HTTP Basic requise).
wiff-update-password (optionnel)
Mot de passe pour la recherche des mises à jour (si authentification HTTP Basic requise).
use-proxy (optionnel)

Active l'utilisation d'un proxy HTTP pour les requêtes HTTP/FTP émises par dynacase-control.

Valeurs : yes ou no.

proxy-host (optionnel)

Nom d'hôte du proxy HTTP à utiliser si use-proxy est activé.

Ex. proxy.example.net

proxy-port (optionnel)

Port du proxy HTTP à utiliser si use-proxy est activé.

Ex. : 3128

proxy-username (optionnel)
Nom d'utilisateur pour la connexion au proxy HTTP proxy-host.
proxy-password (optionnel)
Mot de passe pour la connexion au proxy HTTP proxy-host.
auto-configuration-sender-interval

Intervalle (en nombre de jours) pour la soumission des information des contextes avec send_configuration lorsque ceux-ci sont enregistrés avec le compte EEC.

Valeurs : entier de 1 à 31.

local-log control 1.5

Active la journalisation des messages d'erreurs dans le fichier log/wiff.log.

Valeurs : yes ou no.

syslog-facility control 1.5

Facility syslog utilisée par les messages d'erreurs émis par dynacase-control.

Voir Paramétrage syslog.

9.2.11.2 Voir les paramètres de dynacase-control

control 1.5

Syntaxe :

param show

Exemple :

# /var/www/dynacase-control/wiff param show
wiff-update-host = http://dynacase.anakeen.com/ (visible)
wiff-update-path = /control/ (visible)
wiff-update-file = dynacase-control-current.tar.gz (visible)
wiff-update-login =  (visible)
wiff-update-password =  (visible)
use-proxy = no (visible)
proxy-host =  (visible)
proxy-port =  (visible)
proxy-username =  (visible)
proxy-password =  (visible)
auto-configuration-sender-interval = 30 (visible)
local-log = yes (hidden)
syslog-facility = LOG_USER (hidden)

9.2.11.3 Récupérer la valeur d'un paramètre de dynacase-control

control 1.5

Syntaxe :

param get <param-name>

Exemple :

# /var/www/dynacase-control/wiff param get local-log
local-log = yes

9.2.11.4 Modifier la valeur d'un paramètre de dynacase-control

control 1.5

Syntaxe :

param set <param-name> <param-value> ['hidden']

Exemple :

# /var/www/dynacase-control/wiff param set local-log no

Notes :

9.2.12 Enregistrer dynacase-control avec son compte EEC

control 1.5

Cette opération permet d'enregistrer dynacase-control avec son compte EEC.

9.2.12.1 Voir le status d'enregistrement

Syntaxe :

register

Exemple :

# /var/www/dynacase-control/wiff register
Not registered.

9.2.12.2 Enregistrer dynacase-control avec son compte EEC

control 1.5

Syntaxe :

register <eec-username> <eec-password>

Exemple :

# /var/www/dynacase-control/wiff register "john.doe" "s3cr3t"
Successfully registered dynacase-control.
 
# /var/www/dynacase-control/wiff register
Registered with EEC username 'john.doe'.

9.2.13 Enregistrer un contexte avec son compte EEC

control 1.5

Cette opération permet d'enregistrer un contexte avec son compte EEC.

Syntaxe :

context <context-name> register

Exemple :

# /var/www/dynacase-control/wiff context test register

Notes :

9.2.14 Envoi de la configuration au compte EEC

Cette opération permet d'envoyer la configuration de tous les contextes enregistrés avec le compte EEC.

Syntaxe :

send_configuration

Exemple :

# /var/www/dynacase-control/wiff send_configuration

9.2.15 Passer un contexte en mode maintenance

Le mode maintenance d'un contexte permet de bloquer l'accès des utilisateurs au contexte, et de désactiver l'exécution des crons, afin d'effectuer des opérations pour lesquelles il est nécessaire que les données ne soient pas modifiés.

dynacase-control 1.5.2

Cette opération permet d'exécuter le script historique 'wstop' sur un contexte. Dans ce mode, seul l'utilisateur master default a accès au contexte.

Syntaxe :

wstop <context-name>

Exemple :

# /var/www/dynacase-control/wiff wstop test

dynacase-control 1.5.3

Cette opération est dépréciée et doit être remplacée par le lancement de la commande ./wstop dans le contexte à l'aide de l'opération WIFF exec.

Exemple :

# /var/www/dynacase-control/wiff context test exec ./wstop

Voir :

9.2.16 Sortir un contexte du mode maintenance

La sortie du mode maintenance d'un contexte permet de rétablir l'accès des utilisateurs, et l'exécution des crons, lorsque l'opération de maintenance est terminée.

dynacase-control 1.5.2

Cette opération permet d'exécuter le script historique 'wstart' sur un contexte.

Syntaxe :

wstart <context-name>

Exemple :

# /var/www/dynacase-control/wiff wstart test

dynacase-control 1.5.3

Cette opération est dépréciée et doit être remplacée par le lancement de la commande ./wstart -m dans le contexte à l'aide de l'opération WIFF exec.

Exemple :

# /var/www/dynacase-control/wiff context test exec ./wstart -m

Voir :

9.2.17 Réinitialiser les catalogues de langue

Cette opération permet d'exécuter le script historique 'whattext' sur un contexte.

Syntaxe :

whattext <context-name>

Exemple :

# /var/www/dynacase-control/wiff whattext test

9.2.18 Ouvrir un shell sous l'uid Apache

Cette opération permet d'ouvrir un shell, ou d'exécuter une commande, sous l'uid de l'utilisateur exécutant le serveur Apache afin d'effectuer manuellement des opérations d'administration spécifiques.

Syntaxe :

context <context-name> shell
context <context-name> exec  <command> [<command-options>]

Par défaut, si aucune commande n'est spécifiée, le shell par défaut définit pour l'utilisateur du serveur Apache est lancé. Si l'utilisateur n'a pas de shell associé, il faudra alors spécifier le chemin du shell qu'on souhaite exécuter avec la variante 'exec'. Lors de l'ouverture du shell, ou de l'exécution de la commande, les variables d'environnement suivantes sont pré-positionnés :

Exemple :

# /var/www/dynacase-control/wiff context test shell /bin/bash
$ id
uid=70(_www) gid=70(_www) egid=20(staff) groups=70(_www)
$ pwd
/var/www/test
$ ./FOO/FOO_post U
[...]
# /var/www/dynacase-control/wiff context test exec /usr/bin/tar -zcf /tmp/archive.tar.gz .

9.3 Opérations verrouillées

control 1.5

Les opérations suivantes sont soumises à l'obtention du verrou exclusif :

Le verrou est implémenté avec un appel système flock sur le fichier conf/contexts.xml.lock.

Si le CLI ne peut obtenir un verrou exclusif, alors il se termine avec un exit code 100 et affiche le message Error locking Dynacase-Control: Already locked by process with pid 'xxx' si le verrou est pris par un autre CLI, ou Error locking Dynacase-Control: xxx pour une erreur générale (e.g. problème dans l'accès au fichier conf/contexts.xml.lock).

Chapitre 10 FreeDAV/WebDAV

10.1 Présentation de l'application DAV

Le protocole WebDAV permet aux utilisateurs d'éditer et de sauver les fichiers inclus dans les documents directement depuis leur traitement de texte, tableurs et autres logiciels d'édition de fichiers.

L'application DAV de Dynacase gère deux serveurs WebDAV :

Lors de la modification de fichiers par l'interface Web, l'éditeur de fichier utilise le serveur WebDAV authentifié par numéro de session. L'adresse de ce serveur WebDAV doit être précisé dans le paramètre applicatif FREEDAV_SERVEUR.

L'adresse du deuxième serveur doit être renseigné dans le paramètre WEBDAV_SERVEUR (accessible depuis le menu administration/paramètres de configuration/paramètres applicatif/dav).

Ces deux serveurs doivent avoir deux noms distincts du nom de la machine pour l'accès à l'interface web. Ces deux noms désignent la même machine (alias DNS) que le serveur WEB. Le serveur Web Apache doit être configuré pour avoir deux hôtes virtuels (Apache VirtualHost) correspondant aux deux serveurs DAV.

10.2 Configuration des postes client éditer et sauver en ligne

10.2.1 Windows

Le navigateur Web ne peut pas nativement exécuter un autre programme. Pour autoriser votre navigateur à ouvrir les éditeurs vous devez installer deux fichiers sur votre poste client opendav.reg et opendav.vbs :

Pour enregistrer le protocole pour le navigateur, il faut double-cliquer sur l'icône du fichier opendav.reg que vous avez téléchargé. Ensuite il faut enregistrer le fichier opendav.vbs dans le répertoire C:\WINDOWS\.

Après cette manipulation à partir de votre navigateur Internet Explorer ou Firefox, vous pouvez éditer et enregistrer les fichiers comme s'ils étaient sur votre disque dur.

Lorsque vous cliquez sur le lien Ouvrir dans un éditeur, une interface vous demande de choisir le programme capable de lire le fichier. Pour enregistrer le fichier sur le serveur, une fois les modifications effectuées, il suffit d'utiliser le menu enregistrer de l'éditeur comme d'habitude

Notes :

10.2.2 Linux

Dans Firefox, entrez l'URL : about:config

Ajouter les options suivantes :

Pour Firefox > 3.5, il faut aussi lancer deux commande à l'aide de gconftool-2 :

gconftool-2 -s /desktop/gnome/url-handlers/asdav/command '/path/to/app %s' --type String
gconftool-2 -s /desktop/gnome/url-handlers/asdav/enabled --type Boolean true

Créer le fichier de commande dynacase-opendav.sh suivant dans un répertoire accessible par le PATH système (/usr/local/bin/dynacase-opendav.sh par ex.) :

#!/bin/bash
np=$(echo "$1" | sed "s/asdav:/http:/")
ooffice "$np"

Rendre le script exécutable :

chmod +x /usr/local/bin/dynacase-opendav.sh

Il reçoit en argument l'URL du fichier à éditer. Cette URL est une ressource asdav: qui doit être transformée en http: et être fournie à l'exécutable Open Office.

Si la configuration n'est pas correcte, vous allez rencontrer ce message :

Si tout fonctionne correctement, vous allez avoir cette fenêtre :

10.2.3 Mac OS X

Télécharger et installer l'application Asdav.app :

L'application Asdav.app permet d'ouvrir les URLs asdav: de Dynacase avec OpenOffice, et donc d'éditer en ligne tous les types de fichiers supportés par celui-ci.

Asdav.app utilisera en premier OpenOffice.org.app, et si celui-ci n'est pas disponible il utilisera NeoOffice.org.app.

Note pour les utilisateurs sous Mac OS X Tiger (10.4) :

OpenOffice.org.app 3.0.0 comporte un petit bug qui le rend inutilisable lorsqu'il est lancé par Asdav.app (c.f. http://www.openoffice.org/issues/show_bug.cgi?id=93731).

Pour contourner ce problème, il faut éditer le fichier /Applications/OpenOffice.org.app/Contents/Info.plist et changer la valeur de la clef CFBundleExecutable par soffice.bin :

<key>CFBundleExecutable</key>
<string>soffice.bin</string>
[...]

Note : ce problème doit être à présent résolu à partir de OpenOffice.org 3.0.1

10.3 Configuration serveur web apache

L'utilisation de la fonction DAV nécessite la création de deux configurations Apache à base de VirtualHosts. Comme cette conf n'est pas accessible et réalisable par dynacase-control, vous devrez insérer les configurations données ci-dessous dans la configuration de votre serveur Apache.

10.3.1 Pré-requis

Ce module nécessite en pré-requis l'activation du module rewrite :

# a2enmod rewrite
# /etc/init.d/apache2 restart

10.3.2 Base de données webdav

L'utilisation du protocole dav utilise un schéma dav dédié dans la base données générale.

Les tables dav.locks, dav.properties et dav.sessions sont automatiquement crées lors de l'installation de dynacase-core.

10.3.3 VirtualHosts Apache pour l'accès aux fonctions WebDAV

Pour utiliser les fonctions d'édition et de montage WebDAV, vous devez mettre en place deux VirtualHosts Apache.

Pour cela, il vous faut déclarer deux noms DNS additionnels qui pointeront vers votre serveur Dynacase.

Exemple :

Soit un contexte dynacase installé dans le répertoire /var/www/ged, et accessible par l'enregistrement DNS ged.example.net.

Vous pouvez créer deux enregistrements DNS ged-freedav.example.net et ged-webdav.example.net qui pointeront vers ged.example.net.

ged-freedav IN CNAME ged.example.net.
ged-webdav  IN CNAME ged.example.net.

Dans ce cas, les configurations associées seront :

Fichier de configuration /etc/apache2/sites-available/default-freedav

<VirtualHost *:80>
    ServerName ged-freedav.example.net
 
    DocumentRoot /var/www/ged/freedav
 
    <Directory /var/www/ged/freedav/>
            Order allow,deny
            Allow from All
 
            DirectoryIndex index.php
 
            Options FollowSymLinks
            AllowOverride All
    </Directory>
 
    ErrorLog /var/log/apache2/freedav.error.log
</VirtualHost>

Activer la configuration

# a2ensite ged-freedav
# /etc/init.d/apache2 restart

Fichier de configuration /etc/apache2/sites-available/ged-webdav

<VirtualHost *:80>
    ServerName ged-webdav.example.net
 
    DocumentRoot /var/www/ged/webdav
 
    <Directory /var/www/ged/webdav/>
            Order allow,deny
            Allow from All
 
            DirectoryIndex index.php
 
            Options FollowSymLinks
            AllowOverride All
    </Directory>
 
    ErrorLog /var/log/apache2/webdav.error.log
</VirtualHost>

Activer la configuration

# a2ensite ged-webdav
# /etc/init.d/apache2 restart

Remarque : Il est possible de vérifier avec votre navigateur que les deux VirtualHost fonctionnent correctement :

10.4 Paramétrage de l'application dav

L'application dav comporte quatre paramètres accessibles via :

FREEDAV_SERVEUR
adresse du serveur webdav pour freedav. Alias de nom de la machine serveur. Le virtual host associé ne doit pas être authentifié.
WEBDAV_SERVEUR
adresse du serveur webdav pour le serveur authentifié. Alias de nom de la machine serveur. Le virtual host associé doit être authentifié.
WEBDAV_DB
3.2 R15 coordonnées d'accès à la base de données webdav. Doit être égale aux coordonnées de la base principale - automatiquement renseignée lors de l'installation.
WEBDAV_ROOTID
Identifiant du dossier racine pour l'accès authentifié. Identifiant du document dossier pour la racine du webdav authentifié. Lors d'un usage combiné avec WORKSPACE, la référence désigne un document recherche simple qui recherche l'ensemble des espaces de travail.
WEBDAV_FOLDERMAXITEM
Nombre maximum d'éléments (dossier/fichier) visibles dans un dossier. Cette limite permet d'éviter d'afficher trop d'éléments pouvant provoquer un ralentissement du client.

10.5 Test de débogage du dav

En cas de problème dans la mise en place de l'application dav, il est possible d'effectuer différents tests pour identifier la source du problème.

10.5.1 Test avec cadaver

Le client WebDAV cadavere n ligne de commande disponible sous Linux permet de vérifier que la connexion au serveur webdav et au serveur freedav fonctionne correctement :

$ cadaver ged-freedav
dav:/>
$ cadaver ged-webdav
Authentication required for  on server `ged-webdav':
Username: admin
Password: ******
dav:/> ls
Listing collection `/': succeeded.
Coll:   import                                 0  sep 17 16:25
Coll:   la poubelle                            0  sep 17 16:25
Coll:   les cycles                             0  sep 17 16:25
Coll:   les familles                           0  sep 17 16:25
Coll:   les maisons                            0  sep 17 16:25
Coll:   les profils                            0  sep 17 16:25
dav:/>

En cas de problèmes, regarder les éventuels messages d'erreur le error_log PHP ou Apache.

10.6 Troubleshoot de l'application dav

10.6.1 Delocker un document

Situation : Le document a été chargé en édition avec OpenOffice.org, et ce dernier s'est terminé anormalement en laissant le document locké au niveau WebDAV.

Solution : Identifier l'URL du document (ex. asdav:/ /freedav.example.net/freedav/vid-12765-4870-3a0404dfe29f7c88bb58ac8a6943559d/Foo.odt), et supprimer le lock du document dans la table locks :

# PGSERVICE=dynacase psql \
-c "DELETE FROM dav.locks WHERE path = '/freedav/vid-12765-4870-3a0404dfe29f7c88bb58ac8a6943559d/Foo.odt'"

10.6.2 Lenteur d'ouverture des fichiers

Il arrive sur certains postes en Windows XP d'avoir des lenteurs d'accès aux documents : les temps d'accès constatés sont d'environ 30 secondes.

Ces problèmes sont inhérents à Windows, il existe 2 solutions possibles pour pallier à ces lenteurs :

10.6.2.1 1. Solution pour intranet (modification du serveur dynacase)

L'installation du service Samba (sur le serveur Dynacase) semble réduire dans certains cas le temps d'attente du poste Windows pour l'accès aux ressources WebDAV.

10.6.2.2 2. Solution pour tous les cas (modification de chaque poste client)

Dans certains cas, le changement d'ordre des "Fournisseurs de réseau" peut réduire le temps d'attente du poste Windows pour l'accès aux ressources WebDAV.

Pour cela, allez dans le panneau de configuration puis dans Connexions réseau / Avancé / Paramètres avancés :

Dans l'onglet “Ordre des fournisseurs”, vous placez “Web Client Network” en tête de liste :

Explication : lorsque vous cherchez à accéder à un serveur dav, le fournisseur réseau du dav devient prioritaire sur les autres services réseau, ce qui évite les problématiques de timeouts.

Par contre cela peut potentiellement engendrer d'autres lenteurs pour accéder à d'autres ressources réseau (serveur de fichier, active directory, …).

Cette solution est à appliquer au cas par cas.

Annexe A1 Vérification de l'intégrité des éléments téléchargés

L'intégrité des paquets Control (webinst), archives compressées ou description de l'index du dépôt (content.xml) peut être contrôlée.

Après avoir téléchargé le contenu du dépôt vous pouvez, avant de procéder à une installation, vérifier qu'il est intègre.

A1.1 Téléchargement des sommes de contrôle

Le fichier SHA256sum.asc, téléchargé, contient les sommes de contrôles. Vous devez d'abord vous assurer de son origine (qui l'a produit) :

# gpg --recv-keys 9AEA83AF
gpg: requête de la clé 9AEA83AF du serveur hkp keys.gnupg.net
gpg: clé 9AEA83AF: « Dynacase distribution <labs@anakeen.com> » n'a pas changé
gpg: Quantité totale traitée: 1
# gpg --fingerprint 9AEA83AF
pub   2048R/9AEA83AF 2013-03-15
      Empreinte de la clé = D41B 24B6 F276 3E38 1A25  29FF 1633 12B4 9AEA 83AF
uid                  Dynacase distribution <labs@anakeen.com>
sub   2048R/361B4EAC 2013-03-15
# gpg --verify SHA256sum.asc
gpg: Signature faite le ven. 15 mars 2013 17:07:18 CET avec la clé RSA ID 9AEA83AF
gpg: Bonne signature de « Dynacase distribution <labs@anakeen.com> »
gpg: ATTENTION: Cette clé n'est pas certifiée avec une signature de confiance !
gpg:          Rien ne dit que la signature appartient à son propriétaire.
Empreinte de clé principale: D41B 24B6 F276 3E38 1A25  29FF 1633 12B4 9AEA 83AF

Vous êtes maintenant en possession d'un fichier contenant les sommes de contrôles des éléments téléchargés que vous pouvez considérer comme fiables.

A1.2 Vérification des sommes de contrôles

Dans le répertoire de téléchargement des éléments (paquets, archives, etc.) et du fichier SHA256sum.asc, lancez la commande suivante :

 # sha256sum ---check SHA256sum.asc 
 (ou)
 # shasum -a 256 --check SHA256sum.asc

Elle vous indique pour chacun des éléments téléchargés s'il correspond à la somme de contrôle attendue (s'il est intègre).

Annexe A2 Format des modules webinst

control 1.5

Dans ce paragraphe nous allons détailler les éléments constitutifs d'un module webinst et mettre en œuvre ces éléments pour construire un module d'exemple que nous nommerons dynacase-foo.

Pour bien suivre cette présentation, il est souhaitable d'avoir bien en tête les notions d'Applications et d'Actions de Dynacase et le fonctionnement général de celles-ci.

Pour un aperçu rapide des changements apportés par rapport à l'ancien format, voir la section "Changements par rapport à l'ancien format" ci- dessous.

A2.1 Format d'une archive webinst

Une archive webinst de module est une archive TAR compressée par GZIP avec pour extension .webinst.

L'archive contient les éléments suivants :

content.tar.gz (requis)

Une archive (TAR compressé GZIP) contenant les fichiers à déployer dans le contexte.

Les chemins des fichiers contenus dans l'archive doivent être relatifs à la racine du contexte et êtres conformes à l'arborescence attendue sur le serveur.

Cette archive est décompressée dans la racine du contexte sous l'identité de l'utilisateur configuré lors de l'installation de dynacase-core.

info.xml (requis)

Un fichier au format XML conforme au schéma XML webinst-module-1.0.xsd décrivant le module et les opérations à exécuter pour son installation, mise-à-jour, etc.

Voir Fichier info.xml pour la description de ce fichier.

LICENSE (optionnel)

Un fichier contenant le texte de la licence du module au format texte brut (text/plain).

Si ce fichier est présent et que la propriété license du module est valuée dans le fichier fichier info.xml, alors le contenu de ce fichier est présenté à l'utilisateur pour que ce dernier valide la licence du module.

Restrictions sur le nom de l'archive :

A2.2 Fichier info.xml

Le fichier info.xml permet de décrire le module Dynacase en fournissant en particulier :

A2.2.1 Exemple de fichier de info.xml

<?xml version="1.0"?>
<module xmlns="urn:dynacase:webinst:module/1.0" name="dynacase-foo" version="1.2.3" release="1" basecomponent="N" changelog="https://modules.example.net/changelog/dynacase-foo/1.2.3">
  <description>dynacase foo</description>
 
  <requires>
    <installer version="1.4.0" comp="ge" />
    <module name="dynacase-bar" />
    <module name="dynacase-baz" version="1.0.0" comp="ge" />
  </requires>
 
  <parameters>
    <param name="foo_dir" label="Directory of FOO" type="text" default="/var/foo" needed="Y" />
    <param name="foo_color" label="Color of FOO" type="enum" values="red|green|blue" default="green" needed="N" />
  </parameters>
 
  <pre-install>
    <check type="syscommand" command="zip" />
    <check type="phpfunction" function="pg_connect">
      <help>You might need to install a php-pg package.</help>
    </check>
    <check type="file" file="/var/foo" predicate="is_dir" />
  </pre-install>
 
  <post-install>
    <process command="programs/app_post FOO I" />
    <process command="programs/record_application FOO I" />
    <process command="programs/app_post FOO U" />
    <process command="programs/update_catalog" />
  </post-install>
 
  <post-upgrade>
    <process command="programs/pre_migration FOO" />
    <process command="programs/app_post FOO U" />
    <process command="programs/record_application FOO U" />
    <process command="programs/post_migration FOO" />
    <process command="programs/update_catalog" />
  </post-upgrade>
 
  <reconfigure>
    <process command="FOO/reconfigure_foo" />
  </reconfigure>
 
</module>

A2.3 Description d'un module

La définition d'un module doit être conforme à la description XML urn:dynacase:webinst:module/1.0.

La définition au format XML Schema Definition (XSD) de ce format est consultable et téléchargeable sur le dépôt GitHub suivant:

Le fichier XSD de définition des modules est webinst-module-1.0.xsd.

A2.3.1 Préambule Module

La racine du document info.xml est un tag <module> avec les attributs suivants :

xmlns
Le namespace XML urn:dynacase:webinnst:module/1.0 utilisé par le module.
name

le nom du module.

Restrictions sur le nom du module :

  • Le nom du module ne doit pas contenir les caractères : ' (apostrophe).
version

la version du module (sous la forme N.N.N)

La comparaison des versions entre deux modules est faite à l'aide de la fonction PHP version_compare(). La comparaison est faite en deux étapes : d'abord comparaison des valeurs version, puis, si les versions sont identiques, comparaison des valeurs release.

release
le numéro de release de la version
basecomponent (optionnel)

Y ou N, permet de spécifier si le module est un module de base. Dans ce cas, son installation sera obligatoire.

Valeur par défaut : N

license (optionnel)

license du module : nom/label de la licence du module (ex. http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License).

Si un fichier LICENSE (contenant le texte de la licence au format text/plain) est présent à la racine de l'archive .webinst, alors une fenêtre est ouverte avec le contenu de ce fichier LICENSE lorsque le module est installé pour la première fois afin que l'utilisateur accepte la licence.

vendor (optionnel)
fournisseur du module (ex. ACME Corp.).
changelog (optionnel)
URL d'une page contenant le changelog du module.

Exemple :

<?xml version="1.0"?>
<module
    xmlns="urn:dynacase:webinst:module/1.0"
    name="dynacase-foo"
    version="1.2.3"
    release="rc1"
    license="GPLV2"
    vendor="ACME Corp."
    changelog="https://modules.example.net/changelog/dynacase-foo/1.2.3"
>
 
[…]
 
</module>

A2.3.2 Description

Le module peut fournir une description textuelle pour expliciter le rôle du module.

Exemple :

<description>This module allows Dynacase to connect to FOO</description>

A2.3.3 Dépendances

Les dépendances permettent d'exprimer qu'un module requiert d'autres modules Dynacase avec éventuellement une contrainte sur leur version, ou une version spécifique de l'installeur.

Les dépendances sont exprimés à l'aide du tag <requires>.

A2.3.3.1 Dépendances avec des modules

La dépendance avec un module est exprimée avec un élément <module> qui comporte les attributs suivants :

name
le nom du module Dynacase requis
version
la version attendue pour le module requis
comp
opérateur de comparaison de version : lt (<), le (<=), gt (>), ge (>=), eq (==) ou ne (!=)

Exemple :

<requires>
  <module name="dynacase-bar" version="2.0" comp="ge" />
  <module name="dynacase-baz" version="1.9" comp="gt" />
<requires>

Dans cet exemple, le module requiert le module dynacase-bar en version >= 2.0 et le module dynacase-baz en version > 1.9.

Note :

A2.3.3.2 Dépendance avec l'installeur

Le module peut aussi exprimer une dépendance sur la version de l'installeur Dynacase Control.

Dans ce cas, le tag <requires> peut contenir un élément <installer> avec les attributs suivants :

version
la version de l'installeur que requiert le module
comp
opérateur de comparaison de version : lt (<), le (<=), gt (>), ge (>=), eq (==) ou ne (!=)

Exemple :

<requires>
  <installer version="1.0" comp="ge" />
  <module name="dynacase-bar" version="2.0" comp="ge" />
  <module name="dynacase-baz" version="1.9" comp="gt" />
<requires>

Dans cet exemple, le module requiert un installeur avec une version >= 1.0, le module dynacase-bar en version >= 2.0 et le module dynacase-baz en version> 1.9`.

A2.3.4 Paramètres d'installation/upgrade

Un module peut demander lors de son installation (ou upgrade) l'entrée de certains paramètres d'installation ou d'upgrade.

Les paramètres d'installation/upgrade nécessaires au module sont spécifiés avec un élément <parameters> contenant des éléments <param>.

La valeur du paramètre peut ensuite être lue par un programme lancé lors de l'install/upgrade via le mécanisme de Process décrit ci-dessous.

Note : ces paramètres de module n'ont pas de lien avec les paramètres d'applications ou de familles de dynacase-platform. Par contre, un <process/> spécifique peut être déclaré et utilisé pour enregistrer un paramètre de module comme valeur d'un paramètre d'application et de famille en utilisant par exemple le programme program/set_param (voir chapitre Commande programs/set_param du Manuel de référence Dynacase Core).

Les éléments <param> ont les attributs suivants :

name
Le nom du paramètre.
label
Le label textuel pour présenter le paramètre.
type
text ou enum, permet de spécifier le type de donné attendu.
default (optionnel)

La valeur par défaut présentée à l'utilisateur lors de la saisie des paramètres.

Valeur par défaut : "" (chaîne vide).

needed (optionnel)

Y (pour yes) ou N (pour no), permet de spécifier si la saisie du paramètre est obligatoire ou optionnelle.

Valeur par défaut : N.

values
Lorsque type=“enum”, l'attribut values permet de spécifier une liste de choix finis, séparés par le caractère | (pipe), à partir de laquelle l'utilisateur sélectionnera une valeur (e.g. X|FOO|BAR).
volatile (optionnel)

Y (pour yes) ou N (pour no), permet de spécifier si la valeur entrée doit être supprimée après l'installation ou upgrade.

Cela permet d'indiquer que la valeur n'est pas mémorisée, et donc qu'elle sera demandée avec sa valeur par défaut à chaque upgrade du module par exemple.

Valeur par défaut : N.

oninstall (optionnel)

Permet de spécifier la visibilité du paramètre lors d'une installation du module (R pour lecture seule, W pour lecture/écriture, H pour caché).

Valeur par défaut : W.

onedit (optionnel)

Permet de spécifier la visibilité du paramètre lors de l'édition des paramètres depuis la liste des modules installés.

Valeur par défaut : R.

onupgrade (optionnel)

Permet de spécifier si le paramètre est re-demandé lors des upgrades du module.

Valeur par défaut : H.

Exemple :

<parameters>
  <param name="foo_dir" label="Directory of FOO" type="text" default="/var/foo" needed="Y" />
  <param name="foo_color" label="Color of FOO" type="enum" values="red|green|blue" default="green" needed="N" />
</parameters>

A2.4 Opération d'install/upgrade/archive/restore/delete et phases

Lors de l'opération d'installation ou d'upgrade d'un module, ou d'archivage/restauration/suppression d'un contexte, un ensemble de phases contenant des process sont déroulés.

Les phases sur lesquelles vous pouvez spécifier vos process sont identifiées en couleur dans le diagramme ci-dessous.

Workflow install/upgrade d'un module

Figure 20. Workflow install/upgrade d'un module

Chaque opération (install, upgrade, etc.) comporte des phases qui sont exécutés à un moment du traitement du module

L'opération d'installation comporte ainsi deux phases sur lesquelles vous pouvez spécifier vos process : une phase avant l'installation des fichiers du module (phase pre-install), et une phase après l'installation des fichiers du module (phase post-install).

De la même manière, lors de l'upgrade : une phase avant la suppression des anciens fichiers du module et l'installation des nouveaux fichiers du module (phase pre-upgrade), et une phase après l'installation des nouveaux fichiers du module (phase post-upgrade).

Chaque phase (pre-install, post-install, etc.) spécifie un ensemble de process (éléments <check>, <process> ou <download>) qui sont exécutés et qui retournent un status d'échec ou de réussite.

Une phase est validée lorsque tous ses sous-éléments process ont retourné un statut de réussite.

Si une phase n'est pas validée, alors les messages d'erreurs rencontrés sont présentés à l'utilisateur , et celui-ci peut rejouer le process après avoir éventuellement corrigé le problème, ou bien il peut choisir d'ignorer les messages d'erreurs et poursuivre le déroulé de la phase.

Les process possibles dans les phases sont des éléments :

Chaque proccess peut fournir un élément <label> présenté comme titre dans la liste des process de la phase, et un <help> qui sera présenté à l'utilisateur lorsque l'action échoue.

En l'absence de <label> et de <help> un message générique est composé pour identifier le process.

A2.4.1 Phase pre-install

Les process de <pre-install> s'exécutent avant l'installation des fichiers du module sur le système de fichier.

Exemple :

<pre-install>
  <check type="phpfunction" function="pspell_new">
    <label>Vérification du support de pspell par PHP.</label>
    <help>Il faut peut-être installer php5-pspell avec aspell et aspell-fr</help>
  </check>
  <check type="syscommand" command="convert" />
</pre-install>

Les process de <pre-install> serviront généralement à vérifier la présence de certains éléments et à bloquer l'installation si ces éléments ne sont pas présents/corrects.

A2.4.2 Phase post-install

Les process de <post-install> s'exécutent après l'installation des fichiers du module sur le système de fichier.

Exemple :

<post-install>
  <process command="programs/record_application FOO">
    <label lang="en">Record FOO application in database</label>
  </process>
  <process command="programs/update_catalog">
    <label lang="en">Generate localization catalog</label>
  </process>
</post-install>

Les process de <post-install> serviront généralement à configurer le module qui vient d'être installé. Une erreur dans la phase de post-install laissera les fichiers installés en place, mais le paquet sera marqué en erreur de post-install dans l'interface.

A2.4.3 Phase pre-upgrade

Les process de <pre-upgrade> s'exécutent avant l'installation des nouveaux fichiers du module sur le système de fichiers.

Exemple :

<pre-upgrade>
  <check type="phpfunction" function="pspell_new">
    <help>Il faut peut-être installer php5-pspell avec apspell et aspell-fr</help>
  </check>
  <check type="syscommand" command="convert" />
</pre-upgrade>

Les process de <pre-upgrade> serviront généralement à vérifier la présence de certains éléments et bloquer l'upgrade si ces éléments ne sont pas présents/corrects.

A2.4.4 Phase post-upgrade

Les process de <post-upgrade> s'exécutent après l'installation des nouveaux fichiers du module sur le système de fichier.

Exemple :

<post-upgrade>
  <process command="programs/pre_migration FOO">
    <label>Pre-migration scripts</label>
  </process>
  <process command="programs/record_application FOO">
    <label>Update application record in database</label>
  </process>
  <process command="programs/post_migration FOO">
    <label>Post-migration scripts</label>
  </process>
  <process command="programs/update_catalog">
    <label>Re-generate localization catalog</label>
  </process>
</post-upgrade>

Les process de <post-upgrade> serviront généralement à configurer le module qui vient d'être installé, lancer les scripts de migration, etc. Une erreur dans la phase de post-upgrade laissera les fichiers installés en place, mais le paquet sera marqué en erreur de post-upgrade dans l'interface.

A2.4.5 Phase reconfigure

Les process de <reconfigure> s'exécutent après la restauration d'un contexte depuis une archive.

Les process possibles sont les mêmes que pour les phases de <post-install> ou <post-upgrade>.

A2.4.6 Phase pre-archive

Les process de <pre-archive> s'exécutent avant l'archivage d'un contexte.

Les process possibles sont les mêmes que pour les phases de <post-install> ou <post-upgrade>.

Le status d'échec/erreur n'est pas pris en compte et ne bloque pas la procédure d'archivage.

A2.4.7 Phase post-archive

Les process de <post-archive> s'exécutent après l'archivage du contexte.

Les process possibles sont les mêmes que pour les phases de <post-install> ou <post-upgrade>.

Le status d'échec/erreur n'est pas pris en compte et ne bloque pas la procédure d'archivage.

A2.4.8 Phase pre-restore

La phase de <pre-restore> n'est pas utilisable car les modules n'existent pas encore dans le contexte.

A2.4.9 Phase post-restore

Les process de <post-restore> s'exécutent après la restauration d'un contexte à partir d'un archive et après l'exécution de la phase de reconfigure.

Les process possibles sont les mêmes que pour les phases de <post-install> ou <post-upgrade>.

Le status d'échec/erreur n'est pas pris en compte et ne bloque pas la procédure de restauration.

A2.4.10 Phase pre-delete

Les process de <pre-delete> s'exécutent avant la suppression d'un contexte.

Les process possibles sont les mêmes que pour les phases de <post-install> ou <post-upgrade>.

Le status d'échec/erreur est pris en compte. Lorsqu'un process de <pre- delete> est mis en échec, l'utilisateur a alors le choix de rejouer le process ou bien de poursuivre l'exécution.

A2.4.11 Phase post-delete

La phase de <post-delete> n'est pas utilisable car les modules n'existent plus suite à la suppression du contexte.

A2.5 Les process de phase

A2.5.1 Process <check>

Les process <check> permettent d’exécuter des actions pour vérifier la présence de certains éléments.

Un process <check> peut être déclaré optionnel (attribut optional="Y") auquel cas l'utilisateur aura la possibilité d'outrepasser le check s'il est mis en erreur. Dans le cas contraire, un <check> en erreur ne peut pas être outrepassé.

Le process <check> supporte plusieurs types de vérifications qui sont spécifiées via l'attribut type qui peut prendre les valeurs suivantes :

phpfunction

Le check de type phpfunction permet de vérifier la présence d'une fonction PHP.

Le nom de la fonction testée est spécifié avec l'attribut function.

Exemple :

<check type="phpfunction" function="pg_connect" />
syscommand

Le check de type syscommand permet de vérifier la présence d'une commande disponible sur le système.

Le nom de la commande testée est spécifié avec l'attribut command.

Exemple :

<check type="syscommand" command="convert" optional="Y">
  <help>C'est bien si vous avez cette commande, mais on peut faire sans...</help>
</check>
phpclass

Le check de type phpclass permet de vérifier la présence d'une classe objet PHP.

Le nom de la classe PHP est spécifié avec les attributs suivants :

  • include : le nom du fichier pour inclure la définition de la classe
  • class : le nom de la classe

Exemple :

<check type="phpclass" include="Net/SMTP.php" class="Net_SMTP" />
apachemodule

Le check de type apachemodule permet de vérifier qu'un module Apache particulier est activé et chargé par celui-ci. Le nom du module est spécifié par l'attribut module.

Attention :

  • Lors de l'installation par le CLI WIFF, ce check retourne toujours vrai.

Exemple :

<check type="apachemodule" module="mod_expires" />
exec

Le check de type exec permet d'exécuter une commande shell et vérifier son exit code. La commande à exécuter est spécifiée avec l'attribut cmd.

L'interprétation du exit code suit la logique Unix avec :

  • exit code == 0 pour succès;
  • exit code != 0 pour échec.

Note :

  • Le shell utilisé est le shell par défaut paramétré sur le système ou PHP (généralement /bin/sh).

Exemple :

<check type="exec" cmd="bash -c 'exit $(($RANDOM%2))'">
  <label>Do you feel lucky?</label>
  <help>Try again!</help>
</check>
file

Le check de type file permet de vérifier l'existence ou le type d'un fichier ou répertoire.

Les paramètres sont :

  • file : Le chemin du fichier ou du répertoire à tester.
  • predicate : L'opérateur de comparaison parmi la liste suivante :
    • file_exists (ou e, -e, a -a) : vrai si le fichier ou le répertoire existe.
    • is_dir (ou d, -d) : vrai si file est un répertoire.
    • is_file (ou f, -f) : vrai si file est un fichier.
    • is_link (ou L, -L) : vrai si file est un lien symbolique.
    • is_readable (ou r, -r) : vrai si file est lisible.
    • is_writable (ou w, -w) : vrai si file est inscriptible.
    • is_executable (ou x, -x) : vrai si file est exécutable (pour un répertoire cela correspond d'être traversé).

Exemple :

<check type="file" file="/tmp" predicate="is_dir">
    <label>Test si /tmp est bien un répertoire</label>
    <help>/tmp n'existe pas ou n'est pas un répertoire valide.</help>
</check>
<check type="file" file="/bin/bash" predicate="is_executable" />
pgversion

Le check de type pgversion permet de vérifier la version du serveur PostgreSQL de base de données.

Les paramètres sont :

  • service : Le nom du service d'accès à la base de données.
  • predicate : L'opérateur de comparaison :
    • lt : strictement inférieur ;
    • le : inférieur ou égal ;
    • gt : strictement supérieur ;
    • ge : supérieur ou égal ;
    • eq : égal ;
    • ne : non-égal (différent)
  • version : La version avec laquelle est effectuée la comparaison.
pgempty

Le check de type pgempty est vrai si la base de données référencée par le service est vide.

Les paramètres sont :

  • service : Le nom du service d'accès à la base de données.
phpbug40926
Le check de type phpbug40926 est vrai si PHP n'est pas affecté par le bug #40926.
phpbug45996
Le check de type phpbug45996 est vrai si PHP n'est pas affecté par le bug #45996

A2.5.2 Process <process>

Les process <process> servent à exécuter des commandes/programmes permettant d'effectuer les opérations nécessaires au fonctionnement du module suite à son installation.

Si le programme référencé par la propriété command commence par un / (slash), alors le chemin du programme est considéré comme étant absolu. Dans le cas contraire, le chemin du programme est préfixé avec le chemin de la racine du contexte.

Exemples :

<process command="programs/foo arg1 arg2 arg3" />

La commande exécutée sera ${WIFF_CONTEXT_ROOT}/programs/foo avec les arguments arg1, arg2 et arg3.

<process command="/usr/local/bin/foo arg1 arg2 arg3" />

La commande exécutée sera /usr/local/bin/foo avec les arguments arg1, arg2 et arg3.

Une ensemble de programmes sont livrés par dynacase-core dans le sous- répertoire programs/ du contexte, et leur fonctionnement est décrit dans le manuel de référence de Dynacase.

A2.5.2.1 Programmes personnalisés

Vous avez la possibilité d'écrire vos propres programmes de post-install, post-upgrade, etc. afin d'effectuer des opérations spécifiques à votre module.

Ces programmes seront généralement développés soit en shell Bash soit en PHP. Ils sont disponibles après la phase de décompression de votre paquet, dans le répertoire que vous aurez spécifié à l'empaquetage.

Le programme est exécuté dans le répertoire racine de l'installeur DYNACASE-CONTROL, et les variables d'environnement suivantes sont accessible depuis le script :

Lors de l'installation d'un module :

Lors de la mise à jour d'un module :

A2.5.2.1.1 Écrire un programme personnalisé en shell Bash

Exemple :

#!/bin/bash
 
set -e
 
# -- Récupérer la valeur du paramètre `foo_dir' spécifié par l'utilisateur
PARAM_FOO_DIR=`"$WIFF_ROOT"/wiff --getValue=foo_dir`
 
# -- Créer le répertoire s'il n'existe pas
if [ ! -d "$PARAM_FOO_DIR" ];
  mkdir "$PARAM_FOO_DIR"
fi
 
# -- Ajouter le nom de ce répertoire dans le fichier
# -- `foo_dir.list' dans le sous-répertoire de mon module `FOO'
echo "$PARAM_FOO_DIR" >> "$WIFF_CONTEXT_ROOT"/FOO/foo_dir.list
A2.5.2.1.2 Écrire un programme personnalisé en PHP

Note : Le programme PHP a aussi accès aux variables d'environnement, comme le script Bash, mais le chemin d'include doit être construit en fonction de vos besoins.

Exemple :

#!/usr/bin/env php
<?php
 
$WIFF_ROOT=getenv('WIFF_ROOT');
if( $WIFF_ROOT === false ) {
  print "WIFF_ROOT environment variable is not set!";
  exit( 1 );
}
 
$WIFF_CONTEXT_ROOT=getenv('WIFF_CONTEXT_ROOT');
if( $WIFF_CONTEXT_ROOT === false ) {
  print "WIFF_CONTEXT_ROOT environment variable is not set!";
  exit( 1 );
}
 
# -- Si je dois accéder aux fichier d'include de Dynacase
# -- j'ajoute les répertoires d'include de Dynacase
# -- dans mon include_path PHP
set_include_path(join(PATH_SEPARATOR, array(
  get_include_path(),
  "$WIFF_ROOT/include",
  "$WIFF_CONTEXT_ROOT"
)));
 
# -- A présent, je peux inclure les librairies de l'installeur
require("lib/Lib.Cli.php");
# -- ... et les librairies Dynacase
require("WHAT/Lib.Common.php");
 
$param_foo_dir = wiff_getParamValue('foo_dir');
if( ! is_dir($param_foo_dir) ) {
  $ret = mkdir($param_foo_dir);
  if( $ret === false ) {
    print sprintf("Error: could not create directory '%s'!", $param_foo_dir);
    exit( 1 );
  }
}

A2.5.3 Process <download>

Les process <download> servent à télécharger un fichier et exécuter un traitement sur le fichier téléchargé. Il est utilisé par exemple pour télécharger du code tiers livré sous forme d'archive Zip ou Tar.gz, et de l'installer dans le contexte.

Exemple :

[...]
<parameters>
  <param name="foo_url" label="Foo download URL" type="text" default="http://www.example.net/foo/foo-1.0.0.zip" volatile="Y" />
</parameters>
 
<post-install>
  <download href="@{foo_url}" action="programs/foo_install">
    <label lang="en">Downloading and installing Foo</label>
    <help>An error occured while downloading or installing Foo...</help>
  </download>
</post-install>
[...]

L'élément download est généralement couplé à un paramètre qui permet de demander et modifier l'URL de la ressource à télécharger.

Les propriétés suivantes sont utilisables sur l'élément download :

href
contient l'URL de la ressource à télécharger, ou bien la valeur d'un paramètre demandé précédemment avec la notation @{nom_du_parametre}.
action

contient le chemin d'un script qui sera exécuté avec le fichier téléchargé comme argument (e.g. programs/foo_install /tmp/foo_url_xxx).

L'environnement d'exécution est identique à celui décrit dans la section Programmes personnalisé ci-dessus.

A2.6 Variables dans les process de phase

Certaines propriétés de process de phase peuvent contenir des variables.

Ces variables permettent alors de référencer et d'utiliser la valeur d'un paramètre de module.

La liste des process et des propriétés supportant l'évaluation des variables est décrite ci-dessous.

A2.6.1 Notation

Les variables peuvent être exprimées avec les notations suivantes :

Pour entrer un caractère @ literal il faut doubler le caractère :

Les noms des variables doivent être de la forme [a-zA-Z_][a-zA-Z0-9_]*.

A2.6.2 Process supportant les variables

A2.6.2.1 Process <download>

Dans un process <download>, les propriétés suivantes supportent l'évaluation des variables :

Exemple :

<download href="... @{PARAM_NAME} ..." />

A2.6.2.2 Process <process>

Dans un process <process>, les propriétés suivantes supportent l'évaluation des variables :

Exemple :

<process command="... @{PARAM_NAME} ..." />

A2.6.2.3 Process <check> de type exec

Dans un process <check> de type exec, les propriétés suivantes supportent l'évaluation des variables :

Exemple :

<check type="exec" cmd="... @{PARAM_NAME} ..." />

A2.7 Validation XML

Le format du fichier info.xml peut être validé afin de s'assurer qu'il ne contient pas d'erreurs dans sa structure.

Pour cela, vous pouvez utiliser le fichier de définition webinst-module-1.0.xsd et la commande xmllint comme suit :

$ xmllint --schema webinst-module-1.0.xsd info.xml

A2.8 Changements par rapport à l'ancien format

Liste des éléments supprimés/non-supportés/modifiés par rapport à l'ancien format :

Annexe A3 Migration vers 3.2

A3.1 Depuis une version 3.0

L'upgrade en version 3.2 depuis une version 3.0 n'est pas supportée, et nécessite donc au préalable de passer en version 3.1.

A3.2 Depuis une version 3.1

A3.2.1 importation de familles/documents

A3.2.1.1 Utilisation de importDocuments

L'importation des familles et des documents doit être effectuée avec le script d'API importDocuments, qui remplace l'ancien script d'importation freedom_import, et effectue un contrôle plus strict et précis sur les éléments importés.

Vous devez donc modifier vos fichiers d'importation présents dans info.xml, et/ou vos procédures d'importation, pour utiliser importDocuments à la place de freedom_import.

A3.2.1.2 Structure fichiers ODS

L'importation de vos familles peut nécessiter un découpage de votre fichier ODS/CSV en sous-fichiers ODS/CSV autonomes en termes de dépendances, et importer ceux-ci dans l'ordre adéquat.

En effet, les contrôles plus stricts imposés lors de l'importation, interdisent les références à des éléments qui n'existent pas. Il vous faut donc importer vos éléments dans l'ordre de dépendance.

Pour cela, nous préconisons le découpage suivant :

  1. Un fichier pour la structure de vos familles qui contient les attributs, le paramétrage des attributs, mais ne contient pas de références aux profils (CPROFID, DPROFID), aux cycles (WID), etc.
  2. Un fichier d'importation des documents systèmes qui contient l'importation des documents comme les profils et les cycles.
  3. Un fichier de paramétrage qui va appliquer le paramétrage des profils, des cycles, etc. sur les familles précédemment importées.

A3.2.2 Fichiers méthodes de famille

Un contrôle plus strict est appliqué sur les fichiers méthodes.

A3.2.2.1 Déclaration explicite class X extends Y

Tous les fichiers de méthodes doivent être réécrits sous la forme d'une classe PHP standard, dérivant de la classe d'une autre famille ou de la classe "Doc", à l'aide des tags de commentaires @begin-method-ignore et @end-method-ignore.

Exemple :

/**
 * @begin-method-ignore
 */
class _MA_FAMILLE extends Doc {
/**
 * @end-method-ignore
 */
    public function postModify() {
        [...]
    }
    [...]
/**
 * @begin-method-ignore
 */
}
/**
 * @end-method-ignore
 */

A3.2.2.2 Méthodes de contrôle de vue (@templateController)

Les méthodes utilisées comme contrôleur de vue doivent être déclarées avec un tag de commentaire @templateController. Dans le cas contraire, un message d'erreur sera affiché à la place de la vue.

Le tag @templateController permet de déclarer explicitement les méthodes utilisables comme contrôleur de vue, et d'interdire l'utilisation de toute autre méthode.

Exemple :

/**
 * @begin-method-ignore
 */
class _MA_FAMILLE extends Doc {
/**
 * @end-method-ignore
 */
    [...]
    /**
     * @templateController
     */
    public function maVue() {
        [...]
    }
    [...]
/**
 * @begin-method-ignore
 */
}
/**
 * @end-method-ignore
 */

A3.2.2.3 Méthodes exécutables par FDL_METHOD (@apiExpose)

Les méthodes qui sont exécutées via l'action FDL_METHOD doivent être déclarées avec un tag de commentaire @apiExpose.

Le tag @apiExpose permet de déclarer explicitement les méthodes utilisables par FDL_METHOD, et d'interdire l'utilisation de toute autre méthode.

Exemple :

/**
 * @begin-method-ignore
 */
class _MA_FAMILLE extends Doc {
/**
 * @end-method-ignore
 */
    [...]
    /**
     * @apiExpose
     */
    public function doSomethingOnDocument() {
        [...]
    }
    [...]
/**
 * @begin-method-ignore
 */
}
/**
 * @end-method-ignore
 */

Cette notation est aussi obligatoire pour les menus déclarant un appel de la forme ::myMethod(). Dans ce cas, la méthode myMethod doit avoir aussi le tag @apiExpose.

A3.2.2.4 Méthodes utilisables comme critère de recherche (@searchLabel)

Les méthodes utilisables comme critère de recherche doivent être déclarées avec un tag de commentaire @searchLabel et @searchType.

☞ Voir chapitre 17.8.2.2 Utilisation de méthodes dans l'interface de recherche détaillée.

Exemple :

/**
 * @begin-method-ignore
 */
class _MA_FAMILLE extends Doc {
/**
 * @end-method-ignore
 */
    [...]
    /**
     * @searchLabel Température extérieure
     * @searchType double
     */
    public function exteriorTemperature() {
        return TemperatureSensor::getTemperature();
    }
    [...]
/**
 * @begin-method-ignore
 */
}
/**
 * @end-method-ignore
 */

A3.2.3 Droits négatifs

Les droits négatifs ne sont plus supportés.

Si vous avez utilisé les droits négatifs (boules rouges dans les profils) il vous faudra réécrire ceux-ci en utilisant la notion de rôles.

La structure de la table docperm et les interfaces de saisie des droits ont été modifiés pour prendre en compte ce nouveau fonctionnement.

☞ Voir chapitres Comptes : utilisateurs, groupes et rôles et Sécurité : authentification, droit applicatif, droit documentaire.

Nous préconisons de ne plus gérer les droits par des groupes mais de se baser sur le système des rôles.

Pour savoir si vous avez des droits négatifs, vous pouvez utiliser la requête suivante :

# SELECT * FROM docperm WHERE unacl != 0;

S'il n'y a aucune ligne retournée, aucun droit négatif n'est posé.

A3.2.4 Familles du "Carnet d'adresses" (USER, SOCIETY et SITE)

Les familles USER, SOCIETY et SITE sont désormais fournies par le module dynacase-contact.

Le lien de parenté entre IUSER et USER n'existe plus, et IUSER devient à présent une famille "top-level" sans parents.

Lors de la migration, l'application "Carnet d'adresse" est désactivée. Pour la réactiver, il vous faudra installer le module dynacase-contacts.

A3.2.5 Envoi de mails

Par défaut, les adresses de courriel des utilisateurs ne sont plus visibles pour l'envoi de courriels (depuis l'icône "enveloppe" présent sur les documents). Seules les familles déclarés avec un tag MAILRECIPIENT sont utilisables pour l'envoi de courriels.

Pour réactiver l'ancien fonctionnement sur les IUSER (et LDAPUSER) il vous faudra mettre à jour ces familles pour positionner ce tag MAILRECIPIENT.

☞ Voir chapitre 4.8.2.2 Définition de propriétés de famille du manuel de référence.

Le module dynacase-contacts déclare la famille USER comme destinataire de courriel (il possède le tag MAILRECIPIENT).

A3.2.6 Valeur par défaut DEFAULT

Par le passé (version < 3.2), lors de la déclaration d'une famille, la déclaration d'une valeur par défaut sur un attribut d'une famille mère n'avait pas de répercussion sur la valeur par défaut de cet attribut sur une famille fille.

A présent (version >= 3.2), la valeur par défaut d'un attribut d'une famille fille pourra être la valeur par défaut positionnée sur l'attribut de la famille mère, si la famille fille ne spécifie pas explicitement sa propre valeur par défaut.

La valeur par défaut d'un attribut remonte donc les liens de parenté à la recherche d'une valeur par défaut pour cet attribut.

A3.2.7 Familles système

Vos familles de cycle de vie doivent être déclarés "système" à l'aide du mot-clef USEFOR avec la valeur SW.

☞ Voir chapitre 4.8.2.2 Définition de propriétés de famille du manuel de référence.

La classification, en familles système et familles non-système, des familles livrées par défaut a été modifiée.

Les familles qui ont été basculées en familles "système" sont :

  id  |      name      | usefor
------+----------------+--------
    1 | BASE           | S
    3 | PDOC           | SP
    4 | PDIR           | SP
    5 | SEARCH         | S
    6 | PSEARCH        | SP
   16 | DSEARCH        | S
   18 | GUIDECARD      | SG
   19 | SGUIDECARD     | SG
   20 | WDOC           | SW
   23 | PFAM           | SP
   24 | TEXT           | S
   25 | REPORT         | S
   31 | MSEARCH        | S
   36 | BATCH          | SA
  127 | IGROUP         | S
  129 | GROUP          | S
  130 | ROLE           | S
 1001 | SENTMESSAGE    | S
 1006 | PUBLIMAIL      | SA
 1007 | BASICBATCH     | SA
 1019 | PORTAL_SERVICE | S
 1020 | USER_PORTAL    | S

Ces familles ne sont donc plus accessibles par défaut aux utilisateurs.

A3.2.8 Éditeur htmltext

L'éditeur HTML pour les attributs htmltext a été changé et est à présent CKeditor.

Liste des illustrations

Licence

Ce document est publié sous licence CC http://creativecommons.org/licenses/by-nc-sa/2.0/fr/

Vous êtes libres :

Selon les conditions suivantes :

Édition

Installation & Exploitation
© Anakeen, Anakeen Labs <labs@anakeen.com>
Module Dynacase Platform, version 3.2
Édition 14
Publié le 21/02/2019

Ce livre a été produit avec easybook 4.8, logiciel libre et open source développé par Javier Eguiluz à l'aide de différents composants Symfony.

Anakeen

Créé en 1998, Anakeen est un éditeur expert dans l'amélioration de la gestion des processus et de l'information avec pour objectif principal : valoriser les fonctions support en les libérant des tâches à faible valeur ajoutée. Le résultat opérationnel a toujours été recherché par toutes les entreprises et particulièrement aujourd'hui où le moindre détail peut faire la différence afin d'être ou de rester compétitif sur son marché. Pour chaque fonction support, être en situation de valoriser sa contribution au résultat global de l’entreprise est plus que jamais devenu une nécessité.

Impliqué depuis 1998 dans le logiciel libre, Anakeen est un acteur majeur de la gestion de l'information. Nos contributions pour l'utilisation des standards ouverts, la garantie de l'accès au code source et la grande diversité de nos partenaires vous assure pérennité et réversibilité.

L'ensemble du code PHP de Dynacase Platform est disponible sous licence Open Source, le modèle de données est documenté et public. Mais plus que ça, le code source est commenté dans l'objectif de faciliter sa compréhension pour la réutilisation ou la modification. Aussi toute la documentation concernant le produit est mise en ligne sur www.dynacase.org.

En choisissant un logiciel Open Source, vous faites le choix de la sécurité, car vous avez l'assurance de vérifier le fonctionnement du logiciel et la qualité du code.

Nos offres et services, nous permettent d'assurer le financement du développement produit mais aussi de contribuer chaque jour à l'adoption du business model Open Source.