#!/bin/bash if [ "$#" -ne 1 ]; then echo "usage: " echo "commands:" echo " import: Set up the database and import /data/data.osm.pbf" echo " run: Runs Apache and renderd to serve tiles at /tile/{z}/{x}/{y}.png" echo "environment variables:" echo " THREADS: defines number of threads used for importing / tile rendering" echo " UPDATES: consecutive updates (enabled/disabled)" exit 1 fi set -x if [ "$1" = "import" ]; then # Download Luxembourg as sample if no data is provided if [ ! -f /data/data.osm.pbf ]; then if [ -z "$DOWNLOAD_PBF" ]; then echo "WARNING: No import file at /data/data.osm.pbf, so importing Luxembourg as example..." DOWNLOAD_PBF="https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf" DOWNLOAD_POLY="https://download.geofabrik.de/europe/luxembourg.poly" fi echo "INFO: Download PBF file: $DOWNLOAD_PBF" wget $WGET_ARGS "$DOWNLOAD_PBF" -O /data/data.osm.pbf if [ -n "$DOWNLOAD_POLY" ]; then echo "INFO: Download PBF-POLY file: $DOWNLOAD_POLY" wget $WGET_ARGS "$DOWNLOAD_POLY" -O /data/data.poly fi fi mkdir -p /var/lib/mod_tile chown -R renderer /data /var/lib/mod_tile if [ "$UPDATES" = "enabled" ]; then # determine and set osmosis_replication_timestamp (for consecutive updates) osmium fileinfo /data/data.osm.pbf > /var/lib/mod_tile/data.osm.pbf.info osmium fileinfo /data/data.osm.pbf | grep 'osmosis_replication_timestamp=' | cut -b35-44 > /var/lib/mod_tile/replication_timestamp.txt REPLICATION_TIMESTAMP=$(cat /var/lib/mod_tile/replication_timestamp.txt) # initial setup of osmosis workspace (for consecutive updates) sudo -u renderer openstreetmap-tiles-update-expire $REPLICATION_TIMESTAMP fi # copy polygon file if available if [ -f /data/data.poly ]; then sudo -u renderer cp /data/data.poly /var/lib/mod_tile/data.poly fi # Import data if [ -z "$OSM2PGSQL_EXTRA_ARGS" ]; then OSM2PGSQL_EXTRA_ARGS="-C 4096" fi sudo -E -u renderer osm2pgsql -H "$PGHOST" -d "$PGDB" -U "$PGUSER" -P "${PGPORT:-5432}" \ --create --slim -G --hstore --tag-transform-script /home/renderer/src/openstreetmap-carto/openstreetmap-carto.lua \ --number-processes ${THREADS:-4} -S /home/renderer/src/openstreetmap-carto/openstreetmap-carto.style /data/data.osm.pbf ${OSM2PGSQL_EXTRA_ARGS} # Create indexes sudo -E -u postgres psql -h "$PGHOST" -d "$PGDB" -U "$PGUSER" -p "${PGPORT:-5432}" -f /home/renderer/src/openstreetmap-carto/indexes.sql # Import external data chown -R renderer: /home/renderer/src sudo -E -u renderer python3 /home/renderer/src/openstreetmap-carto/scripts/get-external-data.py \ -H "$PGHOST" -d "$PGDB" -U "$PGUSER" -p "${PGPORT:-5432}" \ -c /home/renderer/src/openstreetmap-carto/external-data.yml -D /home/renderer/src/openstreetmap-carto/data # Register that data has changed for mod_tile caching purposes touch /var/lib/mod_tile/planet-import-complete exit 0 fi if [ "$1" = "run" ]; then # Clean /tmp rm -rf /tmp/* # Configure Apache CORS if [ "$ALLOW_CORS" == "enabled" ] || [ "$ALLOW_CORS" == "1" ]; then echo "export APACHE_ARGUMENTS='-D ALLOW_CORS'" >> /etc/apache2/envvars fi echo "PGHOST='$PGHOST'" > /home/renderer/env echo "PGPORT='$PGPORT'" >> /home/renderer/env echo "PGUSER='$PGUSER'" >> /home/renderer/env echo "PGDB='$PGDB'" >> /home/renderer/env echo "PGPASSWORD='$PGPASSWORD'" >> /home/renderer/env chown renderer /var/log/tiles cd /home/renderer/src/openstreetmap-carto sed "s/ dbname: \"gis\"/ host: \"$PGHOST\"\n\ port: \"${PGPORT:-5432}\"\n\ user: \"$PGUSER\"\n\ password: \"$PGPASSWORD\"\n\ asynchronous_request: true\n\ max_async_connection: 2\n\ dbname: \"$PGDB\"/" < project.mml > project1.mml carto project1.mml > mapnik.xml cat >>/usr/local/etc/renderd.conf <>/usr/local/etc/renderd.conf <