==== Vorbereitung ====
== Betriebssystem ==
Getestet und durchgeführt auf einer SuSE 13.1 Installation.
Zusätzliches Software-Repository nötig:
http://download.opensuse.org/repositories/Application:/Geo/openSUSE_13.1/
== Pakete ==
* Postgres 9.2
* phpPgAdmin (optional)
* postgis
* Apache
* Mod_tile
* renderd
* mapnik
* osm2pgsql
* osmosis (optional: für Verschmelzung und bearbeitung von .pbf Dateien)
* subversion
==== Postgres ====
== Einrichtung ==
* TCP/IP aktivieren (Parameter -i )
* Postgres User anpassen:
* Home verschieben auf /srv/pgsql in .passwd
* Home anlegen
* Postgres initialisieren
* pg_hba.conf ggf anpassen
* Postmaster starten via YAST
* phpPgAdmin installieren
* AuthBasic aktivieren
* phpPgAdmin hat dazu einen eigene (!) Configdatei
* /etc/apache2/conf.d/phpPgAdmin.conf
* PHP vorbereiten:
* mcedit /etc/phpPgAdmin/config.inc.php
* host='localhost' eintragen
User anlegen und DBs initialisieren:
User: **osm**, Passwort: **sws23041616**
createuser -Pdsr osm
Anlegen der DBs: **osm** und **gis**.
createdb -O osm osm
createdb -O osm gis
== Tuning ==
Anpassen der Postgres.conf, Dauerparameter zur Leistungsoptimierung:
shared_buffers = 128MB
checkpoint_segments = 20
maintenance_work_mem = 256MB
work_mem = 256MB
autovacuum = off
Beschleunigung zum Dateneinlesen, aber auch dem Renderbetrieb:
fsync = off
synchronous_commit = off
full_pages_write = off
**Vorsicht**: Diese Einstellung ist im Produktivbetrieb bei einem Crash gefährlich! Nur belassen, wenn Postgres nicht für Life-speicherung von Kundendaten verwendet wird.
==== Postgis ====
Postgisfunktionen für **gis** anlegen:
psql -f /usr/share/postgresql92/contrib/postgis-2.1/postgis.sql -d gis
Spatialtabellen erzeugen:
psql -f /usr/share/postgresql93/contrib/postgis-2.1/spatial_ref_sys.sql --username=osm -d gis
ggf noch:
Mercatorprojektion importieren:
psql -f /usr/share/osm2pgsql/900913.sql -d gis
==== Daten ====
== Daten holen ==
Ganze Welt unter osm.org:
wget http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
Rohdaten zB unter Geofabrik:
wget http://download.geofabrik.de/europe/germany-latest.osm.pbf
Oder dann download der OSM-Daten von:
http://download.geofabrik.de
als ***.osm.pbf**
== Daten vorbereiten ==
Falls besondere Regionen erwünscht sind kann man mehrere Teil-*pbf verschmelzen mit **osmosis**
osmosis --read-pbf file1.osm.pbf --read-pbf file2.osm.pbf --read-pbf file3.osm.pbf --merge --merge --write-pbf result.osm.pbf
== Daten einlesen ==
Setup der DB
su osm
osm2pgsql -v --slim -W -d gis -C 8096 --style=/usr/share/osm2psql/default-style --number-processes 4 germany-latest.osm.pbf
Das **dauert!**
Anzahl Prozesse und Cache Größe bitte auf Rechner anpassen. Ggf. Versuche. optimieren.
==== Mapnik ====
== Funktionstest ==
Testen ob Mapnik nach den Vorbereitungen funktioniert. Dazu Pythoninterpreter starten und Mapnik importieren.
python
>>> import mapnik
>>>
Wenn ja: Beenden mit Ctrl-D.
== Stylesheets ==
Eigenes Verzeichnis im **osm**-Home erzeugen und Mapnik Zusatzsoftware laden.
su osm
cd ~
mkdir mapnik
cd mapnik
svn co http://svn.openstreetmap.org/applications/rendering/mapnik style
Dann //Coastlines// herunterladen. Dazu ist das eigene Shell-Skript gedacht. Doch zuerst muss ein import-Fehler korrigiert werden.
bunzip2 ist in /usr/bin
dann Download (dauert, sind ca 400MB)
./get-coastlines.sh
Dann muss der Style generiert werden:
python generate_xml.py osm.xml standard.xml --dbname gis --user osm --host localhost --password sws23041616 --port 5432
Das Ergebnis: **standard.xml** ist in einer alten (falschen) Version (0.8 oder so) und muss noch aktualisiert werden:
mv standard.xml standard-old.xml
upgrade_map_xml.py standard-old.xml standard.xml
==== Renderd ====
== Konfiguration ==
Ändern von /etc/renderd.conf:
[renderd]
socketname=/var/run/renderd/renderd.sock
num_threads=4
tile_dir=/var/lib/osm_tiles
stats_file=/var/run/renderd/renderd.stats
[mapnik]
plugins_dir=/usr/lib64/mapnik/input
font_dir=/usr/lib64/mapnik/fonts/
font_dir_recurse=1
[default]
URI=/osm_tiles/
TILEDIR=/var/lib/osm_tiles
XML=/home/osm/mapnik/style/standard.xml
HOST=localhost
TILESIZE=256
MINZOOM=0
MAXZOOM=18
TYPE=png image/png
DESCRIPTION=This is a description of the tile layer used in the tile json request
ATTRIBUTION= OpenStreetMap and contributors, ODbL
SERVER_ALIAS=http://www.servicecluster.net/
CORS=http://www.servicecluster.net
ASPECTX=1
ASPECTY=1
**Achtung:** das Tile-Vz muss heissen **/var/lib/osm_tiles** (Mapnik-Bug)
Um die Metatiles in /srv zu speichern bitte dort einen Softlink anlegen.
mkdir /srv/tiles
chown osm:users /srv/tiles
ln -s /srv/tiles /var/lib/osm_tiles
== Start Service ==
Renderd automatisch starten: Eintrag in **systemd**:
Dazu muss ein Socketverzeichnis angelegt werden, das kann nur root, aber die Rechte müssen aus **osm:users** lauten, den renderd soll unter osm laufen.
Dazu für systemd eine Cfg anlegen:
echo "d /run/renderd 0755 osm users - -" > /usr/lib/tmpfiles.d/renderd.conf
Startskript für renderd:
/usr/bin/start-renderd:
#!/bin/bash
if [ $1 == "start" ]
then
su - osm -c "/usr/bin/renderd start"
fi
if [ $1 == "stop" ]
then
su - osm -c "/usr/bin/renderd stop"
fi
Dann systemd - Service-Unit erzeugen;
In **/usr/lib/systemd/system/renderd.service**:
[Unit]
Description=Render Deamon to render OSM tiles
Requires=postgresql.target
After=postgresql.target
[Service]
Type=simple
ExecStart=/usr/bin/start-renderd start
ExecStop=/usr/bin/start-renderd stop
StandardOutput=syslog
SyslogIdentifier=%n
SyslogFacility=daemon
[Install]
WantedBy=default.target
Dann Link erzeugen in /etc/systemd/system
ln -s /usr/lib/systemd/system/renderd.service renderd.service
Einhängen und aktivieren mit:
systemctl daemon-reload
systemctl start renderd
==== Webserver ====
== Konfiguration ==
Ergänzung der **httpd.conf**
DocumentRoot /srv/www/htdocs/
ServerName www.servicecluster.net
ModTileRenderdSocketName /var/run/renderd/renderd.sock
ModTileRequestTimeout 5
ModTileMissingRequestTimeout 10
ModTileTileDir /var/lib/osm_tiles
LoadTileConfigFile /etc/renderd.conf
ModTileEnableStats On
ModTileMaxLoadOld 16
ModTileMaxLoadMissing 50
ModTileVeryOldThreshold 31536000000000
ModTileCacheDurationMax 604800
ModTileCacheDurationDirty 900
ModTileCacheDurationMediumZoom 13 86400
ModTileCacheLastModifiedFactor 0.20
ModTileEnableTileThrottling Off
ModTileEnableTileThrottlingXForward 0
ModTileThrottlingTiles 10000 1
ModTileThrottlingRenders 128 0.2
Erzeuge **conf.d/mod_tile.conf**
LoadTileConfigFile /etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 10
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
rcapache restart
== Slippy Map ==
Aufrufbar machen der Tiles zB. durch eine Slippy-Map. dazu verwendet ma **OpenStreetMap.js**
wget http://openlayers.org/dev/theme/default/style.css
wget http://www.openstreetmap.org/openlayers/OpenStreetMap.js
Beispielkram unter: {{:system:sysadmin:algerman.tar|Tar-Archiv}}