Venerdì, 29 Novembre 2019 00:10

HowTo: Installare Alfresco 6.1.2 in CentOS 7 manualmente

Alfresco è un super pen drive di rete.

Si tratta di un programma per raccogliere file come un ordinario Google Drive, ma aggiunge svariate potenzialità e servizi (multiprotocollo, multi nodo, cross platform, ACL avanzate, supporto CMIS, ecc...).

L'installazione, però, non è cosa semplice: richiede un Application Server Java, un databale, ecc... In particolare l'ultima versione, la 6.1, non mette più a disposizione un pacchetto auto-installante.

Questa guida spiega, passo, passo, come installarlo in un sistema CentOS 7.

La guida è didattica e si prefigge di raggiungere un installazione funzionante usando i pacchetti community.

1. Panoramica

Installiamo Alfresco 6.1.2 Community dai pacchetti zip.

Faremo una installazione tradizionale (cioè non un container docker) con Tomcat e useremo MariaDB come database. Il nostro Alfresco sarà monolitico (tutto in un solo server)

Le nostre impostazioni sono:

  • hostname: alf.example.com

  • IP: 192.168.1.100

  • AS: Tomcat

  • Java 1.8

  • database MariaDB:

    • dbname: alfresco

    • dbuser: alfresco

    • dbpass: xx32F!we

    • dbhost: localhost

  • no ActiveMQ

  • no sicurezza ssl.

2. Preparazione di CentOS

Si presume che la linux box sia aggiornata.

Le seguenti operazioni si intendono operate da una shell come utente root.

2.1. Impostazioni e software terzi

  1. Aggiungiamo le librerie e i programmi necessari

yum install -y fontconfig libSM libICE libXrender libXext cups-libs apr apr-devel cairo libGLU mesa-libGL-devel fontconfig libxrender libxt wget lsof

  1. installiamo ffmpeg

    1. installiamo il repo

yum install -y http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

    1. installiamo ffmpeg

yum install -y ffmpeg

  1. aggiungiamo i programmi aggiuntivi usati da Alfresco

yum install -y libreoffice libreoffice-opensymbol-fonts ImageMagick ghostscript mariadb-server mariadb

  1. aggiungiamo l'utente alfresco

useradd -d /opt/alfresco -M -s /sbin/nologin alfresco

  1. modifichiamo la quota dei file per l'utente alfresco.

    Appendere in /etc/security/limits.conf le seguenti righe

...

alfresco soft nofile 8192

alfresco hard nofile 65536

  1. impostiamo l'hostname

hostnamectl set-hostname alf

  1. aggiornare /etc/hosts come segue

...

192.168.1.100 alf.example.com alf

2.2. MariaDB

Inizializziamo MariaDB e attiviamolo:

  1. avviamo e inizializziamo MariaDB

systemctl start mariadb

systemctl enable mariadb

  1. securizziamolo

mysql_secure_installation

  1. creiamo il database alfresco ed il relativo utente

mysql -u root -p

mysql> CREATE DATABASE alfresco default character set utf8;

mysql> CREATE USER 'alfresco'@'localhost' IDENTIFIED BY 'xx32F!we';

mysql> GRANT ALL PRIVILEGES ON alfresco.* TO 'alfresco'@'localhost';

mysql> QUIT;

2.3. Oracle Java

Installiamo Oracle Java.

  1. creiamo una directory temporanea

mkdir /opt/Temp

cd /opt/Temp

  1. scarichiamo il pacchetto Oracle Java SE 8u231 da https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    NB 1: questa versione è scaricabile solo dietro autenticazione

    NB 2: è più comodo scaricare il pacchetto attraverso un browser web

    NB 3: mettiamo il pacchetto scaricato in /opt/Temp

  2. installiamo il pacchetto

yum install -y ./jdk-8u231-linux-x64.rpm

  1. impostiamo Oracle Java come java default

alternatives --config java

Ci sono 2 programmi che forniscono 'java'.

 

Selezione Comando

-----------------------------------------------

*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java)

2 /usr/java/jdk1.8.0_181-amd64/jre/bin/java

 

Invio per mantenere l'attuale selezione[+], o inserire il numero di selezione: 2

2.4. Completamento

Completiamo la preparazione del sistema operativo disattivando SElinux ed il firewall

NB: disattivare questi due sistemi di sicurezza non è una buona pratica. Qui lo facciamo per semplificare il lavoro visto le sole finalità didattiche della guida

  1. disattiviamo SElinux

    1. editiamo /etc/sysconfig/selinux

    2. aggiorniamo la seguente stringa

...

SELINUX=disabled

...

  1. disattiviamo il firewall

systemctl stop firewalld

systemctl disable firewalld

  1. riavviamo

systemctl reboot

Passiamo, ora, a installare Alfresco.

3. Installare Alfresco

L'installazione di Alfresco si articola in alcuni passi:

  1. l'installazione di Tomcat

  2. l'installazione di Alfresco

  3. l'installazione di Search

  4. l'installzione di File transfer-receiver

  5. avvio di LibreOffice in modalità server

  6. correzione dei permessi

  7. l'installazione degli script di avvio-arresto.

Procediamo operando sempre come utente root.

3.1. Tomcat

  1. Posizioniamoci nella directory temporanea

mkdir /opt/Temp

cd /opt/Temp

  1. scarichiamo Tomcat

wget http://mirror.nohup.it/apache/tomcat/tomcat-8/v8.5.49/bin/apache-tomcat-8.5.49.tar.gz

  1. scarichiamo il connector per MySQL

    NB: la versione del connector è vecchia. Alfresco community non supporta, al momento, il connector serie 8

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz

  1. creiamo la directory d'installazione

mkdir -p /opt/alfresco/logs

  1. estraiamo Tomcat e installiamolo

tar xfz apache-tomcat-8.5.49.tar.gz -C /opt/alfresco

mv /opt/alfresco/apache-tomcat-8.5.49 /opt/alfresco/tomcat

  1. pubblichiamo il connector

    1. estraiamo il pacchetto

tar xfz mysql-connector-java-5.1.48.tar.gz

    1. copiamo il connector in Tomcat

cp mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /opt/alfresco/tomcat/lib/

  1. rimuoviamo la parte applicativa pre-installata

/bin/rm -R /opt/alfresco/tomcat/webapps/*

  1. creiamo il file /opt/alfresco/tomcat/bin/setenv.sh

    1. popoliamolo con il seguente contenuto

CATALINA_TMPDIR=/opt/alfresco/tomcat/temp

CATALINA_PID=/var/run/alfresco/tomcat.pid

    1. rendiamolo eseguibile

chod +x /opt/alfresco/tomcat/bin/setenv.sh

  1. prepariamo la directory per il pid

    1. creiamo la directory

mkdir /var/run/alfresco

    1. correggiamo i permessi

chown alfresco.alfresco /var/run/alfresco

  1. aggiorniamo /opt/alfresco/tomcat/conf/server.xml come segue

...

<Connector port="8080" protocol="HTTP/1.1"

URIEncoding="UTF-8"

connectionTimeout="20000"

maxHttpHeaderSize="32768"

redirectPort="8443" />

...

  1. aggiorniamo /opt/alfresco/tomcat/conf/catalina.properties come segue

...

shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar

...

Ora passiamo a pubblicare i WAR di Alfresco.

3.2. Alfresco

  1. Torniamo nella directory temporanea

cd /opt/Temp/

  1. scarichiamo i pacchetti zip rilasciati da Alfresco

    NB: in questo momento il pacchetto più aggiornato è disponibile su questa URL a fronte della segnalazione del paese di appartenenza.

    I pacchetti sono disponibili anche su SourceForge all'URL https://sourceforge.net/projects/alfresco/files/Alfresco%20201806-GA%20Community/ , ma alla penultima versione.

    In fine si possono scaricare anche da GitHub all'URL https://github.com/Alfresco .

wget https://download.alfresco.com/cloudfront/release/community/201901-GA-build-205/alfresco-content-services-community-distribution-6.1.2-ga.zip

  1. estraiamo i file

unzip alfresco-content-services-community-distribution-6.1.2-ga.zip

  1. copiamo il contenuto di web-server/webapps in tomcat/webapp

cp alfresco-content-services-community-distribution-6.1.2-ga/web-server/webapps/* /opt/alfresco/tomcat/webapps/

  1. copiamo le altre directory contenute in web-server sempre in Tomcat

cp -R alfresco-content-services-community-distribution-6.1.2-ga/web-server/conf/Catalina/localhost/* /opt/alfresco/tomcat/conf/Catalina/localhost/

cp -R alfresco-content-services-community-distribution-6.1.2-ga/web-server/lib/* /opt/alfresco/tomcat/lib/

cp -R alfresco-content-services-community-distribution-6.1.2-ga/web-server/shared /opt/alfresco/tomcat/

  1. procediamo copiando il rimanente in /opt/alfresco

cp -R alfresco-content-services-community-distribution-6.1.2-ga/alf_data /opt/alfresco/

cp -R alfresco-content-services-community-distribution-6.1.2-ga/amps /opt/alfresco/

cp -R alfresco-content-services-community-distribution-6.1.2-ga/bin /opt/alfresco/

cp -R alfresco-content-services-community-distribution-6.1.2-ga/licenses /opt/alfresco/

  1. estraiamo e copiamo il programma alfresco-pdf-renderer

tar xfz alfresco-content-services-community-distribution-6.1.2-ga/alfresco-pdf-renderer/alfresco-pdf-renderer-1.1-win64.tgz -C /opt/alfresco/bin/

  1. aggiorniamo la configurazione

    1. creiamo il file della configurazione dell'esempio presente nel pacchetto

cp /opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample /opt/alfresco/tomcat/shared/classes/alfresco-global.properties

    1. aggiorniamo il file come segue

      NB 1: il file di esempio è ricco di commenti e spiegazioni. Qui di seguito riporto solo il codice con le direttive

      NB 2: l'ultima stringa " messaging.subsystem.autoStart=false " non è presente nella configurazione d'esempio. La direttiva serve per impedire l'avvio automatico del bus di comunicazione. Questo sistema richiede ActiveMQ. In questo esempio non installiamo il messagebus e, pertanto, dobbiamo disattivare l'avvio del messaging.subsystem altrimenti Alfresco resterà in attesa e non riuscirà a completare l'avvio.

dir.root=/opt/alfresco/alf_data

dir.keystore=${dir.root}/keystore

 

db.username=alfresco

db.password=xx32F!we

db.driver=org.gjt.mm.mysql.Driver

db.url=jdbc:mysql://localhost/alfresco?useUnicode=yes&characterEncoding=UTF-8

 

jodconverter.officeHome=/usr/lib64/libreoffice

jodconverter.portNumbers=8100

jodconverter.enabled=true

img.exe=/bin/convert

 

alfresco.context=alfresco

alfresco.host=${localname}

alfresco.port=8080

alfresco.protocol=http

 

share.context=share

share.host=${localname}

share.port=8080

share.protocol=http

 

alfresco.rmi.services.host=0.0.0.0

 

alfresco-pdf-renderer.root=/opt/alfresco/bin

alfresco-pdf-renderer.exe=${alfresco-pdf-renderer.root}/alfresco-pdf-renderer

 

messaging.subsystem.autoStart=false

 

# ffmpeg configure

ffmpeg.exe=/bin/ffmpeg

  1. installiamo i moduli

bash /opt/alfresco/bin/apply_amps.sh

  1. infine creiamo le directory per i moduli

  2. mkdir -p /opt/alfresco/modules/platform

mkdir -p /opt/alfresco/modules/share

  1. facciamo la prima esecuzione di Alfresco e stoppiamolo subito dopo. La procedura serve per far creare parti ancora mancanti

    1. lanciamo Alfresco

/opt/alfresco/tomcat/bin/catalina.sh start

    1. controlliamo il processo di avvio consultando i log

tail -f /opt/alfresco/tomcat/log/catalina.out

    1. terminiamo Alfresco

/opt/alfresco/tomcat/bin/catalina.sh stop

3.3. Search

  1. Torniamo nella directory temporanea

cd /opt/Temp/

  1. scarichiamo il pacchetto zip rilasciati da Alfresco

    NB: sulle versione vale il discorso fatto al titolo 3.2 Alfresco . Lo stesso anche per il download

wget https://download.alfresco.com/cloudfront/release/community/SearchServices/1.3.0.1/alfresco-search-services-1.3.0.1.zip

  1. estraiamo i file

unzip alfresco-search-services-1.3.0.1.zip

  1. spostiamo e rinominiamo la directory in /opt/alfresco

mv alfresco-search-services /opt/alfresco/search

  1. editare /opt/alfresco/tomcat/shared/classes/alfresco-global.properties e aggiungere le seguenti righe

...

index.subsystem.name=solr

solr.host=localhost

solr.port=8983

A questo punto Solr è pronto. Al titolo 3.6 Script sarà descritto il primo avvio. Questa va fatto con una specifica istanziazione per fargli costruire la struttura base degli indici.

3.4. File transfer-receiver

Il file transfer-receiver serve in caso di un multinodo per tener sincronizzati i vari nodi.

Qui di seguito la base dell'installazione senza alcuna configurazione per un primo orientamento in caso di realizzazione di un cluster.

  1. Torniamo nella directory temporanea

cd /opt/Temp/

  1. scarichiamo il pacchetto zip rilasciati da Alfresco

    NB: sulle versione vale il discorso fatto al titolo 3.2 Alfresco . Lo stesso anche per il download

wget https://download.alfresco.com/cloudfront/release/community/201808-EA-build-00140/alfresco-file-transfer-receiver-6.2.1.zip

  1. estraiamo i file

mkdir alfresco-file-transfer-receiver

unzip alfresco-file-transfer-receiver-6.2.1.zip -d alfresco-file-transfer-receiver

  1. spostiamo i file in Tomcat come segue

cp -R alfresco-file-transfer-receiver/classes/* /opt/alfresco/tomcat/shared/classes/

cp -R alfresco-file-transfer-receiver/lib/* /opt/alfresco/tomcat/lib/

cp -R alfresco-file-transfer-receiver/webapps/* /opt/alfresco/tomcat/webapp/

cp -R alfresco-file-transfer-receiver/file-transfer-receiver.jar /opt/alfresco/tomcat/

3.5. Configurazione dello stack

E' un riassunto. Riporto le varie configurazioni fatte e alcune nuove:

  1. personalizziamo il path dei file di log:

    1. editiamo /opt/alfresco/search/logs/log4j.properties e aggiorniamo la seguente stringa

...

log4j.appender.file.File=/opt/alfresco/logs/solr.log

...

  1. editare /opt/alfresco/tomcat/conf/catalina.properties e aggiornare come segue

...

shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar

...

  1. editare /opt/alfresco/tomcat/conf/server.xml

...

<Connector port="8080" protocol="HTTP/1.1"

URIEncoding="UTF-8"

connectionTimeout="20000"

maxHttpHeaderSize="32768"

redirectPort="8443" />

...

  1. editare /opt/alfresco/tomcat/shared/classes/alfresco-global.properties e aggiornare come segue

dir.root=/opt/alfresco/alf_data

dir.keystore=${dir.root}/keystore

 

db.username=alfresco

db.password=xx32F!we

db.driver=org.gjt.mm.mysql.Driver

db.url=jdbc:mysql://localhost/alfresco?useUnicode=yes&characterEncoding=UTF-8

 

jodconverter.officeHome=/usr/lib64/libreoffice

jodconverter.portNumbers=8100

jodconverter.enabled=true

 

alfresco.context=alfresco

alfresco.host=${localname}

alfresco.port=8080

alfresco.protocol=http

 

share.context=share

share.host=${localname}

share.port=8080

share.protocol=http

 

ftp.enabled=true

ftp.port=2121

ftp.sslEngineDebug=false

ftp.ipv6.enabled=false

 

alfresco.rmi.services.host=0.0.0.0

messaging.subsystem.autoStart=false

 

index.subsystem.name=solr

solr.host=localhost

solr.port=8983

 

alfresco-pdf-renderer.root=/opt/alfresco/bin

alfresco-pdf-renderer.exe=${alfresco-pdf-renderer.root}/alfresco-pdf-renderer

ffmpeg.exe=/bin/ffmpeg

img.exe=/bin/convert

  1. pubblicare le estensioni per le anteprime e la trasformazione dei video

cp /opt/alfresco/tomcat/shared/classes/alfresco/extension/video-thumbnail-context.xml.sample /opt/alfresco/tomcat/shared/classes/alfresco/extension/video-thumbnail-context.xml

 

cp /opt/alfresco/tomcat/shared/classes/alfresco/extension/video-transformation-context.xml.sample /opt/alfresco/tomcat/shared/classes/alfresco/extension/video-transformation-context.xml

3.6. Script

3.6.1. Primo Avvio di Solr

  1. Puntiamoci sulla directory di Alfresco

cd /opt/alfresco

  1. lanciamo Solr istanziando la costruzione degli indici

search/solr/bin/solr start -force -m 1G -a -Dcreate.alfresco.defaults=alfresco,archive

Waiting up to 180 seconds to see Solr running on port 8983 [\]

Started Solr server on port 8983 (pid=17073). Happy searching!

  1. terminato l'avvio

search/solr/bin/solr stop

Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 17073 to stop gracefully.

3.6.2. Script di avvio/stop

  1. Creiamo lo script di avvio per lo stack Alfresco.

    1. Creiamo il file /opt/alfresco/bin/start.sh e popoliamolo con il seguente contenuto

#!/bin/bash

/opt/alfresco/search/solr/bin/solr start > /dev/null 2>&1

/opt/alfresco/tomcat/bin/catalina.sh start > /dev/null 2>&1

    1. rendiamo eseguibile lo script

chmod +x /opt/alfresco/bin/start.sh

  1. creiamo lo script di stop per lo stack Alfresco.

    1. Creiamo il file /opt/alfresco/bin/stop.sh e popoliamolo con il seguente contenuto

#!/bin/bash

/opt/alfresco/search/solr/bin/solr stop > /dev/null 2>&1

/opt/alfresco/tomcat/bin/catalina.sh stop > /dev/null 2>&1

    1. rendiamo eseguibile lo script

chmod +x /opt/alfresco/bin/stop.sh

  1. creiamo lo script di status per lo stack Alfresco,

    1. Creiamo il file /opt/alfresco/bin/status.sh e popoliamolo con il seguente contenuto

#!/bin/bash

/opt/alfresco/search/solr/bin/solr status

/opt/alfresco/tomcat/bin/catalina.sh status

    1. rendiamo eseguibile lo script

chmod +x /opt/alfresco/bin/status.sh

  1. creiamo lo script per init.

    1. Creiamo il file /etc/init.d/alfresco e popoliamolo con il seguente contenuto

#!/bin/bash

 

### BEGIN INIT INFO

# Provides: alfresco

# Required-Start: $remote_fs $syslog

# Required-Stop: $remote_fs $syslog

# Default-Start: 2 3 4 5

# Default-Stop:

# Short-Description: Alfresco server

### END INIT INFO

 

ALF="$1"

ALFPATH="/opt/alfresco/bin"

ALFUSER=

 

case "$1" in

start)

#$ALFPATH/start.sh

su -s /bin/bash -c "cd /opt/alfresco;$ALFPATH/start.sh" alfresco

;;

status)

#$ALFPATH/status.sh

su -s /bin/bash -c "cd /opt/alfresco;$ALFPATH/status.sh" alfresco

;;

stop)

#$ALFPATH/stop.sh

su -s /bin/bash -c "cd /opt/alfresco;$ALFPATH/stop.sh" alfresco

;;

restart)

#$ALFPATH/stop.sh

#$ALFPATH/start.sh

su -s /bin/bash -c "cd /opt/alfresco;$ALFPATH/stop.sh" alfresco

su -s /bin/bash -c "cd /opt/alfresco;$ALFPATH/start.sh" alfresco

;;

*)

echo "Usage alfresco {start|stop|restart|status}"

exit 1

;;

esac

    1. rendiamo eseguibile lo script

chmod +x /etc/init.d/alfresco

  1. impostiamo systemd

    1. istruiamo systemd per ricaricare gli script di init

systemctl daemon-reload

    1. impostiamo l'avvio automatico del servizio

systemctl enable alfresco

3.7. Permessi

Sistemiamo il proprietario e alcuni permessi.

  1. Impostiamo come proprietario alfresco per tutti i file

chown alfresco.alfresco -R /opt/alfresco

  1. assicuriamoci che tutti gli script siano eseguibili

find /opt/alfresco/ -type f -name *.sh -exec chmod +x {} \;

3.8. Avvio

3.8.1. Primo upgrade

  1. Rimuoviamo i pacchetti .war

rm /opt/alfresco/tomcat/webapps/*war

  1. installiamo i pacchetti linguistici per Tiny_mce

    1. scarichiamo i pacchetti linguistici

wget https://www.tiny.cloud/docs-4x/language/tinymce4x_languages.zip

    1. estraiamo il pacchetto nella directory creata

unzip tinymce4x_languages.zip -d /opt/alfresco/tomcat/webapps/share/modules/editors/tinymce

    1. editiamo /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties e aggiorniamo come segue

...

log4j.appender.File.File=/opt/alfresco/logs/alfresco.log

...

    1. editiamo /opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j.properties e aggiorniamo come segue

...

log4j.appender.File.File=/opt/alfresco/logs/share.log

...

  1. reimpostiamo la sicurezza

chown alfresco.alfresco -R /opt/alfresco

3.9. Test finale

  1. Accediamo a un computer client collegato al server Alfresco e apriamo un browser web e puntiamolo all'URL http://alf.example.com:8080/

  2. cliccare sul link "Alfresco Repository -> Alfresco Share" e autentichiamoci con le credenziali di installazione

    Username: admin
    Password: admin

    e usiamo Alfresco

  3. apriamo il nostro programma di videoscrittura, creiamo un documento e salviamo il documento in remoto con protocollo CMIS con le seguenti credenziali di accesso

    Servizio: Alfresco o CMIS

    URL: http://alf.example.com:8080

    Path: alfresco

    Username: admin

    Password: admin

  4. aggiornare il documento, crearne dei nuovi e aprirne alcuni da remoto

    NB: il sito demo contiene alcuni file word, powerpoint, ecc... di esempio

  5. accedere via web e verificare, usare i file creati.

Per un test più esaustivo rimandiamo ai suggerimenti del manteiner reperibili all'URL https://docs.alfresco.com/6.1/concepts/testing-alfresco.html .

4. Conclusione

L'installazione di Alfresco non è semplice.

Questa guida permette di raggiungere l'obiettivo di un'installazione funzionante anche se vengono tralasciati molti aspetti. Anche l'adozione del pacchetto community ha diversi limiti rispetto alla distribuzione enterprise.

L'obiettivo di un percorso didattico e di una installazione funzionante è raggiunto.

Per un adeguato perfezionamento, ed un completamento didattico sarà opportuno completare l'abilitazione-configurazione delle funzioni avanzate, la securizzazione e la configurazione avanzata (es.: autenticazione centralizzata, integrazione dei servizi, ecc...). Elementi, comunque, che in alcuni casi non sono necessari.

5. Webgrafia

ALFRESCO SOFTWARE INC, Installing using distribution zip, https://docs.alfresco.com/6.1/concepts/ch-install.html, 24/11/2019

RESPLIN INTERMEDIATE, Download and install Alfresco in Linux, https://hub.alfresco.com/t5/alfresco-content-services-hub/download-and-install-alfresco-in-linux/ba-p/289633#w_addmysqldatabaseconnector, 24/11/2019

TONI DE LA FUENTE, Alfresco Tip: Enable video thumbnail and transformations with FFMPEG, https://blyx.com/2014/02/17/alfresco-tip-enable-video-thumbnail-and-transformations-with-ffmpeg/, 17/2/2014

TONI DE LA FUENTE, Alfresco Tip: got the control and customize your logs (alfresco.log, share.log and solr.log), https://blyx.com/2014/02/18/alfresco-tip-logs/, 18/2/2014

Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezione Cookie Policy.