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/
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
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.
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
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
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
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.
Testen ob Mapnik nach den Vorbereitungen funktioniert. Dazu Pythoninterpreter starten und Mapnik importieren.
python >>> import mapnik >>>
Wenn ja: Beenden mit Ctrl-D.
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
Ä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= <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and <a href=\"http://wiki.openstreetmap.org/wiki/Contributors\">contributors</a>, <a href=\"http://opendatacommons.org/licenses/odbl/\">ODbL</a> 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
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
Ergänzung der httpd.conf
<virtualhost *:80> 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 </virtualhost>
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
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: Tar-Archiv