====== 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%%''**