Guide d’installation

Le Système d’Archivage Electronique Mutualisé, SAEM est constitué de trois applications : 1. un référentiel de donnée développé par la société Logilab ; 2. un espace d’échange reposant sur Alfresco, un outil de GED open source ; 3. une solution d’archivage réalisé par Libriciel.

Afin de faciliter le déploiement et la mise à jour de ces applications, le CD33 a décidé d’utiliser Saltstack. Il s’agit d’un logiciel de gestion de configuration permettant d’installer des applications et d’exécuter des commandes sur des machines distantes. Pour plus d’information sur Salt, il faudra consulter le site officiel à l’adresse <https://saltstack.com/>. Ce document décrit les actions à effectuer pour installer et mettre à jour les différents composants de la solution SAEM sur une distribution CentOs ou Redhat.

Convention

Dans la suite du document la variable "${SAEM_SALT}" fera référence au dossier contenant l’ensemble des livrables nécessaires à l’installation des différents modules. Les éléments coloriés en gras sont mentionnés à titre d’exemple et devront être adapté en fonction du contexte.

Fichiers de Configuration SaltStack (Master/Minion)

L’ensemble des fichiers de configuration SaltStack à modifier sont décrits dans les paragraphes suivants. Attention : Les éléments mentionnés via la mise en forme suivante : valeur devront être adaptées à l’environnement cible.

Configuration du Master SaltStack

  • /etc/salt/master
##### Primary configuration settings #####
##########################################
# The address of the interface to bind to:
# interface: 0.0.0.0
# interface: 10.255.234.39
# Whether the master should listen for IPv6 connections. If this is set to True,
# the interface option must be adjusted, too. (For example: "interface: '::'")
# ipv6: False
# Set the default timeout for the salt command and api. The default is 5
# seconds.
# timeout: 900

  • /etc/salt/master.d/master.conf file_roots:

    base:
    • /srv/salt/
    prod:
    • /srv/salt/
    fileserver_backend:
    • roots
    pillar_roots:
    base:
    • /srv/pillar/base
    prod:
    • /srv/pillar/prod

Configuration des Minions SaltStack


  • /etc/salt/minion
# This configuration file is used to manage the behavior of the Salt Minion. # With the exception of the location of the Salt Master Server, values that are # commented out but have an empty line after the comment are defaults that need # not be set in the config. If there is no blank line after the comment, the # value is presented as an example and is not the default. # Per default the minion will automatically include all config files # from minion.d/.conf (minion.d is a directory in the same directory # as the main minion config file). #default_include: minion.d/.conf # Set the location of the salt master server. If the master server cannot be # resolved, then the minion will fail to start. master: 100.255.111.74 # Set http proxy information for the minion when doing requests proxy_host: localhost proxy_port: 3000 # Set whether the minion should connect to the master via IPv6: ipv6: False

Minion Alfresco

Configuration du Minion Alfresco (/srv/pillar/base/gedsas/init.sls)

alfresco:
# Emplacement du dossier data
  data: **/opt/alfresco-5.0.d/alf_data**
# Nom DNS du serveur ou est installe Alfresco
  host: **alias.cg33.xyz**
# Parametres de la base de donnees
  db:
# Machine et port du serveur de base de donnees
    host: **10.10.10.1**
    port: **9999**
# Nom de la base
    name: **saem-nomdelabase**
# Identifiants pour acceder a la base
    username: **username**
    password: ********
  mail:
    host: **alias.cg33.fr**
    port: 25
    username: XXXX
    password: YYYY
    from:
      default: no-reply@ged.cg33.fr
    auth: false

  ldap:
    enabled: true
  authentication:
    active: true
    allowGuestLogin: false


    userNameFormat: **'%s@cg33.fr'**
    url: **ldap://xxx.cg33.fr:389**
    defaultAdministratorUserNames: **AZY**
    principal: **admin**
    credentials: **secret**
  synchronization:
    groupDifferentialQuery: **(&(objectclass\=group)(!(modifyTimestamp<\={0})))**
    personDifferentialQuery: **(&(objectclass\=user)(userAccountControl\:1.2.840.113556.1.4.803\:\=512)(!(modifyTimestamp<\={0})))**
    groupSearchBase: **ou\=GED-CG33,ou\=Groupes Applications,ou\=Groupes,ou\=CGG,dc=cg33,dc=fr**
    userSearchBase: **ou\=Utilisateurs,ou\=CGG,dc=cg33,dc=fr**
    modifyTimestampAttributeName: **modifyTimestamp**
    syncOnStartup: false
    # Nom DNS du serveur ou est installe la webapp share
    share:
      host: srvmv-web030.cg33.dmz2
    # Parametres du referentiel de logilab
      referentiel:
    # URL du referentiel
      url: http://10.255.231.23:18080
    # Token et secret pour authentification HMAC
      token: id: 3ddfe77d331d48ed9e803b3c2f8a81ce
      secret: a0380072300843368177c9833dc38be6a6931a23e9e74c1eb3ba8bff91512642f84c8a2529384fcc983993e957f5fb0aa7e3707b0d18472db13d29fea96ff3aa
    # Parametres du job de synchro avec le referentiel
      synchro:
    # cron de lancement de la synchro , chaque trois heures ci-dessous
      cronExpression: 0 30 */3 * * ?
    # Parametres de asalae
    asalae:
      url: **http://10.10.10.1**
      login: **admin**
      password: **admin**
    # Parametres du job de recuperation des messages seda d asalae
      poller:
    # cron de lancement du job , chaque deux minutes ci-dessous
      cronExpression: 0 */2 * * * ?

Minion As@lae

Configuration du Minion As@ale (/srv/pillar/base/asalae/init.sls)

asalae:
  lookup:
    dist:
      url: **salt://asalae/files/asalae1.6.4_cakephp1.2.10.zip**
      hash: **md5=fdfca2398b9b27a065608ffc34c95c50**
      name: **asalae1.6.4_cakephp1.2.10**
    db:
      host: **'10.10.10.1'**
      database: **'databasename'**
      user: **'username'**
      login: **'login'**
      password: **'********'**
      port: '1111'
    proxy:
      http: **'http://localhost:3000'**
      https: **'https://localhost:3000'**
    referentiel:
      url: **http://10.10.10.2:18080**
    token:
      id: **ad3ddfe7dflkgh569e803b36876d81cemin**
      secret: **a0380072300843368177csdkljhfdskljhflkjh4536354f91512642f84clkjhlkjshf564sgd5g757e3707b0d18472db13d29fea96ff3aa**

Minion Référentiel

Configuration du Minion Référentiel (/srv/pillar/base/saemref/init.sls)

saemref:
  lookup:
    instance:
      # nom instance referentiel
      name: saemref
      # nom utilisateur systeme
      user: saemref
      # http port
      port: 18080
      oai_port: 18081
      oai_threads: 8
      # Anonymous user
      anonymous_user: **anon**
      anonymous_password: **anon**
      # wsgi settings
      # 2 * 8 = can handle 16 concurrent request
      # and will use 16 database connections.
      wsgi: true
      wsgi_workers: 2
      wsgi_threads: 8
      # Secret keys for encrypting session/cookies data and authentication They
      # are MANDATORY and should not be the same.
      sessions_secret: SETME
      authtk_session_secret: SETME1
      authtk_persistent_secret: SETME2
      # Pool size must be equal to wsgi_threads when using wsgi
      pool_size: 8
      # Run in test mode: will replace some data files to create the instance faster
      test_mode: true
      db:
        driver: postgres
        host: **"10.10.10.2"**
        port: **"9999"**
        name: **name**
        user: **username**
        pass: **password**
        admin:
          login: **admin**
          pass: **admin**
      postgres:
        version: 9.4

Installation de Salt

Saltstack fonctionne de manière centralisée à partir du modèle « maître/esclave ». La terminologie utilisée dans Salt pour désigner le « maître » est « salt-master », un « esclave » est appelé « salt-minion ».

Saltstack repository

La liste des paquets « Salt » est accessible à partir du « repository saltstack ».Pour l’ajouter à la liste des dépôts salt, il faut exécuter les commandes suivantes avec un compte root sur chacune des machines où salt sera installé. Exécuter les commandes suivantes.

Pour une machine reposant sur Redhat/CentOs7

Pour une machine reposant sur Redhat/CentOs6

Salt Master

Installation

Se connecter sur la machine cible avec un compte root Saisir les commandes ci-dessous.

Configuration

  1. Copier le fichier master.conf fourni à l’emplacement et /etc/salt/master.d/.

    $ cp ${SAEM_SALT}/config/master.conf /etc/salt/master.d/master.conf

  2. Modifier le timeout à 900 dans le fichier /etc/salt/master

  3. Copier le contenu du dossier ${SAEM_SALT}/srv/ sous /srv/

  4. Vérifier que le dossier /srv/salt/ contient les sous-dossiers suivants

  1. Editer le fichier /srv/salt/top.sls suivant le modèle ci-dessous
base :
“referentiel”:
saemref
“alfresco”:
gedsas
“asalae”:
asalae

Attention : Les chaînes “referentiel.*”, “alfresco.*” et “asalae.*” devront être remplacées par le nom des machines où seront hébergées les applications cibles.

  1. Editer le fichier /srv/pillar/base/top.sls en suivant le modèle précédent.

Arrêt/Relance du Salt Master

  • Arrêter le master

    $ service salt-master stop

** Démarrer le master

$ service salt-master start

3.3 Salt Minion(s)

3.3.1 Installation

Se connecter sur les machines cibles avec un compte root et saisir les commandes suivantes.

$ yum install salt-minion $ chkconfig salt-minion on

  1. Editer le fichier /etc/salt/minion

Localiser la propriété « master » :

Remplacer #master : salt par master :IP_MASTER où IP_MASTER désigne l’adresse IP du master.

  1. Si le minion utilise un proxy pour accéder à internet
  1. Décommenter et renseigner les paramètres proxy_host et proxy_port.
  2. Si besoin de spécifier un proxy, créer le fichier /root/.curlrc et ajouter la ligne ci-dessous avec les paramètres adéquats
    proxy=PROXY_HOST:PROXY_PORT
  3. Modifier le fichier /root/.bashrc et ajouter la ligne ci-dessous avec les paramètres adéquats
$ export http_proxy=http://111.11.11.1:8080 $ export https_proxy=http://112.11.11.1:8080
  1. Ajouter les proxys dans les formulas SALT

3.3.3 Arrêt/Relance Salt Minion(s)

Arrêter le minion.

$ service salt-minion stop

Démarrer le minion.

$ service salt-minion start

PRE-REQUIS : le master et les minions doivent être démarrés.

Pour vérifier la liste des minions exécuter la commande suivante sur le master.

$ salt-key –L Pour accepter un minion ayant la clé KEY.

$ salt-key -a KEY
Pour rejeter un minion ayant la clé KEY.
$ salt-key -d KEY
Pour tester la communication entre minions et master, exécuter la commande sur le master.
$ salt “*” test.ping

## 4 Installation de la solution SAEM

4.1 Base de données & Serveur PostgreSQL

L’instanciation des bases de données nécessaires à la solution SAEM ainsi que des rôles associés seront à la charge de l’exploitant suivant les bonnes pratiques du service d’Exploitation.

Le serveur de base de données doit être accessibles à partir des différents minions. Il pourra donc être nécessaire d’éditer le fichier pg_hba .conf.

4.2 Description des formules SaltStack

4.2.1 Formula « saemref »

Logilab met à disposition une formule pour l’installation du référentiel. La version courante est accessible sur un dépôt Git à https://framagit.org/saemproject/saemref-formula.

Cette formule est composée de plusieurs « states » : 1. saemref.init : Détermine s’il agit d’une installation ou d’une mise à jour

  1. saemref.install : mise à jour des paquets Cubicweb
  2. saemref.client : configuration du client
  3. saemref.config : mise à jour de la configuration
  4. saemref.db-create : création de la base de données
  5. saemref.supervisor : supervision du processus Cubicweb

4.2.2 Formula « asalae »

Asalae utilise de nombreux logiciels tiers pour son fonctionnement. Le dossier /srv/salt/sae contient l’ensemble des formules utilisées. L’installation est réalisée avec la formule asalae-install orchestrant l’application des différentes formules. Dans la dernière version livrée des formulas, les drivers spécifiques au projet SAEM sont automatiquement créés. A partir de la version SAEM_INSTALL_PACKAGE_V164.tar.gz des formulas SALT installe l’environnement complet d’as@ale en version 1.6.4 avec une base vierge.

  1. asalae.init : Détermine s’il agit d’une installation ou d’une mise à jour

4.2.3 Formula « alfresco »

La formule alfresco est accessible depuis le dépôt Git : https://framagit.org/saemproject/alfresco-formula.git. Elle est composée de plusieurs « states » :

  1. init : Determine s’il agit d’une installation complète ou d’une mise à jour
  1. alfresco : récupération et décompression du ZIP d’installation alfresco sous /opt.
  2. tomcat : installation du serveur tomcat
  3. config : mise à jour des différents fichiers de configuration
  4. clean-deploy : nettoyage des dossiers work, temp et webapps puis redéploiement des WARs.

Informations : Les archives (zip et war) nécessaires à alfresco sont assez volumineux (500 Mo) au total. Le transfert de ces fichiers du master au minion peut prendre une dizaine de minutes.

4.3 Installation en Pré-Production

L’environnement SaltStack par défaut « base » correspond à la pré-production. Les étapes suivantes devront être effectuées à partir de la machine « Salt Master » avec un compte « root ». 1. Editer et adapter les fichiers pillar associés aux trois briques : asal@e, Ged SAS et Référentiel :

  1. /srv/pillar/base/asalae/init.sls
  2. /srv/pillar/base/gedsas/init.sls
  3. /srv/pillar/base/saemref/init.sls
  1. Vérifier que le fichier « top.sls » des pillar est configuré suivant les identifiants des minions déclarés sur la plateforme de Pré-Production (fichier /srv/pillar/base/top.sls).
  2. Rafraîchir les pillars suivant la commande SaltStack suivante
$ salt “*” saltutil.refresh_pillar

4. Installer la solution complète via la commande :

$ salt “*” state.highstate saltenv=base

Avertissement

Cette commande SaltStack permet d’instancier les trois briques de la solution SAEM suivant la configuration définie au sein des pillar.

  1. Si l’installation se déroule avec succès, démarrer depuis le Master Salt les services des différents modules via les commandes SaltStack suivantes :
$ salt “referentiel.preprod” cmd.run “supervisorctl start saemref” $ salt “asalae.preprod” cmd.run “service httpd start” $ salt “alfresco.preprod” cmd.run “service alfresco start”

## 4.4 Installation en Production

La procédure à suivre est similaire à l’installation en pré production.

  1. Editer et adapter les fichiers pillar associés aux trois briques : Asal@ae, Ged SAS et Référentiel de Production :
  1. /srv/pillar/prod/asalae/init.sls
  2. /srv/pillar/prod/gedsas/init.sls
  3. /srv/pillar/prod/saemref/init.sls
  1. Vérifier que le fichier « top.sls » des pillar est configuré suivant les identifiants des minions déclarés sur la plateforme de Production (fichier /srv/pillar/prod/top.sls).
  2. Rafraîchir les pillars
$ salt “*” saltutil.refresh_pillar

4. Installer la solution complète via la commande :

Note

CoffeeScript is not natively supported in PhantomJS versions 2.0.0 and above. If you are going to use CoffeeScript you’ll have to transpile it into vanilla Javascript. See known issues for more details.

Nouveau dans la version 1.1.

Nouveau dans la version 1.1.0-beta4.

Avertissement

Versions before 1.1.0-beta4 that were installed through npm required an unspecific PhantomJS version by means of an npm dependency. This led to lots of confusion and issues against CasperJS not working properly if installed through npm. Starting with 1.1.0 the installation of an engine (PhantomJS, SlimerJS) will be a real prerequisite, regardless of the installation method you choose for CasperJS.

Installing from Homebrew (OSX)

Installation of both PhantomJS and CasperJS can be achieved using Homebrew, a popular package manager for Mac OS X.

Above all, don’t forget to update Formulaes:

$ brew update

For the 1.1 development version (recommended):

$ brew install casperjs --devel

For the 1.0.x stable version:

$ brew install casperjs

If you have already installed casperjs and want to have the last release (stable|devel), use upgrade:

$ brew upgrade casperjs

Upgrade only update to the latest release branch (1.0.x|1.1.0-dev).

Installing from npm

Nouveau dans la version 1.1.0-beta3.

You can install CasperJS using npm:

  • For most users (current version 1.1.0-beta4):

    $ npm install -g casperjs

  • If you want a specific older version:

  • If you want to install the current master from git using npm:

    $ npm install -g git+https://github.com/casperjs/casperjs.git

Note

The -g flag makes the casperjs executable available system-wide.

Avertissement

While CasperJS is installable via npm, it is not a NodeJS module and will not work with NodeJS out of the box. You cannot load casper by using require(“casperjs”) in node. Note that CasperJS is not capable of using a vast majority of NodeJS modules out there. Experiment and use your best judgement.

Installing from git

Installation can be achieved using git. The code is mainly hosted on Github.

From the master branch

$ git clone git://github.com/casperjs/casperjs.git
$ cd casperjs
$ ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs

Once PhantomJS and CasperJS installed on your machine, you should obtain something like this:

$ phantomjs --version
1.9.2
$ casperjs
CasperJS version 1.1.0-beta4 at /Users/niko/Sites/casperjs, using phantomjs version 1.9.2
# ...

Or if SlimerJS is your thing:

$ slimerjs --version
Innophi SlimerJS 0.8pre, Copyright 2012-2013 Laurent Jouanneau & Innophi
$ casperjs
CasperJS version 1.1.0 at /Users/niko/Sites/casperjs, using slimerjs version 0.8.0

You are now ready to write your first script!

Installing from an archive

You can download tagged archives of CasperJS code:

Latest development version (master branch):

Latest stable version:

Operations are then the same as with a git checkout.

CasperJS on Windows

Phantomjs installation additions

  • Append ";C:\phantomjs" to your PATH environment variable.
  • Modify this path appropriately if you installed PhantomJS to a different location.

Casperjs installation additions

Nouveau dans la version 1.1.0-beta3.

  • Append ";C:\casperjs\bin" to your PATH environment variable (for versions before 1.1.0-beta3 append ";C:\casperjs\batchbin" to your PATH environment variable).
  • Modify this path appropriately if you installed CasperJS to a different location.
  • If your computer uses both discrete and integrated graphics you need to disable autoselect and explicitly choose graphics processor - otherwise exit() will not exit casper.

You can now run any regular casper scripts that way:

`` ».. code-block:: text

C:> casperjs myscript.js

Colorized output

Note

Nouveau dans la version 1.1.0-beta1.

Windows users will get colorized output if ansicon is installed or if the user is using ConEmu with ANSI colors enabled.

Compilation (Optionaly)

  • .NET Framework 3.5 or greater (or Mono 2.10.8 or greater) for casperjs.exe in the bin/ directory

Known Bugs & Limitations

  • Due to its asynchronous nature, CasperJS doesn’t work well with PhantomJS” REPL.