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.
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 :
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.
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
Dans un premier temps, mettre en place la plate-forme d'accueil de OpenSI comprenant :
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.
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
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 :
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 :
Version 32 bits | Version 64 bits | ||
---|---|---|---|
ANT | apache-ant-1.8.0-bin.tar.gz | ||
TOMCAT 5.5 | apache-tomcat-5.5.28.tar.gz | ||
TOMCAT 6 | apache-tomcat-6.0.24.tar.gz | ||
JAVA JDK | jdk-6u18-linux-i586.bin ( 32bits ) | jdk-6u18-linux-x64.bin ( 64bits ) |
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 javaAjouter 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 tomcatCré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 defaultsPuis 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.
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
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/OpenSILancer le script deploy situé sous /usr/local/tomcat/webapps/OpenSI
root@machine:~$ cd /usr/local/tomcat/webapps/OpenSI root@machine:~$ ./deployCe 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.cfgEditer 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 distRedémarrer tomcat.
root@machine:~$ /etc/init.d/tomcat restartMettre en place la base de données.
root@machine:~$ cd /usr/local/tomcat/webapps/OpenSI/database root@machine:~$ mysql -u root -p < SchemaGeneral.sqlLe 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.
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/svgmysqlPuis 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.shEt 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
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 :
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 :
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:~$ exitDe 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.
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.shPuis 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.shSur 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 !!!
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 :
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.
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
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 - tomcatIl 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 restartLes 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.
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 *
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 * !!!!