Table of Contents
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:
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
<note important>Il faut changer le type d'engine par defaut pour mettre innodb (voir doc). par defaut, c'est MyISAM</note>
# 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/
<note warning>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' </note>
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.
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost JkMount /share/* ajp13_worker JkMount /share ajp13_worker JkMount /alfresco/* ajp13_worker JkMount /alfresco ajp13_worker DocumentRoot /var/www/secure <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/secure> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> 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 </VirtualHost> </IfModule>
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 "^$" <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/unsecure <Directory /> Options FollowSymLinks AllowOverride None </Directory> 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 </VirtualHost> 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.
<note tip>Par défaut, Debian localise les webapps dans /usr/share et crée un fichier dans /etc/tomcat6/Catalina/localhost/<webapp>.xml qui définit la localisation de la webapp. Voir l'exemple avec le package tomcat6-docs.</note>
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 !
<note warning>TOMCAT6_SECURITY a été désactivé par la directive TOMCAT6_SECURITY=no</note>
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 : 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 <!-- Define an AJP 1.3 Connector on port 8009 --> 90 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
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 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:
<Proxy *> Order deny,allow Allow from all SSLVerifyClient Require SSLVerifyDepth 3 SSLRequire %{SSL_CLIENT_S_DN_O} eq "Helmut" </Proxy> 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 :
<Directory /var/www/secure/tcgraph/> AllowOverride None AddHandler cgi-script .cgi AddType application/x-httpd-cgi .cgi Options +ExecCGI -MultiViews Order allow,deny Allow from all </Directory>
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