Copyright © 2016 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Plus de renseignements ici : FDL
Historique des versions | |
---|---|
Version 1.0 | 20 juillet 2016 |
Aflfresco Community - 5.1.0 (r125711-b6) - Publication. |
Historique des versions | |
---|---|
Version 1.1 | 25 juillet 2016 |
Aflfresco Community - 5.1.0 (r127059-b7) - Mises à jour et publication . |
Historique des versions | |
---|---|
Version 1.2 | 05 novembre 2016 |
Aflfresco Community - 5.1.0 (r127059-b7) - Install Clamav et Borg; publication . |
Historique des versions | |
---|---|
Version 1.3 | 27 décembre 2016 |
Aflfresco Community - 5.2.0 (r133656-b12) - Update version 5.1 à 5.2.0 et diverses corrections; publication . |
Table des matières
List of Tables
Ce document va tenter de vous expliquer comment installer, configurer et exploiter Alfresco Community™ 5.1, qui est sortie en juin 2016.
Ce choix pour Alfresco™ n'est pas un hasard. Il est dû à un choix possible techniquement par mes DSI, ceci me permet de présenter un produit approuvé/autorisé dans mon entreprise. Je sais c'est un long débat; c'est aussi un système de fichier CIFS (1985 par IBM qu'il est utile de rappeller) que je percois désormais comme complètement non approprié pour un travail en réseau collaboratif, sans parlé de la sécurité. Pour moi c'est tout juste bon pour de la sauvegarde/archivage.
Il est temps de faire voir au DSI qu'il est possible d'avoir des fonctionnalités meilleures, et sans rien débourser. C'est le domaine des applications ECM (gestion de contenu d'entreprise), qui est très proche du système GED (gestion électronique de documents).
Il est à noter qu'Alfresco propose deux versions, l'une est payante et l'autre non. La différence provient du support, et de certaines fonctionnalités. C'est la version gratuite qui sera choisie, les 2 solutions proposées sont toutes en Open source. Toutes ces versions prennent en compte l'économie, l'innovation, l'interopérabilité et même la prise en compte des mobiles.
Note | |
---|---|
Alfresco en 2009 ou 2010 a remporté la certification DoD 5015.2 du ministère américain de la Défense. |
Il est à noter que ce document doit aussi me servir de cahier de consignes à propos de ce serveur, d'ou parfois une sortie du sujet principal le tout volontairement.
Voici comment installer le tueur de Microsoft Share Point, je pense qu'éffectivement ceci n'est pas surévalué, essayez et vous verrez ! Mais fini le clickodrome, la limite désormais c'est vous !
Remerciements à Monsieur Guillou, qui m'a aidé sur plusieurs points, et qui utilise bien évidemment Alfresco.
Table des matières
Une machine virtuelle (MV) avec VirtualBox et une Debian 8.5. Même si cela a été un échec pour moi, voici la commande pour intégrer les addons virtualBox dans un environnement sans aucune interface graphique :
sh /media/cdrom/VBoxLinuxAdditions.run -nox11
Ne pas installer cette option ne compromet rien.
Elles sont assez nombreuses, de plus cette machine virtuelle (MV) sera en mesure d'héberger d'autres petites applications en complément. Le rôle principal comme les ressources pour ce serveur sont réservés pour Alfresco. À ce titre c'est Mysql qui sera installé, avec Phpmyadmin pour la gestion graphique. Alfresco préconise Postgresql, c'est un excellent choix. Le passage de Postgresql à Mysql est facile.
apt-get update ; aptitude install postfix mysql xfonts-base imagemagick ghostscript libmail-sendmail-perl mysql-server \ build-essential zlib1g-dev libfreetype6-dev libjpeg-dev libgif-dev ffmpeg openssh-server openssh-client postfix \ console-data phpmyadmin ntpdate xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable \ xfonts-bolkhov-75dpi xfonts-bolkhov-koi8r-misc xfonts-bolkhov-misc libemail-sender-perl libnet-ssh2-perl \ xfonts-cronyx-koi8r-100dpi xfonts-cronyx-koi8r-75dpi xfonts-cronyx-koi8r-misc xfonts-cyrillic libmail-sender-perl \ sensord ntpdate
Il est à noter que les programmes suivants sont aussi installés ghostscript
, ffmpeg
et imagemagick
.
Ces programmes ne sont pas demandés, néanmoins pour des versions précédentes ils étaient nécessaires, d'où cette action. Ils servent principalement à faire du rendu au
travers du WEB (apercu PDF, images...). Ils sont inclus dans les sources d'Alfresco, donc c'est un des gadgets. Ceci ne mange pas de pain...on ne sait jamais.
En général je n'en parle pas, cette MV sera dotée de LVM2 Linux. Donc les partitions qui sont définies pourront évoluer avec souplesse. Je ne vais pas m'étendre sur le sujet.
ACTIVE '/dev/alfresco-vg/root' [8,38 GiB] inherit ACTIVE '/dev/alfresco-vg/var' [2,79 GiB] inherit ACTIVE '/dev/alfresco-vg/swap_1' [6,05 GiB] inherit ACTIVE '/dev/alfresco-vg/tmp' [380,00 MiB] inherit ACTIVE '/dev/alfresco-vg/home' [42,55 GiB] inherit
Et pour information, une fois le système opérationnel, voici la place occupée :
root@alfresco:/opt/alfresco-community# pvdisplay --- Physical volume --- PV Name /dev/sda5 VG Name alfresco-vg PV Size 60,15 GiB / not usable 0 Allocatable yes (but full) PE Size 4,00 MiB Total PE 15398 Free PE 0 Allocated PE 15398 PV UUID 10qNv0-wS3i-QMuS-FFsL-HpxJ-rlkF-NveWw0
J'ai donc pour Alfresco un disque au total de 60 Go, géré par LVM2 sur une seule partition
Nom du PV : alfresco-vg
. Ce volume logique (PV) doit contenir un système de fichier, c'est le rôle du LV (logicial volume).
Voici ce que donne les LV au complet :
root@alfresco:/opt/alfresco-community# lvdisplay --- Logical volume --- LV Path /dev/alfresco-vg/root LV Name root VG Name alfresco-vg LV UUID RyrTMJ-tE2N-pbtP-SZ1x-YLYc-zkpZ-Uhoi3u LV Write Access read/write LV Creation host, time alfresco, 2016-06-08 06:09:18 +0200 LV Status available # open 1 LV Size 8,38 GiB Current LE 2145 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:0 --- Logical volume --- LV Path /dev/alfresco-vg/var LV Name var VG Name alfresco-vg LV UUID AWwDAj-mxdZ-mhVs-KM88-1cXX-Tm15-p48MY6 LV Write Access read/write LV Creation host, time alfresco, 2016-06-08 06:09:18 +0200 LV Status available # open 0 LV Size 2,79 GiB Current LE 715 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:2 --- Logical volume --- LV Path /dev/alfresco-vg/swap_1 LV Name swap_1 VG Name alfresco-vg LV UUID 4gOuaW-Hj68-XqIp-RMao-gWrb-Y6YI-N7NxJH LV Write Access read/write LV Creation host, time alfresco, 2016-06-08 06:09:18 +0200 LV Status available # open 2 LV Size 6,05 GiB Current LE 1550 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Logical volume --- LV Path /dev/alfresco-vg/tmp LV Name tmp VG Name alfresco-vg LV UUID eVnvsu-DWF7-ccRS-O8Rd-T3nW-t3m9-kYRlVa LV Write Access read/write LV Creation host, time alfresco, 2016-06-08 06:09:18 +0200 LV Status available # open 1 LV Size 380,00 MiB Current LE 95 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3 --- Logical volume --- LV Path /dev/alfresco-vg/home LV Name home VG Name alfresco-vg LV UUID lys2CU-ZvoG-sZrN-h22S-uaVD-Og12-5I30H1 LV Write Access read/write LV Creation host, time alfresco, 2016-06-08 06:09:18 +0200 LV Status available # open 1 LV Size 42,55 GiB Current LE 10893 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:4
Et c'est en regardant ce tableau que je me suis dit que j'avais fait une erreur. Le LV /home
fait 42 Go et le LV
/var
à une capacité de 2.8 Go.
C'est juste une inversion, et grâce à LVM2 des modifications sont faisables (heureusement). Autant dire que sur des partitions classiques c'est nettement plus fun.
Donc on va réduire la taille de /home
à 2 Go, ce qui est largement assez sur un serveur.
Attention | |
---|---|
Bien que ceci ne soit qu'une indication, l'identification du type de fichier dans fdisk devrait être “8E”, qui correspond à Linux LVM. |
root@alfresco:/etc# lvresize --resizefs -L 2G /dev/alfresco-vg/var Do you want to unmount "/home"? [Y|n] y fsck from util-linux 2.25.2 HOME : 28/1274880 fichiers (0.0% non contigus), 98387/5242880 blocs resize2fs 1.43.1 (08-Jun-2016) En train de redimensionner le système de fichiers sur /dev/mapper/alfresco--vg-var à 524288 (4k) blocs. Le système de fichiers sur /dev/mapper/alfresco--vg-var a maintenant une taille de 524288 blocs (4k). Size of logical volume alfresco-vg/var changed from 20,00 GiB (5120 extents) to 2,00 GiB (512 extents). Logical volume var successfully resized
Et voilà qui est fait, le tout instantanément. J'ai donc désormais un espace libre d'environ 40 Go pour offrir à
/var
, en partie.
Car mon système de fichiers n'est pas adapté à une mise en production. La partition racine sature, et le répertoire /opt
sur lequel est stocké Alfresco est basé sur
cette même partition. Il faut donc offrir un espace dédié au répertoire /opt/
afin de pouvoir augmenter cette partition sans tout changer partout.
Passage de 2 Go à 20 Go pour /var
, il faut de la place, car ce répertoire contient les fichiers d'historiques du système. De plus, il est important de les garder sur
une période plus ou moins longue, au moins me concernant. Sauf que ce répertoire est primordial pour le bon fonctionnement du système, et que bien évidemment il est monté.
La solution consiste à le retirer du montage dans fstab
, puis de rebooter (par brudance). Ensuite, on peut intervenir librement sur le volume concerné.
root@alfresco:/opt/alfresco-community# lvreduce --resizefs -L 23G -v /dev/alfresco-vg/home DEGRADED MODE. Incomplete RAID LVs will be processed. Finding volume group alfresco-vg Executing: fsadm --verbose check /dev/alfresco-vg/home fsadm: "ext4" filesystem found on "/dev/mapper/alfresco--vg-home" fsadm: Filesystem has not been checked after the last mount, using fsck -f fsadm: Executing fsck -f -p /dev/mapper/alfresco--vg-home fsck from util-linux 2.25.2 VAR : 5076/2793472 fichiers (3.6% non contigus), 404745/11154432 blocs Executing: fsadm --verbose resize /dev/alfresco-vg/home 24117248K fsadm: "ext4" filesystem found on "/dev/mapper/alfresco--vg-home" fsadm: Device "/dev/mapper/alfresco--vg-home" size is 45688553472 bytes fsadm: Parsing tune2fs -l "/dev/mapper/alfresco--vg-home" fsadm: Resizing filesystem on device "/dev/mapper/alfresco--vg-home" to 24696061952 bytes (11154432 -> 6029312 blocks of 4096 bytes) fsadm: Executing resize2fs /dev/mapper/alfresco--vg-home 6029312 resize2fs 1.43.1 (08-Jun-2016) En train de redimensionner le système de fichiers sur /dev/mapper/alfresco--vg-home à 6029312 (4k) blocs. Le système de fichiers sur /dev/mapper/alfresco--vg-home a maintenant une taille de 6029312 blocs (4k). Archiving volume group "alfresco-vg" metadata (seqno 7). Reducing logical volume alfresco-vg/home to 23,00 GiB Size of logical volume alfresco-vg/home changed from 42,55 GiB (10893 extents) to 23,00 GiB (5888 extents). Loading alfresco--vg-home table (254:4) Suspending alfresco--vg-home (254:4) with device flush Resuming alfresco--vg-home (254:4) Creating volume group backup "/etc./lvm/backup/alfresco-vg" (seqno 8). Logical volume home successfully resized
A noter l'option --resizefs qui permet de retailler le système de fichier
immédiatement. C'est très important de placer cette option ou alors il faut lancer la commande resizefs
' pour adapter/finaliser ceci à cette nouvelle dimension.
Reste plus qu'à corriger le fichier fstab
à l'identique avant la réduction (mout -a et c'est reparti !).
/dev/dm-0 8,2G 7,6G 121M 99% /
Nous allons créer la partition pour recevoir le répertoire /opt
, mais combien reste t-il en réalité pour utiliser les 100% de libre.
Cette commande va me le dire précisément
root@alfresco:/opt/alfresco-community# vgdisplay --- Volume group --- VG Name alfresco-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 9 VG Access read/write VG Status resizable MAX LV 0 Cur LV 5 Open LV 5 Max PV 0 Cur PV 1 Act PV 1 VG Size 60,15 GiB PE Size 4,00 MiB Total PE 15398 Alloc PE / Size 9422 / 36,80 GiB Free PE / Size 5976 / 23,34 GiB VG UUID O0a2Qf-YjK1-Y9gK-sDfE-KTof-wAAq-17WGE4
Donc il me reste 23.34 Go de libre, ce qui très bien pour un début avec Alfresco. Comme on peut le voir, bouger les partitions n'est pas un problème, il me suffira d'ajouter un disque pour faire grossir cette partition si nécessaire.
Création de cette fameuse partition, il existe 2 solutions via cette commande lvcreate -L 23,34G -n opt alfresco-vg
ou via
lvcreate -l 100%FREE -n opt alfresco-vg
Hormis la différence très visible, il y a aussi la lettre "l" en majuscule ou pas.
root@alfresco:/opt/alfresco-community# lvcreate -l 100%FREE -n opt alfresco-vg Logical volume "opt" created
Et voilà c'est fait, il faut désormais poser le système de fichiers, voici des informations sur ce LV.
--- Logical volume --- LV Path /dev/alfresco-vg/opt LV Name opt VG Name alfresco-vg LV UUID 4BLTbm-kbLB-aaGH-30rc-JS46-Y2Ed-vn1q0d LV Write Access read/write LV Creation host, time alfresco, 2016-06-21 10:29:58 +0200 LV Status available # open 0 LV Size 23,34 GiB Current LE 5976 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:5
Rien de plus facile pour formater :
mkfs.ext4 -L OPT /dev/alfresco-vg/opt
Et maintenant c'est assez simple, il suffit d'inclure le montage du répertoire /opt
dans ce volume,
et le tout dans le fichier /etc./fstab
. Ce qui donne :
dev/mapper/alfresco--vg-opt /opt ext4 noatime 0 2
Le montage se fait via la commande mount -a
.
Et voilà le résulat :
/dev/mapper/alfresco--vg-home 42G 832M 39G 3% /var /dev/mapper/alfresco--vg-tmp 360M 2,1M 335M 1% /tmp /dev/mapper/alfresco--vg-var 2,7G 4,3M 2,6G 1% /home /dev/mapper/alfresco--vg-opt 23G 45M 22G 1% /opt
Il reste pour finir à renommer les LV, passage de home à home2, de var à home puis de home2 à var .
lvrename alfresco-vg dev/alfresco-vg/home2 dev/alfresco-vg/var
Je ferme cette parenthèse “magique”.
Ce n’est guère plus compliqué que les précédentes manipulations. Donc désormais j'ai un nouveau disque de 60 Go de libre, identifié en /dev/sdb1
.
Pour l'ajouter au système, ou plutôt pour la prise en compte, il suffit de faire : pvcreate /dev/sdb1
.
Pour vérifier, on ne sait jamais :
root@alfresco:/opt/alfresco-community# pvdisplay --- Physical volume --- PV Name /dev/sda5 VG Name alfresco-vg PV Size 60,15 GiB / not usable 0 Allocatable yes (but full) PE Size 4,00 MiB Total PE 15398 Free PE 0 Allocated PE 15398 PV UUID 10qNv0-wS3i-QMuS-FFsL-HpxJ-rlkF-NveWw0 "/dev/sdb1" is a new physical volume of "60,54 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 60,54 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID ODuDch-Szvc-8T4F-LutO-mOWk-a6l4-eiU1zO
Mes deux disques sont présents, il faut maintenant les affecter.
root@alfresco:/opt/alfresco-community# vgextend alfresco-vg /dev/sdb1 Volume group "alfresco-vg" successfully extended
Changement de niveau, prise en compte au niveau de LV :
root@alfresco:/opt/alfresco-community# lvcreate -l 100%FREE -n opt alfresco-vg Logical volume "opt" created
Voilà reste plus qu'à donner l'ordre de monter le répertoire /opt
sur cette nouvelle partition et le tour est joué.
Néanmoins malgré formatage juste avant cette opération, il faut faire ou plutôt refaire ceci : mkfs.ext4 -L OPT /dev/alfresco-vg/opt
.
Et vraiment pour finir un mount -a
, et je retrouve pas partition /opt là ou il faut avec son nouvel espace dédié.
Je ne peux que vous conseiller de faire une sauvegarde avant de ce répertoire avant, ça peut aider...
Bien que le système de fichiers GNU/Linux est costaud et que nous relançons pas le serveur suite à une petite mise à jour; je préfère ne pas attendre les “X” montages pour tester la structure des disques. Et donc à chaque reboot, les systèmes de fichiers importants seront scruptés, voilà les commandes à faire (ou pas) :
root@:/opt # tune2fs -c 1 /dev/mapper/alfresco--vg-opt tune2fs 1.43.3 (04-Sep-2016) Définition du nombre maximal de montages à 1 root@:/opt # tune2fs -c 1 /dev/mapper/alfresco--vg-var tune2fs 1.43.3 (04-Sep-2016) Définition du nombre maximal de montages à 1 root@:/opt # tune2fs -c 1 /dev/mapper/alfresco--vg-home tune2fs 1.43.3 (04-Sep-2016) Définition du nombre maximal de montages à 1 root@:/opt # tune2fs -c 1 /dev/dm-0 tune2fs 1.43.3 (04-Sep-2016) Définition du nombre maximal de montages à 1
Habituellement je n'en parle pas. A savoir que Alfresco utilise la résolution hosts/dns dès son démarrage, si jamais cette étape n'est pas faite/parfaite voici l'erreur retournée :
2016-06-04 07:08:00,044 ERROR [solr.tracker.AbstractTracker] [SolrTrackerScheduler_Worker-3] Model tracking failed org.alfresco.error.AlfrescoRuntimeException: 05040831 GetModelsDiff return status is 404
J'ai donc perdu du temps à découvrir que ceci venait tout simplement de la résolution. Mon erreur venait que j'avais oublié la résolution IPV6 uniquement ! Merci en passant aux logs de Tomcat pour le côté précis ou explicite d'un problème.
Les sources sont disponibles sur cette page, néanmoins il faut s'inscrire :
https://www.alfresco.com/alfresco-community-download.
De là vous avez le fichier alfresco-community-installer-201605-linux-x64.bin
avec une taille de 771 Mo. Ce fichier est déjà au format exécutable sous Gnu/Linux, sinon ne pas hésiter à faire un
chmod +x
sur lui.
C'est tout simplement sur la page d'Oracle (Mysql) que nous pouvons le trouver :
https://dev.mysql.com/downloads/connector/j/5.1.html.
Il sera nécessaire de le décompresser pour récupérer uniquement ce fichier mysql-connector-java-5.1.38-bin.jar
. Cette version est la dernière à ce jour :
Connector/J 5.1.39
Table des matières
C'est très simple à faire, il suffit de suivre les commandes ci-dessous. Libre à vous de donner des noms différents pour la base de données, l'administrateur et le mot de passe.
root@alfresco:/home/adminsi# mysql -u root -p Enter password: Server version: 5.6.30-1 (Debian) mysql> CREATE DATABASE alfresco DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0,00 sec) GRANT ALL PRIVILEGES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'le-mot-de-passe'; Query OK, 0 rows affected (0,00 sec) FLUSH PRIVILEGES; quit ;
Lancez la commande ./alfresco-community-installer-201604-linux-x64.bin
, puis répondre aux diverses questions comme mentionnées ci-dessous.
Il faut saisir les données suivantes pour la prise en compte de Mysql, le tout au travers de 2 questions :
, jdbc:mysql://127.0.0.1:3306/alfresco?useUnicode=yes&characterEncoding=UTF-8
.
et org.gjt.mm.mysql.Driver
Attention | |
---|---|
Attention à ne pas lancer Alfresco au final, il est nécessaire de procéder à des modifications avant ! |
alfresco:~# ./alfresco-community-installer-201604-linux-x64.bin Language Selection Please select the installation language [1] English - English [2] French - Français [3] Spanish - Español [4] Italian - Italiano [5] German - Deutsch [6] Japanese - ??? [7] Dutch - Nederlands [8] Russian - ??????? [9] Simplified Chinese - ???? [10] Norwegian - Norsk bokmål [11] Brazilian Portuguese - Português Brasileiro Please choose an option [1] : 2 Bienvenue dans l'assistant d'installation de Alfresco Community Type d'installation [1] Facile - Installation avec la configuration par défaut. [2] Avancé - Configure les ports du serveur et les propriétés du service.: Choisissez les composants optionnels à installer. Merci de choisi une option. [1] : 2 Sélectionnez des composants que vous désirez installer, décochez ceux que vous ne voulez pas installer. Cliquez sur Suivant pour continuer. Java [Y/n] :Y PostgreSQL [Y/n] :N LibreOffice [Y/n] :Y Alfresco Community : Y (Cannot be edited) Solr1 [y/N] : n Solr4 [Y/n] :Y Alfresco Office Services [Y/n] :Y Web Quick Start [y/N] : n Intégration de Google Docs [Y/n] :n Est-ce que la sélection est correcte ? [Y/n]: Y Dossier d'installation Sélectionnez un dossier d'installation de Alfresco Community. Sélectionnez un dossier : [/opt/alfresco-community]: Paramètres du serveur de base de données Saisissez le port de votre base de données. Port du serveur de base de données : [5432]: Configuration du port Tomcat Saisissez vos paramètres de configuration Tomcat. Domaine du serveur Web : [127.0.0.1]: 192.168.1.250 Port de serveur Tomcat : [8080]: Port d'arrêt Tomcat : [8005]: Port SSL Tomcat : [8443]: Port AJP Tomcat : [8009]: Attention: Liaison au numéro de port indiqué impossible. Ce port est déjà utilisé par le processus java (deleted). Sélectionnez un autre port de serveur Tomcat. Pressez [Entrée] pour continuer Attention: Liaison au numéro de port indiqué impossible. Sélectionnez un autre port d'arrêt Tomcat. Pressez [Entrée] pour continuer Configuration du port Tomcat Saisissez vos paramètres de configuration Tomcat. Domaine du serveur Web : [127.0.0.1]: Port de serveur Tomcat : [8080]: Port d'arrêt Tomcat : [8005]: Port SSL Tomcat : [8443]: Port AJP Tomcat : [8009]: Port du serveur LibreOffice Saisissez le port que le serveur LibreOffice écoutera. Port du serveur LibreOffice : [8100]: Port FTP Alfresco Choisissez un numéro de port pour le serveur FTP Alfresco intégré. Port : [21]: Mot de passe admin Spécifiez un mot de passe administrateur Alfresco. Mot de passe admin : : Répéter le mot de passe : : Installer en tant que service Si vous enregistrez Alfresco Community en tant que service, le démarrage de Alfresco Community s'exécutera automatiquement à chaque démarrage de la machine. Installer Alfresco Community en tant que service ? [Y/n]: Y Avertissement Cet environnement n'est pas configuré pour fonctionner de manière optimale avec Alfresco. Lisez attentivement cette liste avant de continuer. Bien que ces problèmes n'empêcheront pas le fonctionnement d'Alfresco, certaines fonctionnalités du produit risquent de ne pas être disponibles ou le système. Not enough system RAM available (4.0GB+): 3.87GB SMTP TCP port in use : 25 Pressez [Entrée] pour continuer L'assistant d'installation est maintenant prêt à démarrer l'installation de Alfresco Community sur votre ordinateur. Voulez-vous continuer ? [Y/n]: Y Merci de patienter durant l'installation de Alfresco Community sur votre ordinateur. Installation en cours 0% ______________ 50% ______________ 100% L'assistant vient de finir l'installation de Alfresco Community sur votre ordinateur.
Donc, Alfresco est installé, mais non configuré et non lancé(!), voici les actions à faire avant tout.
cp mysql-connector-java-5.1.38-bin.jar /opt/alfresco-community/tomcat/lib
Vérifier que les droits d'accès sont identiques aux autres.
Le fichier à modifier/vérifier est situé ici : /opt/alfresco-community/tomcat/shared/classes
, choisir alfresco-global.properties
Note | |
---|---|
Pour son exploitation la BD acceptera 500 connexions, à vous de voir. Ne pas oublier le fichier “my.cnf” avec au moins cette valeur. |
dir.root=/opt/alfresco-community/alf_data alfresco.context=alfresco alfresco.host=192.168.1.250 alfresco.port=8080 alfresco.protocol=http share.context=share share.host=192.168.1.250 share.port=8080 share.protocol=http ### database connection properties ### db.driver=org.gjt.mm.mysql.Driver db.url=jdbc:mysql://127.0.0.1:3306/alfresco?useUnicode=yes&characterEncoding=UTF-8 db.username=alfresco db.password=mandrake_2048 db.name=alfresco # Note: your database must also be able to accept at least this many connections. # Please see your database documentation for instructions on how to configure this. db.pool.max=500 db.pool.validate.query=SELECT 1
Et voilà, lancez Alfresco via la commande suivante systemctl start alfresco
. Vos CPUs vont chauffer quelques longues secondes.
Note | |
---|---|
Il est possible refaire l'installation d'Alfresco sans problème, à condition de supprimer le fichier “/etc/init.d/alfresco”, bien que ceci ne soit pas bloquant, juste un message d'alerte qui apparaît. |
root@alfresco:/home# /etc/init.d/alfresco start [ ok ] Starting mysql (via systemctl): mysql.service. /opt/alfresco-community/libreoffice/scripts/libreoffice_ctl.sh : libreoffice could not be started Using CATALINA_BASE: /opt/alfresco-community/tomcat Using CATALINA_HOME: /opt/alfresco-community/tomcat Using CATALINA_TMPDIR: /opt/alfresco-community/tomcat/temp Using JRE_HOME: /opt/alfresco-community/java Using CLASSPATH: /opt/alfresco-community/tomcat/bin/bootstrap.jar:/opt/alfresco-community/tomcat/bin/tomcat-juli.jar Using CATALINA_PID: /opt/alfresco-community/tomcat/temp/catalina.pid Tomcat started. /opt/alfresco-community/tomcat/scripts/ctl.sh : tomcat started
Le message “libreoffice could not be started” est dû à un restart d'alfresco, le process .soffice.bin
doit tourner quoi qu'il arrive.
Table des matières
Voici divers liens qui vous permettent de savoir si Alfresco fonctionne
La page Alfresco qui donne accès à plusieurs liens, avec ou sans HTTPS
https://192.168.1.250:8443/alfresco/
http://192.168.1.250:8443/alfresco/
Et la page principale :https://192.168.1.250:8443/share/
ou en HTTP
http://192.168.1.250:8443/share/
En théorie vous avez accès à toutes les pages, la possibilité de travailler en clair(HTTP) ou en chiffré(HTTPS) sera traité plus tard.
Note | |
---|---|
Alfresco offre le service WebDAV, similaire aux hélas serveurs de fichiers que je vois régulièrement au travail. Ce n’est pas forcément ce que j'appelle une évolution. Sous Windows ce service peut être intégré via un import réseau puis en saisissant (exemple) “\\192.168.1.250:8443\alfresco\webdav” |
Une modification que beaucoup font sans pour cela expliquer pourquoi, néanmoins je fais comme tout le monde.
Il faut donc renommer le fichier /opt/alfresco-community/libreoffice/scripts/ctl.sh
qui est appelé via ce fichier
Dans /opt/alfresco-community/alfresco.sh
.
Note | |
---|---|
Avec la version de mai 2016, ceci est corrigé ! |
Il faut vérifier les 2 lignes suivantes :
# MYSQL_SCRIPT=$INSTALLDIR/mysql/scripts/ctl.sh
MYSQL_SCRIPT=/etc/init.d/mysql
et LIBREOFFICE_SCRIPT=$INSTALLDIR/libreoffice/scripts/libreoffice_ctl.sh
.
Ne pas hésiter à lancer la commande suivante, relativement longue pour déceler d'éventuels problèmes de dépendances :
/opt/alfresco-community/libreoffice/program/.soffice.bin --nofirststartwizard --nologo --headless \ "--accept=socket,host=localhost,port=$SOFFICE_PORT\;urp\;StarOffice.ServiceManager""
Et effectivement il manquait 2 librairies :
aptitude install libglu1 libdbus-glib-1-2
Ce fichier se trouve ici /opt/alfresco-community/libreoffice/scripts/ctl.sh
, il faut renommer le
en “libreoffice_ctl.sh”, pour être cohérent.
SOFFICE_PATH="/opt/alfresco-community/libreoffice/program" SOFFICE_PORT="8100" SOFFICEBIN=/opt/alfresco-community/libreoffice/program/.soffice.bin SOFFICEWRAPPER=/opt/alfresco-community/libreoffice/program/soffice.bin SOFFICE="$SOFFICEWRAPPER --nofirststartwizard --nologo --headless "--accept=socket,host=localhost,\ port=$SOFFICE_PORT\;urp\;StarOffice.ServiceManager"" SOFFICE_STATUS=""
Il faut ajouter 2 parenthèses, l'une accolée avant --accept"
puis juste après la dernière en fin de ligne.
Avec la version de mai 2016, cette modification n'apporte rien de plus, donc non pris en compte désormais !
Pas forcément à chaque fois, mais il arrive assez fréquemment que le process .soffice.bin
occupe 1 CPU à 100%,
sans le lâcher. La solution à ce problème est de modifier le fichier /etc/rc.local
et d'ajouter les lignes
suivantes (une valeur de 60 secondes fonctionne très bien) :
sleep 60 sh /opt/alfresco-community/libreoffice/scripts/libreoffice_ctl.sh stop sh /opt/alfresco-community/libreoffice/scripts/libreoffice_ctl.sh start
Note | |
---|---|
Plus de surcharge inutile, mais par contre 60 secondes d'attente au démarrage. Cette valeur de 60 secondes correspond (environ) au temps que Alfresco soit lancé complètement, car à un moment précis il vérifie la présence du port 8100... Lors d'un rafraîchissement d'Alfresco. A tout moment il est possible de lancer la commande suivante si cela devait arriver : “source /etc/rc.local” |
C'est comme une vieille habitude, je n'aime pas rechercher les fichiers d'historiques un peu partout.
Et avec Alfresco c'est un peu le cas, sans oublier la taille de tous ces fichiers qui pour moi encombrent l'espace dédié
à Alfresco. Donc les logs sont désormais dans /var/log/alfresco
,
comme bien d'autres.
Voilà les lignes à modifier :
tomcat/conf/logging.properties:29:1catalina.org.apache.juli.FileHandler.directory =/var/log/alfresco tomcat/conf/logging.properties:34:2localhost.org.apache.juli.FileHandler.directory =/var/log/alfresco tomcat/conf/logging.properties:39:3manager.org.apache.juli.FileHandler.directory =/var/log/alfresco tomcat/conf/logging.properties:44:4host-manager.org.apache.juli.FileHandler.directory =/var/log/alfresco tomcat/webapps/share/WEB-INF/classes/log4j.properties:16:log4j.appender.File.File=/var/log/alfresco/share.log tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties:16:log4j.appender.File.File=/var/log/alfresco/alfresco.log solr4/log4j-solr.properties:14:log4j.appender.File.File=/var/log/alfresco/share.log
Ne pas oublier de changer :
tomcat/bin/catalina.sh.orig:185: CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out tomcat/bin/catalina.sh:185: CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
Et pour finir ne pas oublier de changer dans le fichier tomcat/conf/server.xml
, ligne 140.:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log/alfresco"
Avec ma machine actuelle j'ai 3G, Alfresco (java) occupe 1.2G, il reste environ 120Mo de libre.
mysql 12147 0.4 4.6 1869124 140756 ? Sl 05:51 0:17 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir root 12230 7.0 44.1 6837844 1351340 pts/0 Sl 05:51 4:15 /opt/alfresco-community/java/bin/java -Djava.util.logging.config.file root 12497 0.0 1.8 757244 56004 pts/0 Sl 05:53 0:00 /opt/alfresco-community/libreoffice/program/.soffice.bin root 12500 0.0 0.0 0 0 pts/0 Z 05:53 0:00 [.soffice.bin]
Voici ce que préconise Alfresco pour la répartition :
De 50 connexions à 500 Max: 1,5 GB JVM RAM 2x CPUs (ou 1xDual-core) De 100 connexions à 1000 Max: 1,5 GB JVM RAM 4x CPUs (ou 2xDual-core) De 200 connexions à 2000 Max: 2,5 GB JVM RAM 8x CPUs (ou 4xDual-core)
Voici les paramètres par défaut, qui se retrouvent dans le fichier /opt/alfresco-community/tomcat/bin/setenv.sh
:
# Load Tomcat Native Library LD_LIBRARY_PATH=/opt/alfresco-community/common/lib:$LD_LIBRARY_PATH JAVA_HOME=/opt/alfresco-community/java JRE_HOME=$JAVA_HOME JAVA_OPTS="-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Djava.awt.headless=true \ -Dalfresco.home=/opt/alfresco-community -XX:ReservedCodeCacheSize=128m $JAVA_OPTS " JAVA_OPTS="-Xms512M -Xmx2379M $JAVA_OPTS " # java-memory-settings export JAVA_HOME export \ JRE_HOME export JAVA_OPTS export LD_LIBRARY_PATH
Note | |
---|---|
A noter lors d'une installation, les paramètres sont adaptés à la configuration de votre serveur. Donc en théorie, sauf changement ou plutôt augmentation de RAM, il n'y a rien à changer. |
Voici ce que l'on m'a donné pour optimiser ma machine, le tout est à placer dans le fichier : /opt/alfresco-community/tomcat/bin/setenv.sh
.
JAVA_OPTS="-XX:MaxPermSize=256m -Xms1g -Xmx2g -XX:+DisableExplicitGC -Djava.awt.headless=true \ -Dalfresco.home=/opt/alfresco-community -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true \ -XX:ReservedCodeCacheSize=128m"
Au final, et comme j'ai confiance à l'équipe d'Alfresco j'ai laisser les paramètres par défauts. Les paramètres cités supra sont là si besoin, pour affiner ou pas.
Sur cette page http://docs.alfresco.com/4.1/concepts/jvm-settings.html voici les paramètres conseillés :
-XX:MaxPermSize=256M -Xss1024K -Xms1G -Xmx2G -Dcom.sun.management.jmxremote
Voici un autre exemple :
export JAVA_OPTS='-server -Xmx8g -Xms8g -Xss256k -XX:MaxPermSize=512m -XX:NewSize=4g -Dfile.encoding=UTF-8'
Disponible ici https://forums.alfresco.com/forum/installation-upgrades-configuration-integration/configuration/want-change-java-mem-size-how
Table des matières
Une archive Alfresco presque à vide fait un peu moins de 950 Mo. Pour cette raison les sauvegardes seront placées dans
/var/sauvegardes
.
Voici un script qu'il ne reste plus qu'à installer ensuite dans la crontab.
Ce fichier se nomme svd_alfresco.pl
, il est stocké dans le répertoire /opt
.
Attention | |
---|---|
Le caractère “@” ne passe au niveau du mot de passe ! |
#! /usr/bin/perl -w use strict; use Socket; # Théoriquement inclus avec Perl-5.x # -------------------------------------------------------------------- my ($heure, $minute, $yday) = (localtime)[2,1,7]; if ( $heure < 10 ) { $heure = '0' .$heure; } if ( $minute < 10 ) { $minute = '0' .$minute; } # /////////////// PARTIE CONFIGURABLE \\\\\\\\\\\\\\\\\\\\\\\ my $rep_dest = "/var/sauvegardes/"; my $rep_dest_full = "/var/sauvegardes/*.*"; my $rep_web = "/opt/alfresco-community/"; # ////////////// FIN \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ my $quand = $yday ."-" .$heure ."H" .$minute ."-"; my $file_sql = $rep_dest .$quand ."alfresco.sql" ; my $file_web = $rep_dest .$quand ."alfresco.tgz " ; # c'est parti pour Mysql : my $cmd_sql = `mysqldump -uroot -pmandrake_2048 alfresco > $file_sql` ; my $cmd_web = `tar -cJf $file_web $rep_web` ; # on efface les fichiers plus vieux de 20 jours (ctime jours à modifier év) my $cmd_del = `find $rep_dest_full -ctime 20 -exec rm -f {} \;` ; # my $cmd_del2 = `find $rep_dest_full -ctime 20 -exec ls -l {} \;` ; exec $cmd_web; # # et voilà les sauvegardes sont prêtes ...
Pour mémoire, voici comment automatiser le tout : crontab -e
, ce qui va créer ou modifier le fichier situé ici :
/var/spool/cron/crontabs/root
. Et voici un exemple pour une exécution tous les jours à 07h00 :
0 7 * * * root /opt/svd-sql-web.pl
C'est la sauvegarde la plus simple à faire, il suffit de connaître ou se trouve les fichiers stockés.
Ils sont tous classés par année, mois et jour puis heure/minutes(?) sous un format spécifique et unique (.bin).
Voici le répertoire en question : /opt/alfresco-community/alf_data/contentstore
Et pour information voilà à quoi ressemble ce stockage, plus de problème d'accent ou d'encodage lié au système de fichier.
2016 ./2016: 7 8 ./2016/7: 29 30 31 ./2016/7/29: 12 13 ./2016/7/29/12: 53 ./2016/7/29/12/53: 00c5f9c4-f9cc-452b-b10e-43bbe950fb41.bin 5800e1a7-383a-4f2d-8724-79b58c5e2f9e.bin af9ab018-7d2c-4ea2-929a-d8869e1d0fab.bin 00f5d451-140d-46de-b976-7f816f5d970c.bin 5a03cf60-cdf4-4b64-8fee-a55805ea6f55.bin b0528b41-25a2-40a4-b2c6-bd79e5bb2484.bin 021eff46-f163-4ee8-8420-e96cb1dfd911.bin 5a5977e8-46a4-4489-9455-6d11baee74b2.bin b136bc16-3472-4549-8515-9babc8285e2c.bin 034cb29d-c943-4090-8d63-4a7d8229249e.bin 5a5de541-fbd4-4b62-a169-2ccb4567ecf6.bin b19c1920-8490-492d-8419-96d3993b7e63.bin 044b93af-9819-4320-bc44-33d8ea7ed542.bin 5b533bab-212f-476e-be28-e903eeb3873e.bin b2ebbbc6-d51d-4db5-abba-3821206d631d.bin 0e8ae567-fd43-4617-81e4-90cb2e87a896.bin 687afc60-8761-44b6-81fb-fe98dcf223da.bin c0c9fa47-70d9-468b-975a-fa54e74d5f1f.bin 57272d12-1f2c-4df9-b849-aa4f14cb7e1c.bin aebc37d5-9418-4540-be1b-ee63ccb6b9c2.bin ./2016/7/29/13: 23 41 59 ./2016/7/29/13/23: 007110d7-ae13-49d1-b9d9-9d00ac0f106d.bin 59f58836-2030-48b1-a35a-f5c7aa2e3f80.bin ./2016/7/29/13/41: c7d2ec27-e46a-4449-b3ef-ab02f993e389.bin ./2016/7/29/13/59: 3e9679e8-547b-49a4-b185-7bd58438f36d.bin ./2016/7/30: 10 11 7 8 ./2016/7/30/10: 38
Table des matières
Je ne peux pas comparer le produit Microsoft™ SharePoint. C'est un produit payant, pour proposer au final une solution lente et mal encodé, bien qu'il se soit amélioré au fil des ans. Ce que je sais avec Alfresco, l'édition en ligne d'un document Office verrouille le fichier.
Cette indication nous indique également par qui, ce qui est parfois pratique.
Autre aspect plus ou moins intéressant, l'édition en ligne active le versionning du document ouvert. Il est donc impossible de perdre des données sur un document. Sinon la restauration et même la comparaison sur une ancienne version sont possibles. L'historique inclut également qui à fait les différentes versions. Son défaut étant qu'il ne faut pas enregistrer toutes les 20 secondes, sinon le versionning peut même devenir pénible à gérer.
Alfresco utilise de son côté les fonctions d'Alfresco Office Services (AOS).
Ce service s'installe sans rien faire à condition d'avoir validé cette ligne à l'installation
Alfresco Office Services [Y/n] :Y
Il faut la suite Office 2010, laquelle va installer 2 compléments sur vos navigateurs présents. Pour utiliser au mieux Alfresco il est préférable d'activer en permancence ces 2 modules.
Modification du registre utilisateur Windows. J'insiste sur le fait qu'un utilisateur peut faire cette action sans problème. Il suffit de préparer un fichier avec l'extension “.reg” puis de placer ces données en exemple :
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet] "UseRWHlinkNavigation"="https://192.168.1.250/share" "UseRWOSHlinkNavigation"=dword:00000001 "UseOnlineContent"=dword:00000002 "BasicAuthLevel"=dword:00000002 "LcfemCleanShutdown"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\NetworkStatusCache] "LastClearAllTime"=hex:b0,56,db,e2,9a,0f,d0,01 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\Server Cache] "Version"=dword:00000001 "Count"=dword:00000002 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\Server Cache\http://192.168.1.250:7070/alfresco/] "Type"=dword:00000005 "Protocol"=dword:00000003 "Version"=dword:0000000e "Flags"=dword:00000007 "CobaltMajorVersion"=dword:00000000 "CobaltMinorVersion"=dword:00000000 "MsDavExt"=dword:00000000 "Expiration"=hex(b):70,3b,fb,3f,4f,48,d0,01 "EnableBHO"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\Server Cache\https//192.168.1.250:8443/share/proxy/alfresco/api/node/content/workspace/] "Type"=dword:00000000 "Protocol"=dword:00000000 "Version"=dword:00000000 "Flags"=dword:00000000 "CobaltMajorVersion"=dword:00000000 "CobaltMinorVersion"=dword:00000000 "MsDavExt"=dword:00000000 "Expiration"=hex(b):70,8f,26,cc,15,30,d0,01 "EnableBHO"=dword:00000000 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\Server Cache\https://192.168.1.250:7070/alfresco/] "EnableBHO"=dword:00000000 [HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\Server Cache\https://192.168.1.250:7070/alfresco/] "EnableBHO"=dword:00000000
Cet exemple a été gentiment offert, merci au donateur qui se reconnaîtra.
La procédure est très simple, il suffit de faire tout ceci...pour au final ne pas avoir une vue sur les documents partagés ou pas (?). Donc je ne peux que déconseiller pour Alfresco, et même pour tout le reste d'utiliser IE 9. Apparemment IE 11 serait meilleure, néanmoins il n'est pas à la hauteur, comparé d'autres produits.
Dans IE choisir “options Internet” puis l'onglet “Sécurité” ensuite “sites de confiance”, cliquez sur le bouton “Sites”. Entrez l'adresse (URL) de votre serveur (exemple https://192.168.1.250:8443 ou https://alfresco.archi.com) Au niveau des options globales, il faut que l'option “Authentification Utilisateur” soit sur “Connexion automatique avec le nom d'utilisateur et le mot de passe”
Fermez et redémarrez Internet Explorer.
L'action de pouvoir éditer en ligne existe, elle est payante, hélas https://addons.alfresco.com/addons/libreoffice-online-edit-module. Ce complément utilise CMIS (content management interoperability services) pour y parvenir. Il existe d'autres solutions via CMIS, comme CMISLync, mais aussi payante.
Table des matières
Ce n'est pas avec une certaine méfiance que j'attaque ce sujet, pourtant important et nécessaire. À savoir que la dernière fois que j'ai voulu faire cette étape, j'ai pratiquement tout cassé/planté. Donc une bonne sauvegarde avant, et c'est parti !
Pour commencer il faut éditer ou vérifier que les données dans certains fichiers soient correctes, ou même adaptées à votre système.
Le fichier /opt/alfresco-community/alf_data/keystore
, est le script qui va déclencher la création des certificats “automatiquement"”.
Un chmod +x
n'est pas superflu, comme supprimer le même script en “.bat”.
root@alfresco:/opt/alfresco-community/alf_data/keystore# cat generate_keystores.sh #! /bin/sh # Please edit the variables below to suit your installation # Note: for an installation created by the Alfresco installer, you only need to edit ALFRESCO_HOME # Alfresco installation directory ALFRESCO_HOME=/opt/alfresco-community # The directory containing the alfresco keystores, as referenced by keystoreFile and truststoreFile attributes in tomcat/conf/server.xml ALFRESCO_KEYSTORE_HOME=$ALFRESCO_HOME/alf_data/keystore # SOLR installation directory SOLR_HOME=$ALFRESCO_HOME/alf_data/solr # Java installation directory JAVA_HOME=$ALFRESCO_HOME/java # Location in which new keystore files will be generated CERTIFICATE_HOME=$HOME # The repository server certificate subject name, as specified in tomcat/conf/tomcat-users.xml with roles="repository" \ REPO_CERT_DNAME="CN=Alfresco Repository, OU=Unknown, O=Alfresco RH Ltd., L=Tours, ST=FR, C=FR" # The SOLR client certificate subject name, as specified in tomcat/conf/tomcat-users.xml with roles="repoclient" \ SOLR_CLIENT_CERT_DNAME="CN=Alfresco RH Client, OU=Unknown, O=Alfresco RH Ltd., L=Tours, ST=FR, C=FR" # The number of days before the certificate expires ( ce qui donne 100 ans !) CERTIFICATE_VALIDITY=36525 # Stop alfresco "$ALFRESCO_HOME/alfresco.sh" stop # Ensure certificate output dir exists mkdir -p "$CERTIFICATE_HOME" # Remove old output files (note they are backed up elsewhere) if [ -f "$CERTIFICATE_HOME/ssl.keystore" ]; \ then rm "$CERTIFICATE_HOME/ssl.keystore"; \ fi if [ -f "$CERTIFICATE_HOME/ssl.truststore" ]; then rm "$CERTIFICATE_HOME/ssl.truststore"; \ fi if [ -f "$CERTIFICATE_HOME/browser.p12" ]; \ then rm "$CERTIFICATE_HOME/browser.p12"; fi if [ -f "$CERTIFICATE_HOME/ssl.repo.client.keystore" ]; \ then rm "$CERTIFICATE_HOME/ssl.repo.client.keystore"; \ fi if [ -f "$CERTIFICATE_HOME/ssl.repo.client.truststore" ]; then rm "$CERTIFICATE_HOME/ssl.repo.client.truststore"; fi # Generate new self-signed certificates for the repository and solr "$JAVA_HOME/bin/keytool" -genkeypair \ -keyalg RSA -dname "$REPO_CERT_DNAME" \ -validity $CERTIFICATE_VALIDITY -alias ssl.repo -keypass kT9X6oe68t -keystore "$CERTIFICATE_HOME/ssl.keystore" \ -storetype JCEKS -storepass kT9X6oe68t "$JAVA_HOME/bin/keytool" -exportcert -alias ssl.repo \ -file "$CERTIFICATE_HOME/ssl.repo.crt" -keystore "$CERTIFICATE_HOME/ssl.keystore" -storetype JCEKS \ -storepass kT9X6oe68t "$JAVA_HOME/bin/keytool" -genkeypair -keyalg RSA -dname "$SOLR_CLIENT_CERT_DNAME" \ -validity $CERTIFICATE_VALIDITY -alias ssl.repo.client -keypass kT9X6oe68t -keystore \ "$CERTIFICATE_HOME/ssl.repo.client.keystore" -storetype JCEKS -storepass kT9X6oe68t "$JAVA_HOME/bin/keytool" \ -exportcert -alias ssl.repo.client -file "$CERTIFICATE_HOME/ssl.repo.client.crt" -keystore \ "$CERTIFICATE_HOME/ssl.repo.client.keystore" -storetype JCEKS -storepass kT9X6oe68t # Create trust relationship between repository and solr "$JAVA_HOME/bin/keytool" -importcert -noprompt -alias ssl.repo.client \ -file "$CERTIFICATE_HOME/ssl.repo.client.crt" -keystore "$CERTIFICATE_HOME/ssl.truststore" -storetype JCEKS -storepass kT9X6oe68t # Create trust relationship between repository and itself - used for searches "$JAVA_HOME/bin/keytool" -importcert -noprompt \ -alias ssl.repo -file "$CERTIFICATE_HOME/ssl.repo.crt" -keystore "$CERTIFICATE_HOME/ssl.truststore" -storetype JCEKS -storepass kT9X6oe68t # Create trust relationship between solr and repository "$JAVA_HOME/bin/keytool" -importcert -noprompt -alias ssl.repo \ -file "$CERTIFICATE_HOME/ssl.repo.crt" -keystore "$CERTIFICATE_HOME/ssl.repo.client.truststore" -storetype JCEKS -storepass kT9X6oe68t # Export repository keystore to pkcs12 format for browser compatibility "$JAVA_HOME/bin/keytool" -importkeystore \ -srckeystore "$CERTIFICATE_HOME/ssl.keystore" -srcstorepass kT9X6oe68t -srcstoretype JCEKS -srcalias ssl.repo \ -srckeypass kT9X6oe68t -destkeystore "$CERTIFICATE_HOME/browser.p12" -deststoretype pkcs12 \ -deststorepass alfresco -destalias ssl.repo -destkeypass alfresco # Ensure keystore dir actually exists mkdir -p "$ALFRESCO_KEYSTORE_HOME" # Back up old files echo "Copies des vieux fichiers en .old..." cp "$ALFRESCO_KEYSTORE_HOME/ssl.keystore" "$ALFRESCO_KEYSTORE_HOME/ssl.keystore.old" cp "$ALFRESCO_KEYSTORE_HOME/ssl.truststore" \ "$ALFRESCO_KEYSTORE_HOME/ssl.truststore.old" cp "$ALFRESCO_KEYSTORE_HOME/browser.p12" "$ALFRESCO_KEYSTORE_HOME/browser.p12.old" cp "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.keystore" "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.keystore.old" cp "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.truststore" "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.truststore.old" cp "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.keystore" "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.keystore.old" cp "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.truststore" "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.truststore.old" cp "$SOLR_HOME/templates/test/conf/ssl.repo.client.keystore" "$SOLR_HOME/templates/test/conf/ssl.repo.client.keystore.old" cp "$SOLR_HOME/templates/test/conf/ssl.repo.client.truststore" "$SOLR_HOME/templates/test/conf/ssl.repo.client.truststore.old" cp "$SOLR_HOME/templates/store/conf/ssl.repo.client.keystore" "$SOLR_HOME/templates/store/conf/ssl.repo.client.keystore.old" cp "$SOLR_HOME/templates/store/conf/ssl.repo.client.truststore" "$SOLR_HOME/templates/store/conf/ssl.repo.client.truststore.old" # Install the new files echo "Copies des nouveaux fichiers..." cp "$CERTIFICATE_HOME/ssl.keystore" "$ALFRESCO_KEYSTORE_HOME/ssl.keystore" cp "$CERTIFICATE_HOME/ssl.truststore" "$ALFRESCO_KEYSTORE_HOME/ssl.truststore" cp "$CERTIFICATE_HOME/browser.p12" "$ALFRESCO_KEYSTORE_HOME/browser.p12" cp "$CERTIFICATE_HOME/ssl.repo.client.keystore" "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.keystore" cp "$CERTIFICATE_HOME/ssl.repo.client.truststore" "$SOLR_HOME/workspace-SpacesStore/conf/ssl.repo.client.truststore" cp "$CERTIFICATE_HOME/ssl.repo.client.keystore" "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.keystore" cp "$CERTIFICATE_HOME/ssl.repo.client.truststore" "$SOLR_HOME/archive-SpacesStore/conf/ssl.repo.client.truststore" cp "$CERTIFICATE_HOME/ssl.repo.client.keystore" "$SOLR_HOME/templates/test/conf/ssl.repo.client.keystore" cp "$CERTIFICATE_HOME/ssl.repo.client.truststore" "$SOLR_HOME/templates/test/conf/ssl.repo.client.truststore" cp "$CERTIFICATE_HOME/ssl.repo.client.keystore" "$SOLR_HOME/templates/store/conf/ssl.repo.client.keystore" cp "$CERTIFICATE_HOME/ssl.repo.client.truststore" "$SOLR_HOME/templates/store/conf/ssl.repo.client.truststore" echo " ### Les certificats sont mis à jour ###" echo "Vérifier la présence de ceci : dir.keystore=$ALFRESCO_KEYSTORE_HOME dans le fichier 'alfresco-global.properties'" echo "Le fichier 'browser.p12' est disponible sur le port 80" cp /opt/alfresco-community/alf_data/keystore/browser.p12 /var/www/html/ echo "##### FIN #####
Ce fichier a été légèrement modifié par mes soins, libre à vous de garder la valeur 36525 qui vous donnera un certifcat valide pour 100 ans.
Ce script devrait générer les erreurs suivantes, néanmoins elles ne sont pas bloquantes :
cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/workspace-SpacesStore/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/workspace-SpacesStore/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/archive-SpacesStore/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/archive-SpacesStore/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/templates/test/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/templates/test/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/templates/store/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible d'évaluer '/opt/alfresco-community/alf_data/solr/templates/store/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/workspace-SpacesStore/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/workspace-SpacesStore/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/archive-SpacesStore/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/archive-SpacesStore/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/templates/test/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/templates/test/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/templates/store/conf/ssl.repo.client.keystore': Aucun fichier ou dossier de ce type cp: impossible de créer le fichier standard '/opt/alfresco-community/alf_data/solr/templates/store/conf/ssl.repo.client.truststore': Aucun fichier ou dossier de ce type
Voici ou seront stockées les certifcats pour information:
Le fichier 'ssl keystore' contient la paire de clés RSA public/privé RSA.
Le fichier 'ssl truststore' contient le certificat d'autorité (il est utilisé pour signé le “dépot global” et pour SOLR4).
Ces certificats peuvent être stockés librement, à condition que le fichier alfresco-global.properties
soit modifié en conséquence.
SSL coté privé
Keystore location: encryption.ssl.keystore.location
Keystore provider: encryption.ssl.keystore.provider
Keystore type: encryption.ssl.keystore.type
Keystore metadata file location: encryption.ssl.keystore.keyMetaData.location
SSL coté public
Keystore location: encryption.ssl.truststore.location
Keystore provider: encryption.ssl.truststore.provider
Keystore type: encryption.ssl.truststore.type
Keystore metadata file location: encryption.ssl.truststore.keyMetaData.location
browser.p12, disponible sur le serveur WEB classique (port 80)
A signaler que l'erreur est signalée par Alfresco, et il existe un correctif. On peut laisser tel quel, ceci n'est pas bloquant.
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
Il existe plusieurs paramètres qui ne concernent que le fichier browser.p12
. Il peuvent être modifiés sans problème dans les fichiers suivants :
ssl-keystore-passwords.properties
et ssl-truststore-passwords.properties
Sans trop affirmer, ces 2 fichiers interviennent pour le certificat de signature, le fameux CA.
Dans l'étape suivante, il sera demandé un mot de passe, il s'agit par défaut de alfresco
, le CA aura comme nom ssl-repo
.
Voici le détail fichier par fichier :
root@alfresco:/opt/alfresco-community/alf_data/keystore# cat ssl-keystore-passwords.properties aliases=ssl.alfresco.ca,ssl.repo # The ssl keystore password keystore.password=kT9X6oe68t # The password protecting the ssl repository key ssl.repo.password=kT9X6oe68t # The password protecting the ssl Alfresco CA key ssl.alfresco.ca.password=kT9X6oe68t
root@alfresco:/opt/alfresco-community/alf_data/keystore# cat ssl-truststore-passwords.properties aliases=alfresco.ca # The ssl truststore password keystore.password=kT9X6oe68t # The password protecting the ssl Alfresco CA strust certificate alfresco.ca.password=kT9X6oe68t
Je pense qu'il est possible de modifier (exemple) le mot
“alfresco”, mais sans toucher à ssl.
,
que je considère comme un repère. Idem pour le mot “repo”.
Ce fichier est disponible via (exemple) http://192.168.1.250/browser.p12
,
le but du jeu est de le poser dans le PC de l'utilisateur, via ou pas la méthode WEB.
Installer ce certificat sur une plateforme Windows est simple, tout en vous demandant de bien confirmer sans arrêt. Une fois dans le répertoire (ex) “Téléchargements”, il suffit de cliquer dessus, puis de suivre les instructions comme le montrent les images ci-dessous.
La durée d'une session pour un utilisateur est de 60 minutes pour la partie “share”. C'est très bien, vous pouvez changer cette valeur dans les fichiers listés ci-dessous :
tomcat/conf/web.xml:516: <session-timeout>30</session-timeout> tomcat/webapps/alfresco/WEB-INF/web.xml:518: <session-timeout>60</session-timeout> tomcat/webapps/share/WEB-INF/web.xml:189: <session-timeout>60</session-timeout>
En supposant que le serveur (Postfix) est bien configuré pour sa nouvelle mission, il reste alors à connecter Alfresco à lui. Pour cela il faut éditer le fichier
alfresco-global.properties
. Il faut activer la notification
### E-mail site invitation setting ### notification.email.siteinvite=true
puis d'ajouter ces lignes :
### Service MAIL ### mail.host=localhost mail.port=25 # on peut se servir de ce paramètre pour identifier l'émetteur mail.username=anonymous mail.password= # Encodage en UTF-8 mail.encoding=UTF-8 # Mettre cette valeur en '7bit' ou '8bit' à tester avec Outlook...qui..:(:(:( mail.header=7bit mail.smtp.auth=false # 30 sec par défaut...c'est trop long passage à 15 sec mail.smtp.timeout=15000 # on peut ou pas placer le "@....." ou pas, dépend de la configuration du serveur mail.from.default=postmaster mail.from.enabled=true
Voici divers messages que le système peut envoyer selon votre configuration. C'est propre net et clair, je n'ai rien à ajouter ni à expliquer.
Il peut arriver que SOLR soit un peu perdu, même si c'est rare. La solution très souvent est de supprimer ses index, ensuite il va reconstruire tout lui-même, et souvent le problème est résolu. C'est ce qui doit être fait lors d'une restauration ! Il faut arrêter Alfresco (!) puis effacer les répertoires “index” situés dans ces répertoires :
/opt/alfresco-community/alf_data/solr4/index/archive/SpacesStore/ /opt/alfresco-community/alf_data/solr4/index/workspace/SpacesStore
Ensuite reste à lancer Alfresco, et regarder si tout fonctionne correctement.
Table des matières
Note | |
---|---|
Si vous pensez pouvoir modifier tout l'interface, dès maintenant je vous dis “bon courage !”. Les feuilles CSS sont présentes en grand nombre, et le tout est retravaillé par AIKAU et ensuite par LESS. D'ou une usine à gaz, bravo tout de même à l'équipe de développement. |
Il existe 2 répertoires importants pour les thèmes :
/opt/alfresco-community/tomcat/webapps/share/WEB-INF/classes/alfresco/site-data/thèmes
Ce répertoire contient uniquement un fichier XML pour la définition du thème. Il suffit de copier l'un des fichiers présents puis de le renommer comme votre thème ( ex vertTheme ce qui donne vertTheme.xml). Voici son contenu, dont une partie a été commentée volontairement, car elle risquait de rentrer en conflit. Je reparle de ceci par la suite.
root@:/home/adminsi # cat /opt/alfresco-community/tomcat/webapps/share/WEB-INF/classes/alfresco/site-data/themes/vertTheme.xml <?xml version='1.0' encoding='UTF-8'?> <thème> <title>Archi Vert Theme </title> <title-id>theme.vertTheme </title-id> <css-tokens> <less-variables> @header-background-color: #0e4b0f; <!-- Bar menu haute - bg : Vert fonce --> @header-font-color: yellow; <!-- Bar menu haute - Couleur sous menu --> @header-hover-background-color: #246d25; <!-- Mouse OVER Menu : Vert un peu claire --> @header-hover-font-color: gold; <!-- Menu haut font color under menu --> @header-focus-background-color: #136414; <!-- Menu haut : bg menu select --> @header-focus-font-color: black; @header-menubar-font-color: white; @header-dropdown-menu-font-color: black; <!-- Menu haut font color menu over --> @dashlet-background: #aaa; <!-- white --> @dashlet-border: 1px solid #bababa; @dashlet-border-radius: 3; <!-- @dashlet-title-background: #92c15f linear-gradient(to bottom, #a3d07a, #92c15f); @dashlet-title-background: #246d25 linear-gradient(to bottom, #a3d07a, #92c15f); @dashlet-title-border-bottom: 0; @dashlet-title-border-radius: 5; @dashlet-title-color: #fff; @dashlet-toolbar-background: #A020F0; @dashlet-toolbar-background: gold; @dashlet-toolbar-border-bottom: 1px solid #d3d3d3; @dashlet-body-background: #f9fcfd; @dashlet-body-border-radius: 0; --> </less-variables> </css-tokens> </theme>
Puis le deuxième répertoire qui est :
/opt/alfresco-community/tomcat/webapps/share/themes/
C'est ici que le gros de votre thème se trouve.
drwxr-xr-x 3 root root 4096 août 2 18:08 default drwxr-xr-x 4 root root 4096 août 1 18:29 gdocs drwxr-xr-x 4 root root 4096 août 1 18:29 greenTheme drwxr-xr-x 4 root root 4096 août 1 18:29 greyTheme drwxr-xr-x 4 root root 4096 août 1 18:29 hcBlack drwxr-xr-x 4 root root 4096 août 1 18:29 lightTheme drwxr-xr-x 4 root root 4096 août 1 18:29 yellowTheme
# cp -Rav gdocs/ vertTheme
Il faut renommer tous les “yui-skin-gdocs” ou “gdocs” qui désigne un thème précis, et comme celui ci a été copié, il n'est pas adapté. Il faut donc renommer tous les “gdocs”avec le nom de mon thème qui est “greenTheme”.
Note | |
---|---|
Il faut relancer Alfresco pour la prise en compte d'un thème. Dommage ! tout de suite on avance moins vite. |
Il est possible de changer énormément de valeurs en modifiant le fichier presentation.css
, y compris la 1ere page de l'authentification.
Et c'est pour cette raison que j'ai commenté une partie du fichier précédent, car les valeurs sont présentes également aussi. Ce fichier est du pur CSS, contrairement au fichier précédent
qui lui utilise des variables LESS. Si vous souhaitez utiliser ou connaître ces variables (LESS), elles sont expliquées ici
https://github.com/Alfresco/Aikau/blob/master/aikau/src/main/resources/alfresco/css/less/defaults.less
Il existe beaucoup de thèmes différents pour Alfresco, la plupart sont payants. Néanmoins pour se faire la main, je choisis RED Themes
Ce thème est disponible ici :
https://github.com/share-extras/red-theme/releases/download/v0.1/red-theme-0.1.amp,
il faut prendre si possible un fichier avec une extension en .amp
. Ensuite il suffit de lancer cette commande :
root@alfresco:~# /opt/alfresco-community/java/bin/java -jar /opt/alfresco-community/bin/alfresco-mmt.jar install red-theme-0.1.amp /opt/alfresco-community/tomcat/webapps/share.war 06020001 An error was encountered during deployment of the AMP into the WAR: 06020000 The module (Alfresco Share Red Theme) cannot be installed on a war version greater than 3.2.1. This war is version: 5.2.0.
Laquelle me jette, mais bon je vais devoir me débrouiller (ou faire sans, c'est plus rapide). Je laisse volontairement cette commande pour garder la procédure, qui un jour passera...
Table des matières
Alfresco n'est pas avare avec les ouvertures de flux, le tout amplifié par Tomcat et ses ports autres que 80 et 443. Même si la logique est là, pour accéder actuellement à Alfresco,
faire ce type de lien https://alfresco.domain.fr:8443/share
, n'est pas forcément compris par tous.
C'est pourquoi ce chapitre va expliquer comment changer tout çà, pour obtenir des liens classiques.
Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 127.0.0.1:54686 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54687 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54693 ESTABLISHED tcp 0 172 192.168.1.250:22 192.168.1.6:49522 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54690 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54691 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54680 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54692 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54688 ESTABLISHED tcp 0 0 127.0.0.1:8100 127.0.0.1:47253 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54689 ESTABLISHED tcp 0 0 127.0.0.1:3306 127.0.0.1:54679 ESTABLISHED tcp6 0 0 ::1:25 LISTEN tcp6 0 0 :::8443 LISTEN tcp6 0 0 :::445 LISTEN tcp6 0 0 127.0.0.1:8005 LISTEN tcp6 0 0 :::8009 LISTEN tcp6 0 0 :::139 LISTEN tcp6 0 0 :::50287 LISTEN tcp6 0 0 :::111 LISTEN tcp6 0 0 :::8080 LISTEN tcp6 0 0 :::80 LISTEN tcp6 0 0 :::22 LISTEN tcp6 0 0 127.0.0.1:42328 127.0.0.1:8443 TIME_WAIT tcp6 70 0 127.0.0.1:43750 127.0.0.1:8443 CLOSE_WAIT tcp6 70 0 127.0.0.1:38715 127.0.0.1:8443 CLOSE_WAIT tcp6 0 0 127.0.0.1:38239 127.0.0.1:8443 TIME_WAIT tcp6 0 0 127.0.0.1:54690 127.0.0.1:3306 ESTABLISHED tcp6 1 0 127.0.0.1:54731 127.0.0.1:8080 CLOSE_WAIT (...coupé volontairement...) tcp6 1 0 127.0.0.1:54832 127.0.0.1:8080 CLOSE_WAIT tcp6 0 0 127.0.0.1:54689 127.0.0.1:3306 ESTABLISHED tcp6 0 0 127.0.0.1:49220 127.0.0.1:8443 TIME_WAIT tcp6 1 0 127.0.0.1:54734 127.0.0.1:8080 CLOSE_WAIT tcp6 0 0 127.0.0.1:54688 127.0.0.1:3306 ESTABLISHED tcp6 0 0 127.0.0.1:41510 127.0.0.1:8443 TIME_WAIT tcp6 1 0 127.0.0.1:54706 127.0.0.1:8080 CLOSE_WAIT tcp6 1 0 127.0.0.1:54733 127.0.0.1:8080 CLOSE_WAIT tcp6 1 0 127.0.0.1:54718 127.0.0.1:8080 CLOSE_WAIT tcp6 0 0 127.0.0.1:60731 127.0.0.1:8443 TIME_WAIT tcp6 70 0 127.0.0.1:49565 127.0.0.1:8443 CLOSE_WAIT tcp6 0 0 127.0.0.1:33871 127.0.0.1:8443 TIME_WAIT
A noter et sachant que mon Alfresco est dans un statut en déploiement, il est à considerer comme au repos, et il y a déjà sans rien faire 21 connexions à Mysql en interne; 24 connexions sur le 8443, idem toutes en interne.
A noter que les ports 139 et 445 sont utilisés pour le WebDAV (Microsoft CIFS), ils seront traités ultérieurement en vue du retrait. Le port 8100 est utilisé par LibreOffice, le port 8009 est utilisé par AJP (interface Apache / Tomcat).
Les services suivants ont été désactivés, car ils ne servent à rien, ou représente une faille potentielle :
systemctl disable rpcbind systemctl disable nfs-common systemctl disable rpcbind systemctl disable snews systemctl disable interbase systemctl disable nimreg
Voilà qui est mieux, les ports ouverts sont désormais moins nombreux !
Les ports suivants sont encore accessibles de l'extérieur et pour moi ils ne servent à rien, les voici : 139, 445, 8009 et 8443.
Iptables va donc les interdire, il suffit ce créer un fichier similaire à celui-ci :/etc/init.d/firewall
.
Ce fichier doit contenir les lignes suivantes :
#!/bin/sh # Vide les tables actuelles iptables -t filter -F # Vide les règles personnelles iptables -t filter -X # Interdire toute connexion entrante et sortante iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # --- # Ne pas casser les connexions etablies iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # --- # Autoriser loopback iptables -t filter -À INPUT -i lo -j ACCEPT iptables -t filter -À OUTPUT -o lo -j ACCEPT # --- # ICMP (Ping) iptables -t filter -À INPUT -p icmp -j ACCEPT iptables -t filter -À OUTPUT -p icmp -j ACCEPT # --- # SSH IN/OUT iptables -t filter -À INPUT -p tcp --dport 22 -j ACCEPT iptables -t filter -À OUTPUT -p tcp --dport 22 -j ACCEPT # --- # DNS IN/OUT iptables -t filter -À OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -À OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -À INPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -À INPUT -p udp --dport 53 -j ACCEPT # --- # NTP OUT iptables -t filter -À OUTPUT -p udp --dport 123 -j ACCEPT # --- # HTTP (redirigé ensuite) + HTTPS OUT iptables -t filter -À OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -À OUTPUT -p tcp --dport 443 -j ACCEPT # --- # HTTP + HTTPS In iptables -t filter -À INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -À INPUT -p tcp --dport 443 -j ACCEPT # --- # Le port 8080 est utilisé par AOS !!! iptables -t filter -À INPUT -p tcp --dport 8080 -j ACCEPT iptables -t filter -À INPUT -p tcp --dport 8443 -j DROP # --- # FTP Out iptables -t filter -À OUTPUT -p tcp --dport 20:21 -j DROP # --- # FTP In modprobe ip_conntrack_FTP # ligne facultative # iptables -t filter -À INPUT -p tcp --dport 20:21 -j DROP # iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # --- # Mail SMTP:25 iptables -t filter -À INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -À OUTPUT -p tcp --dport 25 -j ACCEPT # --- # Mail POP3:110 #iptables -t filter -À INPUT -p tcp --dport 110 -j ACCEPT # iptables -t filter -À OUTPUT -p tcp --dport 110 -j ACCEPT # --- # interdire a netbios de sortir 139 + 435 iptables -t filter -À INPUT -p tcp --dport 139 -j DROP iptables -t filter -À OUTPUT -p tcp --dport 139 -j DROP # --- iptables -t filter -À INPUT -p tcp --dport 435 -j DROP iptables -t filter -À OUTPUT -p tcp --dport 435 -j DROP
Note | |
---|---|
A noter que le port 8080 reste ouvert, AOS se sert de ce port pour l'édition en ligne, dommage. |
De nos jours, et pour éviter les piratages de sites, pour la protection des informations de plus en plus de sites préconisent ou migrent à 100% en HTTPS (port 443). Nous allons faire de même,
tout en gardant des accès vers le 8443. Ce port est celui utilisé par Tomcat à l'identique d'un port 443 classique. Cette redirection par Apache est très simple à mettre en oeuvre.
Voici le listing du fichier vim /etc/apache2/sites-enabled/000-default.conf
Le module proxy d'Apache est utilisé, donc il faut activer le tout via :
a2enmode proxy
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName alfresco.archi.test DocumentRoot /var/www/html ProxyVia on ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> RewriteEngine on RewriteCond %{HTTPS} off # RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R] # activation de HTTP 2 plus l'ancien HTTP 1.1 Protocols h2 http/1.1 #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Les redirections sont prises en compte par le module mod_rewrite
d'Apache. Ce module s'active via la commande a2enmod rewrite
.
Donc désormais le port 80 est ouvert, mais ne sert plus au transfert, tout est sécurisé...même si les certificats sont faits “maison”, les données ne transitent plus en claire.
Ce module est une interface entre Apache et Tomcat, ce dernier étant utilisé par Alfresco, on ne peut pas s'en passer. Voici comment l'installer :
aptitude install libapache2-mod-jk
Les chapitres suivants vont montrer comment modifier divers fichiers, pour un bon dialogue entre Apache et Tomcat.
Ce module utilise plusieurs fichiers, il faut absolument vérifier que APJ 1.3 est bien configuré au niveau d'Alfresco. Voici les paramètres que j'utilise, ils sont présents
dans le fichier /opt/alfresco-community/tomcat/conf/server.xml
:
Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" URIEncoding="UTF-8" protocol="AJP/1.3" redirectPort="8443" />
En réalité, c'est la définition par défaut, mais il faut vérifier tout de même.
Continuons avec le fichier /etc/apache2/mods-enabled/jk.load
, rien à faire à ce niveau, par contre le fichier jk.conf
, doit être
configuré comme ici :
root@alfresco:/etc/apache2/mods-enabled# cat jk.conf # Configuration Example for mod_jk # used in combination with Apache 2.2.x <IfModule jk_module> # Ce fichier va contenir JkWorkersFile /etc/libapache2-mod-jk/workers.properties # Our JK error log # You can (and should) use rotatelogs here JkLogFile /var/log/apache2/mod_jk.log # Our JK log level (trace,debug,info,warn,error) JkLogLevel info # Our JK shared memory file JkShmFile /var/log/apache2/jk-runtime-status # Define a new log format you can use in any CustomLog in order # to add mod_jk specific information to your access log. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{Set-Cookie}o\" %{pid}P %{tid}P %{JK_LB_FIRST_NAME}n \ %{JK_LB_LAST_NAME}n ACC %{JK_LB_LAST_ACCESSED}n ERR %{JK_LB_LAST_ERRORS}n BSY %{JK_LB_LAST_BUSY}n %{JK_LB_LAST_STATE}n %D" extended_jk # This option will reject all requests, which contain an encoded percent sign (%25) or backslash (%5C) in the URL # If you are sure, that your webapp doesn't use such URLs, enable the option to prevent double encoding attacks. JkOptions +RejectUnsafeURI # This option will collapse multiple adjacent slashes in request URLs before looking for mount or unmount matches. JkOptions +CollapseSlashesAll # After setting JkStripSession to "On", mod_jk will strip all ";jsessionid=..." from request URLs it does *not* forward to a backend. # This is useful, if all links in a webapp use URLencoded session IDs and parts of the static content should be delivered directly by Apache. # JkStripSession On # Start a separate thread for internal tasks like idle connection probing, connection pool resizing and load value decay. # Run these tasks every JkWatchdogInterval seconds. JkWatchdogInterval 60 # Configure access to jk-status and jk-manager. If you want to make this available in a virtual host, # either move this block into the virtual host or copy it logically there by including "JkMountCopy On" in the virtual host. # Add an appropriate authentication method here! <Location /jk-status> # Inside Location we can omit the URL in JkMount JkMount jk-status Order deny,allow Deny from all Allow from 192.168.1.0 </Location> <Location /jk-manager> # Inside Location we can omit the URL in JkMount JkMount jk-manager Order deny,allow Deny from all Allow from 192.168.1.0 </Location> # If you want to put all mounts into an external file that gets reloaded automatically after changes # (with a default latency of 1 minute), you can define the name of the file here. # JkMountFile conf/extra/uriworkermap.properties # Example for Mounting a context to the worker "balancer". The URL syntax "a|b" instantiates two mounts at once, # the first one is "a", the second one is "ab". # on ne monte rien ici, mais dans workers.properties #JkMount /share|/* ajp13 #JkMount /alfresco|/* ajp13 # JkUnMount /myapp/static/* * # Example for UnMounting requests for a named worker # JkUnMount /myapp/images/* balancer # Example for UnMounting requests using regexps # SetEnvIf REQUEST_URI "\.(htm|html|css|gif|jpg|js)$" no-jk # Example for setting a reply timeout depending on the request URL # SetEnvIf Request_URI "/transactions/" JK_REPLY_TIMEOUT=600000 # Example for disabling reply timeouts for certain request URLs # SetEnvIf Request_URI "/reports/" JK_REPLY_TIMEOUT=0 # IMPORTANT: Mounts and virtual hosts # If you are using VirtualHost elements, you # - can put mounts only used in some virtual host into its VirtualHost element # - can copy all global mounts to it using "JkMountCopy On" inside the VirtualHost # - can copy all global mounts to all virtual hosts by putting # "JkMountCopy All" into the global server # Since: 1.2.26 </IfModule>
Comme mentionné dans ce fichier, rien n'est monté dans ce fichier, continuons avec le fichier :/etc/libapache2-mod-jk/workers.properties
.
Ce fichier est mentionné dans les toutes premières lignes du fichier précédent pour information. Voici un exemple :
# workers.properties - # # This file is a simplified version of the workers.properties supplied with the upstream sources. The jni inprocess worker (not build in the # debian package) section and the ajp12 (deprecated) section are removed. # # As a general note, the characters $( and ) are used internally to define macros. Do not use them in your own configuration!!! # # Whenever you see a set of lines such as: # x=value # y=$(x)\something # # the final value for y will be value\something # # Normaly all you will need to do is un-comment and modify the first three properties, i.e. workers.tomcat_home, workers.java_home and ps. # Most of the configuration is derived from these. # # When you are done updating workers.tomcat_home, workers.java_home and ps you should have 3 workers configured: # # - An ajp13 worker that connects to localhost:8009 # - A load balancer worker # OPTIONS ( very important for jni mode ) # # workers.tomcat_home should point to the location where you # installed tomcat. This is where you have your conf, webapps and lib # directories. # workers.tomcat_home=/opt/alfresco-community/tomcat # # workers.java_home should point to your Java installation. Normally # you should have a bin and lib directories beneath it. # workers.java_home=/opt/alfresco-community/java # # You should configure your environment slash.../ on UNIX ps=/ # # The workers that your plugins should create and work with # worker.list=ajp13 # ajp13_worker WORKER DEFINITION ------------------------------ # Defining a worker named ajp13_worker and of type ajp13 # Note that the name and the type do not have to match. # worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 # # Specifies the load balance factor when used with # a load balancing worker. # Note: # ----> lbfactor must be > 0 # ----> Low lbfactor means less work done by the worker. worker.ajp13.lbfactor=50 # # Specify the size of the open connection cache. #worker.ajp13_worker.cachesize DEFAULT LOAD BALANCER WORKER DEFINITION ---------------------- # The loadbalancer (type lb) workers perform wighted round-robin # load balancing with sticky sessions. # Note: # ----> If a worker dies, the load balancer will check its state # once in a while. Until then all work is redirected to peer # workers. #worker.loadbalancer.type=lb #worker.loadbalancer.balance_workers=ajp13
Pas grand-chose à faire dans ce fichier, sauf à bien définir ou sont les binaires pour “Tomcat (Alfresco)” et “JAVA (Alfresco)”.
Comme désormais les flux sont tous en HTTPS, le fichier etc/apache2/sites-enabled/default-ssl.conf
est très important, néanmoins c'est l'ensemble de tout qui fait
que tout fonctionne comme il faut. C'est donc ici que les paramètres JkMount
sont inscrits. Il est possible d'inscrire aussi des liens interdits via JkUnMount
.
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName alfresco.archi.test DocumentRoot /var/www/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined #Include conf-available/serve-cgi-bin.conf # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on SSLProxyEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key #SSLVerifyClient optional #SSLVerifyDepth 1 #SSLOptions +StdEnvVars +StrictRequire #SSLInsecureRenegotiation on #ProxyRequests On #ProxyPreserveHost On JkMount /share ajp13 JkMount /share/* ajp13 JkMount /alfresco|/* ajp13 #JkMount /alfresco/* ajp13 #SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt #SSLCACertificatePath /etc./ssl/certs/ #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt #SSLCARevocationPath /etc/apache2/ssl.crl/ #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl #SSLVerifyClient require #SSLVerifyDepth 10 #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Une fois de plus rien de bien spécial, néanmoins il faut générer de nouveaux certificats, C'est la phase suivante.
Voici comment activer ce module :
root@alfresco:/opt/alfresco-community# a2enmod jk Enabling module jk To activate the new configuration, you need to run: service apache2 restart
Voici en image les différents flux simplifiés :
Donc avec toutes ces modifications, si on ne touche à rien, l'utilisateur va découvrir que l'accès est possible, mais aussi que les certificats ont changés. Il est donc obligatoire de changer les certificats SSL qui sont installés par défaut avec Apache, par une version dédiée à “Alfresco”.
En prenant en compte une mise à jour d'Openssl éventuelle, ou d'un écrasement du fichier de référence /etc/ssl/opensssl.cnf
, il est préférable de travailler sur un fichier dédié
à cette mission. Les certificats seront tous stockés dans /etc/apache2/ssl
, comme répertoire de base.
Voici une copie de mon fichier alfresco_config.cnf
qui est bien sur adapté à ma situation :
cat alfresco_config.cnf # # OpenSSL example configuration file. # This is mostly being used for generation of certificate requests. # This definition stops the following lines choking if HOME isn't # defined. HOME = . RANDFILE = $ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: #oid_file = $ENV::HOME/.oid oid_section = new_oids [ new_oids ] # Policies used by the TSA examples. tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_policy3 = 1.2.3.4.5.7 #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = /etc/apache2/ssl # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. #unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem # The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options # Extension copying option: use with caution. # copy_extensions = copy # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crlnumber must also be commented out to leave a V1 CRL. # crl_extensions = crl_ext default_days = 3650 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret string_mask = utf8only # req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = FR countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = France localityName = Locality Name (eg, city) localityName_default = Alfresco Serveur 1 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Alfresco RH # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = RH-Tours commonName = Common Name (server FQDN or YOUR name) # commonName_default = alfresco.archi.test commonName_max = 64 emailAddress = Email Address emailAddress_default = archi.laurent@gmail.com emailAddress_max = 64 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # This will be displayed in Netscape's comment listbox. nsComment = "OpenSSL Generated Certificate" # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always # This is what PKIX recommends but some broken software chokes on critical # extensions. #basicConstraints = critical,CA:true # So we do this instead. basicConstraints = CA:true [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always [ proxy_cert_ext ] basicConstraints=CA:FALSE # Here are some examples of the usage of nsCertType. If it is omitted # the certificate can be used for anything *except* object signing. # This is OK for an SSL server. # nsCertType = server # For an object signing certificate this would be used. # nsCertType = objsign # For normal client use this is typical # nsCertType = client, email # and for everything including object signing: # nsCertType = client, email, objsign # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # This will be displayed in Netscape's comment listbox. nsComment = "OpenSSL Generated Certificate" # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # Copy subject details # issuerAltName=issuer:copy # This really needs to be in place for it to be a proxy certificate. proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo #################################################################### [ tsa ] default_tsa = tsa_config1 # the default TSA section [ tsa_config1 ] # These are used by the TSA reply generation only. dir = ./demoCA # TSA root directory serial = $dir/tsaserial # The current serial number (mandatory) crypto_device = builtin # OpenSSL engine to use for signing signer_cert = $dir/tsacert.pem # The TSA signing certificate # (optional) certs = $dir/cacert.pem # Certificate chain to include in reply # (optional) signer_key = $dir/private/tsakey.pem # The TSA private key (optional) default_policy = tsa_policy1 # Policy if request did not specify it # (optional) other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) digests = md5, sha1 # Acceptable message digests (mandatory) accuracy = secs:1, millisecs:500, microsecs:100 # (optional) clock_precision_digits = 0 # number of digits after dot. (optional) ordering = yes # Is ordering defined for timestamps? # (optional, default: no) tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no)
A noter un encodage avec 4096 bits, c'est tout de même pas mal. Là ou certain peuvent critiquer à juste titre c'est sur la durée, qui est de 10 ans.
Voici la liste des fichiers générés :
-rw-r--r-- 1 root root 11K juil. 28 21:19 alfresco_config.cnf -rw-r--r-- 1 root root 2,5K juil. 28 21:20 ca.crt -rw------- 1 root root 3,3K juil. 28 21:19 ca.key -rwxr-xr-x 1 root root 1,7K juil. 28 20:44 create_ssl.sh -rw-r--r-- 1 root root 0 juil. 28 21:19 index.txt -rw------- 1 root root 3,2K juil. 28 21:21 insecure.alfresco.key -rw-r--r-- 1 root root 2,1K juil. 28 21:20 secure.alfresco.crt -rw-r--r-- 1 root root 1,8K juil. 28 21:20 secure.alfresco.csr -rw-r--r-- 1 root root 3,3K juil. 28 21:20 secure.alfresco.key -rw-r--r-- 1 root root 0 juil. 28 21:19 serial
Il faut désormais faire prendre en compte tout ceci par Apache, il faut éditer le fichier /etc/apache2/sites-enabled/default-ssl.conf
, et modifier les lignes suivantes :
SSLCertificateFile /etc/apache2/ssl/secure.alfresco.crt SSLCertificateKeyFile /etc/apache2/ssl/insecure.alfresco.key SSLCACertificatePath /etc/apache2/ssl/ SSLCACertificateFile /etc/apache2/ssl/ca.crt # et cette ligne qui aurait pu être activé bien avant, il est vrai que IE et moi, à part télécharger Firefox... BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
Et voilà on relance Apache, ensuite il faut exporter le fichier ca.crt
pour les utilisateurs afin qu'ils puissent l'intégrer en certificat de confiance.
Nous voilà tranquilles pendant 10 ans...
Après plusieurs essais de création, voici un script qui fonctionne à la perfection :
#! /bin/sh # # create_ssl.sh # date : juillet 2016 # By Archi # A placer dans le répertoire ou les certificats seront stockés (/etc/apache2/ssl/) # cd /etc/apache/ssl pris en compte via -config alfresco_config.cnf (a parametrer) touch index.txt $ echo 01 > serial # a faire manuellement ou en auto # cp /etc/ssl/openssl.cnf alfresco_config.cnf echo "1. Create a CA certificate" #Create a private key for your CA: openssl genrsa -des3 -out ca.key 4096 -config alfresco_config.cnf chmod 600 ca.key #Create the certificate, this will be shown as the top level certificate # when you have signed other certificates so choose expiration day # and the certificate contents carefully. All signed certificates will expirate # if the top level certificate expires so you may want to choose a few years here openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config alfresco_config.cnf echo "2. Create a certificate request" #Create a private key: openssl genrsa -des3 -out secure.alfresco.key 4096 -config alfresco_config.cnf echo "Create the certificate request" openssl req -new -key secure.alfresco.key -out secure.alfresco.csr -config alfresco_config.cnf #Make sure you put your domain name in the “Common Name” field echo "3. Sign the certificate with your CA certificate" echo "### Attention CN = FQDN du serveur" #You will need to provide the certificate request here and the CA key openssl x509 -req -days 365 -in secure.alfresco.csr -CA \ ca.crt -CAkey ca.key -set_serial 01 -out \ secure.alfresco.crt echo "4. Remove password from key (optional)" openssl rsa -in secure.alfresco.key -out insecure.alfresco.key #mv secure.alfresco.key secure.alfresco.key.secure #mv secure.alfresco.key.insecure insecure.alfresco.key echo "Set permissions on the keys-chmod 700" chmod 644 secure.alfresco.* chmod 600 insecure.alfresco.key
Ce chapitre a été créé hors du déroulement logique de lecture de ce document, néanmoins c'est sa place. Et donc après tous ces changements de certificats, tout fonctionnait bien. J'ai donc (plus loin dans ce document) créer un site, puis des utilisateurs locaux (pas d'annuaire). Et là c'est le début de mes problèmes ou même de blocage. Malgré un post dans le forum(fr) d'Alfresco...rien au bout de 5 jours, la rubrique en anglais est dans le même style,pas de bonne réponse.
Donc depuis le début des changements de certificats l'erreur ci-dessous est apparue, mais comme tout fonctionnait en HTTPS normalement à mes yeux; je n'ai prêté aucune attention particulière à ces évènements. Les logs sont faits à la façon JAVA, dont ultra explicite sur 300 lignes, le tout toutes les 3 secondes...
2016-07-21 06:12:46,989 ERROR [org.alfresco.solr.tracker.AbstractTracker] Model tracking failed javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:121) at java.io.FilterOutputStream.write(FilterOutputStream.java:97) at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90) at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at org.alfresco.httpclient.AbstractHttpClient.executeMethod(AbstractHttpClient.java:135) at org.alfresco.httpclient.AbstractHttpClient.sendRemoteRequest(AbstractHttpClient.java:111) at org.alfresco.httpclient.HttpClientFactory$HttpsClient.sendRequest(HttpClientFactory.java:408) at org.alfresco.solr.client.SOLRAPIClient.getModelsDiff(SOLRAPIClient.java:1154) at org.alfresco.solr.tracker.ModelTracker.trackModelsImpl(ModelTracker.java:249) at org.alfresco.solr.tracker.ModelTracker.trackModels(ModelTracker.java:207) at org.alfresco.solr.tracker.ModelTracker.ensureFirstModelSync(ModelTracker.java:229) at org.alfresco.solr.tracker.CoreWatcherJob.registerForCore(CoreWatcherJob.java:131) at org.alfresco.solr.tracker.CoreWatcherJob.execute(CoreWatcherJob.java:74) at org.quartz.core.JobRunShell.run(JobRunShell.java:216) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:563)
C'est en grattant un peu plus, et aussi en me disant mais à quoi sert ce chiffrement SSL en interne dans ce serveur, à part prendre du CPU inutilement. Voila le début de la solution, je vais passer la connexion de SOLR4 en claire (HTTP), ce qui n'est pas un problème.
Pour y parvenir je me suis servi de cette page https://wiki.alfresco.com/wiki/Alfresco_And_SOLR#FAQ (chapitre Running Without SSL).
Il faut d'abord arrêter Alfresco puis faire les modifications qui suivent. Ensuite, il faut modifier le fichier ou plutôt ajouter dans ce fichier
/opt/alfresco-community/tomcat/shared/classes/alfresco-global.properties
,
les lignes suivantes solr.secureComms=none
, et solr.port=8080
.
Ensuite, c'est là ou j'apprécie une fois de plus JAVA pour sa simplicité (pour le moment c'est mon top !)
Il faut modifier ou ajouter dans chaque fichier solrcore.properties
la ligne suivante :alfresco.secureComms=none
.
Et donc il faut chercher ses fichiers et les éditer un par un, et voici le résultat :
/opt/alfresco-community/solr4/archive-SpacesStore/conf/solrcore.properties /opt/alfresco-community/solr4/workspace-SpacesStore/conf/solrcore.properties /opt/alfresco-community/solr4/templates/rerank/conf/solrcore.properties /opt/alfresco-community/solr4/templates/test/conf/solrcore.properties /opt/alfresco-community/solr4/templates/vanilla/conf/solrcore.properties /opt/alfresco-community/solr4/templates/without_suggest/conf/solrcore.properties
Et là je me suis dit, mais c'est pas vrai, c'est quoi ce truc ! Néanmoins, j'ai contrôlé, ajouté ou modifié chaque fichier. C'est sympa ça occupe.
Dans le même style, il faut supprimer/commenter dans les fichiers web.xml
le paragraphe XML suivant :
<security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>repository</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>Solr</realm-name> </login-config> <security-role> <role-name>repository</role-name> </security-role>
Voici la liste de ce type de fichier
/opt/alfresco-community/tomcat/conf/web.xml /opt/alfresco-community/tomcat/webapps/ROOT/WEB-INF/web.xml /opt/alfresco-community/tomcat/webapps/_vti_bin/WEB-INF/web.xml /opt/alfresco-community/tomcat/webapps/alfresco/WEB-INF/jboss-web.xml /opt/alfresco-community/tomcat/webapps/alfresco/WEB-INF/web.xml /opt/alfresco-community/tomcat/webapps/host-manager/WEB-INF/web.xml ### Présent ici ! ### /opt/alfresco-community/tomcat/webapps/manager/WEB-INF/web.xml /opt/alfresco-community/tomcat/webapps/share/WEB-INF/web.xml /opt/alfresco-community/tomcat/webapps/solr4/WEB-INF/web.xml
Et là une fois...c'est quoi ce brin, il ne serait pas possible de faire un fichier unique qui contente tout le monde (?).
Note | |
---|---|
Si cela peut vous aider, pour vérifier on peut utiliser la commande (exemple)grep -rn solr.secureComms |
Pour finir, tout fonctionne très bien, mes utilisateurs sont tous visibles, les sites aussi...l'aventure continue !
Table des matières
Une fonction supplémentaire qui peut servir là ou je travaille, est une gestion de projet. Et ceci existe gratuitement via ce lien : https://addons.alfresco.com/addons/becpg-model-designer-alfresco. Ce lien donne accès à toutes les versions : https://sourceforge.net/projects/becpg-community/files/ Ce projet contient trois composants, dont une partie “Designer” pour ajouter des modèles, une gestion de projets et une gestion de durée de vie de produits (PLM). Uniquement les composants pour les projets seront installés, voici la procédure :
Avant tout : on stoppe Alresco (!), suivi d'une sauvegarde (!).
#!/bin/bash #1 - Install manually #-------------------------- # Stop Alfresco # Copy all AMPs under alfresco/amps folder # Copy apply_becpg_amps.bat under alfresco/bin # run "apply_becpg_amps.bat" # Start Alfresco echo "Arrêt d'Alfresco CE" /etc/init.d/alfresco stop echo "Install core AMPS" /opt/alfresco-community/java/bin/java -jar /opt/alfresco-community/bin/alfresco-mmt.jar install /opt/alfresco-community/amps/becpg-core-2.1.0.amp /opt/alfresco-community/tomcat/webapps/alfresco.war -force /opt/alfresco-community/java/bin/java -jar /opt/alfresco-community/bin/alfresco-mmt.jar install /opt/alfresco-community/amps/becpg-project-core-2.1.0.amp /opt/alfresco-community/tomcat/webapps/alfresco.war -force echo "Install share AMPS" /opt/alfresco-community/java/bin/java -jar /opt/alfresco-community/bin/alfresco-mmt.jar install /opt/alfresco-community/amps/becpg-share-2.1.0.amp /opt/alfresco-community/tomcat/webapps/share.war -force /opt/alfresco-community/java/bin/java -jar /opt/alfresco-community/bin/alfresco-mmt.jar install /opt/alfresco-community/amps/becpg-project-share-2.1.0.amp /opt/alfresco-community/tomcat/webapps/share.war -force rm -Rf /opt/alfresco-community/webapps/alfresco rm -Rf /opt/alfresco-community/webapps/share sh /opt/alfresco-community/bin/clean_tomcat.sh echo "Arrêt d'Alfresco CE" /etc/init.d/alfresco start ; tail -f /var/log/alfresco/catalina.out
Voici l'ensemble des commandes que j'ai réalisées, avec un tas de warning j'ai eu un peu peur, néanmoins après le lancement d'Alfresco, un nouveau menu est présent “beCPG”.
Ces warnings ne sont pas inquiétants dans la mesure ou l'option nobackup
a été demandé...(?).
L'exploitation de ce module fait l'objet d'un chapitre particulier, actuellement c'est l'installation !
Note | |
---|---|
Cette dernière copie d'écran est un peu brute volontairement, c'est pour éviter que vous soyez surpris comme moi, par ce tas de “warning"”. Certes des warning, mais quand c'est la 1ere installation ,des doutes peuvent arriver. |
Note | |
---|---|
Le précédent script a été testé avec succès sur une version Alfresco CE 5.2, néanmoins aucun accès à BECPG Projet comme avant... |
Table des matières
Il existe la solution d'intervenir directement dans le code javascript pour retirer cette fonction. Néanmoins je vous souhaite bon courage pour cette action.
Autre solution plus rapide, c'est de profiter des fonctionnalités de CSS pour rendre non visible ce bloc. Le style à recherche est like-action
, en liaison
avec une balise span
si possible. C'est une chance seule un fichier comporte cette balise, de plus les modifications sont visibles après un rafraîchissement de la page.
tomcat/webapps/share/css/base.css:1131:.item-social a.like-action tomcat/webapps/share/css/base.css:1136:.item-social a.like-action.enabled
Voilà les lignes à commenter, et la ligne display: none;
à ajouter.
.item-social a.like-action { #background-image: url(../components/images/like-16.png); #background-position: 0 0; display:none; } .item-social a.like-action.enabled { #background-image: url(../components/images/liked-16.png); #padding-left: 16px; display: none; } .item-social span.likes-count { #background-color: #eee; #font-size: 93%; #margin-left: 0.5em; #padding:1px 2px 0; display: none; }
Dans le même style, et en plus dans le même fichier que précédemment, si les icônes/liens Twitter, Google+... sont de trop, voici les lignes à modifier :
.linkshare-action-facebook { # background-image: url(../components/images/social-facebook-16.png); display:none; } .linkshare-action-twitter { #background-image: url(../components/images/social-twitter-16.png); display:none; } .linkshare-action-google-plus { #background-image: url(../components/images/social-google-16.png); display: none; }
Table des matières
Dans Alfresco les rôles permettent de donner des droits à un groupe ou à un utilisateur. Ces droits sont globaux. Lors de la création d'un site ou espace, ces 5 groupes se retrouvent adaptés au site, comme le montre l'image suivante.
Il existe 5 catégories différentes que voici, sans oublier la catégorie Administrateur
, qui ne sera pas détaillée :
Contributeur
Il dispose des droits d'accès au contenu dont il est propriétaire ; il ne peut pas modifier ni supprimer le contenu créé par d'autres membres.
Collaborateur
Il dispose des droits d'accès au contenu dont il est propriétaire ; il peut modifier, mais pas supprimer le contenu créé par d'autres membres.
C'est le niveau classique d'une personne qui doit travailler en équipe, sans aucune gestion des droits/utilisateurs...
Coordinateur (ou Gestionnaire)
Il dispose des droits d'accès à l'ensemble du contenu.
Editeur
Il peut modifier les propriétés des fichiers et réserver / libérer des fichiers ; il ne peut pas créer son propre contenu.
Lecteur
Il dispose de droits d'accès en lecture uniquement ; il ne peut pas créer son propre contenu.
Table 11.1. Plus en détail
Permissions | Lecteur | Contributeur | Collaborateur | Gestionnaire |
---|---|---|---|---|
Lancer des invitations | ||||
Modifier la présentation du site | ||||
Modifier le site (fonctions) | ||||
Editer le site | ||||
Configurer les flux RSS | ||||
Créer une librairie (fichiers) | ||||
Créer un site de liens | ||||
Configurer le WIKI | ||||
Voir les détails et changer les valeurs dates des évènements/tâches |
Table 11.2. Les permissions sur les dossiers :
Persmissions | Lecteur | Contributeur | Collaborateur | Gestionnaire |
---|---|---|---|---|
Voir les dossiers/détails | ||||
Peut utiliser le bouton “J'aime” (supprimer/site) | ||||
Peut utiliser le bouton “Favoris” | ||||
Renommer son dossier si propriétaire(!) | ||||
Renommer un dossier | ||||
Editer ses détails si propriétaire(!) | ||||
Editer les détails | ||||
Editer ses propriétés si propriétaire(!) | ||||
Editer les propriétés | ||||
Copier | ||||
Déplacer son dossier si propriétaire(!) | ||||
Déplacer un dossier | ||||
Effacer un contenu si propriétaire(!) | ||||
Effacer un contenu | ||||
Changer les permissions pour lui même | ||||
Changer les permissions | ||||
Changer ses “aspects” si propriétaire(!) | ||||
Changer les “aspects” | ||||
Changer le type de fichier si propriétaire(!) | ||||
Changer le type de fichier | ||||
Placer un commentaire | ||||
Editer ses commentaires si propriétaire(!) | ||||
Editer les commentaires | ||||
Effacer ses commentaires | ||||
Effacer les commentaires |
Table 11.3. Les permissions sur les répertoires :
Persmissions | Lecteur | Contributeur | Collaborateur | Gestionnaire |
---|---|---|---|---|
Créer un dossier | ||||
Localiser un dossier | ||||
Modifier ses régles/dossiers si propriétaire(!) | ||||
Modifier les régles/dossiers |
Table 11.4. Les permissions sur les utilisateurs :
Permissions | Lecteur | Contributeur | Collaborateur | Gestionnaire |
---|---|---|---|---|
Changer un rôle | ||||
Retirer un utilisateur d'un site | ||||
Supprimer une invitation |
Comme vous pouvez le constater, les droits sont assez fins pour permettre à tout le monde de travailler ensemble et librement, sans pour autant mettre en péril les données. Personnellement les sites à 100% de “gestionnaire” doivent être rares, ou réservés à des personnes qui savent ce qu'elles font. Il n'est pas rare de croiser des utilisateurs qui suppriment un peu n'importe quoi, le tout avec une étonnante surprise, et aussi malgré un message d'alerte.
Voici un petit récapitulatif des privilèges disponibles :
Table 11.5. Les privilèges :
Lecteur | Editeur | Contributeur | Collaborateur | Gestionnaire | |
---|---|---|---|---|---|
Voir les espaces et contenu | |||||
Mettre à jour / Editer | |||||
Ajouter du contenu | |||||
Editer les propriétés d'un contenu | |||||
Passer des invitations | |||||
Passer propriétaire d'un contenu |
Voici les pages sur le site d'Alfresco qui explique le tout finement si besoin est :
http://docs.alfresco.com/community/references/permissions_share_other.html
http://docs.alfresco.com/community/references/permissions_share_components.html
http://docs.alfresco.com/community/references/permissions-cloud-members.html
Pour commencer, seul l'administrateur est en mesure de créer un ou plusieurs utilisateurs. C'est le menu “Outils admin” qui donne accès à la création d'utilisateurs. Commencer par la création d'un utilisateur alors que rien n'est fait ailleurs est une solution. Par contre, il ne pourra être affecté dans un groupe tout de suite. La meilleure solution étant de créer d'abord les groupes en liaison avec le site puis de faire la création du ou des utilisateurs. J'y reviendrais après au niveau des groupes, donc j'insiste un peu sur “si vous utilisez des groupes !”
Les premières lignes concernent des informations sur l'utilisateur, la 2e partie “l'authentification”. Pour finir avec l'affectation d'un ou plusieurs groupes, de l'activation ou non de quotas et même du compte. À noter que chaque utilisateur peut être assujeti à un quotas à ne pas dépasser, si cette valeur vide, elle est équivalente à sans limite.
Pour en finir, rien de bien compliqué à ce niveau, reste à mon avis à écrire uniformément les données, dans le style les noms en majuscules, les logins en minuscule...etc.
Une fois, l'utilisateur validé, celui-ci se voit attribué un site personnel. À ce sujet et après tests, il n'est pas possible de supprimer un site personnel si l'utilisateur existe.
A noter, l'utilisateur créé reçoit un mél. similaire à celui-ci. Il faut prendre en compte qu'il s'agit d'une création d'un compte en local(!), et non depuis un annuaire (plus de gestion des mots de passe).
À noter : mon Alfresco n'est pas encore configuré entièrement, d'où les liens incohérents. Les images manquantes proviennent d'un export de ce mél. sans les images. Sinon c'est propre et clair.
“Suivre” un utilisateur fait que Alfresco trace cette personne sur ces mondres mouvements.
Utiliser les groupes pour mieux gérer les droits est une possibilité que Alfresco propose sans problème. Néanmoins je pense qu'elle n'est pas forcément à utiliser à chaque fois. Pour un site qui ne contient pas trop d'utilisateurs, la création d'un groupe ne peut que compliquer une tâche simple. Le système est ouvert à toute forme de gestion. Il existe des sites qui utilisent les groupes internes et externes afin de différencier les utilisateurs. C'est loin d'être idiot.
Reste à attribuer un rôle a votre groupe.
Note | |
---|---|
Alfresco présente les groupes dans un site sans problème, néanmoins la gestion en interne représente tous les utilisateurs importés ou pas depuis un groupe. |
Il existe trois type de sites possibles qui sont “Public”, “Modéré” et “Privé”. Comme expliqué sur l'image ci-dessous, les effets ne sont pas du
tout les mêmes. Une fois votre choix fait et validé, votre site peut évoluer en passant par le menu Outils admin
.
Note | |
---|---|
Par défault, la fonction de gestion des documents est activée. C'est aussi la mission première d'Alfresco, la gestion de documents |
Création d'un site PRIVE :
L'interface “vierge” :
Chaque site peut avoir des contenus personnalisés et un aspect(thème) qui peuvent être différents. Comme le montre l'exemple suivant, le site créé récemment, contient un espace documentaire(fichiers), mais aussi un calendrier. Il est possible d'y ajouter une fonction Wiki, Blog...etc.
Par défaut, un utilisateur authentifié est en mesure de créer un site. C'est pas mal, mais ceci peut transformer la plateforme Alfresco en véritable nid à sites en tout genres.
J'ai donc modifié le fichier /opt/alfresco-community/tomcat/shared/classes/alfresco/extension/custom-model-context.xml
, avec les paramètres données dans cette page :
http://docs.alfresco.com/5.0/tasks/site-creation-permission.html. Le menu est tojours présent, mais
c'est un échec sauf pour l'administrateur. C'est exactement ce que je voulais.
Après un échec en tant qu'administrateur pour éffacer un site ou plusieurs, voici les bonnes valeurs à placer :
Note | |
---|---|
org.alfresco.service.cmr.site.SiteService.createSite=ACL_METHOD.ROLE_ADMINISTRATOR org.alfresco.service.cmr.site.SiteService.deleteSite=ACL_METHOD.ROLE_ADMINISTRATOR |
Table des matières
Travailler avec un ECM comme Alfresco avec des utilisateurs qui arrivent d'un milieu “très pauvre” comme juste un serveur de fichiers CIFS, mérite peut-être une information pour exploiter au mieux les possibilités du système. Désormais il faut penser non pas au contenu du document, mais à ce qu'il représente. Exemple : une facture à un garagiste, le mot important est “facture”. Ce document dans la logique des choses va être positionné dans la catégorie “facture”. Ensuite il est possible de “taguer” (mot clé) un document. Toujours avec ce même exemple; Le tag “garagiste” est réalisable. Ce même tag pourra être utilisé pour un devis ou autre, concernant ce garagiste, et le tout sans être mélangé avec les factures. Ceci évite aussi comme je le vois assez souvent, de créer un répertoire "garagiste", puis "facture", éventuellement "devis"...et c'est le bazar pour retrouver les données rapidement.
Voilà en gros l'état d'esprit à avoir et à appliquer avec un ECM, et même avec une GED. Comme il est écrit souvent en parlant d'Alfresco et de son système de classement, celui-ci est intelligent. Il est possible de faire beaucoup plus que ce simple exemple, c'est la partie qui suit.
Il faut être administrateur ou gestionnaire pour avoir accès à cette possibilité. Pour activer une règle il faut définir les conditions suivantes :
S'applique au fichier qui peut-être nouveau, mis à jour...
S'applique au document, à une personne
Déclenche des actions diverses sur le document ou sur Alfresco...
Pour en finir, les règles permettent d'agir automatiquement sur les documents, sur ce qui se passe dans un site de façon automatique, et le tout pour simplifier votre travail. Les domaines d'actions sont vastes, l'exemple suivant est réalisable par une règle : si une personne supprime un fichier, copier(2) ce fichier ailleurs, puis envoyer un mél.(2) au gestionnaire du site. Autre exemple : Il est possible de donner une date de fin de validité à un document. Grâce à une règle, il est possible de supprimer ce document une fois la date d'expiration dépassée.
Les aspects apportent des fonctionnalités sur les contenus depuis un dossier, voici la liste par défaut des différentes méta-données possibles. Il faut bien évidemment avoir les droits pour modifier ces paramètres, ils sont applicables sur un dossier J'ai essayé d'expliquer chaque fonction, mais ceci est loin d'être facile.
Table des matières
Les extensions permettent dans un site de posséder des fonctions suuplémentaires, comme un calendrier, une gestion des documents, un Wiki, un blog...sur INTERNET ils sont nombreux. Je ne parle pas de l'extension gestion de documents, qui a déjà été présenté lors de l'intégration avec les solutions bureautiques.
Note | |
---|---|
A noter, que la plupart des extensions profitent d'un éditeur de texte avec de très larges possibilités (TinyMCE). |
Commencons par celle que j'apprécie particulièrement, ou un jour j'expliquerais comment créer sa propre liste...à suivre. Cette liste vous permet de gérer ou d'organiser diverses informations selon des modèles prédéfinis. Voici la liste par défaut, comme vous pouvez le voir vous avez le choix dans beaucoup de styles :
Voici en images les divers thèmes offerts par défaut. Cette liste est extensible et personnalisable, à condition de passer soit par du téléchargement, ou par du développement. Le système une fois de plus est souple, même si la technologie n'est pas forcément simple.
Pour en finir, voici un exemple possible, cette image est suffisamment claire à mes yeux. Il est à noter toutefois, que le module n'est pas accouplé au calendrier ni aux taches. C'est peut-être regrettable, mais parfois en informatique il est préférable d'avoir une chose relativement simple, et non pas une usine à gaz ingérable...
Note | |
---|---|
Tous les modèles possèdent tous une colonne “Action”. Celle-ci permet d'éditer, de dupliquer ou d'effacer une ligne entière. |
Rien de bien spécial à ce niveau, c'est un espace de dialogues comme il en existe beaucoup.
C'est vraiment à mes yeux une option, mais bon çà existe. Donc avec ce Wiki il est possible de créer des pages WEB.
A mes yeux c'est une fonction intéressante, dont l'affichage peut varier en fonction des mots clés. L'interface est claire et pratique.
C'est une fonction imposée et obligatoire, néanmoins elle est accessible avec les autres produits précités. Il faut suffisamment de droits pour avoir accès aux modifications, une image suffit pour tout comprendre.
Note | |
---|---|
C'est une fois de plus agréable pour tous(!) d'être en mesure de contrôler qui est inscrit dans un site, qui peut faire quoi. C'est autre chose qu'un simple serveur de fichiers en WEBDAV ou similaire. |
Table des matières
C'est suite à un problème bloquant avec un modèle que ce chapitre à été fait. Il peut servir à tous y compris moi pour l'avenir...comme déjà dit ce document est aussi une source d'informations pour moi.
Dans ce chapitre je ne parlerais que de l'ajout d'un modèle au niveau des listes de données. Alfresco propose bien d'autres modèles, mais je pense que ces créations sont plus faciles à faire, au moins en prenant un modèle basique, Alfresco à des limites extraordinaires.
Pour réaliser ce qui suit, c'est à priori pas difficile. Et être en mesure d'apporter des modèles adaptées à votre entreprise est une composante d'Alfresco. C'est une possibilité puissante à tout les niveaux, sans un modèle je pense qu'il faut des années de pratique avec Alfresco pour comprendre et placer les bons fichiers aux bons endroits, et sans faute de contexte. Néanmoins je peux vous assurer après avoir fait de nombreux essais, rencontré beaucoup d'échecs, qu'il est préferable d'être sure de sois avant de commencer:
Voilà le but à obtenir en images, il est possible d'aller encore plus loin, mais cela me satisfait pleinement. Avec ma petite expérience d'Alfresco le plus difficile est d'avoir le squelette et savoir quoi écrire et où.
Sans critiquer la documentation nombreuse et riche d'Alfresco dans tous les domaines, voici un mode d'emploi sur les modèles : http://docs.alfresco.com/5.1/references/dev-extension-points-content-model-define-and-deploy.html. Et sinon en se basant sur le modèle ci-dessous, ceci devrait vous produire un 1er essais concluant.
Bon avant de commencer, bien prendre en compte ceci :
Une bonne sauvegarde de tout, et si possible un serveur non en production.
Une bonne connaisance d'Alfresco
Ne pas déployer un modèle puis le modifier fortement, Alfresco n'apprécie pas, franchement pas même. La suppression ou des changements de type sont sources à erreurs.
Lors de grosses modifications de votre modèle, éviter qu'il soit activé avec ou sans donnée...Alfresco n'aime pas !
Bien concevoir son modèle du 1er coup.
Donc voilà de bonnes bases, personnellement j'ai donné à toutes, à l'exception des sauvegardes tout de même, et çà aide !
Ce modèle est dédié à la gestion de personnels qui bougent(mutation) ou change de fonction dans votre entreprise. Ce modèle est composé de 3 fichiers bien différents. La fonction de chaque fichier est suffisamment explicite à la lecture du code pour comprendre leurs fonctions.
Ce fichier est à placer ici : /opt/alfresco-community/tomcat/shared/classes/alfresco/extension
, et la fin du fichier doit contenir(!) : -model-context.xml
Ce fichier est celui qui peut poser le moins de problème, il là pour appeller le fichier de définitions.
<xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="extension.mu.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap"> <property name="models"> <list> <value>alfresco/extension/mutation_2-model.xml</value> </list> </property> </bean> </beans>
Ce fichier est à placer ici : /opt/alfresco-community/tomcat/shared/classes/alfresco/extension
, et la fin du fichier doit contenir : -model.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Fichier de définition pour PIM PAM --> <model name="mu:muDatalistV2" xmlns="http://www.alfresco.org/model/dictionary/1.0"> <!-- Optional meta-data about the model --> <description>Custom datalist</description> <author>Archi</author> <version>1.0</version> <!-- Imports are required to allow references to definitions in other models --> <imports> <!-- Import Alfresco Dictionary Definitions --> <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/> <!-- Import Alfresco Content Domain Model Definitions --> <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/> <!-- Import Alfresco Data List Model Definitions --> <import uri="http://www.alfresco.org/model/datalist/1.0" prefix="dl"/> </imports> <!-- Introduction of new namespaces defined by this model --> <namespaces> <namespace uri="mu.customlists.com" prefix="mu"/> </namespaces> <!-- declaration de contrainte --> <!-- T Y P E D E F I N I T I O N S --> <types> <!-- Data list defintions For this model go here --> <type name="mu:muPimPamV2"> <title>PIM-PAM</title> <description>Gestion des PIM PAM</description> <parent>dl:dataListItem</parent> <properties> <property name="mu:PimPamQui1"> <title>Dép Grade/Nom/Prénom</title> <type>d:text</type> <mandatory>true</mandatory> </property> <property name="mu:PimPamQui2"> <title>Remplace Grade/Nom/Prénom</title> <type>d:text</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamTypeMut"> <title>Type Mut</title> <type>d:text</type> <mandatory>true</mandatory> <constraints> <constraint name="mu:ListTypeMut" type="LIST"> <parameter name="allowedValues"> <list> <value>EXTERNE</value> <value>INTERNE</value> <value>Définitif</value> <value>Malade</value> <value>Autre</value> </list> </parameter> </constraint> </constraints> </property> <property name="mu:PimPamDate1"> <title>RECU LE</title> <type>d:date</type> <mandatory>true</mandatory> </property> <property name="mu:PimPamDate2"> <title>POUR LE</title> <type>d:date</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamAnnuaire"> <title>@nnuaire</title> <type>d:date</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamAD"> <title>AD</title> <type>d:date</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamDroitsAD"> <title>Droits AD</title> <type>d:text</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamBrassageETH"> <title>ETH</title> <type>d:text</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamBrassageTPH"> <title>TPH</title> <type>d:text</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamMateriel"> <title>Mats</title> <type>d:text</type> <mandatory>false</mandatory> </property> <property name="mu:PimPamObs"> <title>Obs</title> <type>d:text</type> <mandatory>false</mandatory> </property> </properties> <!-- Association / Attachements --> <associations> <association name="mu:muAttachments"> <title>Attachements</title> <source> <mandatory>false</mandatory> <many>true</many> </source> <target> <class>cm:content</class> <mandatory>false</mandatory> <many>true</many> </target> </association> </associations> </type> </types> </model>
Ce fichier est déjà présent, donc il suffit de le sauvegarder puis d'ajouter le texte qui va bien à la fin et avant la balise </alfresco-config>
, ce fichier est présent ici :
/opt/alfresco-community/tomcat/shared/classes/alfresco/web-extension
<!-- CUSTOM DATALIST : CALL --> <config evaluator="model-type" condition="mu:muPimPamV2"> <forms> <!-- Create item form --> <form> <field-visibility> <!-- for the form creation we are showing everything except approved date --> <show id="mu:PimPamQui1" /> <show id="mu:PimPamQui2" /> <show id="mu:PimPamDate1" /> <show id="mu:PimPamDate2" /> <show id="mu:PimPamTypeMut" /> <show id="mu:PimPamAnnuaire" /> <show id="mu:PimPamAD" /> <show id="mu:PimPamDroitsAD" /> <show id="mu:PimPamBrassageETH" /> <show id="mu:PimPamBrassageTPH" /> <show id="mu:PimPamMateriel" /> <show id="mu:PimPamObs" /> <show id="mu:muAttachments" /> </field-visibility> <create-form template="/org/alfresco/components/data-lists/forms/dataitem.ftl" /> <appearance> <field id="mu:PimPamObs"> <control template="/org/alfresco/components/form/controls/textarea.ftl" /> </field> <field id="mu:muAttachments"> <control> <control-param name="startLocation">{doclib}</control-param> </control> </field> </appearance> </form> <!-- Data Grid view --> <form id="datagrid"> <field-visibility> <show id="mu:PimPamQui1" /> <show id="mu:PimPamQui2" /> <show id="mu:PimPamDate1" /> <show id="mu:PimPamDate2" /> <show id="mu:PimPamTypeMut" /> <show id="mu:PimPamAnnuaire" /> <show id="mu:PimPamAD" /> <show id="mu:PimPamDroitsAD" /> <show id="mu:PimPamBrassageETH" /> <show id="mu:PimPamBrassageTPH" /> <show id="mu:PimPamMateriel" /> <show id="mu:PimPamObs" /> <show id="mu:muAttachments" /> </field-visibility> </form> </forms> </config> <!-- Edit view --> <config evaluator="node-type" condition="mu:muPimPamV2"> <forms> <!-- Edit marketing item form --> <form> <field-visibility> <show id="mu:PimPamQui1" /> <show id="mu:PimPamQui2" /> <show id="mu:PimPamDate1" /> <show id="mu:PimPamDate2" /> <show id="mu:PimPamTypeMut" /> <show id="mu:PimPamAnnuaire" /> <show id="mu:PimPamAD" /> <show id="mu:PimPamDroitsAD" /> <show id="mu:PimPamBrassageETH" /> <show id="mu:PimPamBrassageTPH" /> <show id="mu:PimPamMateriel" /> <show id="mu:PimPamObs" /> <show id="mu:muAttachments" /> </field-visibility> <create-form template="/org/alfresco/components/data-lists/forms/dataitem.ftl" /> <appearance> <field id="mu:PimPamObs"> <control template="/org/alfresco/components/form/controls/textarea.ftl" /> </field> <field id="mu:muAttachments"> <control> <control-param name="startLocation">{doclib}</control-param> </control> </field> </appearance> </form> </forms> </config>
Une fois que tout ceci est en place, reste à lancer Alfresco puis de scruter les logs.
Voici une page d'accès à différentes commandes pour les modèles :
https://alfresco.archi.test/alfresco/s/admin/admin-repoconsole
puis show file-list alfresco/extension/*
C'est cette même console qui permet d'activer ou pas un modèle, il existe même des exemples de commandes. Pour information si vos fichiers “modèles” sont bien insérés dans Alfresco, le modèle s'active automatiquement.
Voici un extrait de mon erreur persistante :
A namespace prefix is not registered for uri sl.slcustomlists.com
C'est avec mes essais de tous les côtés qu'une erreur est restée assez longtemps, y compris après avoir visiter des forums. Mon erreur à été de ne pas penser qu'Alfresco prenne un de mes modèles, puis l'entrepose ailleurs, ou est-ce une erreur de ma part d'avoir entreposé mes fichiers ici(?). Et donc la pluspart des modèles sont entreposés ici :
/opt/alfresco-community/alf_data/solr4/model
Ce répertoire est une mine d'informations sur les modèles, car les plus importants sont là. Vous avez aussi tous les modèles de dictionnaires utilisables comme cm:content
...etc.
La solution a été de reinjecter les 2 fichiers “modèles” de les faire prendre en compte puis de les supprimer à nouveau, comme les index. A noter qu'il apparait tout de même encore aux niveaux des noeuds, même je n'ose pas faire supprimer...tout fonctionne sans problème.
Table des matières
Mon problème avec les méls. d'Alfresco est qu'il comporte uniquement un lien qui ne correspond pas à mon architecture. En effet le port 8080 n'est plus utilisé sur mon serveur, il faut donc adapter tous les liens avec une écriture directe du bon lien.
C'est une étape facile car les méls sont tous stockés au même endrois, mais seul l'administrateur peut le faire directement. Il faut aller dans :
Entrepôt-< Dictionnaire de données-< Modèles d'e-mail
, et de là par catégorie vous avez accès à tout les méls.
En prenant en exemple un mél qui invite un utilisateur à se raccorder au site, il suffit de sélectionner ce fichier dans la rubrique Inviter
:
invite-email_fr.html.ftl
. L'édition se fait directement depuis Alfresco, le mot clé à remplacer est ${shareUrl}
.Ceci est un exemple, une fois
que vous avez compris la structure, les mots clés, tout est modifiable, puis à tester.
Table des matières
C’est juste avant de présenter à mes DSI la solution Alfresco, que le besoin d’une analyse virale sur le serveur, c’est avérée. C’est donc plus une contrainte pour moi, mais bon…ma pauvre Debian va recevoir un antivirus pour les autres (:.
Après recherches, Alfresco ne propose rien en natif pour cette mission, il existe tout de même au moins un addon pour faire cette action. En effet celui-ci intercepte et analyse le document puis le transmet à Alfresco. C’est une solution idéale, mais par contre la pérennité de ce plugin, remet tout en cause. Donc pas trop le choix, il faut analyser les fichiers et oublier Alfresco. Si l’anti-virus trouve un fichier(s) suspect, il ne doit faire que de la notification, et surtout ne rien mettre en quarantaine, sinon c’est la galère pour effacer tout en passant via les nœuds d’Alfresco.
A noter que cette installation est nécessaire pour une situation où vous avez des fichiers à transmettre vers des systèmes Microsoft et que vous êtes concernés par leur sécurité.
Les paquets suivants sont à installer :
apt-get update && aptitude install clamav clamav-base clamav-daemon clamav-freshclam
Le paquet “clamav-daemon” a été par la suite désactivé (systemctl disable clamav-daemon && systemctl disable clamav-freshclam ). Ceci me permet de procéder manuellement à la mise à jour et aux scans aussi. Ce qui libère légerement le système aussi.
Sur internet il n'est pas rare de rencontrer des personnes surprises par sa présence dans les dépôts, car ce logiciel appartient à Cisco™...donc profitons en, sinon il reste pas grand chose pour le moment.
La configuration de clamav et de freshclam dépendent de vos fichiers sur votre serveur. Il est nécessaire de régler au mieux les différentes tailles de fichiers que Clamav doit inspecter ou pas. En ce qui concerne freshclam, j'ai modifié la source d'une base anti-virale, et demandé une seule mise à jour; pour mémoire, tout est manuel.
Au final, il est possible de lister tous les paramètres via le logiciel clamconf
, c'est plutôt pratique.
L'exploitation de Clamav est très simple, comme ses mises à jour virales. Auparavant, j'ai décidé de faire ses actions de façon manuelle, et donc 2 scripts sont présents pour cela. Leurs utilisation est très simple, voici les options communes : “-m”, permet d'envoyer un rapport par mail et “-v” passe le script en mode verbeux.
Ces 2 scripts sont à inserer dans la crontab, une fois les tests éffectués.
Ces 2 scripts utilisent en commun les mêmes librairies que voici, et à ma grande surprise pleins d'autres ont été installés.
apt-get update && aptitude install libemail-sender-perl libemail-simple-perl libgetopt-mixed-perl
Voilà le code qui peut-être pris en exemple pour synchroniser les bases virales de Clamav.
#!/usr/bin/perl ####################################################################### # Ce script en Perl lance freshclam puis envois ou pas un rapport par mél # lancement : /opt/update-clamav.pl [-m|-v] # ou "-m" = envois par mail et "-v" = affichage-mode verbeux # Necessite la lib suivante : "getopt::mixed Email::sender Email::simple" # A utiliser dans la crontab : style 2 mises à jour par jour # "5 23* * * * root /opt/update-clamav.pl -m" ###################################################################### use strict ; use Getopt::Mixed "nextOption" ; Getopt::Mixed::init('m v') ; # 2 options possibles use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; # -------------------------------------------------------------------- use vars qw ($cmd $retour_cmd $option $rapport $verbose ); my $version =" $0 version 1.0 (NOV 2016) sous licence (GPL version 3) $\n"; # -------------------------------------------------------------------- # partie conf MAIL : my $serveur_mail="localhost"; my $DE='adminsi@alfresco.archi.test'; my $TO='adminsi@alfresco.archi.test'; my $titre = "Rapport update CLAMAV"; # -------------------------------------------------------------------- # Pour le traitement des options en ligne de commande # traitement des options (2 uniquements !) while(( $option ) = Getopt::Mixed::nextOption() ) { OPTION: { $option eq 'm' and do { $rapport = 1 ; next OPTION; }; $option eq 'v' and do { $verbose = 1 ; next OPTION; }; } } # nettoyage des options Getopt::Mixed::cleanup(); # -------------------------------------------------------------------- # on lance la commande qui va bien, on compte les "is uptodate" $cmd = `freshclam --enable-stats | grep 'is up to date' | wc -l`; # si tout ok $cmd = 3 sinon contient le MSG erreur if ($cmd == 3) { $retour_cmd = "OK: Les 3 fichiers sont à jour\n"; } else { $retour_cmd = "PROBLEME: Les 3 fichiers ne sont plus à jour\n".$cmd; } print $retour_cmd if defined $verbose ; # print "DEBUG:CMD=".$cmd ; # ---------------------- MESSAGERIE ---------------------------------- # Très simple d'emploi : # if ($rapport) { # si $rapport est définie (1) # et voilà, on envoi par mail le rapport my $mel = Email::Simple->create( header => [ To => $TO, From => $DE, Subject => $titre, ], body => $retour_cmd .$version, ); sendmail($mel); # ca part ! # Traitement des problemes eventuels ... if (not ref ($mel)) { print "\n--!-- IMPOSSIBLE DE TRANSMETTRE LE FICHIER code ($mel) --!--\n\n" ; } } # Et voilà c'est la fin !
Voici le script qui peut également être pris en exemple, il permet de lancer “clamscan”, sur un répertoire par défaut ou pour la totalité du système (option -f).
#!/usr/bin/perl ####################################################################### # Ce script en Perl lance un scan d'une systeme ou d'un répertoire précis # puis envois ou pas un rapport par mél # lancement : /opt/scan_clamav.pl [-f|-m|-v] # ou "-f" = full ou "-m" = envois par mcanil et "-v" = affichage-mode verbeux # utilise les librairies suivantes : "getopt::mixed Email::sender Email::simple" # A utiliser dans la crontab : style 2 mises à jour par jour # "5 3* * * * root /opt/scan-clamav.pl -m" ###################################################################### use strict ; use Getopt::Mixed "nextOption" ; Getopt::Mixed::init('f m v') ; # 3 options possibles use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; # -------------------------------------------------------------------- use vars qw ($cmd $retour_cmd $option $rapport $verbose ); my $version =" $0 version 1.0 (NOV 2016) sous licence (GPL version 3) $\n"; # -------------------------------------------------------------------- # partie conf MAIL : my $serveur_mail="localhost"; my $DE='adminsi@alfresco.archi.test'; my $TO='adminsi@alfresco.archi.test'; my $titre = "Rapport SCAN CLAMAV"; # on lance la commande qui va bien, c'est la version par défaut !!! en dessous la full !!! # aucune exception pour Alfresco/alf_data, voir si après sinon # -r = récursif / -i n'affiche que les fichiers suspects my $cmd = `nice -19 clamscan -r -i /opt/alfresco-community/alf_data`; # -------------------------------------------------------------------- # Pour le traitement des options en ligne de commande # traitement des options (2 uniquements !) while(( $option ) = Getopt::Mixed::nextOption() ) { OPTION: { $option eq 'f' and do { $cmd = `nice -19 clamscan -r -i --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/media /` ; next OPTION; }; $option eq 'm' and do { $rapport = 1 ; next OPTION; }; $option eq 'v' and do { $verbose = 1 ; next OPTION; }; } } # nettoyage des options Getopt::Mixed::cleanup(); # -------------------------------------------------------------------- # si tout ok $cmd = ne contient pas FOUND sinon contient le MSG erreur if ($cmd =~ m/(FOUND)/) { $retour_cmd = "PROBLEME URGENT: CLAMAV A DETECTE QUELQUE CHOSE(S)\n".$cmd; $titre = "[**URGENT CLAMAV**]Rapport SCAN CLAMAV"; } else { $retour_cmd = "OK: CLAMAV n'a rien détecté :) \n".$cmd; } print $retour_cmd if defined $verbose ; # print "DEBUG:CMD=".$cmd ; # ---------------------- MESSAGERIE ---------------------------------- # Très simple d'emploi : # if ($rapport) { # si $rapport est définie (1) # et voilà, on envoi par mail le rapport my $mel = Email::Simple->create( header => [ To => $TO, From => $DE, Subject => $titre, ], body => $retour_cmd .$version, ); sendmail($mel); # ca part ! # Traitement des problemes eventuels ... if (not ref ($mel)) { print "\n--!-- IMPOSSIBLE DE TRANSMETTRE LE MAIL code ($mel) --!--\n\n" ; } } # Et voilà c'est la fin !
Et voilà avec les 2 scripts précités, plus besoin de se connecter pour connaître l'état de clamav. J'ai “perdu” du temps, mais je vais en gagner par la suite...
Juste pour poser l'information comme quoi une supervision de la mémoire d'Alfresco est faisable. En complément d'autres données; il y a moyen de faire quelque chose de bien.
wget http://127.0.0.1/alfresco/service/admin/admin-communitysummary --no-check-certificate --user=admin --password=xxxxxxx -O /tmp/extract.html
<span class="label">Mémoire libre (Go):</span> <span class="value">0,43</span> <div class="control field"> <span class="label">Mémoire maximum (Go):</span> <span class="value">1,95</span> <span class="label">Mémoire totale (Go):</span> <span class="value">0,88</span> <span class="label">CPUs:</span> <span class="value">6</span>
Table des matières
Précedemment dans un autre chapitre (Chapter 4, La sauvegarde intégrale (classique)) , nous avons vu comment sauvegarder Alfresco et sa base de données, via une méthode plus que classique, néanmoins fiable. Sans oublier que nous sommes tout de même en 2016, et qu'il existe des moyens de faire tout ceci en économisant des ressources.
Voilà le “triste” constat, nous avons plusieurs sauvegardes fiables, mais la taille ne fait que augmenter, comme les temps de transfert et à l'inverse l'espace de stockage.
-rw-r--r-- 1 root root 1,1M août 27 08:55 239-08H54-alfresco.sql -rw-r--r-- 1 root root 936M août 27 09:11 239-08H54-alfresco.tgz -rw-r--r-- 1 root root 1,2M sept. 4 12:51 247-12H51-alfresco.sql -rw-r--r-- 1 root root 915M sept. 4 13:04 247-12H51-alfresco.tgz -rw-r--r-- 1 root root 1,2M sept. 8 08:10 251-08H10-alfresco.sql -rw-r--r-- 1 root root 915M sept. 8 08:23 251-08H10-alfresco.tgz -rw-r--r-- 1 root root 1,2M sept. 10 07:40 253-07H40-alfresco.sql -rw-r--r-- 1 root root 938M sept. 10 07:55 253-07H40-alfresco.tgz -rw-r--r-- 1 root root 1,2M sept. 11 09:09 254-09H09-alfresco.sql -rw-r--r-- 1 root root 934M sept. 11 09:25 254-09H09-alfresco.tgz
Borg Backup est un fork d'Attic depuis 2015, ceci fait suite à des problèmes de develloppement de celui-ci. Les divers develloppeurs ont préféré quitter Attic, pour faire évoluer plus rapidement Borg, et bien évidemment corriger des bogues par la même occasion. Autant dire que Attic a du plomb dans l'aile désormais.
Voici ce que écrit Wikipedia à propos de la déduplication : “En informatique, la déduplication (également appelée factorisation ou stockage d'instance unique) est une technique de stockage de données, consistant à factoriser des séquences de données identiques afin d'économiser l'espace utilisé. Chaque fichier est découpé en une multitude de tronçons. À chacun de ces tronçons est associé un identifiant unique, ces identifiants étant stockés dans un index. L'objectif de la déduplication est de ne stocker qu'une seule fois un même tronçon. Aussi, une nouvelle occurrence d'un tronçon déjà présent n'est pas à nouveau sauvegardée, mais remplacée par un pointeur vers l'identifiant correspondant.”
Note | |
---|---|
Ce système de sauvegarde ne servira que Alfresco dans sa totalité et non le serveur au complet, lequel peut-être cloné puis restauré. Le répertoire de sauvegarde sera lui aussi sauvegardé via une architecture spécfique externe, que je ne citerais pas, mais permettra si besoin est, de restaurer sans trop de casse (?). |
Note | |
---|---|
Borg apporte en plus de la déduplication un chiffrement des archives via une passphrase. Ce chiffrement peut être désactivé, pour moi c'est une excellente initiative; surtout de nos jours ou toutes informations est bonne à prendre sur le NET. |
Rien de bien compliqué, le paquet est installable sur tout bon système d'exploitation ou distribution Gnu/Linux (licence BSD 3). Il suffit de lancer
aptitude install borgbackup
Et c'est tout !
Avant de commencer il faut initialiser le système. Je vais me baser sur la structure actuelle (/var/sauvegardes) pour créer un dépôt spécial Borg/Alfresco. La commande est facile à condition de bien retenir cette passphrase pour après :)
# borg init /var/sauvegardes/borg Enter new passphrase: Enter same passphrase again: Do you want your passphrase to be displayed for verification? [yN]:N
Le répertoire borg
a été créé puis un autre sous répertoire data
. Voici ce que contient chaque répertoire :
./borg ./borg/data ./borg/data/0 ./borg/data/0/0 ./borg/hints.0 ./borg/config ./borg/README ./borg/index.0
Cette première sauvegarde va être la plus longue car c'est une sauvegarde complète/intégrale. Cette sauvegarde sera chiffrée et compressée par LZMA au niveau 9. Voici la commande à faire
borg create --info --stats --compression=lzma,9 /var/sauvegardes/borg::alfresco-{now:%d-%m-%Y} /opt/alfresco-community
On peut ajouter pour le coté “fun” --progress
qui affiche ce que fait Borg en temps réel. Néanmoins je trouve qu'elle n'apporte pas grand chose.
La ou je suis très étonné c'est la ressource CPUs utilisé. Avec 6 CPUs je n'ai pas dépassé la valeur de “1”. C'est plutôt très bien, le tout avec une compression Lzma de 9 !
Voilà le résultat :
Enter passphrase for key /var/sauvegardes/borg: ------------------------------------------------------------------------------ Archive name: dimanche Archive fingerprint: a8437aeecc672a4b0b60cb69ba98de15d0b327e56886a4839fde600c8ca962d0 Time (start): Tue, 2016-11-01 19:21:02 Time (end): Tue, 2016-11-01 19:39:59 Duration: 18 minutes 56.86 seconds Number of files: 24878 ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 3.35 GB 1.19 GB 1.09 GB All archives: 3.35 GB 1.19 GB 1.09 GB Unique chunks Total chunks Chunk index: 20681 25884 ------------------------------------------------------------------------------
Donc 19 minutes pour faire une sauvegarde 3,2 Go et le tout tout dans une archive de 1,09 Go. C'est pas mal, néanmoins le même style en tar.gz ne prend que 936 Mo. Donc je suppose que l'indexation/déduplication prend de la place, la suite devrait et doit être plus percutante; mais j'ai confiance.
Notre réference au niveau sauvegarde est désormais faite, il est temps de réaliser une sauvegarde comme si de rien n'était, la 3eme au total. C'est parti !
borg create --info --stats --compression=lzma,9 /var/sauvegardes/borg::alfresco-{now:%d-%m-%Y} /opt/alfresco-community Enter passphrase for key /var/sauvegardes/borg: ------------------------------------------------------------------------------ Archive name: mercredi Archive fingerprint: dd2ed971c6c43b0bb76d892fa2eae73559eeaf78e0ee4d8efee9e2e1d8e25757 Time (start): Wed, 2016-11-02 06:39:45 Time (end): Wed, 2016-11-02 06:39:54 Duration: 9.02 seconds Number of files: 24841 ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 3.36 GB 1.21 GB 4.14 MB All archives: 10.06 GB 3.59 GB 1.09 GB Unique chunks Total chunks Chunk index: 20818 77614 ------------------------------------------------------------------------------
Ben là chapeau!, certes Borg a réussit à trouver la différence (4,14 Mb) en 9 secondes. C'est très fort même si mes accès disques (SSD) font que çà pousse...quand même.
La commande précédente utilise la compression maximale, du LZMA au niveau 9
Dans ma situation récupérer la structure complète d'Alfresco est important, il peut arriver de vouloir exclure un fichier ou un répertoire. Borg Backup c'est faire ceci de plusieurs manières :
Exclusion en utilisant des regex : --exclude 're:^/home/[^/]+/\.thumbnails/'
, exclusion du répertoire /home/.thumbnails.
Ce même répertoire peut aussi être exclu en utilisant une règle type shell --exclude 'sh:/home/*/.thumbnails
Comme vous pouvez le lire les possibilités ne manquent pas, comme leurs souplesses.
Dans le même style, il est utile de garder plusieurs archives, il est donc possible de rajouter une réference horaire sur chaque archive.
Pour cela il suffit d'ajouter ceci (exemple) : /path/to/repo::alfresco_{now:%d-%m-%Y}
.
Borg supporte très bien la restauration classique, mais il peut aussi faire plus.
La restauration : borg extract -v --list /path/to/repo::my-files /mnt/restaur
, qui affiche en même temps ce qu'il fait, les fichiers seront restaurer
dans le répertoire /mnt/restaur.
Il est possible de restaurer uniquement un répertoire et d'exclure des fichiers, en exemple :
borg extract /path/to/repo::my-files home/USERNAME/src /mnt/restaur --exclude='*.so'
Borg peut monter une archive un peu comme une image ISO (borg mount). C'est plutôt très bien, pour éventuellement tester ou récupérer des données particulières sans tout restaurer.
Le montage : borg mount /path/to/repo::root-2016-02-15 /tmp/mymountpoint
Voici en exemple un script possible, il sera remanier dès que possible pour intégrer l'envoi d'un compte-rendu par mél. Néanmoins l'idée est là. A savoir que Borg peut nettoyer et ne garder que les sauvegardes que vous voulez. L'exemple ci-dessous n'a pas encore été testé complètement, comme précédemment l'idée est là, reste à surveiller dans la durée pour confirmation.
Note | |
---|---|
Il ne faut pas oublier de sauvegarder la base de données dans Alfresco, avec Borg ou séparement, à vous de voir. |
#!/bin/sh # Export du depôt Borg export BORG_REPO=""/var/sauvegardes/borg::alfresco" export BORG_PASSPHRASE="mysecret" # Backup most important stuff: borg create --info --stats --compression=lzma,9 /var/sauvegardes/borg::alfresco-{now:%d-%m-%Y} /opt/alfresco-community/ # Une fois la sauvegarde faite, passons au nettoyage # Le {hostname} est important pour cibler votre serveur, ensuite on ne garde que : # 30 jours + 5 Week-end + 2 mois aussi borg prune -v --prefix alfresco --keep-daily=30 --keep-weekly=5 --keep-monthly=2 /var/sauvegardes/borg
Le même style de script mais en version évolué, Perl oblige. Une fois Borg Backup prêt, ce script est utilisable dans la crontab, l'option -m
, vous permet
de recevoir les comptes-rendu par méls tout simplement.
#!/usr/bin/perl ####################################################################### # Ce script en Perl lance une sauvegarde du répertoire complet Alfresco (déduplication) # puis envois ou pas un rapport par mél # lancement : /opt/svd-borg [-m|-v] # ou "-m" = envois par mcanil et "-v" = affichage-mode verbeux # utilise les librairies suivantes : "getopt::mixed Email::sender Email::simple" # A utiliser dans la crontab : (eg) # "5 3* * * * root /opt/svd-borg.pl -v -m" ###################################################################### use strict ; use Getopt::Mixed "nextOption" ; Getopt::Mixed::init('f m v') ; # 3 options possibles use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; # -------------------------------------------------------------------- use vars qw ( $retour_cmd $option $rapport $verbose $titre); my $version =" $0 version 1.0 (NOV 2016) sous licence (GPL version 3) $\n"; # variable pour Borg - Pour envois vers les vars/env # il faut export cette variable en session sinon Borg le demande à la main... # Donc on envois ensuite on videra... $ENV{'BORG_PASSPHRASE'}='my phrase bizarre' ; # -------------------------------------------------------------------- # partie conf MAIL : my $serveur_mail="localhost"; my $DE='borg_backup@alfresco.archi.test'; my $TO='adminsi@alfresco.archi.test'; # on lance la commande qui va bien # ### voir pour la pass phrase ### # sans horodatage : # my $cmd = `borg create --info --stats --show-rc --compression=lzma,9 /var/sauvegardes/borg::alfresco-5.1 /opt/alfresco-community/ `; # avec horodatage : my $cmd = `borg create --info --stats --show-rc --compression=lzma,9 /var/sauvegardes/borg::alfresco-{now:%d-%m-%Y} /opt/alfresco-community/ `; # -------------------------------------------------------------------- # Pour le traitement des options en ligne de commande # traitement des options (2 uniquements !) while(( $option ) = Getopt::Mixed::nextOption() ) { OPTION: { $option eq 'm' and do { $rapport = 1 ; next OPTION; }; $option eq 'v' and do { $verbose = 1 ; next OPTION; }; } } # nettoyage des options Getopt::Mixed::cleanup(); # -------------------------------------------------------------------- # l'option --show-rc renvois 0,1 ou 2 et le PID si kill-9 est utilisé # Donc pour nous c'est 0/1 ou 2, par contre le retour de commande renvois d'autres valeurs # qui semblent plus fines comme 512 / 256 et 0, mais hélas pas documenté...sniff # if ($cmd =~ m/512/ ) { if ($? ==512 ) { $retour_cmd = "BORG: La sauvegarde est déjà présente, donc rien de fait (code:".$? .")\n"; $titre = "[BORG-WARNING]Rapport sauvegarde"; } if ($? ==256 ) { $retour_cmd = "BORG: Echec problème avec le répertoire source, donc rien de fait (code:".$? .")\n"; $titre = "[BORG-ERROR]Rapport sauvegarde"; } if ($? ==0 ) { $retour_cmd = "BORG: La sauvegarde est faite.\n"; $titre = "[BORG-Ok]Rapport sauvegarde"; } print $retour_cmd if defined $verbose ; # print "DEBUG-1:RET=".$? ."\n"; # print "DEBUG-2:CMD=".$cmd ."\n"; # on fait le nettoyage si besoin est : 30 jrs 5 WE + 1 mois(? à suivre/confirmer interet) my $cmd2 =`borg prune -v --prefix alfresco --keep-daily=30 --keep-weekly=5 --keep-monthly=2 /var/sauvegardes/borg`; # print "DEBUG-2:CMD=".$cmd2 ; # ---------------------- MESSAGERIE ---------------------------------- # Très simple d'emploi l'envoi des méls: if ($rapport) { # si $rapport est définie (1) # et voilà, on envoi par mail le rapport my $mel = Email::Simple->create( header => [ To => $TO, From => $DE, Subject => $titre, ], body => $retour_cmd .$cmd2 .$version, ); sendmail($mel); # ca part ! # Traitement des problemes eventuels ... if (not ref ($mel)) { print "\n--!-- IMPOSSIBLE DE TRANSMETTRE LE MAIL code ($mel) --!--\n\n" ; } } # important de vider çà pour éviter le mot de passe en ENV $ENV{'BORG_PASSPHRASE'}='' ; # Et voilà c'est la fin !
C'est en listant via la commande ci-dessous que je me suis apercu que la commande borg prune
ne servait à pas grand chose. Et tout simplement parce après le
mot ::alfresco
, je rajoute un horodatage. C'est pas franchement ce que je veux avec ma commande prune
. Donc il faut rester sur nommage
classique pour la prise en commande prune
, ou placer un horodatage pour une gestion que je dirais de manuelle ou différente. De toute façon, Borg ajoute l'horodatage
lors d'une demande de listage. Au final à mes yeux, l'option horodatage ne sert au niveau du nommage des archives, à pas grand chose...à vous de voir tout de même.
Il est important à un moment donné de lister toutes les sauvegardes, même si tous les matins je reçois un mél. qui me dit que tout est correct. La confiance n'exclut le contrôle. La commande est vraiment très simple :
borg list /var/sauvegardes/borg Enter passphrase for key /var/sauvegardes/borg: alfresco-04-11-2016 Fri, 2016-11-04 14:13:30 alfresco-06-11-2016 Sun, 2016-11-06 17:50:56 alfresco-07-11-2016 Mon, 2016-11-07 06:08:29 alfresco-11-11-2016 Fri, 2016-11-11 11:24:51 alfresco-12-11-2016 Sat, 2016-11-12 06:29:34
Il suffit de lancer cette commande tout simplement : borg change-passphrase -v /path/to/repo
.
Par contre si jamais vous copiez ailleurs les archives, celles ci ne sont pas prises en compte. Je n'ai pas testé cette solution,
il doit bien exister une solution tout de même.
Borg possède une documentation d'une excellente qualité, celle ci est disponible ici : borgbackup.readthedocs.io Il ne faut pas hésiter, ma documentation ne montre pas toutes ses possibilités.
Table des matières
La procédure est relativement rapide, néanmoins il faut connaître tous les fichiers de conf, les modèles, les modules...etc que j'ai modifié ou apporté. Donc on va commencer par çà; le tout sous forme d'un script pour aller plus vite.
Attention | |
---|---|
Avec la version 5.2, il ne faut pas remplacer le fichier : “/opt/alfresco-community/libreoffice/scripts/libreoffice_ctl.sh”, sinon celui ci provoque une erreur qui fait qu'Alfresco se met en erreur fatal. |
echo "Début des copies" cp /opt/alfresco-community-5.1/tomcat/shared/classes/alfresco-global.properties /opt/alfresco-community/tomcat/shared/classes cp /opt/alfresco-community-5.1/alfresco.sh /opt/alfresco-community/ cp /opt/alfresco-community-5.1/tomcat/scripts/ctl.sh /opt/alfresco-community/tomcat/scripts/ # avec la v 5.2 ne pas remplacer le script libreoffice/scripts ! A modifier tout de même mais après !!! cp /opt/alfresco-community-5.1/tomcat/conf/logging.properties /opt/alfresco-community/tomcat/conf/ cp /opt/alfresco-community-5.1/tomcat/conf/tomcat-users.xml /opt/alfresco-community/tomcat/conf/ cp /opt/alfresco-community-5.1/tomcat/conf/web.xml /opt/alfresco-community/tomcat/conf/ cp -Rav /opt/alfresco-community-5.1/tomcat/bin/* /opt/alfresco-community/tomcat/bin/ # Déjà fait sinon rien ne tourne : /opt/alfresco-community-5.1/tomcat/lib/mysql-connector-java-5.1.38-bin.jar cp /opt/alfresco-community-5.1/tomcat/webapps/share/WEB-INF/classes/log4j.properties /opt/alfresco-community/tomcat/webapps/share/WEB-INF/classes/ cp /opt/alfresco-community-5.1/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties /opt/alfresco-community/tomcat/webapps/alfresco/WEB-INF/classes/ cp /opt/alfresco-community-5.1/solr4/log4j-solr.properties /opt/alfresco-community/solr4/ cp /opt/alfresco-community-5.1/tomcat/webapps/share/WEB-INF/classes/alfresco/site-data/themes/vertTheme.xml /opt/alfresco-community/tomcat/webapps/share/WEB-INF/classes/alfresco/site-data/ cp -Rav /opt/alfresco-community-5.1/tomcat/webapps/share/themes/vertTheme/ /opt/alfresco-community/tomcat/webapps/share/themes/vertTheme/ cp /opt/alfresco-community-5.1/solr4/archive-SpacesStore/conf/solrcore.properties /opt/alfresco-community/solr4/archive-SpacesStore/conf/ cp /opt/alfresco-community-5.1/solr4/workspace-SpacesStore/conf/solrcore.properties /opt/alfresco-community/solr4/workspace-SpacesStore/conf/ #Non touché car "identiques": #/opt/alfresco-community/solr4/templates/rerank/conf/solrcore.properties #/opt/alfresco-community/solr4/templates/test/conf/solrcore.properties #/opt/alfresco-community/solr4/templates/vanilla/conf/solrcore.properties #/opt/alfresco-community/solr4/templates/without_suggest/conf/solrcore.properties echo "Import des modèles" cp /opt/alfresco-community-5.1/tomcat/shared/classes/alfresco/extension/mutation_2-model-context.xml /opt/alfresco-community/tomcat/shared/classes/alfresco/extension/ cp /opt/alfresco-community-5.1/tomcat/shared/classes/alfresco/extension/mutation_2-model.xml /opt/alfresco-community/tomcat/shared/classes/alfresco/extension/ cp /opt/alfresco-community-5.1/tomcat/shared/classes/alfresco/extension/custom-model-context.xml /opt/alfresco-community/tomcat/shared/classes/alfresco/extension/ echo "Et voilà, reste à vérifier ???"
Ce script n'est pas a utiliser tout de suite, mais après...
Il est temps de stopper la version d'Alfresco en production.
Il faut sauvegarder la totalité du répertoire suivant “/opt/alfresco-community/alf_data”, à savoir qu'il contient tous les dépots, et les index divers. Cette sauvegarde pour moi, se traduit par une non supppression des anciennes données au complet. La restauration s'effectuera depuis cette version directement.
En se servant ou pas du Chapter 4, La sauvegarde intégrale (classique), il faut absolument sauvegarder la base de données pour pouvoir la restaurer par la suite.
Note | |
---|---|
Alfresco arrête parfois Mysql en même temps que lui. |
root@:/opt # /etc/init.d/mysql start [ ok ] Starting mysql (via systemctl): mysql.service. root@:/opt # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.30-1 (Debian) mysql> DROP DATABASE alfresco; Query OK, 99 rows affected (0,49 sec) mysql> CREATE DATABASE alfresco DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Query OK, 1 row affected (0,00 sec) mysql> GRANT ALL PRIVILEGES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'le_mot_de_passe_a_placer_ici'; Query OK, 0 rows affected (0,00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0,00 sec)
Me concernant, je dois renommer le répertoire de base d'Alfresco en production en par exemple : /opt/alfresco-community-5.1
.
Ceci est du à la configuration du serveur Apache que je n'ai pas envie de reprendre, celui ci est basé sur : /opt/alfresco-community
Je ne suis pas inquiet pour la suite, j'ai un clone, une sauvegarde complète d'Alfresco et de sa base de données, et encore l'ancien dossier prêt à restaurer si besoin est.
Note | |
---|---|
Ne pas oublier de vider ou de déplacer les fichiers d'historiques ! A savoir que la version 5.2 comporte par défaut des fichiers d'historiques dans ses sources. |
Attention | |
---|---|
Il faut absolument supprimer l'ancienne base de données, puis la créer sans donnée, voir ici si besoin : the section called “Préparation de la base de données”. |
Il faut procéder conformément à la précédente installation ,laquelle est expliquée ici Chapter 2, Installation de Alfresco Community.
Note | |
---|---|
Avant de lancer l'installation, ou alors juste après, il faut créer la base de donnée "vide" alfresco. |
Une fois l'installation de la 5.2 “vierge et en fonctionnement”, il faut regarder/tester pour voir comment elle se comporte.
Le script /opt/alfresco-community/libreoffice/scripts/libreoffice_ctl.sh
doit être modifié, la procédure est déjà expliqué au niveau du chapitre “Installation”.
C'est un peu dommage, que ce problème soit répété dans cette nouvelle version...
Une fois ses vérifications faites, on arrête à nouveau Alfresco.
Restauration de la base de données “alfresco”. mysql -u root -pmandrake_2048 alfresco < 358-10H53-alfresco.sql
Restauration des fichiers dans “alf_data/contentstore”, et rien d'autre.
Restauration des fichiers modifiés, en appliquant le script décris plus haut.
Reste à relancer Alfresco et re-vérifier le bon fonctionnement.
Attention | |
---|---|
La migration au finale c'est plutôt bien passée, seul le module “BECPG Projet” s'installe correctement, mais rien en visuel, totalement transparent. Comme il s'agissait d'un complément non indispensable, il a été retiré tout simplement. |
Tout c'est trop bien déroulé, sauf que certains modules ne sont plus compatibles. Ceci ne me surprend pas, c'est le risque avec les modules, j'ai donc plusieurs “Attention”, que voici :
2017-01-31 06:55:22,809 WARN [repo.module.ModuleServiceImpl] [localhost-startStop-1] A previously-installed module 'becpg-core' (version 2.1.0) is not present in your distribution. 2017-01-31 06:55:22,816 WARN [repo.module.ModuleServiceImpl] [localhost-startStop-1] A previously-installed module 'becpg-project-core' (version 2.1.0) is not present in your distribution. 2017-01-31 06:55:22,825 WARN [repo.module.ModuleServiceImpl] [localhost-startStop-1] A previously-installed module 'support-tools' (version 1.10.1603141233) is not present in your distribution. 2017-01-31 06:55:22,831 WARN [repo.module.ModuleServiceImpl] [localhost-startStop-1] A previously-installed module 'simple-ocr-repo' (version 1.1.0.1607271657) is not present in your distribution.
Donc c'est 4 modules à supprimer, je vais traiter celui qui occupe le plus de place inutilement. Il s'agit du module “BECPG projet”, pour le supprimer il faut se connecter à la console d'administration d'Alfresco puis de rechercher ce qui va bien. Le tout est donné en image, il reste ensuite à cliquer sur supprimer.
Et le tout est joué, les “Attention” concernant ce module ont disparu tout simplement.
Table des matières
A noter : OCR pour Optical Character Recognition, et en français ROC pour Reconnaissance Optique de Caractères.
Ce projet est déposé ici : https://github.com/keensoft/alfresco-simple-ocr/
Il suffit de télécharger ce fichier :
https://github.com/keensoft/alfresco-simple-ocr/releases/download/1.1.1/simple-ocr-repo.amp,
puis de le placer dans le répertoire amps
d'Alfresco.
Après une bonne sauvegarde par prudence, il est temps de stopper Alfresco
Ce module s'installe tout simplement avec cette commande :
java/bin/java -jar bin/alfresco-mmt.jar install amps/simple-ocr-repo-1.1.0.amp tomcat/webapps/alfresco.war -preview -force
.
J'ai contacté directement le develloppeur du module concerné à propos de l'option -force
. En réalité le module s'installait très bien, mais au niveau des aspects, je ne voyais
rien, et aucune d'erreur. Par contre en utlisant cette option, immédiatement l'aspect "OCR" est apparu, tout en bas.
Il faut ajouter ce bloc dans tomcat/shared/classes/alfresco-global.properties :
# local OCR program ocr.command=/usr/bin/pdfsandwich ocr.output.verbose=true ocr.output.file.prefix.command=-o # on peut placer des options ici, exemple eng+fra : ocr.extra.commands=-lang fra ocr.server.os=linux
Pour ajouter la langue anglaise ou autre il suffit d'ajouter ceci (exemple) : ocr.extra.commands=-lang eng+fra+spa
Voici les fichiers qui sont ajoutés ou modifiés :
Installing AMP 'amps/simple-ocr-repo.amp' into WAR 'tomcat/webapps/alfresco.war' INFO: Checking the war version using /WEB-INF/classes/alfresco/version.properties WARNING: This version of this module is already installed in the WAR..upgrading. Clearing out files relating to version '1.1.1.1609250928' of module 'simple-ocr-repo' - file '/WEB-INF/lib/simple-ocr-repo.jar' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/context/bootstrap-context.xml' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/context/model-context.xml' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/context/service-context.xml' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages/simple-ocr-repo.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages/simple-ocr-repo_de.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages/simple-ocr-repo_es.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages/simple-ocr-repo_it.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages/simple-ocr-repo_pt.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/model/ocr-model.xml' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/alfresco-global.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/log4j.properties' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/module-context.xml' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/context' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/messages' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/model' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/modifications.install' from war - file '/WEB-INF/classes/alfresco/module/simple-ocr-repo/module.properties' from war Adding files relating to version '1.1.1.1609250928' of module 'simple-ocr-repo'
Pour mémoire, voici la commande pour lister les modules : java/bin/java -jar bin/alfresco-mmt.jar list tomcat/webapps/alfresco.war
.
Il faut et c'est une excellente initiative de la part de ce module de procéder au mode DEBUG, à ce sujet il suffit d'ajouter dans :
solr4/log4j-solr.properties
# Pour Simple-OCR : log4j.logger.es.keensoft.alfresco.ocr=DEBUG
Il est possible de relancer Alfresco à ce niveau sans mettre en oeuvre ce module, car il manque encore pas mal de composants.
Il faut installer tous ceci avant de commencer : aptitude install tesseract-ocr tesseract-ocr-fra unpaper exactimage poppler-utils
.
A noter qu'il existe une multitude de langage pour Tesseract, exemple pour la langue anglaise, il faut installer ce paquet tesseract-ocr-ang
.
Pour information, car dès le début je me suis posé la question, mais que font tous ces logiciels ?
Et donc, le logiciel Unpaper
intervient pour nettoyer la page après OCR, https://www.flameeyes.eu/projects/unpaper
Excellent article les fonctions OCR que propose Tesseract
, de plus ce projet est très actif : https://geekeries.org/2015/12/reconnaissance-de-caracteres-avec-tesseract-ocr/
poppler-utils
. C'est une suite de logiciels pour le format PDF, les effets sont multiples, la page suivante doit pouvoir vous en dire plus :
https://en.wikipedia.org/wiki/Poppler_(software).
PDFSandwich est un logiciel capable d'apporter une couche texte à un document (PDF), d'ou son nom. Pour avoir une version récente, j'ai téléchargé le paquet directement sur le site : https://sourceforge.net/projects/pdfsandwich/files/pdfsandwich%200.1.6/pdfsandwich_0.1.6_amd64.deb/download -O download pdfsandwich_0.1.6_i386.deb Les explications de ce logiciel sont données ici pour de plus amples renseignements : http://www.tobias-elze.de/pdfsandwich/
Et voilà, reste à tester le tout, mais juste avant il faut faire une régle et l'activer :
Et en théorie vous devriez avoir des historiques similaires à ceci après, avec sous Alfresco une recherche de texte efficace aussi. Sans le faire volontairement, même un fichier avec une page à l'envers est passé, c'est plutôt pas mal.
2017-01-22 07:10:19,597 INFO [alfresco.ocr.OCRTransformWorker] [defaultAsyncAction1] EXIT VALUE: 0 2017-01-22 07:10:19,598 INFO [alfresco.ocr.OCRTransformWorker] [defaultAsyncAction1] STDOUT: pdfsandwich version 0.1.6 Input file: "/opt/alfresco-community/tomcat/temp/Alfresco/OCRTransformWorker_source_6138827412197805839.pdf" Output file: "/opt/alfresco-community/tomcat/temp/Alfresco/OCRTransformWorker_source_6138827412197805839_ocr.pdf" Number of pages in inputfile: 1 More threads than pages. Using 1 threads instead. Processing page 1. identify -format "%w\n%h\n" "/tmp/pdfsandwich_inputfilef468c6.pdf[0]" OCR done. Writing "/opt/alfresco-community/tomcat/temp/Alfresco/OCRTransformWorker_source_6138827412197805839_ocr.pdf" /opt/alfresco-community/tomcat/temp/Alfresco/OCRTransformWorker_source_6138827412197805839_ocr.pdf generated. Done.
Note | |
---|---|
J'ai rencontré un léger problème de librairie (libjpeg, libz...), ce problème est facilement résolvable. Il suffit de supprimer la librairie en question depuis : /opt/alfresco-community/common/lib/libjpeg.so.62, puis de faire un lien vers la même mais depuis votre distribution. (/opt/alfresco-community/common/lib/libjpeg.so.62), et le tour est joué. ln -sf /lib/x86_64-linux-gnu/libz.so.1.2.8 libz.so.1.2.8 ) |
Présentation de Alfresco™ : https://community.alfresco.com/community/about-this-community
Exemples de sites utilisés avec Alfresco : https://www.alfresco.com/customers
Le site complet pour Alfresco CE (GB): https://community.alfresco.com/groups/french-user-group
Le forum d'Alfresco (GB/FR), il faut s'identifier pour poster : https://forums.alfresco.com/fr/forum/utilisation/utilisation
La dernière mise à jour du mois de juillet 2016 : https://wiki.alfresco.com/index.php?title=Alfresco_Community_Edition_201606_EA_Release_Notes
Une page avec beaucoup de liens sur Alfresco : https://www.alfresco.com/resources/documentation/getting-started
Pour rire et çà vaut le cout :la-perle-du-jour-alfresco-vs-sharepoint
Créations d'utilisateurs en masse :
Via ce lien https://localhost/alfresco/service/api/people/upload, il est possible via plusieurs méthodes d'insérer plusieurs utilisateurs. C'est pratique et rapide, fonctionne bien avec le port 8080, mais pas en HTTPS sur mon site.
Ouverture du protocole Share Point, suite à une décision de justice de la part de la CE(UE) : http://www.lemagit.fr/actualites/2240191274/Alfresco-exploite-lantitrust-europeen-pour-venir-chatouiller-SharePoint
Un site que pour les developpeurs : http://dev.alfresco.com/resource/docs/java/index-all.html
Pour être au courant des nouveautés : https://plus.google.com/+alfresco
Borg Backup; le site est disponible ici : http://borgbackup.readthedocs.io/en/stable/usage.html
Origine Wikipédia FR : Tesseract est un logiciel de reconnaissance optique de caractères sous licence Apache. Conçu par les ingénieurs de Hewlett Packard de 1985 à 1995, son développement est abandonné pendant les dix années suivantes ; en 2005, les sources du logiciel sont libérées sous licence Apache et le logiciel est actuellement développé par Google. Initialement limité aux caractères ASCII, il supporte parfaitement les caractères UTF-8 et reconnait maintenant 40 langues.
Aikau est un framework créé par Alfresco. Vous pouvez trouver ici plus de détails : https://wiki.alfresco.com/wiki/Aikau_framework Aikau est disponible sur internet via ce lien : https://github.com/Alfresco/Aikau
AOS pour Alfresco Office Service. Simule le service Share Point pour offrir une édition en ligne avec la suite Office de Microsoft™.
Un serveur de fichiers permet de partager des données à travers un réseau. Le terme désigne souvent l'ordinateur (serveur) hébergeant le service applicatif. Il possède généralement une grande quantité d'espace disque où sont déposés des fichiers. Les utilisateurs peuvent ensuite les récupérer au moyen d'un protocole de partage de fichier. L'un des problèmes d'interopérabilité qui peut généralement se poser porte sur l'encodage des noms de fichier
Créé en 1985 par IBM, ce protocole s'est d'abord appelé LAN Manager sous OS/2, puis il a été popularisé par Microsoft Windows qui l'intégrait comme système par défaut de partage de fichiers sous Windows. En 1998, Microsoft renomme SMB en CIFS (Common Internet File System) et ajoute plusieurs fonctions comme le support des raccourcis et de fichiers de plus grande taille. En 2006, avec l'arrivée de Windows Vista puis de Windows 7, Microsoft a mis au point une version 2 du protocole plus rapide. Le protocole est de nouveau nommé SMB (SMB 2). En 2012, avec Windows 8 et Windows 2012, Microsoft propose la version 34 de SMB. Elle apporte des améliorations significatives, comme le SMB Direct Protocol (SMB sur RDMA) et le SMB Multichannel5 (plusieurs connexions par session SMB), ainsi qu'un gain de performances par rapport à la version 2, notamment avec les centres de traitement de données virtuels.
(extrait de Wikipédia FR) : CMIS fournit un modèle de données commun couvrant les types de fichiers et répertoires avec des propriétés génériques pouvant être lues ou écrites. CMIS décrit aussi un système de gestion des droits d'accès, de contrôle de version et offre la possibilité de définir des relations génériques. Il dispose d'un ensemble de services pour modifier ou interroger le modèle de données et peut être utilisé par plusieurs protocoles comme SOAP et REST à l'aide de la convention Atom1. Le modèle est basé sur des architectures communes de systèmes de gestion de documents. Voir sinon le lien suivant pour de plus amples renseignements : https://fr.wikipedia.org/wiki/CMIS
(Extrait de Wikipédia FR) - La gestion de contenu d'entreprise (en anglais Enterprise Content Management : ECM) vise à gérer l'ensemble des contenus d'une organisation. Il s'agit de prendre en compte sous forme électronique les informations qui ne sont pas structurées, comme les documents électroniques, par opposition à celles déjà structurées dans les bases de données. Elle comprend les phases de création/capture, stockage, indexation, gestion, nettoyage, distribution, publication, recherche et archivage, en faisant le lien du contenu avec les processus métier. À titre d'exemple, une application de gestion de contenu servira à gérer l'ensemble des informations d'un dossier client : courriers papier, courriels, télécopie, contrats, etc., dans une même infrastructure. La définition officielle du terme a été créée par l'organisation internationale AIIM (Association for Information and Image Management) en 2000.
(Extrait de Wikipédia FR). La GED met principalement en oeuvre des systèmes d'acquisition (exemple d'utilisation : la numérisation de masse de documents papiers), d'indexation, de classement, de stockage d'information, d'accès (navigation et recherche) et de diffusion des documents. La GED participe ainsi aux processus de collaboration, de capitalisation et d'échange d'informations. Elle prend en compte le besoin de gestion des documents selon leur cycle de vie, de la création à l'archivage en passant par la gestion des différentes versions. Les solutions et projets de GED peuvent permettre des gains en qualité et en coût rapide pour les organisations, qu'il s'agisse d'entreprises privées ou d'administrations. À titre d'exemple, le retour sur investissement d'un projet « standard » de dématérialisation de factures est inférieur à un an. Une GED dispose de fonctions de classement / navigation et également d'un moteur de recherche qui permettent de retrouver les contenus gérés, au moyen de vues, de recherches structurées ou plein texte (« full text »). Selon une étude de serdaLAB, le laboratoire d'études du groupe Serda, le marché de la GED et de la gestion de contenu atteint 1,1 milliard d'euros en 2008, en progression de 8 %. Il existe 4 étapes majeures dans la gestion électronique des documents : acquisition, traitement, stockage et diffusion.
LESS est un langage dynamique de génération de feuilles de style conçu par Alexis Sellier. Il est influencé par Sass et a influencé "SCSS" (la syntaxe plus récente de Sass) : la syntaxe de LESS est plus proche de CSS2 et un code CSS est aussi un code LESS valide qui a la même sémantique. LESS ajoute à CSS les mécanismes suivants : variables, imbrication, mixins, opérateurs et fonctions. LESS est implémenté en open source. Sa première version a été écrite en Ruby. Dans les versions ultérieures, Ruby a été remplacé par Javascript. Une particularité de LESS par rapport aux autres préprocesseurs CSS est qu'il peut être compilé à la volée, soit lors du rendu par le navigateur, soit côté serveur. Il peut également être compilé à l'avance en un simple fichier CSS.
La gestion par volumes logiques (en anglais, logical volume management ou LVM) : ™ https://fr.wikipedia.org/wiki/Gestion_par_volumes_logiques
Product Lifecycle Management : non utilisé dans notre situation, permet de gérer la durée de vie d'un logiciel ou d'un produit.
RSS (sigle venant de l'anglais «Rich Site Summary») est une famille de formats de données utilisés pour la syndication de contenu Web. Un produit RSS est une ressource du World Wide Web dont le contenu est produit automatiquement (sauf cas exceptionnels) en fonction des mises à jour d’un site Web. Les flux RSS sont des fichiers XML qui sont souvent utilisés par les sites d'actualité et les blogs pour présenter les titres des dernières informations consultables. On emploie parfois à tort le terme RSS pour désigner le format concurrent Atom. Trois formats de données peuvent être désignés par ces initiales : Rich Site Summary (RSS 0.91) sorti en 1999 ; RDF Site Summary (RSS 0.90 et 1.0) sorti en 2000 ; Really Simple Syndication (RSS 2.0) sorti en 2002.
Source Wikipédia : Solr (prononcé "solar") est une plateforme logicielle de moteur de recherche s'appuyant sur la bibliothèque de recherche Lucene, créée par la Fondation Apache et distribuée et conçue sous licence libre. Solr utilise le langage Java et est exécuté par un conteneur de servlets, comme Tomcat. Il communique avec le client à l'aide d'une interface de programmation en XML et JSON, généralement via le protocole HTTP.
Source Wikipédia : TinyMCE, aussi connu sous le nom de Tiny Moxiecode Content Editor (tout petit éditeur de contenu de Moxiecode) est un éditeur de HTML de type WYSIWYG, écrit en JavaScript, indépendant de la plateforme, basé sur le Web et publié comme logiciel open source sous la licence LGPL par Moxiecode Systems AB. Il est capable de convertir les champs HTML TEXTAREA ou d'autres éléments HTML en instances de l'éditeur. TinyMCE est conçu pour s'intégrer facilement aux systèmes de gestion de contenu (SGC). C'est l'éditeur de contenu par défaut de WordPress2 et de Joomla!3, les deux SGC les plus utilisés4, et du SGC Plone à partir de la version 45. https://www.tinymce.com/
(source wikipedia) : WebDAV (Web-based Distributed Authoring and Versioning) est un protocole (plus précisément, une extension du protocole HTTP) défini par le groupe de travail IETF du même nom. Décrit dans la RFC 4918, WebDAV permet de simplifier la gestion de fichiers avec des serveurs distants. Il permet de récupérer, déposer, synchroniser et publier des fichiers (et dossiers) rapidement et facilement. L'objectif principal de WebDAV est de rendre possible l'écriture à travers le web et pas seulement la lecture de données. WebDAV permet à plusieurs utilisateurs d'éditer le contenu d'un dossier web simultanément. Il saura gérer les droits d'accès aux fichiers (ou dossiers), en verrouillant momentanément les fichiers et dossiers édités.https://fr.wikipedia.org/wiki/WebDAV