1FROM debian:10.1 2 3LABEL authors="Carmen Tawalika,Markus Neteler,Anika Bettge" 4LABEL maintainer="tawalika@mundialis.de,neteler@mundialis.de,bettge@mundialis.de" 5 6ENV DEBIAN_FRONTEND noninteractive 7 8# define versions to be used 9ARG PDAL_VERSION=1.8.0 10ARG PROJ_VERSION=5.2.0 11ARG PROJ_DATUMGRID_VERSION=1.8 12ARG LAZ_PERF_VERSION=1.3.0 13 14SHELL ["/bin/bash", "-c"] 15 16WORKDIR /tmp 17 18RUN apt-get update && apt-get upgrade -y && \ 19 apt-get install -y --no-install-recommends --no-install-suggests \ 20 build-essential \ 21 bison \ 22 bzip2 \ 23 cmake \ 24 curl \ 25 flex \ 26 g++ \ 27 gcc \ 28 gdal-bin \ 29 git \ 30 libbz2-dev \ 31 libcairo2 \ 32 libcairo2-dev \ 33 libcurl4-gnutls-dev \ 34 libfftw3-bin \ 35 libfftw3-dev \ 36 libfreetype6-dev \ 37 libgdal-dev \ 38 libgeos-dev \ 39 libgsl0-dev \ 40 libjpeg-dev \ 41 libjsoncpp-dev \ 42 libopenblas-base \ 43 libopenblas-dev \ 44 libnetcdf-dev \ 45 libncurses5-dev \ 46 libopenjp2-7 \ 47 libopenjp2-7-dev \ 48 libpnglite-dev \ 49 libpq-dev \ 50 libpython3-all-dev \ 51 libsqlite3-dev \ 52 libtiff-dev \ 53 libzstd-dev \ 54 locales \ 55 make \ 56 mesa-common-dev \ 57 moreutils \ 58 ncurses-bin \ 59 netcdf-bin \ 60 python3 \ 61 python3-dateutil \ 62 python3-dev \ 63 python3-magic \ 64 python3-numpy \ 65 python3-pil \ 66 python3-pip \ 67 python3-ply \ 68 python3-setuptools \ 69 python3-venv \ 70 software-properties-common \ 71 sqlite3 \ 72 subversion \ 73 unzip \ 74 vim \ 75 wget \ 76 zip \ 77 zlib1g-dev 78 79RUN echo LANG="en_US.UTF-8" > /etc/default/locale 80RUN echo en_US.UTF-8 UTF-8 >> /etc/locale.gen && locale-gen 81 82## install the latest projection library for GRASS GIS 83WORKDIR /src 84RUN wget -q http://download.osgeo.org/proj/proj-${PROJ_VERSION}.tar.gz && \ 85 tar xzf proj-${PROJ_VERSION}.tar.gz && \ 86 cd /src/proj-${PROJ_VERSION}/ && \ 87 wget -q http://download.osgeo.org/proj/proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \ 88 cd nad && \ 89 unzip ../proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \ 90 cd .. && \ 91 ./configure --prefix=/usr/ && \ 92 make && \ 93 make install 94 95## install laz-perf 96RUN apt-get install cmake 97WORKDIR /src 98RUN wget -q https://github.com/hobu/laz-perf/archive/${LAZ_PERF_VERSION}.tar.gz -O laz-perf-${LAZ_PERF_VERSION}.tar.gz && \ 99 tar -zxf laz-perf-${LAZ_PERF_VERSION}.tar.gz && \ 100 cd laz-perf-${LAZ_PERF_VERSION} && \ 101 mkdir build && \ 102 cd build && \ 103 cmake .. && \ 104 make && \ 105 make install 106 107## fetch vertical datums and store into PROJ dir 108WORKDIR /src 109RUN mkdir vdatum && \ 110 cd vdatum && \ 111 wget -q http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj; \ 112 wget -q http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj; \ 113 wget -q http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj; \ 114 wget -q http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj; \ 115 wget -q http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj; \ 116 wget -q http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj; \ 117 wget -q http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj; \ 118 wget -q http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj; \ 119 wget -q http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj; \ 120 cd .. && \ 121 rm -rf vdatum 122 123## install pdal 124ENV NUMTHREADS=4 125WORKDIR /src 126RUN wget -q \ 127 https://github.com/PDAL/PDAL/releases/download/${PDAL_VERSION}/PDAL-${PDAL_VERSION}-src.tar.gz && \ 128 tar xfz PDAL-${PDAL_VERSION}-src.tar.gz && \ 129 cd /src/PDAL-${PDAL_VERSION}-src && \ 130 mkdir build && \ 131 cd build && \ 132 cmake .. \ 133 -G "Unix Makefiles" \ 134 -DCMAKE_BUILD_TYPE=Release \ 135 -DCMAKE_INSTALL_PREFIX=/usr \ 136 -DCMAKE_C_COMPILER=gcc \ 137 -DCMAKE_CXX_COMPILER=g++ \ 138 -DCMAKE_MAKE_PROGRAM=make \ 139 -DBUILD_PLUGIN_PYTHON=ON \ 140 -DBUILD_PLUGIN_CPD=OFF \ 141 -DBUILD_PLUGIN_GREYHOUND=ON \ 142 -DBUILD_PLUGIN_HEXBIN=ON \ 143 -DHEXER_INCLUDE_DIR=/usr/include/ \ 144 -DBUILD_PLUGIN_NITF=OFF \ 145 -DBUILD_PLUGIN_ICEBRIDGE=ON \ 146 -DBUILD_PLUGIN_PGPOINTCLOUD=ON \ 147 -DBUILD_PGPOINTCLOUD_TESTS=OFF \ 148 -DBUILD_PLUGIN_SQLITE=ON \ 149 -DWITH_LASZIP=ON \ 150 -DWITH_LAZPERF=ON \ 151 -DWITH_TESTS=ON && \ 152 make -j $NUMTHREADS && \ 153 make install 154 155# copy grass gis source 156WORKDIR /src 157COPY . /src/grass_build/ 158WORKDIR /src/grass_build 159 160# Set environmental variables for GRASS GIS compilation, without debug symbols 161# Set gcc/g++ environmental variables for GRASS GIS compilation, without debug symbols 162ENV MYCFLAGS "-O2 -std=gnu99 -m64" 163ENV MYLDFLAGS "-s" 164# CXX stuff: 165ENV LD_LIBRARY_PATH "/usr/local/lib" 166ENV LDFLAGS "$MYLDFLAGS" 167ENV CFLAGS "$MYCFLAGS" 168ENV CXXFLAGS "$MYCXXFLAGS" 169 170# Configure compile and install GRASS GIS 171ENV GRASS_PYTHON=/usr/bin/python3 172ENV NUMTHREADS=4 173RUN make distclean || echo "nothing to clean" 174RUN /src/grass_build/configure \ 175 --with-cxx \ 176 --enable-largefile \ 177 --with-proj-share=/usr/share/proj \ 178 --with-gdal=/usr/bin/gdal-config \ 179 --with-geos \ 180 --with-sqlite \ 181 --with-cairo --with-cairo-ldflags=-lfontconfig \ 182 --with-freetype --with-freetype-includes="/usr/include/freetype2/" \ 183 --with-fftw \ 184 --with-postgres --with-postgres-includes="/usr/include/postgresql" \ 185 --with-netcdf \ 186 --with-zstd \ 187 --with-bzlib \ 188 --with-pdal \ 189 --without-mysql \ 190 --without-odbc \ 191 --without-openmp \ 192 --without-opengl \ 193 && make -j $NUMTHREADS \ 194 && make install && ldconfig 195 196# Unset environmental variables to avoid later compilation issues 197ENV INTEL "" 198ENV MYCFLAGS "" 199ENV MYLDFLAGS "" 200ENV MYCXXFLAGS "" 201ENV LD_LIBRARY_PATH "" 202ENV LDFLAGS "" 203ENV CFLAGS "" 204ENV CXXFLAGS "" 205 206# set SHELL var to avoid /bin/sh fallback in interactive GRASS GIS sessions 207ENV SHELL /bin/bash 208ENV LC_ALL "en_US.UTF-8" 209ENV GRASS_SKIP_MAPSET_OWNER_CHECK 1 210 211# Create generic GRASS GIS binary name regardless of version number 212RUN ln -sf `find /usr/local/bin -name "grass??" | sort | tail -n 1` /usr/local/bin/grass 213# Create generic GRASS GIS lib name regardless of version number 214RUN ln -sf `grass --config path` /usr/local/grass 215 216# show GRASS GIS, PROJ, GDAL etc versions 217RUN grass --tmp-location EPSG:4326 --exec g.version -rge && \ 218 pdal --version && \ 219 python3 --version 220 221# Reduce the image size 222RUN apt-get autoremove -y 223RUN apt-get clean -y 224RUN rm -r /src/grass_build/.git 225 226WORKDIR /scripts 227 228# install external GRASS GIS session Python API 229RUN pip3 install grass-session 230 231# install GRASS GIS extensions 232RUN grass --tmp-location EPSG:4326 --exec g.extension extension=r.in.pdal 233 234# add GRASS GIS envs for python usage 235ENV GISBASE "/usr/local/grass/" 236ENV GRASSBIN "/usr/local/bin/grass" 237ENV PYTHONPATH "${PYTHONPATH}:$GISBASE/etc/python/" 238ENV LD_LIBRARY_PATH "$LD_LIBRARY_PATH:$GISBASE/lib" 239 240WORKDIR /tmp 241COPY docker/testdata/simple.laz . 242WORKDIR /scripts 243COPY docker/testdata/test_grass_session.py . 244## just scan the LAZ file 245RUN /usr/bin/python3 /scripts/test_grass_session.py 246 247WORKDIR /grassdb 248VOLUME /grassdb 249