====== 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