-
-
Notifications
You must be signed in to change notification settings - Fork 285
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Readd the ubuntu based Dockerfile (#144)
- Loading branch information
Showing
1 changed file
with
250 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,250 @@ | ||
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.8 | ||
ARG GRASS_SHORT_VERSION=78 | ||
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 | ||
ARG SOURCE_GIT_URL=https://github.com | ||
ARG SOURCE_GIT_REMOTE=OSGeo | ||
ARG SOURCE_GIT_REPO=grass | ||
ARG SOURCE_GIT_BRANCH=releasebranch_7_8 | ||
|
||
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 | ||
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" | ||
|
||
## TODO check path | ||
#ADD testdata/test_grass_session.py /scripts | ||
#ADD testdata/simple.laz /tmp | ||
## simple test: just scan the LAZ file | ||
#RUN /usr/bin/python3 /scripts/test_grass_session.py | ||
|
||
WORKDIR /grassdb | ||
VOLUME /grassdb |