Raspberrypi.osm-tile-server

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
  • Ziel ist ein Tile-Server "Deutschland" aufzusetzen, dieser soll per http://tile.host.domain/z=&x=&y= PNG Kacheln für den OrgaMon liefern
  • Bestandteile sind
    • Rohdaten der Geofabrik Karlsruhe Frederik Ramm
    • postgresql Datenbank als Datenknecht
    • osm2pgsql als Befüller der Datenbank
    • mapnik macht aus XML -> PNG
    • tirex konnektiert auf die Datenbank macht aus x,y,z -> XML und gibt es an mapnik


Web-Request Tile "x|y|z"
 |
 v
apache2 (Webserver die Anfragen annimmt und PNG ausliefert)
 |
 v
mod_tile (Apache2 Modul das X,Y,Z Tiles liefert)
 |
 v
tirex (dämon der Auftäge zur Tile-Generierung annimmt)
 |
 v
mapnik (Bibliothek die XML nach Grafik wandelt)
 |
 v
postgresql (Datenbank-Server)
 |
 v
filesystem


System-Voraussetzungen

  • Raspberry Pi 4 B 2 GB mit Stretch Lite (ohne Desktop)
    • oder
  • Raspberry Pi 4 B 4 GB mit Desktop
  • an USB gekoppelte Festplatte (ab 100 GB) oder 128 GB Micro SD Karte

Mount

  • per USB erstmalig angekoppelte SSD erscheinen oft als "sda", das könnte sich aber ändern wenn weitere USB Sticks oder SSDs ins Spiel kommen
  • jede Partition hat jedoch einen eindeutigen "id" mit Hilfe dessen man mounten kann
  • joe /etc/systemd/system/srv-osm.mount
[Unit]
Description=srv-osm

[Mount]
What=/dev/disk/by-id/usb-KINGSTON_SKC380S3240G_20190510-0:0-part1
Where=/srv/osm

[Install]
WantedBy=local-fs.target
  • systemctl start srv-osm.mount
  • systemctl enable srv-osm.mount

Vorbereitungen

  • Schliesse über den USB Port eine SSD an (128 GB ausreichend!)
  • Erstelle darauf ein ext4 Dateisystem und mounte es nach /srv/osm

erhöhe Swap auf 2GB

/etc/init.d/dphys-swapfile stop
joe /etc/dphys-swapfile
 CONF_SWAPSIZE=2048
/etc/init.d/dphys-swapfile start

reduziere Memory-Split auf 16 MB

raspi-config
 7 Advanced Options
   A3 Memory Split
    -> 16 MB
ein Reboot ist nötig

hole Deutschland

wget https://download.geofabrik.de/europe/germany-latest.osm.pbf

2 Stunden Downloadzeit / 4 GB belegt

hole den Karten-Style

  • mapnik (die Ausbelichtungs Bibliothek) benötigt ein style.xml, darin werden Fonts und Grafiken und Shapes referenziert die im Dateisystem liegen müssen
  • im Style sind auch SQL Filter und so manch anderes integriert
  • Fonts ist einfach nur eine Pfadangabe die korrigiert werden muss
  • styles sind sehr komplex, hier muss einiges beachtet werden.
  • So ein "Style.xml" kann schon mal 4 MByte gross sein


apt install openstreetmap-carto fonts-noto ttf-unifont
#apt install npm
#npm install -g carto
cd /usr/share/openstreetmap-carto-common
#
# Leider muss get-shapefiles.py auf neue Downloadquellen angepasst werden
# -> siehe Repository OrgaMon-tile-server
#
./get-shapefiles.py

# openstreetmap-carto liefert gleich zwei mal einen compilierten style.xml mit
# die Dateien sind aber identisch
/usr/share/openstreetmap-carto/style.xml
/usr/share/openstreetmap-carto-common/style.xml


System microSD: 5,1 GB belegt


nicht funktionierende Alternative

# git clone https://github.com/giggls/openstreetmap-carto-de.git
# cd openstreetmap-carto-de
# make
  • der "style" ist leider nicht von der Datenbank getrennt, also der Style verändert auch die Datenbank

postgres

apt install postgresql-postgis


Tuning von PostgreSQL

Frederik Ramm hat die PostgreSQL-Optimierung dokumentiert auf http://www.geofabrik.de/media/2012-09-08-osm2pgsql-performance.pdf

  • Ich gehe hier mal vom Standard-Pfad aus:
systemctl stop postgresql
joe /etc/postgres/11/main/postgresql.conf

 shared_buffers = 32MB
 maintenance_work_mem = 32MB
 fsync = off
 random_page_cost = 1.1

systemctl start postgresql


richte eine neues Datenbank-Ablagestelle ein

 #
 # Mehr information hier:
 #
 https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-16-04
 #
 # schneller Weg hier:
 #
 cd /srv/osm
 systemctl stop postgresql
 mv /var/lib/postgresql/11/main .
 mv main db
 joe /etc/postgresql/11/main/postgresql.conf
  data_directory = '/srv/osm/db'
 systemctl start postgresql

erstelle die Datenbank "gis"

sudo -u postgres createdb gis
sudo -u postgres psql gis -c "CREATE EXTENSION postgis";
sudo -u postgres psql gis -c "CREATE EXTENSION hstore";
sudo -u postgres psql gis -c "GRANT ALL ON DATABASE gis TO tirex";


# optional "Kontrolle"
#
#
sudo -u postgres psql gis
SELECT name, default_version,installed_version FROM pg_available_extensions where installed_version is not null;
\q

Berechtige tirex

sudo -u postgres psql
postgres=# CREATE ROLE tirex LOGIN;
CREATE ROLE
postgres=# GRANT SELECT ON DATABASE gis TO tirex;
ERROR:  invalid privilege type SELECT for database
postgres=# GRANT ALL ON DATABASE gis TO tirex;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO tirex;

importiere Deutschland (osm2pgsql)

  • apt install screen osm2pgsql
#
# die folgendes Aktion geht sehr lange - ev. macht man das in einem screen!
#
# sudo -u postgres osm2pgsql --slim --username postgres --unlogged -I -C 200 --database gis germany-latest.osm.pbf
cp ~/openstreetmap-carto/openstreetmap-carto.* .
sudo -u postgres osm2pgsql --slim --unlogged -I -C 200 -G --hstore --style openstreetmap-carto.style --tag-transform-script openstreetmap-carto.lua -d gis germany-latest.osm.pbf


#
# Versuch mit Liechtenstein
#
sudo -u postgres osm2pgsql --slim --unlogged -I -C 200 -G -S hstore-only.style --tag-transform-script openstreetmap-carto.lua -d osm ../liechtenstein-latest.osm.pbf 
#
# 2. Versuch mit Liechtenstein
#
sudo -u postgres osm2pgsql --hstore --slim --unlogged -C 200 -d gis liechtenstein-latest.osm.pbf

16 Stunden Rechenzeit / 77 GB belegt

mapnik


apt install mapnik-doc mapnik-reference mapnik-utils mapnik-vector-tile

mod_tile

https://wiki.openstreetmap.org/wiki/Mod_tile#Install_mod_tile_From_Source


apt install python-mapnik autoconf apache2-dev apache2-utils apache2 git
git clone https://github.com/openstreetmap/mod_tile
cd mod_tile
./autogen.sh
./configure
make
make install
make install-mod_tile
ldconfig


  • Nun ist mod_tile.so in /usr/lib/apache2/modules abgelegt
  • Wir müssen es im Apache Webserver noch laden
bash -c "echo 'LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so' > /etc/apache2/mods-available/tile.load"
a2enmod tile
systemctl restart apache2

tirex

https://wiki.openstreetmap.org/wiki/Tirex


apt install libipc-sharelite-perl libjson-perl libgd-gd2-perl libwww-perl

System microSD: 4,6 GB belegt

cd /srv/osm
git clone https://github.com/openstreetmap/tirex
cd tirex
make
make install
#
# tirex can not be run as root, create a tirex user
#
addgroup tirex
adduser --system --ingroup tirex tirex

#
# mode_tile will open "/var/lib/tirex/modtile.sock" 
#
mkdir /var/lib/tirex
chown tirex /var/lib/tirex
chgrp tirex /var/lib/tirex

#
# Log Verzeichnis anlegen
#
mkdir /var/log/tirex
chmod 666 /var/log/tirex
#
# noch'n socket, Sinn hab ich vergessen
#
mkdir /var/run/tirex
chmod 777 /var/run/tirex

#
# 2 Services
#
cp debian/*.service /etc/systemd/system
 
cd /etc/tirex/renderer
#
# disable unused Tile-Provider
#
rm wms.conf
rm -R wms
rm openseamap.conf
rm -R openseamap/
rm mapserver.conf
rm -R mapserver/
joe /etc/tirex/renderer/mapnik/osm.conf
 #
 # Zentrales Style Element
 #
 name=osm
 mapfile=/usr/share/openstreetmap-carto/style.xml
 tiledir=/srv/osm
joe /etc/tirex/renderer/mapnik.conf
 fontdir=/usr/share/fonts
 fontdir_recurse=1


joe /etc/systemd/system/tirex-backend-manager.service
 User=postgres
  • Test
tirex-batch map=osm z=18 x=137177 y=90017

Unklare Dinge

carto nik4

  • Ist das wirklich notwendig?
apt install openstreetmap-carto nik4

Links