|
@@ -0,0 +1,249 @@
|
|
|
+FROM ubuntu:18.04
|
|
|
+
|
|
|
+LABEL authors="Carmen Tawalika,Markus Neteler,Anika Bettge"
|
|
|
+LABEL maintainer="tawalika@mundialis.de,neteler@mundialis.de,bettge@mundialis.de"
|
|
|
+
|
|
|
+ENV DEBIAN_FRONTEND noninteractive
|
|
|
+
|
|
|
+# define versions to be used
|
|
|
+ARG GRASS_VERSION=7.9
|
|
|
+ARG GRASS_SHORT_VERSION=79
|
|
|
+ARG PDAL_VERSION=1.8.0
|
|
|
+ARG PROJ_VERSION=4.9.3
|
|
|
+ARG PROJ_DATUMGRID_VERSION=1.8
|
|
|
+ARG LAZ_PERF_VERSION=1.3.0
|
|
|
+
|
|
|
+SHELL ["/bin/bash", "-c"]
|
|
|
+
|
|
|
+WORKDIR /tmp
|
|
|
+
|
|
|
+RUN apt-get update && apt-get upgrade -y && \
|
|
|
+ apt-get install -y --no-install-recommends --no-install-suggests \
|
|
|
+ build-essential \
|
|
|
+ bison \
|
|
|
+ bzip2 \
|
|
|
+ cmake \
|
|
|
+ curl \
|
|
|
+ flex \
|
|
|
+ g++ \
|
|
|
+ gcc \
|
|
|
+ gdal-bin \
|
|
|
+ git \
|
|
|
+ language-pack-en-base \
|
|
|
+ libbz2-dev \
|
|
|
+ libcairo2 \
|
|
|
+ libcairo2-dev \
|
|
|
+ libcurl4-gnutls-dev \
|
|
|
+ libfftw3-bin \
|
|
|
+ libfftw3-dev \
|
|
|
+ libfreetype6-dev \
|
|
|
+ libgdal-dev \
|
|
|
+ libgeos-dev \
|
|
|
+ libgsl0-dev \
|
|
|
+ libjpeg-dev \
|
|
|
+ libjsoncpp-dev \
|
|
|
+ libopenblas-base \
|
|
|
+ libopenblas-dev \
|
|
|
+ libnetcdf-dev \
|
|
|
+ libncurses5-dev \
|
|
|
+ libopenjp2-7 \
|
|
|
+ libopenjp2-7-dev \
|
|
|
+ libpnglite-dev \
|
|
|
+ libpq-dev \
|
|
|
+ libpython3-all-dev \
|
|
|
+ libsqlite3-dev \
|
|
|
+ libtiff-dev \
|
|
|
+ libzstd-dev \
|
|
|
+ make \
|
|
|
+ mesa-common-dev \
|
|
|
+ moreutils \
|
|
|
+ ncurses-bin \
|
|
|
+ netcdf-bin \
|
|
|
+ python3 \
|
|
|
+ python3-dateutil \
|
|
|
+ python3-dev \
|
|
|
+ python3-magic \
|
|
|
+ python3-numpy \
|
|
|
+ python3-pil \
|
|
|
+ python3-pip \
|
|
|
+ python3-ply \
|
|
|
+ python3-setuptools \
|
|
|
+ python3-venv \
|
|
|
+ software-properties-common \
|
|
|
+ sqlite3 \
|
|
|
+ subversion \
|
|
|
+ unzip \
|
|
|
+ vim \
|
|
|
+ wget \
|
|
|
+ zip \
|
|
|
+ zlib1g-dev
|
|
|
+
|
|
|
+RUN echo LANG="en_US.UTF-8" > /etc/default/locale
|
|
|
+
|
|
|
+## install the latest projection library for GRASS GIS
|
|
|
+WORKDIR /src
|
|
|
+RUN wget http://download.osgeo.org/proj/proj-${PROJ_VERSION}.tar.gz && \
|
|
|
+ tar xzvf proj-${PROJ_VERSION}.tar.gz && \
|
|
|
+ cd /src/proj-${PROJ_VERSION}/ && \
|
|
|
+ wget http://download.osgeo.org/proj/proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \
|
|
|
+ cd nad && \
|
|
|
+ unzip ../proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \
|
|
|
+ cd .. && \
|
|
|
+ ./configure --prefix=/usr/ && \
|
|
|
+ make && \
|
|
|
+ make install
|
|
|
+
|
|
|
+## install laz-perf
|
|
|
+RUN apt-get install cmake
|
|
|
+WORKDIR /src
|
|
|
+RUN wget https://github.com/hobu/laz-perf/archive/${LAZ_PERF_VERSION}.tar.gz -O laz-perf-${LAZ_PERF_VERSION}.tar.gz && \
|
|
|
+ tar -zxf laz-perf-${LAZ_PERF_VERSION}.tar.gz && \
|
|
|
+ cd laz-perf-${LAZ_PERF_VERSION} && \
|
|
|
+ mkdir build && \
|
|
|
+ cd build && \
|
|
|
+ cmake .. && \
|
|
|
+ make && \
|
|
|
+ make install
|
|
|
+
|
|
|
+## fetch vertical datums and store into PROJ dir
|
|
|
+WORKDIR /src
|
|
|
+RUN mkdir vdatum && \
|
|
|
+ cd vdatum && \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj; \
|
|
|
+ wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj; \
|
|
|
+ cd .. && \
|
|
|
+ rm -rf vdatum
|
|
|
+
|
|
|
+## install pdal
|
|
|
+ENV NUMTHREADS=4
|
|
|
+WORKDIR /src
|
|
|
+RUN wget \
|
|
|
+ https://github.com/PDAL/PDAL/releases/download/${PDAL_VERSION}/PDAL-${PDAL_VERSION}-src.tar.gz && \
|
|
|
+ tar xfz PDAL-${PDAL_VERSION}-src.tar.gz && \
|
|
|
+ cd /src/PDAL-${PDAL_VERSION}-src && \
|
|
|
+ mkdir build && \
|
|
|
+ cd build && \
|
|
|
+ cmake .. \
|
|
|
+ -G "Unix Makefiles" \
|
|
|
+ -DCMAKE_BUILD_TYPE=Release \
|
|
|
+ -DCMAKE_INSTALL_PREFIX=/usr \
|
|
|
+ -DCMAKE_C_COMPILER=gcc \
|
|
|
+ -DCMAKE_CXX_COMPILER=g++ \
|
|
|
+ -DCMAKE_MAKE_PROGRAM=make \
|
|
|
+ -DBUILD_PLUGIN_PYTHON=ON \
|
|
|
+ -DBUILD_PLUGIN_CPD=OFF \
|
|
|
+ -DBUILD_PLUGIN_GREYHOUND=ON \
|
|
|
+ -DBUILD_PLUGIN_HEXBIN=ON \
|
|
|
+ -DHEXER_INCLUDE_DIR=/usr/include/ \
|
|
|
+ -DBUILD_PLUGIN_NITF=OFF \
|
|
|
+ -DBUILD_PLUGIN_ICEBRIDGE=ON \
|
|
|
+ -DBUILD_PLUGIN_PGPOINTCLOUD=ON \
|
|
|
+ -DBUILD_PGPOINTCLOUD_TESTS=OFF \
|
|
|
+ -DBUILD_PLUGIN_SQLITE=ON \
|
|
|
+ -DWITH_LASZIP=ON \
|
|
|
+ -DWITH_LAZPERF=ON \
|
|
|
+ -DWITH_TESTS=ON && \
|
|
|
+ make -j $NUMTHREADS && \
|
|
|
+ make install
|
|
|
+
|
|
|
+# download grass gis source from git
|
|
|
+ARG SOURCE_GIT_URL=https://github.com
|
|
|
+ARG SOURCE_GIT_REMOTE=OSGeo
|
|
|
+ARG SOURCE_GIT_REPO=grass
|
|
|
+ARG SOURCE_GIT_BRANCH=master
|
|
|
+WORKDIR /src
|
|
|
+# TODO change to COPY
|
|
|
+ADD https://api.github.com/repos/$SOURCE_GIT_REMOTE/$SOURCE_GIT_REPO/git/refs/heads/$SOURCE_GIT_BRANCH version.json
|
|
|
+RUN git clone -b ${SOURCE_GIT_BRANCH} --single-branch ${SOURCE_GIT_URL}/${SOURCE_GIT_REMOTE}/${SOURCE_GIT_REPO}.git grass_build
|
|
|
+WORKDIR /src/grass_build
|
|
|
+
|
|
|
+# Set environmental variables for GRASS GIS compilation, without debug symbols
|
|
|
+# Set gcc/g++ environmental variables for GRASS GIS compilation, without debug symbols
|
|
|
+ENV MYCFLAGS "-O2 -std=gnu99 -m64"
|
|
|
+ENV MYLDFLAGS "-s"
|
|
|
+# CXX stuff:
|
|
|
+ENV LD_LIBRARY_PATH "/usr/local/lib"
|
|
|
+ENV LDFLAGS "$MYLDFLAGS"
|
|
|
+ENV CFLAGS "$MYCFLAGS"
|
|
|
+ENV CXXFLAGS "$MYCXXFLAGS"
|
|
|
+
|
|
|
+# Configure compile and install GRASS GIS
|
|
|
+ENV GRASS_PYTHON=/usr/bin/python3
|
|
|
+ENV NUMTHREADS=4
|
|
|
+RUN make distclean || echo "nothing to clean"
|
|
|
+RUN /src/grass_build/configure \
|
|
|
+ --with-cxx \
|
|
|
+ --enable-largefile \
|
|
|
+ --with-proj --with-proj-share=/usr/share/proj \
|
|
|
+ --with-gdal=/usr/bin/gdal-config \
|
|
|
+ --with-geos \
|
|
|
+ --with-sqlite \
|
|
|
+ --with-cairo --with-cairo-ldflags=-lfontconfig \
|
|
|
+ --with-freetype --with-freetype-includes="/usr/include/freetype2/" \
|
|
|
+ --with-fftw \
|
|
|
+ --with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
|
|
|
+ --with-netcdf \
|
|
|
+ --with-zstd \
|
|
|
+ --with-bzlib \
|
|
|
+ --with-pdal \
|
|
|
+ --without-mysql \
|
|
|
+ --without-odbc \
|
|
|
+ --without-openmp \
|
|
|
+ --without-ffmpeg \
|
|
|
+ --without-opengl \
|
|
|
+ && make -j $NUMTHREADS \
|
|
|
+ && make install && ldconfig
|
|
|
+
|
|
|
+# Unset environmental variables to avoid later compilation issues
|
|
|
+ENV INTEL ""
|
|
|
+ENV MYCFLAGS ""
|
|
|
+ENV MYLDFLAGS ""
|
|
|
+ENV MYCXXFLAGS ""
|
|
|
+ENV LD_LIBRARY_PATH ""
|
|
|
+ENV LDFLAGS ""
|
|
|
+ENV CFLAGS ""
|
|
|
+ENV CXXFLAGS ""
|
|
|
+
|
|
|
+# set SHELL var to avoid /bin/sh fallback in interactive GRASS GIS sessions
|
|
|
+ENV SHELL /bin/bash
|
|
|
+ENV LC_ALL "en_US.UTF-8"
|
|
|
+ENV GRASS_SKIP_MAPSET_OWNER_CHECK 1
|
|
|
+
|
|
|
+# Create generic GRASS GIS binary name regardless of version number
|
|
|
+RUN ln -sf `find /usr/local/bin -name "grass??" | sort | tail -n 1` /usr/local/bin/grass
|
|
|
+
|
|
|
+# TODO rename when 'code_revision' is available
|
|
|
+RUN grass --config svn_revision version
|
|
|
+
|
|
|
+# Reduce the image size
|
|
|
+RUN apt-get autoremove -y
|
|
|
+RUN apt-get clean -y
|
|
|
+
|
|
|
+WORKDIR /scripts
|
|
|
+
|
|
|
+# install external GRASS GIS session Python API
|
|
|
+RUN pip3 install grass-session
|
|
|
+
|
|
|
+# install GRASS GIS extensions
|
|
|
+RUN grass --tmp-location EPSG:4326 --exec g.extension extension=r.in.pdal
|
|
|
+
|
|
|
+# add GRASS GIS envs for python usage
|
|
|
+ENV GISBASE "/usr/local/grass${GRASS_SHORT_VERSION}/"
|
|
|
+ENV GRASSBIN "/usr/local/bin/grass"
|
|
|
+ENV PYTHONPATH "${PYTHONPATH}:$GISBASE/etc/python/"
|
|
|
+ENV LD_LIBRARY_PATH "$LD_LIBRARY_PATH:$GISBASE/lib"
|
|
|
+
|
|
|
+ADD testdata/test_grass_session.py /scripts
|
|
|
+ADD testdata/simple.laz /tmp
|
|
|
+# simple test: just scan the LAZ file
|
|
|
+/usr/bin/python3 /scripts/test_grass_session.py
|
|
|
+
|
|
|
+WORKDIR /grassdb
|
|
|
+VOLUME /grassdb
|