build osrm arm64
This commit is contained in:
parent
e99114b7b7
commit
fd8c8d0aa4
4 changed files with 80 additions and 8 deletions
|
|
@ -60,7 +60,8 @@ podman compose run --rm importer /app/scripts/03_import_pois.sh
|
|||
podman compose run --rm importer /app/scripts/04_import_geocoding.sh
|
||||
|
||||
# Step 5: Preprocess OSRM routing graphs — run on the HOST, not in the container
|
||||
# (OSRM tools only exist inside the osrm/osrm-backend image)
|
||||
# Builds a local ARM64 OSRM image on first run (~30-60 min), then preprocesses
|
||||
# car/foot/bicycle profiles. Subsequent runs skip the image build.
|
||||
bash backend/scripts/05_import_routing_host.sh ~/dev/maps/data
|
||||
|
||||
# Step 6: Register offline regions in the database
|
||||
|
|
@ -145,6 +146,8 @@ podman compose up -d postgres
|
|||
|
||||
**Exec format error on Pi** — The postgres image is built locally from `postgis.Dockerfile` using `arm64v8/postgres` as base. Run `podman compose build postgres` to rebuild it.
|
||||
|
||||
**OSRM exec format error** — `osrm/osrm-backend` is amd64-only. The project uses `osrm-arm64.Dockerfile` to build a native ARM64 image. Run `podman compose build osrm-driving` (builds once, shared by all three OSRM services) or let `05_import_routing_host.sh` build it automatically.
|
||||
|
||||
---
|
||||
|
||||
## Attribution
|
||||
|
|
|
|||
|
|
@ -72,25 +72,40 @@ services:
|
|||
- "2322:2322"
|
||||
|
||||
osrm-driving:
|
||||
image: docker.io/osrm/osrm-backend:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: osrm-arm64.Dockerfile
|
||||
networks:
|
||||
- maps-net
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- ../data/osrm/car:/data
|
||||
command: osrm-routed --algorithm mld /data/region.osrm
|
||||
|
||||
osrm-walking:
|
||||
image: docker.io/osrm/osrm-backend:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: osrm-arm64.Dockerfile
|
||||
networks:
|
||||
- maps-net
|
||||
ports:
|
||||
- "5001:5000"
|
||||
volumes:
|
||||
- ../data/osrm/foot:/data
|
||||
command: osrm-routed --algorithm mld /data/region.osrm
|
||||
|
||||
osrm-cycling:
|
||||
image: docker.io/osrm/osrm-backend:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: osrm-arm64.Dockerfile
|
||||
networks:
|
||||
- maps-net
|
||||
ports:
|
||||
- "5002:5000"
|
||||
volumes:
|
||||
- ../data/osrm/bicycle:/data
|
||||
command: osrm-routed --algorithm mld /data/region.osrm
|
||||
|
||||
importer:
|
||||
build:
|
||||
|
|
|
|||
41
backend/osrm-arm64.Dockerfile
Normal file
41
backend/osrm-arm64.Dockerfile
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
FROM docker.io/arm64v8/debian:bookworm AS builder
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
build-essential cmake git pkg-config \
|
||||
libboost-all-dev libtbb-dev liblua5.4-dev \
|
||||
libxml2-dev libzip-dev libbz2-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG OSRM_VERSION=v5.27.1
|
||||
RUN git clone --depth=1 --branch ${OSRM_VERSION} \
|
||||
https://github.com/Project-OSRM/osrm-backend.git /osrm
|
||||
|
||||
RUN cd /osrm && mkdir build && cd build && \
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release && \
|
||||
make -j$(nproc) osrm-extract osrm-partition osrm-customize osrm-routed && \
|
||||
make install
|
||||
|
||||
# ---- runtime ----
|
||||
FROM docker.io/arm64v8/debian:bookworm-slim
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libboost-filesystem1.81.0 \
|
||||
libboost-iostreams1.81.0 \
|
||||
libboost-regex1.81.0 \
|
||||
libboost-date-time1.81.0 \
|
||||
libboost-thread1.81.0 \
|
||||
libboost-program-options1.81.0 \
|
||||
libtbb12 liblua5.4-0 libxml2 libzip4 libbz2-1.0 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=builder /usr/local/bin/osrm-extract \
|
||||
/usr/local/bin/osrm-partition \
|
||||
/usr/local/bin/osrm-customize \
|
||||
/usr/local/bin/osrm-routed \
|
||||
/usr/local/bin/
|
||||
|
||||
# Lua profiles (car.lua, foot.lua, bicycle.lua, etc.)
|
||||
COPY --from=builder /osrm/profiles/ /opt/
|
||||
|
||||
WORKDIR /data
|
||||
EXPOSE 5000
|
||||
|
|
@ -1,13 +1,17 @@
|
|||
#!/bin/bash
|
||||
# scripts/05_import_routing_host.sh
|
||||
# Run this directly on the Pi host (not inside the importer container).
|
||||
# OSRM tools only exist inside the osrm/osrm-backend image.
|
||||
# Builds a local ARM64 OSRM image if it doesn't exist, then preprocesses
|
||||
# routing graphs for car, foot, and bicycle profiles.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKEND_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DATA_DIR="${1:-$HOME/dev/maps/data}"
|
||||
OSRM_DIR="${DATA_DIR}/osrm"
|
||||
PBF_FILE="${DATA_DIR}/osm/region.osm.pbf"
|
||||
OSRM_IMAGE="maps-osrm-arm64:latest"
|
||||
|
||||
if [ ! -f "$PBF_FILE" ]; then
|
||||
echo "ERROR: PBF file not found at $PBF_FILE"
|
||||
|
|
@ -15,6 +19,15 @@ if [ ! -f "$PBF_FILE" ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Build the ARM64 OSRM image if not already present
|
||||
if ! podman image exists "$OSRM_IMAGE"; then
|
||||
echo "=== Building ARM64 OSRM image (one-time, ~30-60 min on Pi) ==="
|
||||
podman build \
|
||||
-f "${BACKEND_DIR}/osrm-arm64.Dockerfile" \
|
||||
-t "$OSRM_IMAGE" \
|
||||
"$BACKEND_DIR"
|
||||
fi
|
||||
|
||||
for PROFILE in car foot bicycle; do
|
||||
PROFILE_DIR="${OSRM_DIR}/${PROFILE}"
|
||||
mkdir -p "$PROFILE_DIR"
|
||||
|
|
@ -24,17 +37,17 @@ for PROFILE in car foot bicycle; do
|
|||
|
||||
podman run --rm \
|
||||
-v "${PROFILE_DIR}:/data" \
|
||||
docker.io/osrm/osrm-backend:latest \
|
||||
"$OSRM_IMAGE" \
|
||||
osrm-extract -p "/opt/${PROFILE}.lua" /data/region.osm.pbf
|
||||
|
||||
podman run --rm \
|
||||
-v "${PROFILE_DIR}:/data" \
|
||||
docker.io/osrm/osrm-backend:latest \
|
||||
"$OSRM_IMAGE" \
|
||||
osrm-partition /data/region.osrm
|
||||
|
||||
podman run --rm \
|
||||
-v "${PROFILE_DIR}:/data" \
|
||||
docker.io/osrm/osrm-backend:latest \
|
||||
"$OSRM_IMAGE" \
|
||||
osrm-customize /data/region.osrm
|
||||
|
||||
echo "OSRM $PROFILE profile ready."
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue