#!/usr/bin/env bash # rebuild-osrm.sh — пересборка OSRM-графа эндуро-профиля. # # Запускает полный цикл extract → partition → customize и рестартит роутер. # Требует docker, osrm-backend образ и pbf-файл в каталоге OSRM_DIR. # # Использование: # ./scripts/rebuild-osrm.sh # OSRM_DIR=/path/to/osrm OSRM_PBF=area.osm.pbf ./scripts/rebuild-osrm.sh # # Переменные окружения (со значениями по умолчанию): # OSRM_DIR — каталог с enduro.lua и .osm.pbf (default: /home/slin/enduro-trails/osrm) # OSRM_PBF — имя pbf-файла (default: enduro.osm.pbf) # OSRM_PROFILE — имя lua-профиля (default: enduro.lua) # OSRM_IMAGE — docker-образ osrm-backend (default: ghcr.io/project-osrm/osrm-backend:latest) # OSRM_CONTAINER — имя контейнера для рестарта (default: osrm-osrm-routed-1) set -euo pipefail OSRM_DIR="${OSRM_DIR:-/home/slin/enduro-trails/osrm}" OSRM_PBF="${OSRM_PBF:-enduro.osm.pbf}" OSRM_PROFILE="${OSRM_PROFILE:-enduro.lua}" OSRM_IMAGE="${OSRM_IMAGE:-ghcr.io/project-osrm/osrm-backend:latest}" OSRM_CONTAINER="${OSRM_CONTAINER:-osrm-osrm-routed-1}" if [[ ! -d "$OSRM_DIR" ]]; then echo "ERROR: каталог $OSRM_DIR не существует" >&2 exit 1 fi if [[ ! -f "$OSRM_DIR/$OSRM_PBF" ]]; then echo "ERROR: pbf-файл $OSRM_DIR/$OSRM_PBF не найден" >&2 exit 1 fi if [[ ! -f "$OSRM_DIR/$OSRM_PROFILE" ]]; then echo "ERROR: lua-профиль $OSRM_DIR/$OSRM_PROFILE не найден" >&2 exit 1 fi OSRM_BASE="${OSRM_PBF%.osm.pbf}" OSRM_FILE="$OSRM_BASE.osrm" echo "==> Пересборка OSRM-графа" echo " каталог: $OSRM_DIR" echo " pbf: $OSRM_PBF" echo " профиль: $OSRM_PROFILE" echo " образ: $OSRM_IMAGE" echo " контейнер: $OSRM_CONTAINER" run_osrm() { docker run --rm -v "$OSRM_DIR:/data" "$OSRM_IMAGE" "$@" } echo "==> [1/4] osrm-extract (это ~40 минут)" run_osrm osrm-extract -p "/data/$OSRM_PROFILE" "/data/$OSRM_PBF" echo "==> [2/4] osrm-partition" run_osrm osrm-partition "/data/$OSRM_FILE" echo "==> [3/4] osrm-customize" run_osrm osrm-customize "/data/$OSRM_FILE" echo "==> [4/4] Рестарт контейнера $OSRM_CONTAINER" if docker ps -a --format '{{.Names}}' | grep -qx "$OSRM_CONTAINER"; then docker restart "$OSRM_CONTAINER" echo " контейнер перезапущен" else echo " WARNING: контейнер $OSRM_CONTAINER не найден — рестарт пропущен" >&2 fi echo "==> Готово"