fixes
Some checks failed
CI / Check (push) Failing after 2m0s
Build and publish Docker image / build-and-push (push) Successful in 5m22s

This commit is contained in:
Andras Schmelczer 2026-06-05 23:24:45 +01:00
parent 3fd64785a2
commit 44b4e0d72f
3 changed files with 32 additions and 20 deletions

View file

@ -1,53 +0,0 @@
# GDAL with ECW (read) support, for decoding Environment Agency Vertical Aerial
# Photography in the satellite-highres pipeline (pipeline/download/satellite_highres.py).
#
# EA VAP ships as ECW **v2** rasters, which are readable by the open-source
# libecwj2 3.3 SDK -- the same library the official OSGeo image uses when built
# with WITH_ECW=yes. We therefore avoid the proprietary, login-gated Hexagon
# ERDAS ECW/JP2 SDK (which is only needed for ECW v3) and its licensing
# restrictions entirely.
#
# We build only the ECW driver as a GDAL *plugin* on top of the official runtime
# image (no full GDAL rebuild). The plugin's GDAL sources are pinned to the exact
# commit reported by the base image so libgdal and the plugin stay ABI-compatible.
#
# Build: docker build -t perfect-postcode/gdal-ecw:latest docker/gdal-ecw
# Verify: docker run --rm perfect-postcode/gdal-ecw:latest gdalinfo --formats | grep -i ECW
FROM ghcr.io/osgeo/gdal:ubuntu-full-latest
ARG LIBECWJ2_URL=https://github.com/rouault/libecwj2-3.3-builds/releases/download/v1/install-libecwj2-3.3-ubuntu-20.04.tar.gz
RUN apt-get update && apt-get install -y --no-install-recommends \
cmake g++ make git curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Open-source ECW v2 SDK (extracts to /opt/libecwj2-3.3) + make its libs loadable.
RUN curl --retry 3 --retry-all-errors --retry-delay 3 -fsSL -o /tmp/libecwj2.tar.gz "$LIBECWJ2_URL" \
&& tar -C / -xzf /tmp/libecwj2.tar.gz \
&& rm -f /tmp/libecwj2.tar.gz \
&& (cd /opt/libecwj2-3.3/lib && for so in *.so*; do \
ln -sf "/opt/libecwj2-3.3/lib/$so" "/usr/lib/x86_64-linux-gnu/$so"; \
done) \
&& ldconfig
# Build the ECW driver plugin against the base image's exact GDAL sources.
RUN set -eux; \
GDAL_COMMIT="$(gdalinfo --version | sed -nE 's/.*-([0-9a-f]{8,}).*/\1/p')"; \
test -n "$GDAL_COMMIT"; \
echo "Building ECW plugin for GDAL commit ${GDAL_COMMIT}"; \
mkdir -p /tmp/gdal && cd /tmp/gdal && git init -q; \
git fetch --depth 1 -q https://github.com/OSGeo/gdal.git "$GDAL_COMMIT"; \
git checkout -q FETCH_HEAD; \
cmake -S frmts/ecw -B /tmp/ecw-build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
-DECW_ROOT=/opt/libecwj2-3.3; \
cmake --build /tmp/ecw-build -j"$(nproc)"; \
PLUGIN_DIR=/usr/lib/x86_64-linux-gnu/gdalplugins; \
mkdir -p "$PLUGIN_DIR"; \
find /tmp/ecw-build -name 'gdal_ECW*.so' -exec cp {} "$PLUGIN_DIR/" \; ; \
rm -rf /tmp/gdal /tmp/ecw-build
# Fail the build if the driver is not actually available.
RUN gdalinfo --formats | grep -iq 'ECW.*rw' && echo "ECW driver OK"