====== Server CentOS 5.2 per web GIS ======
===== Software installato =====
* **Postgres** (pacchetto postgresql-server-8.3.5-1PGDG.rhel5)
* **Postgis** (pacchetto postgis-1.3.3-2.rhel5)
* **GDAL** (/usr/local/lib/libgdal.so.1 da src in /usr/local/gdal-1.5.3/)
* **OGDI** (pacchetto ogdi-3.2.0-0.12.beta2.el5)
* **mapserver** (in /var/www/cgi-bin/mapserv da src in /usr/local/mapserver-5.2.1/)
* **p.mapper** (in /var/www/pmapper con alias /pmapper in httpd.conf, src in /root/pmapper-3.2.0.zip)
* **mapbender** (in /var/www/mapbender/http, con alias /mapbender, src in /root/mapbender_2.5.zip)\\ TODO: configurazione di Owsproxy
* **Geoserver** (geoserver-1.7.1-bin.zip, unzip in /usr/local/lib/geoserver/)
* **Geonetwork** (geonetwork-install-2.2.0.jar)
* **Mod_JK** Apache Tomcat Connector (1.2.26, src in /root/download/mod_jk)
* **SUN Java 1.6.0** (da jdk-6u10-linux-i586.bin + rpmbuild, src in /usr/src/redhat -> /root/redhat)
* **Tomcat 5.5** (pacchetto tomcat5-5.5.23-0jpp.7.el5_2.1 e altri)
===== PostgreSQL + PostGIS =====
Creato un template per database geografici, di nome **''template_gis''**:
postgres=# CREATE DATABASE template_gis TEMPLATE template0;
[root@guest-34 ~]# su - postgres
-bash-3.2$ createlang plpgsql template_gis
-bash-3.2$ psql -f /usr/share/pgsql/contrib/lwpostgis.sql -d template_gis
-bash-3.2$ psql -f /usr/share/pgsql/contrib/spatial_ref_sys.sql -d template_gis
postgres=# UPDATE pg_database SET datistemplate='t' WHERE datname = 'template_gis';
===== p.Mapper =====
Il file di configurazione e il file .map in uso sono rispettivamente:
* **''/var/www/pmapper/config/config_default.ini''**,
* **''/var/www/pmapper/config/default/pmapper_demo.map''**.
Impostato in **''/etc/httpd/conf/httpd.conf''** un:
Alias /pmapper /var/www/pmapper
Options MultiViews
DirectoryIndex index.phtml
Order allow,deny
Allow from all
Configurato **''/etc/php.ini''** in modo che gli errori PHP vengano loggati in **''/var/log/php/error.log''**. Rotazione dei log aggiunta a **''/etc/logrotate.d/httpd''**.
File temporanei in **''/var/www/html/tmp/''**, directory con permessi **1777**. Creato cronjob di pulizia periodica **''/etc/cron.d/mapserver-clean''**.
===== MapBender =====
Download di **[[http://www.mapbender.org/download/mapbender_2.5.zip|mapbender_2.5.zip]]** da [[http://www.mapbender.org/|www.mapbender.org]], unzip in **''/var/www/mapbender/''**, la directory di log deve essere scrivibile all'utente Apache:
chown -R apache /var/www/mapbender/log
Impostato in **''/etc/httpd/conf/httpd.conf''** un:
Alias /mapbender /var/www/mapbender/http
Options MultiViews
DirectoryIndex index.php
Order allow,deny
Allow from all
php_flag short_open_tag off
Editare la configurazione **''conf/mapbender.conf''**, in particolare verificare le impostazioni di accesso al database:
define("DBSERVER", "localhost");
define("PORT", "5432");
define("DB", "mapbender");
define("OWNER", "mapbender");
define("PW", "MySecret");
Per poter sfruttare il password recovery via mail bisogna configurare un indirizzo email per l'utente ed aver abilitato le opzioni mail:
define("MAILHOST", "smpt.domain.org");
define("MAILADMIN", "admin@domain.org");
define("MAILADMINNAME", "Mapbender Admin");
Creare un database PostgreSQL, caricare lo schema, i dati e i vincoli (scegliere la versione PostgreSQL con encoding utf-8):
* ''resources/db/postgresql/pgsql_schema.sql''
* ''resources/db/postgresql/utf8/pgsql_data.sql''
* ''resources/db/postgresql/pgsql_serial_set_sequences.sql''
Abilitare il database all'estensione PostGIS.
Per verificare le impostazioni spostare ''tools/mapbender_setup.php'' in **''http/tools/mapbender_setup.php''** ed aprirlo con il browser.
- Il test **short_open_tag** non è affidabile perché fa il test con ''get_cfg_var()'' invece che con ''ini_get()''. Controllare con ''phpinfo()'' lo stato reale, conviene che sia Off (vedi direttiva in ''httpd.conf'').
- Il test segnala un problema di **ERROR LOGGING** se LOG_LEVEL è impostato a qualcosa minore di //notice//, perché il test si basa sulla possibilità di loggare con priorità notice.
Finto il test togliere il file ''mapbender_setup.php'' da ''http/tools/''.
Per abilitare OWSProxy vedere le istruzioni (in tedesco): [[http://www.mapbender.org/Owsproxy]].
==== Alcune prove con MapBender ====
Loggarsi come utente **root**, password di default **root**:
* Dal menu **admin2_en** creare un nuovo utente.
* **Copy GUI**: come esempio usare quella predefinita di nome **gui**, abbastanza completa.
* **Allow one user to access several GUIs**: permettere al nuovo utente di accedere alla nuova GUI.
* **Edit GUI elements**: per esempio aggiungere il modulo **owsproxy** copiandolo dalla GUI **admin1**.
* **Load WMS**: selezionare una GUI, immettere un **WMS GetCapabilities URL**. Il WMS viene aggiunto al volo alla GUI.
===== Java SUN =====
Per mantenere l'installazione **sotto il controllo del gestore pacchetti** si è adottata la procedura **[[http://wiki.centos.org/HowTos/JavaOnCentOS|HowTo Install Java on CentOS]]**.
In sintesi:
yum install rpm-build
cd /usr/src/redhat/SOURCES
wget http://cds.sun.com/is-bin/.../jdk-6u10-linux-i586.bin
wget http://mirrors.dotsrc.org/jpackage/1.7/generic/SRPMS.non-free/java-1.6.0-sun-1.6.0.10-1jpp.nosrc.rpm
rpmbuild --rebuild java-1.6.0-sun-1.6.0.10-1jpp.nosrc.rpm
cd /usr/src/redhat/RPMS/i586
yum --nogpgcheck localinstall java-1.6.0-sun-1.6.0.10-1jpp.i586.rpm
yum --nogpgcheck localinstall java-1.6.0-sun-fonts-1.6.0.10-1jpp.i586.rpm
yum --nogpgcheck localinstall java-1.6.0-sun-devel-1.6.0.10-1jpp.i586.rpm
alternatives --config java
java -version
===== Geoserver =====
:!: **Questa installazione è stata abbandonata e non viene avviata al bootstrap!** :!:
Un'**installazione di prova** di **[[http://geoserver.org/display/GEOS/Welcome|Geoserver]]** è stata fatta con la versione **UNIX binary** che in un unico archivio fornisce l'applicativo e Jetty (server web e Java servlet engine). Sebbene l'installazione sia più semplice (richiede solo la presenza di Java, non necessita di Apache e Tomcat) non è indicata in ambiente di produzione. Ulteriore problema è che l'applicativo **gira come utente root**.
Lo script di start/stop **''/etc/init.d/geoserver''** poteva essere simile a questo:
#!/bin/sh
#
# geoserver Startup script for Geoserver
#
# chkconfig: 2345 85 15
# description: Geoserver is a open source software server \
# written in Java that allows users to share \
# and edit geospatial data.
# Where to search for the ./bin/java binary:
export JAVA_HOME="/usr/lib/jvm/java"
export GEOSERVER_HOME="/usr/local/lib/geoserver"
LOG="/var/log/geoserver/geoserver.log"
ERR_LOG="/var/log/geoserver/error.log"
case "$1" in
start)
"$GEOSERVER_HOME"/bin/startup.sh < /dev/null >> "$LOG" 2>> "$ERR_LOG" &
;;
stop)
"$GEOSERVER_HOME"/bin/shutdown.sh
;;
*)
echo "Usage: $0 {start|stop}"
esac
L'installazione in sintesi:
wget http://downloads.sourceforge.net/geoserver/geoserver-1.7.1-bin.zip
cd /usr/local/lib
unzip /root/geoserver-1.7.1-bin.zip
mv geoserver-1.7.1 geoserver
vi /etc/init.d/geoserver
chkconfig --add geoserver
mkdir /var/log/geoserver
/etc/init.d/geoserver start
L'applicativo è raggiungibile all'indirizzo **%%http://localhost:8080/geoserver/%%**, username **admin** e password **geoserver**.
Volendo cambiare la porta di default (TCP 8080, la stessa usata da Tomcat), modificare **''$GEOSERVER_HOME/etc/jetty.xml''**.
===== Tomcat =====
Installato Tomcat fornito da CentOS:
yum install tomcat5.i386
chkconfig --level 2345 tomcat5 on
Il server http di Tomcat risponde all'indirizzo **''%%http://localhost:8080/%%''**, volendo modificare la porta TCP si edita il file **''/etc/tomcat5/server.xml''**. Tomcat utilizza anche la porta **TCP 8005** (ma solo su 127.0.0.1) per la sua procedura di shutdown. Tomcat apre anche la porta **TCP 8009** per il connector usato da Mod_JK (vedi avanti), oltre alle porte **2100 TCP** e **9157 TCP** per :?:
Le pagine di amministrazione web di Tomcat sono fornite dai seguenti pacchetti
yum install tomcat5-webapps
yum install tomcat5-admin-webapps
Per accedere a **//Status//** e **//Tomcat Manager//** è richiesto il ruolo di **manager**, per accedere a **//Tomcat Administration//** è richiesto il ruolo di **admin**. I ruoli sono definiti nel file **''$CATALINA_HOME/conf/tomcat-users.xml''** (riavviare Tomcat dopo averlo modificato), ecco un esempio:
Tomcat produce il suo log in **''/var/log/tomcat5/catalina.out''**.
===== Geonetwork =====
Un'installazione di **[[http://geonetwork-opensource.org/|Geonetwork]]** per un ambiente di produzione richiede **Java**, **Apache**, **Tomcat** e **Mod_JK**. Un po' di istruzioni su come **[[http://geonetwork-opensource.org/documentation/how-to/installing-geonetwork-2-1-0-on-ubuntu|installare Geonetwork su Ubuntu]]**.
Scaricato l'installer **[[http://mesh.dl.sourceforge.net/sourceforge/geonetwork/geonetwork-install-2.2.0.jar|geonetwork-install-2.2.0.jar]]**, si tratta purtroppo di un installer grafico che richiede X. Dovrebbe poter funzionare via SSH con l'**X11Forwarding** (verificare di aver installato i font per Java).
java -jar geonetwork-install-2.2.0.jar
Si è scelta come directory **''/usr/local/lib/geonetwork''**, le componenti installate sono:
* Core
* Sample metadata
* GeoServer web map server
* CSW 2.0.1 test client
Anche senza grafica è possibile replicare un'installazione fatta in precedenza: è sufficiente avere l'accortezza di salvare nell'ultimo passo dell'installazione un file xml di setup. Con tale file è possibile replicare l'installazione sulla nuova macchina:
java -jar geonetwork-install-2.2.0.jar geonetwork_install.xml
Geonetwork ha bisogno di un database, creato in PostgreSQL:
postgres=# CREATE DATABASE geonetwork OWNER geouser;
==== Configurare Tomcat ====
Geonetwork fornisce ben tre applicativi: **geonetwork**, **intermap** e **geoserver**, si deve informare Tomcat della loro presenza. In **''/etc/tomcat5/server.xml''** si aggiunge nella sezione **''%%%%''** i tre contesti:
Inoltre l'utente tomcat deve avere permesso di lettura/scrittura sulle directory delle webapps:
chown -R tomcat /usr/local/lib/geonetwork/web
In **''/etc/sysconfig/tomcat5''** si imposta ''JAVA_HOME'' e - tanto per non smentire la fama di baraccone insicuro di Tomcat+Java - si aggiungere a la direttiva ''TOMCAT5_SECURITY'':
JAVA_HOME="/usr/lib/jvm/jre"
export TOMCAT5_SECURITY=no
Con questa configurazione le applicazioni sono raggiungibili agli URL:
* **''%%http://localhost:8080/geonetwork/%%''**
* **''%%http://localhost:8080/intermap/%%''**
* **''%%http://localhost:8080/geoserver/%%''**
==== Configurare Mod_JK ====
Invece di usare il server http di Tomcat (sulla porta 8080) si vuole usare Apache (sulla porta 80), alcuni motivi per farlo sono spiegati nella **[[http://wiki.apache.org/tomcat/FAQ/Connectors#Q3|FAQ]]**. Per farlo è necessario un //connector// costituito dal modulo Apache **Mod_JK**.
Come per la maggior parte dei moduli Apache serve una direttiva per caricarlo ed alcune righe di configurazione (''in /etc/httpd/conf/httpd.conf''):
LoadModule jk_module modules/mod_jk.so
# Configuration for mod_jk.so.
JkWorkersFile /etc/tomcat5/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkShmFile /var/log/httpd/logs/jk-runtime-status
JkLogLevel info
Apache - tramite il modulo mod_jk - inoltra la richiesta ricevuta ad una istanza di Tomcat, tale istanza prende il nome di **worker**.
A noi basta definire un solo worker, lo chiameremo **ajp13** perché sarà conforme all'[[wp>Apache JServe Protocol]] versione 1.3. Le caratteristiche sono definite in **''/etc/tomcat5/workers.properties''**:
workers.tomcat_home=/var/lib/tomcat5/
workers.java_home=/usr/lib/jvm/java
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
Ci si aspetta quindi un'istanza di Tomcat (un server AJP) in ascolto sulla porta **8009 TCP**, controllare che in **''/etc/tomcat5/server.xml''** esista la relativa sezione **''''**.
==== Configurare Apache ====
Infine si configura Apache, definendo alcuni alias e collegando le richieste per quelle directory al worker. Per maggiore pulizia si può tenere queste direttive in un file separato **''/etc/httpd/conf.d/geonetwork.conf''**:
Alias /geonetwork /usr/local/lib/geonetwork/web/
JkMount /geonetwork/* ajp13
Alias /intermap /usr/local/lib/geonetwork/web/
JkMount /intermap/* ajp13
Alias /geoserver /usr/local/lib/geonetwork/web/
JkMount /geoserver/* ajp13
===== =====
Con questa configurazione le tre webapp rispondono direttamente agli URL:
* **''%%http://localhost/geonetwork/%%''**
* **''%%http://localhost/intermap/%%''**
* **''%%http://localhost/geoserver/%%''**
L'amministratore di Geonetwork ha per impostazione predefinita username **admin** e password **admin**.
Ovviamente non è necessario usare gli script **''start-geonetwork.sh''** e **''stop-geonetwork.sh''**, che servono ad eseguire il server web Jetty fornito in boundle. Nel nostro caso Jetty andrebbe in conflitto con Tomcat.
===== Geoserver War =====
L'installazione di **Geonetwork** fatta su Apache+Tomcat fornisce anche **Geoserver**, ma in **versione 1.5.3**.
Quindi si installa Geoserver 1.7 da [[http://downloads.sourceforge.net/geoserver/geoserver-1.7.1a-war.zip|geoserver-1.7.1a-war.zip]] (un web archive non è altro che un archivio zip, in questo caso zippato a sua volta). Il deploy in Tomcat avviene con suffisso **''/geoserver171a''**, per non disturbare geoserver 1.5.
mkdir /usr/local/lib/geoserver171a
cd /usr/local/lib/geoserver171a
unzip /root/download/geoserver/geoserver.war
chow -R tomcat:tomcat /usr/local/lib/geoserver171a
Si aggiunge il nuovo contesto Tomcat in **''/etc/tomcat5/server.xml''** (sezione ''%%%%''):
Si aggiunge un alias e un connessione a Tomcat in **''/etc/httpd/conf.d/geoserver171a.conf''** (configurazione di Apache):
Alias /geoserver171a /usr/local/lib/geoserver171a/
JkMount /geoserver171a/* ajp13
Dopo aver riavviato Apache e Tomcat l'applicativo è disponibile ad entrambi gli indirizzi:
* **''%%http://localhost:8080/geoserver171a%%''**
* **''%%http://localhost/geoserver171a%%''**