==== 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}}