OpenTileServer/archive/reload-opentileserver-ubunt...

125 lines
4.1 KiB
Bash
Raw Normal View History

2024-01-27 19:30:28 +00:00
#!/bin/bash -e
#Version: 0.3
#Description: Reload OSM data
#Note: This script assumes all external commands
# (pg_config, osm2pgsl, ...) are installed.
#Usage: reload-opentileserver.sh [-add] [pbf_url]
# To run in non-Latin language uncomment below
#export LC_ALL=C
PBF_ADD='no'
if [ "${1}" == '-add' ]; then
PBF_ADD='yes'
shift 1;
fi
PBF_URL="${1}"; #http://download.geofabrik.de/europe/andorra-latest.osm.pbf
OSM_USER='tile'
OSM_DB='gis'
#Check input parameters
if [ -z "${PBF_URL}" ]; then
echo "Usage: $0 [-add] pbf_url"; exit 1;
fi
NP=$(grep -c 'model name' /proc/cpuinfo)
osm2pgsql_OPTS=" -d ${OSM_DB} --number-processes ${NP}"
PG_VER=$(pg_config | grep '^VERSION' | cut -f4 -d' ' | cut -f1,2 -d.)
#Clear renderd cache
service renderd stop
rm -rf /var/lib/mod_tile/default/*
PBF_FILE="/home/${OSM_USER}/${PBF_URL##*/}"
if [ ! -f ${PBF_FILE} ]; then
wget -P/home/${OSM_USER} ${PBF_URL}
chown ${OSM_USER}:${OSM_USER} ${PBF_FILE}
fi
cat >/etc/postgresql/${PG_VER}/main/pg_hba.conf <<CMD_EOF
local all all trust
host all all 127.0.0.1 255.255.255.255 md5
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
CMD_EOF
#Turn off autovacuum and fsync during load of PBF
sed -i 's/#\?fsync.*/fsync = off/' /etc/postgresql/${PG_VER}/main/postgresql.conf
sed -i 's/#\?autovacuum.*/autovacuum = off/' /etc/postgresql/${PG_VER}/main/postgresql.conf
service postgresql restart
if [ "${PBF_ADD}" == 'no' ]; then
#Remove old osm db and user
sudo -u postgres dropdb --if-exists ${OSM_DB}
sudo -u postgres dropuser --if-exists ${OSM_USER}
#create user,db and extensions
psql -Upostgres <<EOF_CMD
create user ${OSM_USER} with password '${OSM_PG_PASS}';
create database ${OSM_DB} owner=${OSM_USER};
\c ${OSM_DB}
CREATE EXTENSION postgis;
ALTER TABLE geometry_columns OWNER TO ${OSM_USER};
ALTER TABLE spatial_ref_sys OWNER TO ${OSM_USER};
EOF_CMD
osm2pgsql_OPTS+=' --slim'
else
#keep old database and append new map
osm2pgsql_OPTS+=' --append'
fi
let C_MEM=$(free -m | grep -i 'mem:' | sed 's/[ \t]\+/ /g' | cut -f4,7 -d' ' | tr ' ' '+')-200
sudo -u ${OSM_USER} osm2pgsql ${osm2pgsql_OPTS} -C ${C_MEM} ${PBF_FILE}
if [ $? -eq 0 ]; then #If import went good
rm -rf ${PBF_FILE}
fi
#restore password for pg
#Turn on autovacuum and fsync during load of PBF
sed -i.save 's/#\?fsync.*/fsync = on/' /etc/postgresql/${PG_VER}/main/postgresql.conf
sed -i.save 's/#\?autovacuum.*/autovacuum = on/' /etc/postgresql/${PG_VER}/main/postgresql.conf
sed -i.save 's/local all all.*/local all all trust/' /etc/postgresql/${PG_VER}/main/pg_hba.conf
#Restart services
service postgresql restart
service apache2 reload
service renderd start
#update osmosis baseURL in configuration file
WORKDIR_OSM=/home/${OSM_USER}/.osmosis
if [ -f ${WORKDIR_OSM}/configuration.txt ]; then
#Get the URL from http://download.geofabrik.de/europe/germany.html
#example PBF_URL='http://download.geofabrik.de/europe/germany-latest.osm.pbf'
UPDATE_URL="$(echo ${PBF_URL} | sed 's/latest.osm.pbf/updates/')"
sed -i.save "s|#\?baseUrl=.*|baseUrl=${UPDATE_URL}|" ${WORKDIR_OSM}/configuration.txt
fi
#Update leaflet
LOC_NAME=$(echo ${PBF_URL##*/} | sed 's/\(.*\)-latest.*/\1/')
cat >/tmp/latlong.php <<EOF
<?php
\$Address = urlencode(\$argv[1]);
\$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".\$Address."&sensor=true";
\$xml = simplexml_load_file(\$request_url) or die("url not loading");
\$status = \$xml->status;
if (\$status=="OK") {
\$Lat = \$xml->result->geometry->location->lat;
\$Lon = \$xml->result->geometry->location->lng;
\$LatLng = "\$Lat,\$Lon";
echo "\$LatLng";
}
?>
EOF
echo "Updating lat,long for ${LOC_NAME} in Leaflet..."
LOC_LATLONG=$(php /tmp/latlong.php "${LOC_NAME}")
if [ -z "${LOC_LATLONG}" ]; then
echo "Error: Lat/Long for ${LOC_NAME} not found";
echo "Update manually in /var/www/html/leaflet-example.html"
else
echo "Lat/Long for ${LOC_NAME} set to ${LOC_LATLONG}"
sed -i.save "s/\.setView(\[[0-9]\+\.[0-9]\+,[ \t]*-\?[0-9]\+\.[0-9]\+/.setView([${LOC_LATLONG}/" /var/www/html/leaflet-example.html
sed -i.save "s/L\.marker(\[[0-9]\+\.[0-9]\+,[ \t]*-\?[0-9]\+\.[0-9]\+/L.marker([${LOC_LATLONG}/" /var/www/html/leaflet-example.html
fi