====== Helmut : Installation Alfresco 3.2r2 sous Debian Squeeze ======
Ce document est un guide de mise en place d'un environnement de base documentaire sous Debian Squeeze, joliment baptise //Helmut//. (aucun liens, fils unique).
L'architecture cible est la suivante:
{{:fr:ressources:dossiers:alfresco:arch0.1.jpg?512x350|}}
===== Configuration de Debian =====
==== SSH ====
dans **/etc/ssh/sshd_config**
- désactive le login pour root
- désactive le X11 forwarding
# grep -v "^#" /etc/ssh/sshd_config |grep -v "^$"
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
Banner /etc/issue.net
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
==== Bannières d'accueil ====
Il y en a deux :
- **/etc/issue.net**: affichée par SSH avant la vérification de l'accès
- **/etc/motd**: affichée lorsque le login est autorisé
les deux bannières sont modifiées pour fournir des informations & disclaimers sur le système.
# cat /etc/issue.net
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ HELMUT ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.access to helmut is logged and.
. sent to system administrator .
# cat /etc/motd
~~ Bienvenue sur Helmut ~~
L'installation respecte la structure Debian:
- les donnees sont dans /var
- les fichiers de configuration dans /etc
et pour le reste, voir la doc dans /root/doc
==== Synchro NTP ====
apt-get install ntpdate
Puis dans **/etc/cron.hourly**, ajouter le script suivant:
helmut:/etc/cron.hourly# cat ntpdate
#! /bin/sh
ntpdate fr.pool.ntp.org 2>&1 1>/dev/null
le rendre exécutable et tester:
helmut:/etc/cron.hourly# chmod +x ntpdate
helmut:/etc/cron.hourly# ./ntpdate
helmut:/etc/cron.hourly# date
mardi 15 décembre 2009, 21:46:03 (UTC+0100)
==== Resolver DNS ====
apt-get install unbound
unbound est un daemon qui résoud les requêtes DNS et les met en cache. Le serveur tourne localement et répond aux requêtes émises depuis localhost. Cela évite d'avoir à utiliser un resolver DNS externe (comme celui d'un ISP par exemple).
Il faut activer le fichier de configuration dans **/etc/default/unbound**
UNBOUND_ENABLE=true
DAEMON_OPTS="-c /etc/unbound/unbound.conf"
Puis configurer le daemon dans **/etc/unbound/unbound.conf**. La configuration par défaut fonctionne bien pour localhost, on ajoute seulement quelques fonctionnalités comme le logging dans syslog
helmut:/etc/unbound# grep -v "#" unbound.conf |grep -v "^$"
server:
verbosity: 1
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: no
do-daemonize: yes
chroot: ""
use-syslog: yes
pidfile: "/var/run/unbound.pid"
python:
remote-control:
Après redémarrage du daemon, on voit qu'il log dans /var/log/daemon.log
helmut:/etc/unbound# grep unbound /var/log/daemon.log
Dec 21 14:02:33 helmut unbound: [3668:0] notice: init module 0: validator
Dec 21 14:02:33 helmut unbound: [3668:0] notice: init module 1: iterator
Dec 21 14:02:33 helmut unbound: [3668:0] info: start of service (unbound 1.4.0).
Dec 21 14:14:59 helmut unbound: [3668:0] info: service stopped (unbound 1.4.0).
Dec 21 14:14:59 helmut unbound: [3668:0] info: server stats for thread 0: 11 queries, 5 answers from cache, 6 recursions
Dec 21 14:14:59 helmut unbound: [3668:0] info: server stats for thread 0: requestlist max 2 avg 0.333333 exceeded 0
Dec 21 14:14:59 helmut unbound: [3668:0] info: average recursion processing time 0.441901 sec
Dec 21 14:14:59 helmut unbound: [3668:0] info: histogram of recursion processing times
Dec 21 14:14:59 helmut unbound: [3668:0] info: [25%]=0.065536 median[50%]=0.131072 [75%]=0.118928
Dec 21 14:14:59 helmut unbound: [3668:0] info: lower(secs) upper(secs) recursions
Dec 21 14:14:59 helmut unbound: [3668:0] info: 0.065536 0.131072 1
Dec 21 14:14:59 helmut unbound: [3668:0] info: 0.131072 0.262144 1
Dec 21 14:14:59 helmut unbound: [3668:0] info: 0.262144 0.524288 2
Dec 21 14:14:59 helmut unbound: [3668:0] info: 0.524288 1.000000 2
Dec 21 14:14:59 helmut unbound: [3731:0] notice: init module 0: validator
Dec 21 14:14:59 helmut unbound: [3731:0] notice: init module 1: iterator
Dec 21 14:14:59 helmut unbound: [3731:0] info: start of service (unbound 1.4.0).
===== Installation MySQL =====
apt-get install mysql-server
Il faut changer le type d'engine par defaut pour mettre innodb ([[http://dev.mysql.com/doc/refman/5.1/en/innodb.html|voir doc]]). par defaut, c'est MyISAM
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.1.37-2 (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0,00 sec)
Pour changer cela, il faut editer **/etc/mysql/my.cnf** comme suis:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
bind-address = 127.0.0.1
key_buffer = 128M
max_allowed_packet = 128M
thread_stack = 512K
thread_cache_size = 32
myisam-recover = BACKUP
max_connections = 200
query_cache_limit = 4M
query_cache_size = 64M
expire_logs_days = 10
max_binlog_size = 100M
default-storage-engine=INNODB
innodb_data_file_path = mysql_innodb_data:20M:autoextend
set-variable = innodb_buffer_pool_size=128M
set-variable = innodb_additional_mem_pool_size=20M
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
[mysqldump]
quick
quote-names
max_allowed_packet = 64M
[mysql]
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
A ce stade, le redemarrage de mysql ne va pas fonctionner. Il faut aller dans /var/lib/mysql et renommer les fichiers de logs ib_logfile* afin que de nouveaux soient crees en meme temps que le nouveau fichier data 'mysql_innodb_data'
Apres redemarrage et recreation des fichiers de database et de log, le repertoire **/var/lib/mysql** contient les fichiers suivants:
helmut:/var/lib/mysql# ls -l
total 61520
-rw-r--r-- 1 root root 0 déc. 1 18:59 debian-5.1.flag
-rw-rw---- 1 mysql mysql 20971520 déc. 1 22:48 ib_logfile0
-rw-rw---- 1 mysql mysql 20971520 déc. 1 22:48 ib_logfile1
drwxr-xr-x 2 mysql root 4096 déc. 1 18:59 mysql
-rw-rw---- 1 mysql mysql 20971520 déc. 1 22:48 mysql_innodb_data
-rw------- 1 root root 6 déc. 1 18:59 mysql_upgrade_info
On voit bien trois fichiers de 20Mo.
Quid des engines de mysql ?
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.1.37-2 (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0,00 sec)
La directive //default-storage-engine=INNODB// a fait son effet, innodb est bien le moteur par defaut de mysql.
===== Installation de Apache 2 =====
Apache va être relié à Tomcat via un connecteur AJP/1.3. Bien que Tomcat ne soit pas encore en place, nous pouvons déjà installer et configurer ce connecteur.
apt-get install libapache2-mod-jk
Cela va également installer apache2 comme dépendance.
Paramétrer mod-jk dans **/etc/libapache2-mod-jk/workers.properties** comme suis:
workers.tomcat_home=/var/lib/tomcat6
workers.java_home=/usr/lib/jvm/java-6-sun
ps=/
worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker
Il faut maintenant créer un fichier déclarant l'emplacement de ce fichier workers.properties. Nous allons le mettre dans **/etc/apache2/mods-available**:
helmut:/etc/apache2/mods-available# vim jk.conf
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
et linker ce fichier dans **mods-enabled**:
helmut:/etc/apache2/mods-available# cd ../mods-enabled/
helmut:/etc/apache2/mods-enabled# ln -s ../mods-available/jk.conf .
Le connecteur Apache ira chercher tomcat sur 127.0.0.1:8009. Plus tard, il faudra s'assurer que Tomcat ouvre son connecteur AJP/1.3.
==== Activer mod_ssl ====
Mod_ssl n'est pas activé par défaut, il suffit de le linker dans mods-enabled depuis mods-available.
helmut:/etc/apache2# cd mods-enabled/
helmut:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.* .
La configuration par défaut dans **ssl.conf** convient, on pourra la customiser au besoin.
==== Les virtual hosts ====
Il y en a deux, un HTTPS et un HTTP.
Tout d'abord, le HTTPS dans **/etc/apache2/sites-available/secure**.
ServerAdmin webmaster@localhost
JkMount /share/* ajp13_worker
JkMount /share ajp13_worker
JkMount /alfresco/* ajp13_worker
JkMount /alfresco ajp13_worker
DocumentRoot /var/www/secure
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ErrorLog /var/log/apache2/secure-error.log
LogLevel warn
CustomLog /var/log/apache2/secure-access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
Il faut créer le répertoire **/var/www/secure**:
helmut:/# mkdir /var/www/secure/
helmut:/# chown www-data:www-data /var/www/secure/
Il faut ensuite linker le fichier de configuration de ce vhost dans **/etc/apache2/sites-enabled/**:
helmut:/etc/apache2/sites-available# cd ../sites-enabled/
helmut:/etc/apache2/sites-enabled# ln -s ../sites-available/secure .
helmut:/etc/apache2/sites-enabled# apache2ctl restart
Il est désormais possible de se connecter sur Helmut en https dans le docroot /var/www/secure.
Il faut maintenant installer Tomcat et Alfresco avant de pouvoir accèder à https://helmut/share/ et https://helmut/alfresco/.
Concernant le vhost HTTP, on réalise simplement une redirection des connexions vers tomcat. Pas de connecteur AJP/1.3 ou autre, et accès limité à Share. C'est une connexion non sécurisé de secours pour les environnements qui bloquent le HTTPS.
helmut:/# grep -v "#" /etc/apache2/sites-available/default |grep -v "^$"
ServerAdmin webmaster@localhost
DocumentRoot /var/www/unsecure
Options FollowSymLinks
AllowOverride None
ProxyRequests Off
ProxyPass /share/ http://localhost:8080/share/
ProxyPassReverse /share/ http://localhost:8080/share/
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
helmut:/var/www# apache2ctl -t
Syntax OK
helmut:/var/www# apache2ctl restart
Le répertoire **/var/www/unsecure** contient un index.html de base qui affiche un logo. Rien de plus.
===== Installation Tomcat6 =====
apt-get install tomcat6
Après la tartine de packages installés, on retrouve l'ensemble des fichiers de tomcat6 dans **/var/lib/tomcat6**. Certains répertoires sont linkés dans /etc et /usr/share/tomcat6.
Par défaut, Debian localise les webapps dans /usr/share et crée un fichier dans **/etc/tomcat6/Catalina/localhost/.xml** qui définit la localisation de la webapp. Voir l'exemple avec le package [[http://packages.debian.org/fr/squeeze/all/tomcat6-docs/filelist|tomcat6-docs]].
En se connectant sur la page d'accueil à l'adresse **http://helmut:8080**, on a l'information suivante:
Tomcat is installed with CATALINA_HOME in
/usr/share/tomcat6 and CATALINA_BASE in /var/lib/tomcat6
==== Désactiver le cache de Tomcat ====
Il faudra réactiver ce cache lors du passage en production, mais pendant la configuration il est préférable que ni Tomcat ni aucun autre composant ne mette de données en cache:
Dans **/etc/tomcat6**:
helmut:/etc/tomcat6# vim catalina.properties
#
# String cache configuration.
tomcat.util.buf.StringCache.byte.enabled=false
tomcat.util.buf.StringCache.char.enabled=false
Puis redémarrez le serveur.
==== Remplacer OpenJDK par Sun JDK ====
OpenJDK n'est pas validé par Alfresco et pose des problèmes (entre autres, accès à Rhino). Il faut remplacer OpenJDK, installé par Debian par défaut, par Sun JDK.
Pour disposer de sun jdk dans apt, il faut rajoute les dépôts non-free au sources.list:
helmut:~# grep -v "#" /etc/apt/sources.list|grep -v "^$"
deb http://ftp.fr.debian.org/debian/ squeeze main non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main non-free
deb http://security.debian.org/ squeeze/updates main non-free
deb-src http://security.debian.org/ squeeze/updates main non-free
réalisez un update et lancez l'installation
helmut:~# apt-get install sun-java6-jdk
helmut:~# apt-get remove openjdk-*
Puis jetons un coup d'oeil aux paramètres pas défaut de tomcat.
==== Configuration des paramètres par défaut ====
dans **/etc/default/tomcat6**
helmut:~# grep -v "#" /etc/default/tomcat6 |grep -v "^$"
TOMCAT6_USER=tomcat6
JAVA_HOME=/usr/lib/jvm/java-6-sun
CATALINA_BASE=/var/lib/tomcat6
JAVA_OPTS="-Djava.awt.headless=true -Xms2G -Xmx2G -Xss1024k -XX:NewSize=512m -XX:MaxPermSize=248m"
JSP_COMPILER=jikes
TOMCAT6_SECURITY=no
LOGFILE_DAYS=14
JVM_TMP=/tmp/tomcat6-temp
On démarre la JVM avec 2G de RAM alloués dés le démarrage et non extensibles !
TOMCAT6_SECURITY a été désactivé par la directive TOMCAT6_SECURITY=no
==== Installation du connecteur MySQL ====
apt-get install libmysql-java
Cela positionne le connecteur JDBC mysql dans **/usr/share/java**. On notera en passant que le répertoire /usr/share/tomcat6/lib contient des liens symboliques vers /usr/share/java. Il faut donc établir un lien pour le connecteur mysql comme suis :
helmut:/usr/share/tomcat6/lib# ln -s ../../java/mysql-connector-java-5.1.10.jar .
==== Installation de javamail ====
Récupérer la dernière version de javamail sur le site de sun : [[http://java.sun.com/products/javamail/downloads/index.html|javamail]].
Décompressez le fichier zip dans un répertoire temporaire et copiez le contenu du répertoire 'lib' dans les lib de tomcat, comme suis:
helmut:/tmp# unzip javamail-1.4.3.zip
helmut:/tmp/javamail-1.4.3# cd lib/
helmut:/tmp/javamail-1.4.3/lib# ls -l
total 528
-rw-r--r-- 1 root root 18073 nov. 17 12:13 dsn.jar
-rw-r--r-- 1 root root 172582 nov. 17 12:13 imap.jar
-rw-r--r-- 1 root root 250234 nov. 17 12:13 mailapi.jar
-rw-r--r-- 1 root root 36334 nov. 17 12:13 pop3.jar
-rw-r--r-- 1 root root 44993 nov. 17 12:13 smtp.jar
helmut:/tmp/javamail-1.4.3/lib# cp *.jar /usr/share/tomcat6/lib/
Redémarrer tomcat pour que les changements soit pris en compte.
==== Activation du connecteur AJP/1.3 ====
Dans **/etc/tomcat6/server.xml**, décommenter la section autour du connecteur AJP/1.3 (environ ligne 90):
89
90
===== Déploiement d'Alfresco =====
On rentre dans le sujet du déploiement de la WebApp Alfresco.
=== Configuration MySQL ===
On va créer une base de données pour alfresco via les commandes suivantes :
create database alfresco default character set utf8;
grant all on alfresco.* to 'alfresco'@'localhost' identified by 'totomotdepassedelamort' with grant option;
à mettre dans un fichier //db_setup.sql// et à lancer via la commande suivante:
# mysql -u root -p < db_setup.sql
Alfresco s'occupera de créer les tables lors du lancement de la webapp.
Il faut ensuite reporter le user et mot de passe de connection à la base dans les extensions d'Alfresco.
=== Installation des extensions ===
Récupération de l'archive //alfresco-community-sample-extensions-3.2r2.tar.gz// et décompressions dans **/var/lib/tomcat6/shared/classes/**
helmut:/var/lib/tomcat6/shared/classes# tar-xzvf/home/julien/alfresco-community-sample-extensions-3.2r2.tar.gz
alfresco/
alfresco/extension/
alfresco/extension/bootstrap/
alfresco/extension/mt/
alfresco/extension/asynchronous-avm-indexing-context.xml.sample
alfresco/extension/benchmark-override-context.xml.sample
alfresco/extension/bm-remote-loader-context.xml.sample
alfresco/extension/bootstrap/split-person-cleanup-context.xml.sample
alfresco/extension/content-expiration-debug-context.xml.sample
alfresco/extension/custom-email-server.sample.zip
alfresco/extension/custom-metadata-extrators-context.xml.sample
alfresco/extension/custom-model-context.xml.sample
alfresco/extension/customModel.xml.sample
alfresco/extension/deployment-attempt-cleaner-context.xml.sample
alfresco/extension/disabled-avm-indexing-context.xml.sample
alfresco/extension/ehcache-custom.xml.sample.cluster
alfresco/extension/example-model-context.xml.sample
alfresco/extension/exampleModel.xml.sample
alfresco/extension/file-servers-custom.xml.sample
alfresco/extension/file-servers-custom.xml.sample2
alfresco/extension/index-recovery-context.xml.sample
alfresco/extension/index-tracking-context.xml.sample
alfresco/extension/language-specific-index-and-search-context.xml.sample
alfresco/extension/lifecycle-messages.properties.sample
alfresco/extension/lifecycle-workflow-context.xml.sample
alfresco/extension/lifecycleModel.xml.sample
alfresco/extension/lifecycle_processdefinition.xml.sample
alfresco/extension/mimetype-map-extension.xml.sample
alfresco/extension/mimetypes-extension.xml.sample
alfresco/extension/mt/mt-admin-context.xml.sample
alfresco/extension/mt/mt-contentstore-context.xml.sample
alfresco/extension/mt/mt-context.xml.sample
alfresco/extension/network-protocol-context.xml.sample
alfresco/extension/remote-openoffice-context.xml.sample
alfresco/extension/replicating-content-services-context.xml.sample
alfresco/extension/restore-context.xml.sample
alfresco/extension/scheduled-action-services-context.xml.sample
alfresco/extension/unsecured-public-services-security-context.xml.sample
alfresco/extension/wcm-xml-metadata-extracter-context.xml.sample
alfresco/extension/workflow-context.xml.sample
Plus tard, on utilisera ces extensions pour surcharger les paramètres par défaut d'Alfresco.
=== Installation de l'archive alfresco-community-war-3.2r2.tar.gz ===
Récupérer //alfresco-community-war-3.2r2.tar.gz// et décompresser l'archive dans un répertoire temporaire (disons /home/julien/alfrescofiles/):
L'archive contient les fichiers suivants :
helmut:/home/julien/alfrescofiles# ls -l
total 102652
-rw-r--r-- 1 julien julien 75982021 nov. 12 17:49 alfresco.war
drwxr-xr-x 2 julien julien 4096 déc. 2 11:23 commands
drwxr-xr-x 2 julien julien 4096 déc. 2 11:17 endorsed
drwxr-xr-x 5 julien julien 4096 déc. 2 11:17 extensions
drwxr-xr-x 3 julien julien 4096 déc. 2 11:17 extras
drwxr-xr-x 3 julien julien 4096 oct. 30 17:08 licenses
-rw-r--r-- 1 julien julien 10766620 nov. 12 17:52 mobile.war
-rw-r--r-- 1 julien julien 543 oct. 30 17:08 README.txt
-rw-r--r-- 1 julien julien 18209351 nov. 12 17:52 share.war
Copier les fichiers war dans le répertoire webapps de tomcat:
helmut:/home/julien/alfrescofiles# cp *.war /var/lib/tomcat6/webapps/
helmut:/home/julien/alfrescofiles# ls -l /var/lib/tomcat6/webapps/
total 102636
drwxr-xr-x 14 tomcat6 tomcat6 4096 déc. 2 11:53 alfresco
-rw-r--r-- 1 root root 75982021 déc. 2 11:53 alfresco.war
drwxr-xr-x 11 tomcat6 tomcat6 4096 déc. 2 11:53 mobile
-rw-r--r-- 1 root root 10766620 déc. 2 11:53 mobile.war
drwxr-xr-x 3 root root 4096 déc. 2 10:04 ROOT
-rw-r--r-- 1 root root 18209351 déc. 2 11:53 share.war
Les fichiers WAR sont déployés automatiquement par tomcat (à chaud).
Aller dans **/var/lib/tomcat6** et copier le fichier global de configuration:
helmut:/home/julien/alfrescofiles# cd /var/lib/tomcat6/
helmut:/var/lib/tomcat6# cp webapps/alfresco/WEB-INF/classes/alfresco-global.properties.sample shared/classes/alfresco-global.properties
Ce fichier sera chargé en dernier par Alfresco et surchargera donc tous les autres paramètres de configuration.
Dans //alfresco-global.properties//, on va définir l'ensemble des paramètres de l'architecture: serveur de base de données, répertoire de stockage des données, etc...
Le fichier est le suivant:
helmut:/var/lib/tomcat6/shared/classes# grep -v "#" alfresco-global.properties |grep -v "^$"
dir.root=/var/lib/alfresco/alf_data
db.username=alfresco
db.password=totomotdepassedelamort
db.schema.update=true
db.url=jdbc:mysql://localhost/alfresco
hibernate.dialect=org.hibernate.dialect.MySQL.InnoDBDialect
Il faut créer les répertoires de données pour Alfresco et les attribuer à l'utilisateur tomcat6:
helmut:/# cd /var/lib
helmut:/var/lib# mkdir alfresco
helmut:/var/lib# mkdir alfresco/alf_data
helmut:/var/lib# chown tomcat6:adm alfresco/ -R
=== Modifier le fichier de log alfresco ===
dans **/var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/log4j.properties**, il faut modifier la ligne qui définit le fichier de sortie des logs alfresco:
helmut:/# vim /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/log4j.properties
log4j.appender.File.File=/var/log/tomcat6/alfresco.log
Installer et linker la librairie log4j
helmut:/# apt-get install liblog4j1.2-java
helmut:/# ln -s /usr/share/java/log4j-1.2-1.2.15.jar /usr/share/tomcat6/lib/
=== Ajouter le support de la conversion des images ===
Alfresco se base sur 'convert', le binaire de conversion des images du package imagemagick.
apt-get install imagemagick
Il faut renseigner l'emplacement de convert dans **/var/lib/tomcat6/shared/classes/alfresco-global.properties** :
helmut:/# grep convert /var/lib/tomcat6/shared/classes/alfresco-global.properties
img.exe=/usr/bin/convert
=== Ajouter le support de la conversion PDF vers SWF ===
Pour visualiser les preview de documents PDF dans alfresco share, il faut fournir à Alfresco le chemin du binaire pdf2swf {{:fr:ressources:dossiers:alfresco:pdf2swf.tar|}}.
Placez le binaire détaré dans /usr/bin et éditez **alfresco-global.properties** comme suis:
helmut:/# grep pdf2swf /var/lib/tomcat6/shared/classes/alfresco-global.properties
swf.exe=/usr/bin/pdf2swf
Puis installez la bibliothèque 'libgif'
# apt-get install libgif-dev
===== Installation du serveur OpenOffice =====
apt-get install openoffice.org-headless openoffice.org-java-common openoffice.org
Après l'installation, le service peut être lancé par root via la commande suivante:
/usr/lib/openoffice/program/soffice.bin -accept="socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo
-headless -nofirststartwizard -nocrashrep -norestore -env:UserInstallation=file:///tmp/oouser
Pas besoin de lancer open office à la main, Alfresco se chargera de le faire au lancement de la webapp via deux paramètres:
- Le binaire 'soffice' est référencé dans **/var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/repository.properties**
- La ligne de démarrage '-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager' est référencée dans **/var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/thirdparty/default/openoffice-transform-context.xml**
Le service, une fois lancé manuellement ou par Alfresco, écoute sur le port 8100 en tcp.
helmut:~## netstat -tpan |grep 8100
tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 9566/soffice.bin
tcp 0 0 127.0.0.1:8100 127.0.0.1:49872 ESTABLISHED 9566/soffice.bin
tcp6 0 0 127.0.0.1:49872 127.0.0.1:8100 ESTABLISHED 9469/jsvc
On voit bien le port en écoute sur localhost et les connexions avec Alfresco (lancé par tomcat dans jsvc).
===== Ajaxterm =====
Je le met à la fin car c'est un peu du bonus. Ajaxterm est une interface à SSH en Ajax, et donc utilisable via une page web. L'objectif ici est d'installer Ajaxterm pour qu'il soit accessible via le vhost //secure// de apache avec un certificat SSL client pour en limiter l'accès au maximum.
apt-get install ajaxterm
Ajaxterm va écouter en HTTP sur le port 8022. On va donc demander à Apache de relayer les requêtes vers https://helmut/t3rm/ vers ce port:
Dans **/etc/apache2/sites-available/secure**, on ajoute les lignes suivantes:
Order deny,allow
Allow from all
SSLVerifyClient Require
SSLVerifyDepth 3
SSLRequire %{SSL_CLIENT_S_DN_O} eq "Helmut"
ProxyRequests Off
ProxyPass /t3rm/ http://localhost:8022/
ProxyPassReverse /t3rm/ http://localhost:8022/
Il faut également activer les modules //proxy// et //proxy_http//.
helmut:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy_http.load .
helmut:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.load .
Ainsi, seuls les utilisateurs munis d'un certificat SSL appartement à l'organisation "Helmut" pourront établir une connexion au terminal ajaxterm. Les autres auront une erreur d'établissement de la connection.
===== Netfilter & QoS =====
Les règles de firewall et de QoS sont positionnées dans **/etc/init.d/netfilter_rules.sh** avec un lien symbolique dans **/etc/rc2.d/S05NetfilterRules** pour les lancer au démarrage.
==== TCgraph ====
apt-get install rrdtool librrds-perl libproc-daemon-perl
Récupérer le package tcgraph et positionner les fichiers comme suis:
* tcparsestat.pl dans **/sbin/**, modifier le script pour éditer les chemin de tcgraph.rrd et tcgraph.log et modifier les classlist
* placer tcgraph.cgi dans **/var/www/secure/** et modifier le "sub graph"
* placer tcparsestat dans **/etc/init.d** et faire un lien symbolique dans **/etc/rc2.d/S25tcparsestat**
Modifier //createrrd.sh// pour qu'il corresponde à la politique de QoS en place, puis exécuter le pour créer tcgraph.rrd dans **/var/www/secure/tcgraph.rrd**
Démarrer tcparsestat
helmut:/var/www/secure/tcgraph# /etc/init.d/tcparsestat start
Starting trafic control graphing tool: tcparsestat.pl.
Le fichier **/var/www/secure/tcgraph/tcgraph.log** contient les entrées dans un format lisible. Quand aucune valeur n'existe, un "U" est enregistré. Vérifiez que vos règles de QoS sont lancés si rien de n'affiche.
=== Activer le CGI pour TCgraph ===
Pour afficher les graph, il faut qu'apache autorise les CGI dans le répertoire tcgraph.
Dans **/etc/apache2/sites-available/secure** :
AllowOverride None
AddHandler cgi-script .cgi
AddType application/x-httpd-cgi .cgi
Options +ExecCGI -MultiViews
Order allow,deny
Allow from all
Il faut également activer le mod_cgi pour apache. mod_cgi est fournit dans la distribution par défaut, il suffit donc d'un simple:
helmut:/etc/apache2/mods-enabled# ln -s ../mods-available/cgi.load .
helmut:/etc/apache2/mods-enabled# apache2ctl restart
Et la page https://helmut/tcgraph/tcgraph.cgi présentera les graphs réseau.
===== PKI =====
On va créer une autorité de certificats dans **/root/CA**.
Il faut disposer d'un fichier de configuration openssl.cnf (non détaillé ici).
==== Création de l'autorité ====
tout d'abord, créer la clé privée et le certificat public de l'autorité:
helmut:~/CA# openssl req -new -x509 -config ca-openssl.cnf -extensions v3_ca -nodes -keyout ca.key -out ca.crt -days 7300
helmut:~/CA# ls -l
total 12
-rw------- 1 julien adm 3390 déc. 16 10:20 ca-openssl.cnf
-rw------- 1 root root 1651 déc. 16 10:28 ca.crt
-rw------- 1 root root 1675 déc. 16 10:28 ca.key
Ensuite, créer les répertoires et fichiers nécessaires à la vie de l'autorité:
helmut:~/CA# mkdir certs
helmut:~/CA# mkdir crl
helmut:~/CA# mkdir newcerts
helmut:~/CA# touch index.txt
helmut:~/CA# echo "01" > serial
helmut:~/CA# dd if=/dev/random of=random bs=4 count=256
==== Génération automatique de la CRL ====
La liste de révocation des certificats peut être générées via la commande :
elmut:~/CA# openssl ca -config /root/CA/ca-openssl.cnf -gencrl -out /var/www/secure/ca/revocation-ca.crl
Using configuration from /root/CA/ca-openssl.cnf
helmut:~/CA# ls /var/www/secure/ca/
revocation-ca.crl
En plaçant la CRL dans **/var/www/secure/ca**, on pourra y accèder via l'adresse https://helmut/ca/revocation-ca.crl
Pour automatiser, rentrer cette commande dans un script dans cron.daily:
helmut:~# cat /etc/cron.daily/gencrl
#! /bin/sh
openssl ca -config /root/CA/ca-openssl.cnf -gencrl -out /var/www/secure/ca/revocation-ca.crl 2>&1 1>/dev/null
==== Un certificat serveur pour Apache ====
On génère tout d'abord une clé privée et une CSR (Certificate Signature Request):
helmut:~/CA# mkdir certs/www.helmut
helmut:~/CA# openssl req -new -config ca-openssl.cnf -nodes -keyout certs/www.helmut/www.helmut.key -out request_cert_www.helmut.csr
Puis on utilise la CSR pour générer le certificat signé:
helmut:~/CA# openssl ca -config ca-openssl.cnf -extensions server_cert -in request_cert_www.helmut.csr -out certs/www.helmut/www.helmut.crt
La CSR peut être supprimées. Les fichiers **www.helmut.key** et **www.helmut.crt** peuvent être utilisés dans le vhost //secure// de Apache comme suis:
helmut:~# grep SSL /etc/apache2/sites-available/secure |grep -v "#"
SSLEngine on
SSLCertificateFile /etc/apache2/certs/www.helmut/www.helmut.crt
SSLCertificateKeyFile /etc/apache2/certs/www.helmut/www.helmut.key
SSLCACertificateFile /etc/apache2/certs/ca.crt
SSLCARevocationFile /var/www/secure/ca/revocation-ca.crl