Raspberrypi.osm-tile-server
- 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
hole Deutschland
wget https://download.geofabrik.de/europe/germany-latest.osm.pbf
2 Stunden Downloadzeit / 4 GB belegt |
hole Fonts
apt install fonts-noto ttf-unifont
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 #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: 4 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";
# optional "Kontrolle" # # sudo -u postgres psql gis SELECT name, default_version,installed_version FROM pg_available_extensions where installed_version is not null; \q
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
System microSD: 4,5 GB belegt |
Speicher Sparmaßnahmen
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 Advanced Settings Memeory Split -> 16 MB
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 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 --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 # # # cd /var/run mkdir tirex chmod 777 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/ # # enable used Tile-Provider # mv mapnik.conf mapnik
- Test
tirex-batch map=osm z=18 x=137177 y=90017
Unklare Dinge
carto nik4
- Ist das wirklich notwendig?
apt install openstreetmap-carto nik4