Outils pour utilisateurs

Outils du site


mise_en_place_de_opensi_4.8_ec

OpenSI

OpenSI est un logiciel Open-Source existant en deux versions. La version communautaire, gratuite, et la version dite professionnelle payante.

Ce tutoriel montre la mise en place sur un serveur Debian de la version communautaire.

Installation d'un serveur OpenSI 4.8-EC sur Debian

La version 4.8-EC est disponible depuis décembre 2010.

L'objectif est de présenter une méthode rapide et simple d'installation d'un serveur OpenSI version 4.8-EC sur un serveur Debian/Lenny. Il importera une fois l'installation faite de modifier certaines choses, notamment la connexion mysql du user opensi et le mot de passe du superviseur. Un script de sauvegarde et une méthode de restauration seront proposés ainsi que la mise en place d'un serveur sécurisé par certificat SSL/TLS.

Remarque : ce tutorial fonctionne de manière identique sous Debian version Squeeze, Etch et Sarge ( attention MySQL 4 dans ce cas, ce qui ne pose aucun problème ). Son adaptation à une autre distribution est aisée ( je l'ai testé sur Fedora, OpenSuse et même OpenSolaris sans difficultés ) car en fait assez peu de directives propres à Debian ( aptitude, update-rc.d … ) sont utilisées.

Les packages utilisés sont ceux considérés comme stables à la mi-février 2010.

Le serveur est mis en place avec une configuration basique de Debian, seul ssh et postfix en smtp local ( pour les mails au root ! ) sont activés.

Le serveur utilisé pour ce tutorial a les caractéristiques suivantes :

  • CPU Celeron 2,93Ghz,
  • RAM 256Mo,
  • Disque dur 80G0 IDE,
  • Codage caractères UTF8, attention cela impose certaines choses à OpenSI serveur ( notamment au niveau des options tomcat ) qui n'est pas, à ce jour, compatible UTF8.

Ce serveur est exploité en production et supporte sans difficulté 50 utilisateurs simultanés.

Le disque est partitionné ainsi :

Partitions primaires
Point de montage Taille Type FS
/boot 100Mo Ext2
swap 512Mo swap
/ ( voir note plus bas ) 500Mo Ext3
Partitions logiques
Point de montage Taille Type FS
/usr 5Go Ext3
/usr/local 5Go Ext3
/opt 10Go Ext3
/var 2Go Ext3
/tmp 1Go Ext3
/home le reste Ext3

Toutes les commandes se font en root ( sous Ubuntu pour éviter trop de sudo …passez en root par sudo -i le temps de l'installation ), attention de bien respecter les commandes chown présentées dans ce tutorial et relatif au user tomcat. Ne pas céder à la "paresse" en abusant du chmod -R 777 !!!!

Note : Il peut être utile de passer la partition "/" à 2Go si vous envisagez la recompilation du noyau. Des tests effectués sur les noyaux linux 2.6.31 ont montré que 500Mo ne suffisent pas pour une installation du noyau par la méthode Debian.

Astuce personnelle pour "blinder un serveur"

Les partitions permettent d'éviter certaines choses désagréables comme par exemple l'ajout intempestif de logiciels ou la copie d'exécutables dans /tmp ou $HOME. Pour cela, une fois tout installé et configuré, modifier la table de montage ainsi :

vi /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>             <dump>  <pass>
proc            /proc           proc    defaults                 0       0
/dev/hda3       /               ext3    errors=remount-ro        0       1
/dev/hda1       /boot           ext2    defaults                 0       2
/dev/hda10      /home           ext3    rw,nosuid,nodev,noexec   0       2
/dev/hda7       /opt            ext3    ro                       0       2
/dev/hda9       /tmp            ext3    rw,nosuid,nodev,noexec   0       2
/dev/hda5       /usr            ext3    ro                       0       2
/dev/hda6       /usr/local      ext3    ro                       0       2
/dev/hda8       /var            ext3    rw,nosuid,nodev,noexec   0       2
/dev/hda2       none            swap    sw                       0       0

Déroulement de l'installation

Dans un premier temps, mettre en place la plate-forme d'accueil de OpenSI comprenant :

  • Serveur MySQL, version 5.0 package Debian ou RedHat,
  • JDK java, version 1.6.0-18 ( 32 ou 64bits voir plus loin ),
  • Tomcat, version 5.5.28 ou 6.0.24
  • Ant, version 1.8.0

J'ai pris le parti de rester sur la version 32 bits du jdk et le version 5.5.28 du serveur tomcat. Toutefois les packages sont disponibles pour la version 64 bits du jdk et la version 6.0.24 de tomcat. L'adaptation des commandes est simple.

Serveur MySQL

On peut difficilement faire plus simple. Sur les RedHat like on utilise yum.

aptitude install mysql-server

Renseigner le mot de passe du root mysql ( les exemples suivants sont présentés avec "motdepasse" ), il sera utile lors de la création initiale de la base.

Pour Redhat/Mandriva/Fedora

yum install mysql-server
service mysqld start
chkconfig mysqld on
mysqladmin -u root password motdepasse

La version 4.8 de opensi semble plus gourmande avec mysql, les valeurs par défaut du serveur sont donc un peu juste. Editer le fichier /etc/mysql/my.cnf et rajouter la ligne suivante dans la section [mysqld]

set-variable=innodb_buffer_pool_size=128M

La valeur peut aller jusqu'a 75% de la RAM du serveur si celui-ci est dédié à OpenSI. Relancer mysql après la modification de ce paramètre.

/etc/init.d/mysql restart

Plate-forme JAVA

J'ai fait le choix de ne pas installer les packages de la distribution Debian, mais directement les binaires fournis sur les sites officiels de sun et apache. Afin de respecter les normes Debian, ces binaires seront installé sous /usr/local.

Les versions utilisées sont :

  • ant 1.8
  • tomcat 5.5.28, la version 6.0.24 fonctionne aussi
  • jdk 6.18

En fait il est possible d'utiliser toute version 5 ou 6 de tomcat ainsi que tout jdk depuis la version 4. Cette méthode à aussi un avantage, elle fonctionne sur toutes les distributions.

Il est possible de charger les packages suivants depuis les sites officiels, pour ma part je les ai mis sur l'un de mes serveurs.

Récupérer sur Internet les packages suivants :

Les enregistrer sous /home. Il est possible d'utiliser la commande wget. Le code suivant est donné sous réserve de modification des liens Internet.

cd /home
wget -O apache-ant-1.8.0-bin.tar.gz "http://www.concarnux.org/fichiers/apache-ant-1.8.0-bin.tar.gz"
wget -O apache-tomcat-5.5.28.tar.gz "http://www.concarnux.org/fichiers/apache-tomcat-5.5.28.tar.gz"
wget -O jdk-6u18-linux-i586.bin "http://www.concarnux.org/fichiers/jdk-6u18-linux-i586.bin"

Si vous souhaitez utiliser la version 6.0.24 de tomcat

wget -O apache-tomcat-6.0.24.tar.gz "http://www.concarnux.org/fichiers/apache-tomcat-6.0.24.tar.gz"

Si vous souhaitez utiliser la version 64 bits du jdk

wget -O jdk-6u18-linux-x64.bin "http://www.concarnux.org/fichiers/jdk-6u18-linux-x64.bin"

Puis les installer en suivant les commandes ci-dessous et en répondant aux questions posées par l'installateur de java :

root@machine:~$ cd /usr/local
root@machine:~$ tar -xzf /home/apache-ant-1.8.0-bin.tar.gz
root@machine:~$ tar -xzf /home/apache-tomcat-5.5.28.tar.gz
root@machine:~$ chmod u+x /home/jdk-6u18-linux-i586.bin
root@machine:~$ /home/jdk-6u18-linux-i586.bin
root@machine:~$ ln -s apache-ant-1.8.0 ant
root@machine:~$ ln -s apache-tomcat-5.5.28 tomcat
root@machine:~$ ln -s jdk1.6.0_18 java
Ajouter un user tomcat ( ne pas mettre tomcat comme mot de passe ! ), qui sera propriétaire du serveur tomcat et de l'application OpenSI.
root@machine:~$ adduser tomcat
Créer un script de lancement de tomcat sous /etc/init.d
root@machine:~$ vi /etc/init.d/tomcat

#! /bin/bash
 
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Demarrage de tomcat au boot
# Description:
### END INIT INFO
 
NAME="Jakarta Tomcat 5.5.28"
TOMCAT_HOME=/usr/local/tomcat
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/java
CATALINA_OPTS="-Dfile.encoding=iso8859-1 -Djava.awt.headless=true"
TOMCAT_USER=tomcat
LC_ALL=fr_FR
export TOMCAT_HOME CATALINA_HOME JAVA_HOME CATALINA_OPTS TOMCAT_USER LC_ALL
cd $TOMCAT_HOME/logs
case "$1" in
  start)
    echo -ne "Démarrage $NAME. "
    /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
    ;;
  stop)
    echo -ne "Arrêt $NAME. "
    /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh
    ;;
  restart)
    echo -ne "Re-démarrage $NAME. "
    /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh
    /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
  ;;
  *)
  echo "Usage: /etc/init.d/tomcat {start|stop|restart}"
  exit 1
  ;;
esac
 
exit 0

La ligne "CATALINA_OPTS="-Dfile.encoding=iso8859-1 -Djava.awt.headless=true" est importante, car le serveur est en codage UTF8 et il est impossible de charger des images ou logos sans la directive -Dfile.encoding=iso8859-1. A ce jour OpenSI serveur n'est pas compatible UTF8. La directive -Djava.awt.headless=true permet notamment sur les plateformes Ubuntu de bien afficher le graphique d'évolution du chiffre d'affaire et de ne pas avoir dans les logs tomcat le message suivant :

...
- Servlet.service() for servlet org.experlog.lite.OpenEAS threw exception
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
...

Ce script fonctionne sous les Redhat like, mais n'est pas compatible avec la commande chkconfig.

Ce script est très succinct, mais efficace.

Le rendre exécutable et le mettre dans le démarrage au boot

root@machine:~$ chmod u+x /etc/init.d/tomcat
root@machine:~$ update-rc.d tomcat defaults
Puis affecter le programme tomcat au user tomcat
root@machine:~$ chown -R tomcat:tomcat /usr/local/apache-tomcat-5.5.28/
Editer /etc/environment et ajouter les deux lignes suivantes :

JAVA_HOME=/usr/local/java
ANT_HOME=/usr/local/ant

Editer /etc/profile afin de compléter le PATH.

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
 
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
 
if [ "$PS1" ]; then
  if [ "$BASH" ]; then
    PS1='\u@\h:\w\$ '
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi
 
PATH=$PATH:/usr/local/java/bin:/usr/local/ant/bin
export PATH
 
umask 022

Relancer le serveur afin de tester le démarrage automatique de tomcat. La commande netstat donne les ports ouverts.

netstat -ltaupen

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        User       Inode       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      103        9343        3026/mysqld     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          4763        1873/sshd       
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      0          4890        1940/master     
tcp        0      0 192.168.1.110:22        192.168.1.6:41076       ESTABLISHED 0          5190        2011/0          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       5271        1959/java       
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       5269        1959/java       
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       5248        1959/java       
tcp6       0      0 :::22                   :::*                    LISTEN      0          4761        1873/sshd       

Les ports 8009 et 8080 doivent être ouvert en écoute. En pointant un navigateur sur l'IP du serveur ( 192.168.1.110 dans l'exemple ) et le port 8080 on doit voir apparaitre la page d'accueil de tomcat. Le port 3306 correspond au serveur mysql. Le port 25 concerne le serveur smtp local.

http://192.168.1.110:8080/

Utilisation de la commande nmap ( le package s'installe par aptitude install nmap )

nmap localhost

Starting Nmap 4.62 ( http://nmap.org ) at 2009-09-10 15:33 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 1710 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
3306/tcp open  mysql
8009/tcp open  ajp13
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.166 seconds

Serveur OpenSI

Charger sur le net le package OpenSI Serveur version 4.7.8-1 et le mettre sous /home. Vous pouvez aussi utiliser wget :

cd /home
wget -O opensi-serveur-4.8.tgz "http://www.concarnux.org/fichiers/opensi-serveur-4.8.tgz"

Décompresser le package

root@machine:~$ cd /usr/local/tomcat/webapps
root@machine:~$ mkdir OpenSI
root@machine:~$ cd OpenSI
root@machine:~$ tar -xvzf /home/opensi-serveur-4.8.tgz
root@machine:~$ chown -R tomcat:tomcat /usr/local/tomcat/webapps/OpenSI
Lancer le script deploy situé sous /usr/local/tomcat/webapps/OpenSI
root@machine:~$ cd /usr/local/tomcat/webapps/OpenSI
root@machine:~$ ./deploy
Ce script va, entre autre créer un répertoire, opensi-parametres sous /usr/local/tomcat/webapps. Se positionner dans le répertoire /usr/local/tomcat/webapps/opensi-parametres/configuration et recopier le fichier de configuration modèle.
root@machine:~$ cd /usr/local/tomcat/webapps/opensi-parametres/configuration
root@machine:~$ cp ../../OpenSI/opensi.cfg.template opensi.cfg
Editer le fichier /usr/local/tomcat/webapps/opensi-parametres/configuration/opensi.cfg et modifier les 3 lignes suivantes :

app.UploadDir: /usr/local/tomcat/webapps/OpenSI
opensi.absdir: /usr/local/tomcat/webapps/OpenSI
opensi.CheckConnexion: /usr/local/tomcat/webapps/OpenSI/ESRootDir/ESTemplates/Shop/CheckConnexion.tmpl

Très important, bien définir les droits au user tomcat à ce stade, si vous avez exactement suivi les commandes, ce fichier,opensi.cfg, appartient au root. Le fichier de log de tomcat ( /usr/local/tomcat/logs/catalina.out ) sinon indiquera un accès impossible au fichier opensi.cfg.

root@machine:~$ chown -R tomcat:tomcat /usr/local/apache-tomcat-5.5.28/
Le script “deploy” a créé des liens symboliques, il faut autoriser le serveur Tomcat à les suivre. Editer le fichier de configuration “context.xml" de tomcat, qui se trouve dans le répertoire /usr/local/tomcat/conf et remplacer la ligne <context> comme dans l'exemple ci-dessous :

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<!--<Context> -->
<Context allowLinking="true">
 
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
 
</Context>

Lors de la compilation, il y a des messages d'erreurs dus au codage UTF8, en production ce n'est pas très génant, toutefois si on est rigoureux et grace au shell suivant, il est possible de ré-encoder les fichiers. Comme pré-requis installer le package recode.

aptitude install recode

Puis sous /home créer un fichier recodeUTF8.sh et y copier les lignes ci-dessous.

#!/bin/sh
 
# Initialiser le filtre d'extensions.
extensions[0]="*.java"
#extensions[1]="*.htm"
#extensions[2]="*.sql"
 
# Pour chaque extension.
for ext in ${extensions[*]}; do
 
        # Rechercher et convertir les fichiers.
        for fic in `find ./OpenSI -name "$ext"`; do
 
                # Executer la commnde de conversion.
                recode `file -i "$fic" | cut -d= -f2`..utf8 $fic
 
        done
 
done

Rendre le fichier executable

chmod u+x recodeUTF8.sh

Se positionner au "bon endroit" et lancer le shell.

cd /usr/local/tomcat/webapps
/home/recodeUTF8.sh

Si vous utiliser ant, version 1.8, il faut corriger le fichier build.xml en rajoutant includeantruntime="false" dans la ligne de compilation javac ( target name="compile", voir çi-dessous ), ceci afin d'éviter un warning.

<!-- compile the query package -->
    <target name="compile"
            depends="init">
      <echo message="Compiling the sources..."/>
            <javac srcdir="${src}" destdir="${build}" debug="on" includeantruntime="false">
              <classpath refid="classpath" />
                                <compilerarg value="-Xlint:all" />
            </javac>
    </target>

Procéder ensuite à la compilation du programme.

root@machine:~$ cd /usr/local/tomcat/webapps/OpenSI/WEB-INF
root@machine:~$ ant dist
Redémarrer tomcat.
root@machine:~$ /etc/init.d/tomcat restart
Mettre en place la base de données.
root@machine:~$ cd /usr/local/tomcat/webapps/OpenSI/database
root@machine:~$ mysql -u root -p < SchemaGeneral.sql
Le programme demandera alors le mot de passe du root mysql qui fut initialisé lors de l'installation du package mysql-server.

A ce stade le serveur est opérationnel et il est possible d'y accéder depuis le client en accès non sécurisé ( port 8080 ). Le mot de passe du superviseur est "root", pensez à le changer via le client opensi.

Sauvegarde des données

Un petit script sans prétention pour sauvegarder rapidement les bases. Dans un premier temps, créer un répertoire qui contiendra les sauvegardes :

root@machine:~$ mkdir /home/svgmysql
Puis créer le script suivant dans le répertoire /root, il sera lancé chaque jour par le cron. L'exemple utilise le mot de passe du root mysql qui est dans ce cas : motdepasse.
root@machine:~$ vi /root/svgmysql.sh

#!/bin/sh
for x in `mysql -u root -pmotdepasse -Bse "show databases"`; do
  mysqldump -u root -pmotdepasse $x | gzip -9 > /home/svgmysql/$x.`date +%Y%m%d`.gz
done

Le rendre exécutable. Ne donner l'accès que au root, ce script contient en effet le mot de passe principal de mysql en clair !

root@machine:~$ chmod 0700 /root/svgmysql.sh
Et enfin le rajouter dans le cron
root@machine:~$ vi /etc/crontab

00 22   * * *   root    /root/svgmysql.sh

La sauvegarde sera lancée chaque jour à 22H00.

Important : ce script ne sauvegarde que les bases mysql, mais pas l'ensemble des données OpenSI, notamment les photos ou les logos, vu l'arborescence de ce tutorial, sous /usr/local/tomcat/webapps/opensi-parametres

Sauvegarde distante et sécurisée

Le script ci-dessus ne permet pas une vraie sécurité des sauvegardes. L'idéal est de sauvegarder sur un support distant. Je vais présenter ici une solution permettant de créer une archive tar des données OpenSI sur un serveur distant via ssh.

Afin d'automatiser le tout il est nécessaire de mettre en place une identification par clés asymétriques, permettant ainsi la connexion distante sans mot de passe. Pour cela je vais utiliser le user tomcat qui sera chargé de copier les sauvegardes locales vers le serveur distant. Nous avons donc deux serveurs :

  • production : qui contient OpenSI et les bases
  • sauvegarde : qui accueillera les sauvegardes.

Le propos ici n'est pas de détailler le principe d'identification par clés asymétriques ( voir avec l'ami google pour plus d'info ! ).

Sur le serveur production, se connecter tomcat et créer les clés ssh. Le système va poser 3 questions faire simplement Entrée à chaque fois.

su - tomcat
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tomcat/.ssh/id_rsa):  
Created directory '/home/tomcat/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
Your identification has been saved in /home/tomcat/.ssh/id_rsa.
Your public key has been saved in /home/tomcat/.ssh/id_rsa.pub.
The key fingerprint is:
73:89:05:f8:15:ba:7d:5b:84:7c:9f:a8:e5:05:28:75 tomcat@adi155.adimcor.eu
The key's randomart image is:
+--[ RSA 2048]----+
|       .. .o E   |
|      .  oo.o.   |
|       ..o..o.o  |
|        .=.. oo..|
|        S + .o.o.|
|         o .+o.  |
|           ...   |
|                 |
|                 |
+-----------------+

Le petit dessin va être différent sur vos machines. Cette commande a créé sous la home directory un répertoire .ssh qui contient deux fichiers :

  • id_rsa, la clé privée,
  • id_rsa.pub, la clé publique qui sera à transférer sur le serveur de sauvegarde.

Sur le serveur de sauvegarde, créer un user tomcat et y mettre un mot de passe. Ne rien faire de plus. ( vérifier quand même la place disque )

Revenir sur le serveur production et toujours sous le user tomcat, transférer la clé publique.Vous devrez donner le mot de passe du user tomcat sur la machine sauvegarde pour le transfert. Ensuite cela sera inutile, l'indentification se faisant pas les clés.

sh-copy-id tomcat@sauvegarde
The authenticity of host 'sauvegarde (192.168.1.111)' can't be established.
RSA key fingerprint is 35:69:ab:f8:26:71:56:6f:86:b8:19:56:ce:25:31:dc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'sauvegarde,192.168.1.111' (RSA) to the list of known hosts.
tomcat@sauvegarde's password: 
Now try logging into the machine, with "ssh 'tomcat@sauvegarde'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Remplacer sauvegarde par votre serveur distant et à la demande d'authentification du serveur répondre "yes"

Tester que vous pouvez vous connecter en tomcat sur le serveur distant sans taper le mot de passe.

root@machine:~$ ssh tomcat@sauvegarde
root@machine:~$ exit
De nouveau sur le serveur de production, tester le transfert des sauvegardes par la commande suivante :
root@machine:~$ tar -cvf - /home/svgmysql/ | ssh tomcat@sauvegarde "cat > sauvegarde.tar"
Il suffit que le user tomcat est un accès en lecture du répertoire /home/svgmysl sur le serveur de production, ce qui est la cas par défaut.

En se connectant sur le serveur de sauvegarde en tomcat, le fichier sauvegarde.tar doit se trouver dans la home directory.

Modification du script de sauvegarde

Toujours sous le user tomcat, créer le script suivant :

root@machine:~$ vi svgdistante.sh

#!/bin/bash
tar -cf - /home/svgmysql/ | ssh tomcat@sauvegarde "cat > svgopensi.`date +%Y%m%d`.tar"

Le rendre exécutable.

root@machine:~$ chmod u+x svgdistante.sh
Puis repasser sous root et modifier le script initial de sauvegarde
root@machine:~$ vi /root/svgmysql.sh

#!/bin/sh
for x in `mysql -u root -pmotdepasse -Bse "show databases"`; do
  mysqldump -u root -pmotdepasse $x | gzip -9 > /home/svgmysql/$x.`date +%Y%m%d`.gz
done
su - tomcat -c "/home/tomcat/svgdistante.sh"

Le tester en le lançant manuellement :

root@machine:~$ /root/svgmysql.sh
Sur le serveur sauvegarde dans la home directory du user tomcat doit se trouver un fichier type "svgopensi.20090917.tar". La tâche restant programmée dans le cron, chaque jour à 22H00 une sauvegarde locale sera faite et une copie sur un serveur distant dans la foulée.

Attention en cas de sauvegarde sur un serveur via une ADSL fonctionne parfaitement, mais utilise le débit montant de l'ADSL, c'est à dire au mieux 1Mbit/s !!!

Restauration des données

Sauvegarder ne sert pas à grand chose, voir à rien, si il est impossible de restaurer. Il importe bien sur de sauvegarder les données créées par le script précédent ailleurs que sur le même serveur.

Principe de restauration

Pour l'exemple nous allons considérer que tout est perdu. Le serveur est détruit, reprendre donc la réinstalation basique complète de OpenSI.

Il n'existait qu'un dossier "MABOITE" avec 2 exercices comptables. Le "crash" s'est produit le 12 septembre 2009. Nous allons utiliser les données de la veille. Les sauvegardes doivent donc être les suivantes :

  • FACT_MABOITE.20090911.gz
  • CPTA_0_MABOITE.20090911.gz
  • CPTA_1_MABOITE.20090911.gz
  • opensi.20090911.gz

Il n'est pas utile de restaurer les bases internes mysql. La reinstallation de mysql-server suffit. Récupérer depuis la sauvegarde les fichiers ci-dessus et les placer sous /home/svgmysql.

Décompresser les sauvegardes :

cd /home/svgmysql
gunzip FACT_MABOITE.20090911.gz
gunzip CPTA_0_MABOITE.20090911.gz
gunzip CPTA_1_MABOITE.20090911.gz
gunzip opensi.20090911.gz

Se connecter en root sous mysql et créer les 4 bases de données :

mysql -u root -pmotdepasse

mysql> create database opensi;
mysql> create database FACT_MABOITE;
mysql> create database CPTA_0_MABOITE;
mysql> create database CPTA_1_MABOITE;
mysql> quit

Puis charger les données, il est possible de mettre le mot de passe du root, afin d'éviter de la taper à chaque fois, dans la ligne de commande comme dans l'exemple suivant :

mysql -u root -pmotdepasse opensi < opensi.20090911
mysql -u root -pmotdepasse FACT_MABOITE < FACT_MABOITE.20090911
mysql -u root -pmotdepasse CPTA_0_MABOITE < CPTA_0_MABOITE.20090911
mysql -u root -pmotdepasse CPTA_1_MABOITE < CPTA_1_MABOITE.20090911

Si il existe plusieurs dossiers, il suffit donc de restaurer une fois la base opensi, puis les bases FACT et CPTA de chaque dossier.

Si le serveur n'est pas détruit, cette méthode permet également de migrer vers un autre serveur simplement, ou encore de revenir à une situation antérieure ( utile dans le cas d'une mise à jour de OpenSI ).

Remarque : je redémarre toujours tomcat après cette manipulation.

Changer le mot de passe opensi

Par défaut opensi créé un user mysql avec la connexion suivante : opensi/opensi.

Pour changer ceci, il faut redéfinir le mot de passe dans mysql du user opensi et modifier le fichier opensi.cfg en conséquence. Attention pour des mises à jour, les scripts fournis supposent que la connexion se fait en opensi/opensi, il sera donc nécessaire d'adapter les scripts. Modification du mot de passe MySQL. Passage en opensi/motdepasse.

root@machine:~$ mysql -u opensi -popensi

mysql> set password = password( 'motdepasse');
Query OK, 0 rows affected (0.00 sec)
mysql> quit

Puis modifier le fichier de configuration opensi.cfg

root@machine:~$ cd /usr/local/tomcat/webapps/opensi-parametres/configuration/
root@machine:~$ vi opensi.cfg

...
# Paramètres de connexion à la base de données

opensi.serveurdb: jdbc:mysql://localhost/
jdbc.Driver: com.mysql.jdbc.Driver
jdbc.Url: jdbc:mysql://localhost/opensi

jdbc.User: opensi
# Changer ici le mot de passe
jdbc.Password: motdepasse
jdbc.MaxConn: 100
jdbc.MinConn: 20

...

Relancer tomcat

root@machine:~$ /etc/init.d/tomcat restart

Mettre en place un serveur sécurisé

Il ne s'agit pas ici de faire un tutoriel sur SSL, mais de montrer la mise en place rapide et efficace de certificat pour tomcat.

Se connecter sous le user tomcat

root@machine:~$ su - tomcat
Il faut dans un premier temps générer le keystore ( la clef privé ) via la commande keytool. Pour créer la clef, il faut définir un alias (le nom en toutes lettres) et un nomdustockage (le nom du fichier). Retenez bien le nom de l'alias que vous spécifiez. La syntaxe est la suivante :

keytool -genkey -keyalg [RSA/DSA] -alias [nom-alias] -keystore [nomdustockage]

Il est possible d'omettre l'option -keystore, le nom du stockage sera alors .keystore. La commande utilise l'algorithme de cryptage RSA et définie une validité de 10 ans ( la valeur par défaut est 90 jours ).

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -validity 3650
Tapez le mot de passe du Keystore :  // la valeur par défaut est changeit, mettre par exemple motdepasse.
Ressaisissez le nouveau mot de passe : 
Quels sont vos prénom et nom ?
  [Unknown] :  Roger Dupont
Quel est le nom de votre unité organisationnelle ?
  [Unknown] :  Informatique
Quelle est le nom de votre organisation ?
  [Unknown] :  MABOITE
Quel est le nom de votre ville de résidence ?
  [Unknown] :  QUIMPER
Quel est le nom de votre état ou province ?
  [Unknown] :  Bretagne
Quel est le code de pays à deux lettres pour cette unité ?
  [Unknown] :  FR
Est-ce CN=Roger Dupont, OU=Informatique, O=MABOITE, L=QUIMPER, ST=Bretagne, C=FR ?
  [non] :  oui

Spécifiez le mot de passe de la clé pour <tomcat>
	(appuyez sur Entrée s'il s'agit du mot de passe du Keystore) :  // Faire juste Entrée à ce niveau.

Le mot de passe du keystore est important, il devra être renseigné dans le fichier server.xml ( voir plus loin ).

Ceci à pour effet de créer un fichier .keystore dans le répertoire du user tomcat.

ls -al
total 24
drwxr-xr-x 2 tomcat tomcat 4096 sep 12 09:49 .
drwxr-xr-x 5 root   root   4096 sep 11 08:59 ..
-rw-r--r-- 1 tomcat tomcat  220 sep 10 15:07 .bash_logout
-rw-r--r-- 1 tomcat tomcat 3116 sep 10 15:07 .bashrc
-rw-r--r-- 1 tomcat tomcat 1374 sep 12 09:49 .keystore
-rw-r--r-- 1 tomcat tomcat  675 sep 10 15:07 .profile

Les commandes suivantes permette de vérifier le keystore.

keytool -list -alias tomcat
Tapez le mot de passe du Keystore :  
tomcat, 12 sept. 2009, PrivateKeyEntry, 
Empreinte du certificat (MD5) : 84:B3:12:B7:53:50:0E:AF:E2:DC:3D:DD:3A:DC:16:97
tomcat@adi001:~$ keytool -list -keystore .keystore
Tapez le mot de passe du Keystore :  

Type Keystore : JKS
Fournisseur Keystore : SUN

Votre Keystore contient 1 entrée(s)

tomcat, 12 sept. 2009, PrivateKeyEntry, 
Empreinte du certificat (MD5) : 84:B3:12:B7:53:50:0E:AF:E2:DC:3D:DD:3A:DC:16:97


keytool -list -alias tomcat
Tapez le mot de passe du Keystore :  
tomcat, 12 sept. 2009, PrivateKeyEntry, 
Empreinte du certificat (MD5) : 84:B3:12:B7:53:50:0E:AF:E2:DC:3D:DD:3A:DC:16:97

Sortir du user tomcat pour revenir à root.

Modifier en suite le fichier serveur.xml, les lignes relatives à SSL sont par défaut commentées, retirer le commentaire et rajouter les deux clauses keystoreFile et keystorePass.

user@machine:~$ vi /usr/local/tomcat/conf/server.xml

...
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="/home/tomcat/.keystore" keystorePass="motdepasse" />
...

Remarque : pour n'autoriser que le protocole sécurisé, il suffit de commenter la section relative au port 8080.

Redémarrer tomcat

user@machine:~$ /etc/init.d/tomcat restart
Les commandes suivantes montrent l'ouverture du port 8443
user@machine:~$ netstat -ltaupen

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        User       Inode       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      103        4820        1946/mysqld     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          4732        1864/sshd       
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      0          5080        2069/master     
tcp        0      0 192.168.1.110:22        192.168.1.3:42188       ESTABLISHED 0          10120       3667/0          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       10697       3933/java       
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       10695       3933/java       
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       10685       3933/java       
tcp6       0      0 :::22                   :::*                    LISTEN      0          4730        1864/sshd       
tcp6       0      0 :::8443                 :::*                    LISTEN      1000       10691       3933/java       

user@machine:~$ nmap localhost

Starting Nmap 4.62 ( http://nmap.org ) at 2009-09-12 10:38 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 1709 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
3306/tcp open  mysql
8009/tcp open  ajp13
8080/tcp open  http-proxy
8443/tcp open  https-alt

Nmap done: 1 IP address (1 host up) scanned in 0.153 seconds

Pointer un navigateur sur https://192.168.1.110:8443 et accepter le certificat afin de le charger dans Firefox. Cette manipulation doit être faite sur tous les clients désirant accéder à OpenSI.

Le certificat étant auto-signé, le navigateur Firefox ne peut le valider comme si il émanait de Verisign ( c'est possible mais plus cher !!! )

Il suffit ensuite de paramétrer le client OpenSI en cochant le case "serveur sécurisé" et en changeant le port de 8080 à 8443.

Compilation du client OpenSI

A affiner…

mkdir opensi.tmp
cp opensi.xpi opensi.tmp
cd opensi.tmp
unzip opensi.xpi
ls
rm -f opensi.xpi
mv chrome chrome.old
mkdir chrome
cd chrome.old
jar -xf opensi.jar
ls
rm -f opensi.jar
# faire les modifications, revenir juste sous chrome.old
jar -cf opensi.jar *
mv opensi.jar ../chrome
cd ..
rm -fR chrome.old
zip -r opensi.xpi *

Conclusion

En respectant toute ces directives votre serveur devrait tenir la route un bon moment, pensez à le blinder un peu notamment au niveau des partitions comme expliqué au début.

Très important :
J'insiste encore sur ce point, toutes les commandes se font sous le compte du root.
La seule exception passe par un su - tomcat pour la création de la sauvegarde distante. L'utilisation d'un autre compte fera échouer le processus pour des questions de droits.
Utiliser root pour installer un serveur en production ne pose aucun problème, car en utilisation ce sont les comptes tomcat et mysql qui font tourner les services.
Ne cédez pas à la tentation du chmod -R 777 * !!!!

mise_en_place_de_opensi_4.8_ec.txt · Dernière modification: 2011/12/28 10:03 par admin