Raspberrypi.osm-tile-server: Unterschied zwischen den Versionen
Root (Diskussion | Beiträge) |
Root (Diskussion | Beiträge) |
||
(23 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Installation eines eigenen "Tile"-Servers. Also eines Kartenlieferanten im PNG-Grafikformat über das HTTP-Protokoll. Es is nativ kompatibel zu den "online" Tile Servern des OSM-Projektes. | |||
{| | |||
|[[Datei:2143-1406.png]]<br>OpenStreetMap | |||
|[[Datei:google-2143-1406.png]]<br>google | |||
|[[Datei:Local-1406.png]]<br>openSUSE 2012 | |||
|[[Datei:Raspberry-pi-tile-1406.png]]<br>Raspberry Pi 2020 | |||
|} | |||
Das Bild zeigt 4 Versionen eines einzelnen Tile (=Kachel) in der Zoom-Stufe 12.Über einen typischen Tile-Server würde man genau diese Kachel über folgende URL erhalten: | |||
* OpenStreetMap: https://tile.openstreetmap.org/12/2143/1406.png | |||
* Google: https://mt0.google.com/vt/x=2143&y=1406&zoom=5 | |||
** Man beachte bei Google den invertierten zoom-Parameter, zoom=17-z | |||
OrgaMon legt diese Kachel, je nach Provider, mit dem Dateinamen ~Provider~-12-2143-1406.png im Kartenpfad ab (im Moment sind die Provider "local-", "google-" und "osm-"), eine Kachel wird auf diese Art immer nur einmal angefragt. | |||
== Funktionsweise == | |||
[[Datei:Linux-osm-1.png]] | |||
So einen Tile-Server zu installieren ist gar nicht so einfach: Das Gesamtkunstwerk basiert auf einigen Paketen. Die rechte Seite der Grafik deutet den ganzen Konfigurationsaufwand der einzelnen Dienste an. | |||
* Ziel ist ein Tile-Server "Deutschland" aufzusetzen, dieser soll per http://tile.host.domain/z=&x=&y= PNG Kacheln für den OrgaMon liefern | * Ziel ist ein Tile-Server "Deutschland" aufzusetzen, dieser soll per http://tile.host.domain/z=&x=&y= PNG Kacheln für den OrgaMon liefern | ||
** https://www.wikiwand.com/de/OpenStreetMap#/Server | ** https://www.wikiwand.com/de/OpenStreetMap#/Server | ||
Zeile 5: | Zeile 33: | ||
** postgresql Datenbank als Datenknecht | ** postgresql Datenbank als Datenknecht | ||
** osm2pgsql als Befüller der Datenbank | ** osm2pgsql als Befüller der Datenbank | ||
** mapnik macht aus XML -> PNG | ** mapnik-Bibliothek macht aus XML -> PNG | ||
** tirex konnektiert auf die Datenbank macht aus x,y,z -> XML und gibt es an mapnik | ** tirex konnektiert auf die Datenbank macht aus x,y,z -> XML und gibt es an mapnik | ||
Zeile 28: | Zeile 56: | ||
v | v | ||
filesystem | filesystem | ||
== System-Voraussetzungen == | == System-Voraussetzungen == | ||
* Raspberry Pi 4 B | * Raspberry Pi 4 B mit 4 GB und Stretch Lite (ohne Desktop) | ||
* an USB gekoppelte Festplatte (ab 100 GB) oder 128 GB Micro SD Karte | * an USB gekoppelte Festplatte (ab 100 GB) oder 128 GB Micro SD Karte | ||
Zeile 82: | Zeile 107: | ||
wget https://download.geofabrik.de/europe/germany-latest.osm.pbf | wget https://download.geofabrik.de/europe/germany-latest.osm.pbf | ||
{{Achtung|2 Stunden Downloadzeit / | {{Achtung|2 Stunden Downloadzeit / 3,1 GB belegt}} | ||
== hole den Karten-Style == | == hole den Karten-Style == | ||
Zeile 115: | Zeile 140: | ||
== postgres == | == postgres == | ||
Zeile 149: | Zeile 163: | ||
=== richte eine | === richte eine neue Datenbank-Ablagestelle ein === | ||
* das Standard-Verzeichnis für PostgreSQL würde überlaufen, wir müssen es auf die SSD verschieben | |||
# | # | ||
Zeile 175: | Zeile 191: | ||
# | # | ||
# optionale "Kontrolle" | |||
# | # | ||
sudo -u postgres psql gis | sudo -u postgres psql gis | ||
Zeile 182: | Zeile 198: | ||
\q | \q | ||
=== | === berechtige User tirex === | ||
sudo -u postgres psql | sudo -u postgres psql gis | ||
# CREATE ROLE tirex LOGIN; | |||
# GRANT SELECT ON ALL TABLES IN SCHEMA public TO tirex; | |||
# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO tirex; | |||
* not work: GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO tirex; | |||
* not work: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user; | |||
* | |||
# | # | ||
# | # step by step as user postgres, if nothing helps | ||
# | # | ||
GRANT SELECT ON TABLE planet_osm_rels to tirex; | |||
GRANT SELECT ON TABLE planet_osm_point to tirex; | |||
GRANT SELECT ON TABLE planet_osm_line to tirex; | |||
GRANT SELECT ON TABLE planet_osm_polygon to tirex; | |||
GRANT SELECT ON TABLE planet_osm_roads to tirex; | |||
GRANT SELECT ON TABLE planet_osm_nodes to tirex; | |||
== importiere Deutschland (osm2pgsql) == | |||
* <code>apt install screen osm2pgsql</code> | |||
# | # | ||
# | # pbf -> Database | ||
# | # | ||
sudo -u postgres osm2pgsql --hstore --slim --unlogged -C 200 -d gis | sudo -u postgres osm2pgsql --hstore --slim --unlogged -C 200 -d gis germany-latest.osm.pbf | ||
{{Achtung|15 Stunden Rechenzeit / 104 GB belegt}} | {{Achtung|15 Stunden Rechenzeit / 104 GB belegt}} | ||
Zeile 279: | Zeile 292: | ||
mkdir /var/log/tirex | mkdir /var/log/tirex | ||
chmod 666 /var/log/tirex | chmod 666 /var/log/tirex | ||
# | # | ||
Zeile 309: | Zeile 316: | ||
mapfile=/usr/share/openstreetmap-carto/style.xml | mapfile=/usr/share/openstreetmap-carto/style.xml | ||
tiledir=/srv/osm | tiledir=/srv/osm | ||
minz=0 | |||
maxz=18 | |||
joe /etc/tirex/renderer/mapnik.conf | joe /etc/tirex/renderer/mapnik.conf | ||
fontdir=/usr/share/fonts | fontdir=/usr/share/fonts | ||
fontdir_recurse=1 | fontdir_recurse=1 | ||
* Test | * Test | ||
Zeile 322: | Zeile 328: | ||
tirex-batch map=osm z=18 x=137177 y=90017 | tirex-batch map=osm z=18 x=137177 y=90017 | ||
== | == OrgaMon-OSM Projekt-Status == | ||
=== openSuSE === | |||
* Nov. 2012: Kontaktaufnahme zu geofabrik.de mit der Bitte um Hilfe http://www.geofabrik.de/ | |||
* 22.11.2012: ich will einen neuen Versuch starten mit http://download.opensuse.org/repositories/Application:/Geo/openSUSE_12.2/x86_64/ | |||
* 22.11.2012: setzte einen neuen Server auf ... Schritte bis osm2pgsl | |||
* 23.11.2012: Dokumentation ... | |||
* 30.11.2012: Tile Server läuft (Ziel 1)! | |||
* 04.12.2012: Gegenprobe auf anderem/schwächerem Server (raib24) | |||
* 06.12.2012: Gegenprobe wohl wegen zu geringem Hauptspeicher (4 GByte) ein Fehlschlag | |||
* 29.04.2013: Gegenprobe auf stärkerem System (server) | |||
* 29.04.2013: läuft nicht, tirex+mapnik da fehlen config-Dateien | |||
* 18.07.2014: Server raib23, raib24 abgebaut | |||
* 18.07.2014: neuer Server aufgesetzt (openSUSE 13.1) neuer Versuch mit diesem Server ... | |||
=== Raspberry Pi === | |||
* 29.03.2020: Versuch mit einem Raspberry Pi 4 - 2 GB | |||
* 30.03.2020: neuer Import mit .style und .lua / Erfolg | |||
* 31.03.2020: ERROR "Cannot load any Mapnik styles", tirex kann mapnik nicht laden - da kein "style" gefunden wird | |||
* 01.04.2020: wir haben jetzt ein osm-de.xml, viele Datenbankprobleme | |||
* 03.04.2020: Versuch mit einem Raspberry Pi 4 - 4 GB | |||
* 05.04.2020: /tirex/tileserver.js liefert Liechtenstein-Tiles aus | |||
* 06.04.2020: /tirex/tileserver.js liefert Deutschland aus | |||
* 09.2020: Erneuter Versuch mit Pi 4 - 8 GB, Systemlaufwerk 120 GB NVME Drive via USB 3.0 | |||
== Links == | == Links == | ||
Zeile 335: | Zeile 360: | ||
* https://mg.guelker.eu/articles/2020/01/01/openstreetmap-printkarten/ | * https://mg.guelker.eu/articles/2020/01/01/openstreetmap-printkarten/ | ||
* https://osmdata.openstreetmap.de/data/ | * https://osmdata.openstreetmap.de/data/ | ||
* Boot from ssd | |||
** https://www.youtube.com/watch?v=AskGItLhESk | |||
** https://www.youtube.com/watch?v=zVhYvvrGhMU |
Aktuelle Version vom 12. August 2020, 11:18 Uhr
Installation eines eigenen "Tile"-Servers. Also eines Kartenlieferanten im PNG-Grafikformat über das HTTP-Protokoll. Es is nativ kompatibel zu den "online" Tile Servern des OSM-Projektes.
OpenStreetMap |
openSUSE 2012 |
Raspberry Pi 2020 |
Das Bild zeigt 4 Versionen eines einzelnen Tile (=Kachel) in der Zoom-Stufe 12.Über einen typischen Tile-Server würde man genau diese Kachel über folgende URL erhalten:
- OpenStreetMap: https://tile.openstreetmap.org/12/2143/1406.png
- Google: https://mt0.google.com/vt/x=2143&y=1406&zoom=5
- Man beachte bei Google den invertierten zoom-Parameter, zoom=17-z
OrgaMon legt diese Kachel, je nach Provider, mit dem Dateinamen ~Provider~-12-2143-1406.png im Kartenpfad ab (im Moment sind die Provider "local-", "google-" und "osm-"), eine Kachel wird auf diese Art immer nur einmal angefragt.
Funktionsweise
So einen Tile-Server zu installieren ist gar nicht so einfach: Das Gesamtkunstwerk basiert auf einigen Paketen. Die rechte Seite der Grafik deutet den ganzen Konfigurationsaufwand der einzelnen Dienste an.
- 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-Bibliothek 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 mit 4 GB und Stretch Lite (ohne 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 Option "7 Advanced Options" Option "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 / 3,1 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 |
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 neue Datenbank-Ablagestelle ein
- das Standard-Verzeichnis für PostgreSQL würde überlaufen, wir müssen es auf die SSD verschieben
# # 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";
# # optionale "Kontrolle" # sudo -u postgres psql gis SELECT name, default_version,installed_version FROM pg_available_extensions where installed_version is not null; \q
berechtige User tirex
sudo -u postgres psql gis # CREATE ROLE tirex LOGIN; # GRANT SELECT ON ALL TABLES IN SCHEMA public TO tirex; # GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO tirex;
- not work: GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO tirex;
- not work: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
# # step by step as user postgres, if nothing helps # GRANT SELECT ON TABLE planet_osm_rels to tirex; GRANT SELECT ON TABLE planet_osm_point to tirex; GRANT SELECT ON TABLE planet_osm_line to tirex; GRANT SELECT ON TABLE planet_osm_polygon to tirex; GRANT SELECT ON TABLE planet_osm_roads to tirex; GRANT SELECT ON TABLE planet_osm_nodes to tirex;
importiere Deutschland (osm2pgsql)
apt install screen osm2pgsql
# # pbf -> Database # sudo -u postgres osm2pgsql --hstore --slim --unlogged -C 200 -d gis germany-latest.osm.pbf
15 Stunden Rechenzeit / 104 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 # # 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 minz=0 maxz=18
joe /etc/tirex/renderer/mapnik.conf fontdir=/usr/share/fonts fontdir_recurse=1
- Test
tirex-batch map=osm z=18 x=137177 y=90017
OrgaMon-OSM Projekt-Status
openSuSE
- Nov. 2012: Kontaktaufnahme zu geofabrik.de mit der Bitte um Hilfe http://www.geofabrik.de/
- 22.11.2012: ich will einen neuen Versuch starten mit http://download.opensuse.org/repositories/Application:/Geo/openSUSE_12.2/x86_64/
- 22.11.2012: setzte einen neuen Server auf ... Schritte bis osm2pgsl
- 23.11.2012: Dokumentation ...
- 30.11.2012: Tile Server läuft (Ziel 1)!
- 04.12.2012: Gegenprobe auf anderem/schwächerem Server (raib24)
- 06.12.2012: Gegenprobe wohl wegen zu geringem Hauptspeicher (4 GByte) ein Fehlschlag
- 29.04.2013: Gegenprobe auf stärkerem System (server)
- 29.04.2013: läuft nicht, tirex+mapnik da fehlen config-Dateien
- 18.07.2014: Server raib23, raib24 abgebaut
- 18.07.2014: neuer Server aufgesetzt (openSUSE 13.1) neuer Versuch mit diesem Server ...
Raspberry Pi
- 29.03.2020: Versuch mit einem Raspberry Pi 4 - 2 GB
- 30.03.2020: neuer Import mit .style und .lua / Erfolg
- 31.03.2020: ERROR "Cannot load any Mapnik styles", tirex kann mapnik nicht laden - da kein "style" gefunden wird
- 01.04.2020: wir haben jetzt ein osm-de.xml, viele Datenbankprobleme
- 03.04.2020: Versuch mit einem Raspberry Pi 4 - 4 GB
- 05.04.2020: /tirex/tileserver.js liefert Liechtenstein-Tiles aus
- 06.04.2020: /tirex/tileserver.js liefert Deutschland aus
- 09.2020: Erneuter Versuch mit Pi 4 - 8 GB, Systemlaufwerk 120 GB NVME Drive via USB 3.0