[[TOC]]
= Installation of GIS Tools on Linux =
Suggest these CLI tools for data manipulation:
* GDAL's ogr2ogr, etc
* [http://mpa.itc.it/rs/srtm/srtm_generate_hdr.sh Convert SRTM to GeoTIFF]
== PostGIS ==
[http://postgis.refractions.net PostGIS] adds Spatial storage to [wiki:InstallationGuidelinesPostgreSQL PostgreSQL]
* alternatively these can be installed as part of [http://opengeo.org/community/suite/download/ OpenGeoSuite]
NB PostGIS in Debian Lenny is rather old - recommend using the version in Squeeze
{{{
apt-get install postgresql-8.4-postgis
su postgres
createdb gis
createlang plpgsql gis
psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
}}}
* Add Spherical Mercator projection (900913. See http://www.cadmaps.com/gisblog/?p=81 for 54004):
{{{
psql gis
INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0], PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs');
}}}
* Allow remote access:
{{{
passwd postgres
vim /etc/postgresql/8.4/main/postgresql.conf
listen_addresses = '*'
vim /etc/postgresql/8.4/main/pg_hba.conf
host all all my.ip.add.ress/24 md5
/etc/init.d/postgresql restart
vim /etc/iptables.rules
-A INPUT -p tcp --dport 5432 -j ACCEPT
reboot
su postgres
createuser -s -P gis
}}}
(Don't do remote access as 'postgres' - to do so means can't simply access psql via 'su postgres')
* Adjust postgresql.conf for performance relative to resources available (http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server)
{{{
vim /etc/sysctl.conf
# Increase Shared Memory available for PostgreSQL
# 512Mb
kernel.shmmax = 279134208
# 1024Mb (may need more)
#kernel.shmmax = 536870912
kernel.shmall = 2097152
sysctl -w kernel.shmmax=58720256
sysctl -w kernel.shmall=2097152
vim /etc/postgresql/8.4/main/postgresql.conf
# This default is probably ok
# adjust upward _or_ add a connection pooling layer like pgpool if running out of connections for clients
max_connections = 100
# shared_buffers = 24MB
# Ideal is if all frequently accessed indexes and table rows can fit in here - this is often unrealistic
# setting too high relative to system resources can be detrimental to the system.
# At the high end this should be no more than 1/4 to 1/3 the available memory (ie that which is not being used by the OS or other processes).
# Values suggested are quite conservative, so you can push them up a bit if there are resources available for it
# but absolutely no more than 1/3 available memory.
# 512Mb system suggest starting at:
shared_buffers = 56MB
# 1024Mb system suggest starting at:
#shared_buffers = 160MB
# effective_cache_size = 128MB
# 512Mb system suggest starting at:
effective_cache_size = 256MB
# 1024Mb system suggest starting at:
#effective_cache_size = 512MB
#work_mem = 1MB
# This is a per sort setting, so setting this too high with a high number of max_connections can be bad.
# If the database load turns out to have a lot of sorting and not a lot of separate connections, you should increase this
# and drop the max_connections.
# 512Mb system suggest starting at:
work_mem = 2MB
# 1024Mb system suggest starting at:
#work_mem = 4MB
# As you get more memory in the system, moving this up can be quite useful if you notice vacuum processes taking forever.
maintenance_work_mem = 16MB
/etc/init.d/postgresql restart
}}}
== Java ==
{{{
vim /etc/apt/sources.list
# for sun-java packages in unstable
deb http://ftp.debian.org/debian/ unstable non-free
deb-src http://ftp.debian.org/debian/ unstable non-free
apt-get update
apt-get install sun-java6-jdk
vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-6-sun
export JAVA_HOME
}}}
or:
* [http://java.sun.com/javase/downloads/widget/jdk6.jsp Download the JDK] & install it:
{{{
cd /usr/local
sh ~/jdk-6u21-linux-i586.bin
ln -sf /usr/local/jdk1.6.0_21 /usr/local/java
vim /etc/profile
JAVA_HOME=/usr/local/java
export JAVA_HOME
}}}
Install the JAI extensions (improves performance for !GeoServer WMS):
32-bit:
{{{
cd /usr/lib/jvm/java-6-sun
wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-i586-jdk.bin
wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-i586-jdk.bin
sh jai-1_1_3-lib-linux-i586-jdk.bin
# accept license
export _POSIX2_VERSION=199209
sh jai_imageio-1_1-lib-linux-i586-jdk.bin
# accept license
rm jai-1_1_3-lib-linux-i586-jdk.bin
rm jai_imageio-1_1-lib-linux-i586-jdk.bin
}}}
64-bit:
{{{
cd /usr/lib/jvm/java-6-sun
wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64-jdk.bin
wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-amd64-jdk.bin
sh jai-1_1_3-lib-linux-amd64-jdk.bin
# accept license
export _POSIX2_VERSION=199209
sh jai_imageio-1_1-lib-linux-amd64-jdk.bin
# accept license
rm jai-1_1_3-lib-linux-amd64-jdk.bin
rm jai_imageio-1_1-lib-linux-amd64-jdk.bin
}}}
== Apache Tomcat ==
[http://tomcat.apache.org Tomcat] is the recommended way to deploy Java applications
* [http://www.debianadmin.com/how-to-setup-apache-tomcat-55-on-debian-etch.html Debian]:
{{{
apt-get install sun-java6-jdk tomcat5.5 libapache2-mod-jk
a2enmod jk
vim /etc/libapache2-mod-jk/workers.properties
workers.java_home=/usr/lib/jvm/java-6-sun
# Needed for GeoServer-2.1-beta1 (2.0.2 was fine, but maybe it's because of running both at once?)
vim /etc/default/tomcat5.5
JAVA_OPTS="-Djava.awt.headless=true -Xmx256M -XX:MaxPermSize=128m"
vim /etc/init.d/tomcat5.5
TOMCAT5_SECURITY=no
/etc/init.d/tomcat5.5 restart
}}}
Enable access to !GeoServer on Port 80:
{{{
a2enmod proxy
a2enmod proxy_ajp
a2enmod proxy_http
vim /etc/apache2/mods-enabled/proxy.conf
Deny from all
Allow from localhost
vim /etc/apache2/sites-available/geo
ServerName geo.eden.sahanafoundation.org
ServerAdmin webmaster@sahanafoundation.org
DocumentRoot /var/www
ProxyPreserveHost on
RewriteEngine On
# These 2 lines should be disabled in Production
RewriteRule ^/geoserver/(.*)$ ajp://localhost:8009/geoserver/$1 [P]
ProxyPassReverse /geoserver ajp://localhost:8009/geoserver/
RewriteRule ^/geoserver/wfs ajp://localhost:8009/geoserver/wfs [P]
ProxyPassReverse /geoserver/wfs ajp://localhost:8009/geoserver/wfs
RewriteRule ^/geoserver/wms ajp://localhost:8009/geoserver/wms/ [P]
ProxyPassReverse /geoserver/wms ajp://localhost:8009/geoserver/wms/
RewriteRule ^/geowebcache/(.*)$ ajp://localhost:8009/geowebcache/$1 [P]
ProxyPassReverse /geowebcache ajp://localhost:8009/geowebcache/
ErrorLog /var/log/apache2/geo_error.log
LogLevel warn
CustomLog /var/log/apache2/geo_access.log combined
a2ensite geo
/etc/init.d/apache2 restart
}}}
== WMS/WFS ==
=== [http://geoserver.org GeoServer] ===
(recommended)
{{{
apt-get install unzip
wget http://downloads.sourceforge.net/project/geoserver/GeoServer/2.0.2/geoserver-2.0.2-war.zip
cd /var/lib/tomcat5.5/webapps
unzip ~/geoserver-2.0.2-war.zip
/etc/init.d/tomcat5.5 restart
vim /etc/iptables.rules
-A INPUT -p tcp --dport 8180 -j ACCEPT
reboot
}}}
http://geo.host.domain:8180/geoserver
or
{{{
wget http://downloads.sourceforge.net/project/geoserver/GeoServer/2.0.2/geoserver-2.0.2-bin.zip
cd /usr/local
unzip ~/geoserver-2.0.2-bin.zip
ln -sf /usr/local/geoserver-2.0.2 /usr/local/geoserver
vim /etc/profile
GEOSERVER_HOME=/usr/local/geoserver
export GEOSERVER_HOME
vim /etc/rc.local
/usr/local/geoserver/bin/startup.sh &
vim /etc/iptables.rules
-A INPUT -p tcp --dport 8080 -j ACCEPT
reboot
}}}
http://geo.host.domain:8080/geoserver
Configure:
* [wiki:UserGuidelinesGISData#GeoServer]
* [http://docs.geoserver.org/stable/en/user/production/index.html Production Performance]
=== [http://mapserver.org MapServer] ===
* [http://www.tinyows.org TinyOWS] can complement this for WFS-T
== Printing ==
For Printing TMS layers, need to compile the Trunk version of the [http://www.mapfish.org/doc/print/ MapFish Print Module] & then serve the resultant .war with [http://tomcat.apache.org Tomcat]:
1. Ensure that {{{JAVA_HOME}}} points to a JDK.
2. Download & build source:
{{{
svn checkout http://www.mapfish.org/svn/mapfish/print/trunk/
cd trunk
./gradlew build
}}}
3. Configure Tomcat
{{{
vim /etc/tomcat5.5/policy.d/04webapps.policy
permission java.io.FilePermission "/var/lib/tomcat5.5/webapps/print-servlet-1.2-SNAPSHOT/WEB-INF/classes/logging.properties", "read";
/etc/init.d/tomcat5.5 restart
vim /etc/apache2/sites-available/print
ln -s /etc/apache2/sites-available/print /etc/apache2/sites-enabled/print
/etc/init.d/apache2 restart
}}}
4. Copy the WAR file to your %WEBAPPS% directory:
{{{
cp trunk/build/libs/print-servlet-1.2-SNAPSHOT.war /var/lib/tomcat5.5/webapps
}}}
5. (re)Start Tomcat
6. Configure the Map URL for Eden to:
* http://host.domain:8180/print-servlet-1.2-SNAPSHOT/pdf/
7. Configure %WEBAPPS%\print-servlet-1.2-SNAPSHOT\config.yaml: http://www.mapfish.org/doc/print/configuration.html
Printing can also be done within !GeoServer:
* http://geoserver.org/display/GEOS/Printing+2.0+HOWTO
However this version doesn't yet support TMS layers, like !OpenStreetMap.
{{{
wget http://geoserver.org/download/attachments/20938936/printing-2.0.x.zip
wget http://geoserver.org/download/attachments/20938936/printing-data-2.0.x.zip
cd /usr/local/geoserver-2.0.2/webapps/geoserver/WEB-INF/lib
unzip ~/printing-2.0.x.zip
cd /usr/local/geoserver-2.0.2/data_dir
unzip ~/printing-data-2.0.x.zip
/usr/local/geoserver/bin/shutdown.sh
/usr/local/geoserver/bin/startup.sh &
}}}
* Configure by editing {{{/usr/local/geoserver-2.0.2/data_dir/printing/config.yaml}}} according to [http://trac.mapfish.org/trac/mapfish/wiki/PrintModuleServer Documentation]
=== Print to Image ===
* http://trac.mapfish.org/trac/mapfish/ticket/161
== Cache ==
* http://mapproxy.org
* http://mapproxy.org/docs/latest/install.html
{{{
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar zxvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py install
cd ..
wget http://pyproj.googlecode.com/files/pyproj-1.8.6.tar.gz
tar zxvf pyproj-1.8.6.tar.gz
cd pyproj-1.8.6
python setup.py install
cd ..
wget http://pyyaml.org/download/pyyaml/PyYAML-3.09.tar.gz
tar zxvf PyYAML-3.09.tar.gz
cd PyYAML-3.09
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.1.1.tar.gz
tar zxvf Jinja2-2.1.1.tar.gz
cd Jinja2-2.1.1
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/f/flup/flup-1.0.3.dev-20100525.tar.gz
tar zxvf flup-1.0.3.dev-20100525.tar.gz
cd flup-1.0.3.dev-20100525
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/P/Paste/Paste-1.7.4.tar.gz
tar zxvf Paste-1.7.4.tar.gz
cd Paste-1.7.4
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/P/PasteDeploy/PasteDeploy-1.3.3.tar.gz
tar zxvf PasteDeploy-1.3.3.tar.gz
cd PasteDeploy-1.3.3
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/P/PasteScript/PasteScript-1.7.3.tar.gz
tar zxvf PasteScript-1.7.3.tar.gz
cd PasteScript-1.7.3
python setup.py install
cd ..
wget http://pypi.python.org/packages/source/M/MapProxy/MapProxy-0.8.4.tar.gz
tar zxvf MapProxy-0.8.4.tar.gz
cd MapProxy-0.8.4
python setup.py install
cd ..
cd /home
paster create -t mapproxy_conf mapproxy
}}}
* http://code.google.com/p/modwsgi/wiki/IntegrationWithPylons
{{{
wget http://pypi.python.org/packages/source/C/ConcurrentLogHandler/ConcurrentLogHandler-0.8.4.tar.gz
tar zxvf ConcurrentLogHandler-0.8.4.tar.gz
cd ConcurrentLogHandler-0.8.4
python setup.py install
cd ..
mkdir /var/www/.python-eggs
chown www-data /var/www/.python-eggs
vim /home/mapproxy/mapproxy.py
import os, sys
from paste.script.util.logging_config import fileConfig
BASEDIR = os.path.dirname(__file__)
INIFILE = os.path.join(BASEDIR, 'etc', 'config.ini')
LOGFILE = os.path.join(BASEDIR, 'etc', 'log_deploy.ini')
sys.path.append(BASEDIR)
os.environ['PYTHON_EGG_CACHE'] = '/var/www/.python-eggs'
fileConfig( LOGFILE )
from paste.deploy import loadapp
application = loadapp('config:%s' % INIFILE)
vim /etc/apache2/sites-available/proxy
ServerName proxy.sahanafoundation.org
ServerAdmin webmaster@sahanafoundation.org
WSGIScriptAlias / /home/mapproxy/mapproxy.py
WSGIDaemonProcess mapproxy user=www-data group=www-data home=/home/mapproxy processes=2 maximum-requests=100
Order deny,allow
Allow from all
WSGIProcessGroup mapproxy
ErrorLog /var/log/apache2/proxy_error.log
LogLevel warn
CustomLog /var/log/apache2/proxy_access.log combined
cd /etc/apache2/sites-enabled
ln -s ../sites-available/proxy
/etc/init.d/apache2 force-reload
}}}
* http://mapproxy.org/docs/latest/configuration.html
{{{
}}}
* http://tilecache.org
* http://github.com/migurski/GridTile
* http://geowebcache.org
* e.g. included as part of [http://opengeo.org/community/suite/download/ OpenGeoSuite]
----
[wiki:UserGuidelinesGISData]