2019-06-13 13:39:04 +00:00
#!/bin/sh
set -e
#------------------------------------------------------------------------------
# AJT - change directory to mod_tile directory so that we can run replag
# and other things directly from this script when run from cron.
# Change the actual location to wherever installed locally.
#------------------------------------------------------------------------------
# Extra OSM2PGSQL_OPTIONS may need setting if a tag transform script is
# in use. See https://github.com/SomeoneElseOSM/SomeoneElse-style and
# http://wiki.openstreetmap.org/wiki/User:SomeoneElse/Ubuntu_1404_tileserver_load
# The database name always needs setting.
#------------------------------------------------------------------------------
OSMOSIS_BIN = osmosis
OSM2PGSQL_BIN = osm2pgsql
2022-04-09 13:00:29 +00:00
TRIM_BIN = /home/renderer/src/regional/trim_osc.py
2019-06-13 13:39:04 +00:00
DBNAME = gis
2022-04-09 13:00:29 +00:00
OSM2PGSQL_OPTIONS = " -d $DBNAME -G --hstore --tag-transform-script /data/style/ ${ NAME_LUA :- openstreetmap -carto.lua } --number-processes ${ THREADS :- 4 } -S /data/style/ ${ NAME_STYLE :- openstreetmap -carto.style } ${ OSM2PGSQL_EXTRA_ARGS } "
# flat-nodes
if [ -f /data/database/flat_nodes.bin ] ; then
OSM2PGSQL_OPTIONS = " ${ OSM2PGSQL_OPTIONS } --flat-nodes /data/database/flat_nodes.bin "
fi
2019-06-13 13:39:04 +00:00
#------------------------------------------------------------------------------
# When using trim_osc.py we can define either a bounding box (such as this
# example for England and Wales) or a polygon.
# See https://github.com/zverik/regional .
# This area will usually correspond to the data originally loaded.
#------------------------------------------------------------------------------
2022-04-09 13:00:29 +00:00
TRIM_POLY_FILE = "/data/database/region.poly"
2019-06-13 13:39:04 +00:00
TRIM_OPTIONS = " -d $DBNAME "
TRIM_REGION_OPTIONS = " -p $TRIM_POLY_FILE "
2022-04-09 13:00:29 +00:00
BASE_DIR = /data/database
LOG_DIR = /var/log/tiles
2019-06-13 13:39:04 +00:00
WORKOSM_DIR = $BASE_DIR /.osmosis
LOCK_FILE = /tmp/openstreetmap-update-expire-lock.txt
CHANGE_FILE = $BASE_DIR /changes.osc.gz
EXPIRY_FILE = $BASE_DIR /dirty_tiles
STOP_FILE = $BASE_DIR /stop.txt
OSMOSISLOG = $LOG_DIR /osmosis.log
PGSQLLOG = $LOG_DIR /osm2pgsql.log
EXPIRYLOG = $LOG_DIR /expiry.log
RUNLOG = $LOG_DIR /run.log
#------------------------------------------------------------------------------
# The tile expiry section below can re-render, delete or dirty expired tiles.
# By default, tiles between EXPIRY_MINZOOM and EXPIRY_MAXZOOM are rerendered.
# "render_expired" can optionally delete (and/or dirty) tiles above a certail
# threshold rather than rendering them.
# Here we expire (but don't immediately rerender) tiles between zoom levels
# 13 and 18 and delete between 19 and 20.
#------------------------------------------------------------------------------
EXPIRY_MINZOOM = 13
EXPIRY_TOUCHFROM = 13
EXPIRY_DELETEFROM = 19
EXPIRY_MAXZOOM = 20
#*************************************************************************
#*************************************************************************
m_info( )
{
2022-04-09 13:00:29 +00:00
echo "[`date +" %Y-%m-%d %H:%M:%S" `] $$ $1 " >> " $RUNLOG "
2019-06-13 13:39:04 +00:00
}
m_error( )
{
echo "[`date +" %Y-%m-%d %H:%M:%S" `] $$ [error] $1 " >> " $RUNLOG "
m_info "resetting state"
/bin/cp $WORKOSM_DIR /last.state.txt $WORKOSM_DIR /state.txt || true
rm " $CHANGE_FILE " || true
rm " $EXPIRY_FILE . $$ " || true
rm " $LOCK_FILE "
exit
}
m_ok( )
{
echo "[`date +" %Y-%m-%d %H:%M:%S" `] $$ $1 " >> " $RUNLOG "
}
getlock( )
{
if [ -s $1 ] ; then
if [ " $( ps -p ` cat $1 ` | wc -l) " -gt 1 ] ; then
return 1 #false
fi
fi
echo $$ >" $1 "
return 0 #true
}
freelock( )
{
rm " $1 "
rm " $CHANGE_FILE "
}
if [ $# -eq 1 ] ; then
m_info " Initialising Osmosis replication system to $1 "
2022-03-31 11:44:56 +00:00
mkdir -p $WORKOSM_DIR
2019-06-13 13:39:04 +00:00
$OSMOSIS_BIN --read-replication-interval-init workingDirectory = $WORKOSM_DIR 1>& 2 2> " $OSMOSISLOG "
2022-03-31 11:44:56 +00:00
2020-04-07 00:03:26 +00:00
wget "https://replicate-sequences.osm.mazdermind.de/?" $1 "T00:00:00Z" -O $WORKOSM_DIR /state.txt
2022-03-31 11:44:56 +00:00
2019-06-13 13:39:04 +00:00
mv $WORKOSM_DIR /configuration.txt $WORKOSM_DIR /configuration_orig.txt
2020-09-16 09:05:33 +00:00
sed "s!baseUrl=http://planet.openstreetmap.org/replication/minute!baseUrl=https://planet.openstreetmap.org/replication/minute!" $WORKOSM_DIR /configuration_orig.txt > $WORKOSM_DIR /configuration.txt
2022-04-09 13:00:29 +00:00
exit 0
fi
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
# make sure the lockfile is removed when we exit and then claim it
if ! getlock " $LOCK_FILE " ; then
m_info " pid `cat $LOCK_FILE ` still running "
exit 3
fi
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
if [ -e $STOP_FILE ] ; then
m_info "stopped"
exit 2
fi
2019-06-13 13:39:04 +00:00
# -----------------------------------------------------------------------------
# Add disk space check from https://github.com/zverik/regional
# -----------------------------------------------------------------------------
MIN_DISK_SPACE_MB = 500
if ` python -c " import os, sys; st=os.statvfs(' $BASE_DIR '); sys.exit(1 if st.f_bavail*st.f_frsize/1024/1024 > $MIN_DISK_SPACE_MB else 0) " ` ; then
m_info " there is less than $MIN_DISK_SPACE_MB MB left "
exit 4
fi
2022-04-09 13:00:29 +00:00
seq = ` cat $WORKOSM_DIR /state.txt | grep sequenceNumber | cut -d= -f2`
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
m_ok " start import from seq-nr $seq , replag is `osmosis-db_replag -h` "
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
/bin/cp $WORKOSM_DIR /state.txt $WORKOSM_DIR /last.state.txt
m_ok "downloading diff"
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
if ! $OSMOSIS_BIN --read-replication-interval workingDirectory = $WORKOSM_DIR --simplify-change --write-xml-change $CHANGE_FILE 1>& 2 2> " $OSMOSISLOG " ; then
m_error "Osmosis error"
fi
2019-06-13 13:39:04 +00:00
2019-06-16 06:34:04 +00:00
if [ -f $TRIM_POLY_FILE ] ; then
2019-06-13 13:39:04 +00:00
m_ok "filtering diff"
if ! $TRIM_BIN $TRIM_OPTIONS $TRIM_REGION_OPTIONS -z $CHANGE_FILE $CHANGE_FILE 1>& 2 2>> " $RUNLOG " ; then
m_error "Trim_osc error"
fi
else
m_ok "filtering diff skipped"
fi
2022-04-09 13:00:29 +00:00
m_ok "importing diff"
2019-06-13 13:39:04 +00:00
#------------------------------------------------------------------------------
# Previously openstreetmap-tiles-update-expire tried to dirty layer
# "$EXPIRY_MAXZOOM - 3" (which was 15) only. Instead we write all expired
# tiles in range to the list (note the "-" rather than ":" in the "-e"
# parameter).
#------------------------------------------------------------------------------
2022-04-09 13:00:29 +00:00
if ! $OSM2PGSQL_BIN -a --slim -e$EXPIRY_MINZOOM -$EXPIRY_MAXZOOM $OSM2PGSQL_OPTIONS -o " $EXPIRY_FILE . $$ " $CHANGE_FILE 1>& 2 2> " $PGSQLLOG " ; then
m_error "osm2pgsql error"
fi
2019-06-13 13:39:04 +00:00
#------------------------------------------------------------------------------
# The lockfile is normally removed before we expire tiles because that is
2022-03-31 11:44:56 +00:00
# something that can be done in parallel with further processing. In order to
2019-06-13 13:39:04 +00:00
# avoid rework, if actually rerendering is done rather than just deleting or
# dirtying, it makes sense to move it lower down.
#------------------------------------------------------------------------------
2022-03-31 11:44:56 +00:00
# m_ok "Import complete; removing lock file"
# freelock "$LOCK_FILE"
2022-04-09 13:00:29 +00:00
m_ok "expiring tiles"
2019-06-13 13:39:04 +00:00
#------------------------------------------------------------------------------
# When expiring tiles we need to define the style sheet if it's not "default".
# In this case it's "ajt".
# Previously all tiles on the "dirty" list between $EXPIRY_MINZOOM and
# $EXPIRY_MAXZOOM were dirtied. We currently re-render
# tiles >= $EXPIRY_MINZOOM and < $EXPIRY_DELETEFROM, expiry from 14 and
# delete >= $EXPIRY_DELETEFROM and <= $EXPIRY_MAXZOOM.
# The default path to renderd.sock is fixed.
#------------------------------------------------------------------------------
2022-04-09 13:00:29 +00:00
if ! render_expired --map= ajt --min-zoom= $EXPIRY_MINZOOM --touch-from= $EXPIRY_TOUCHFROM --delete-from= $EXPIRY_DELETEFROM --max-zoom= $EXPIRY_MAXZOOM -s /var/run/renderd/renderd.sock < " $EXPIRY_FILE . $$ " 2>& 1 | tail -8 >> " $EXPIRYLOG " ; then
m_info "Expiry failed"
fi
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
rm " $EXPIRY_FILE . $$ "
2019-06-13 13:39:04 +00:00
#------------------------------------------------------------------------------
# Only remove the lock file after expiry (if system is slow we want to delay
# the next import, not have multiple render_expired processes running)
#------------------------------------------------------------------------------
2022-04-09 13:00:29 +00:00
freelock " $LOCK_FILE "
2019-06-13 13:39:04 +00:00
2022-04-09 13:00:29 +00:00
m_ok "Done with import"