Dockerfile_alpine 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. FROM alpine:edge
  2. # Based on:
  3. # https://github.com/mundialis/docker-grass-gis/blob/master/Dockerfile
  4. LABEL authors="Pietro Zambelli"
  5. LABEL maintainer="peter.zamb@gmail.com"
  6. # PACKAGES VERSIONS
  7. ARG GRASS_VERSION=7.7
  8. ARG PYTHON_VERSION=3
  9. ARG PROJ_VERSION=5.2.0
  10. ARG PROJ_DATUMGRID_VERSION=1.8
  11. # ================
  12. # CONFIG VARIABLES
  13. # ================
  14. # set configuration options
  15. ENV GRASS_CONFIG="\
  16. --enable-largefile \
  17. --with-cxx \
  18. --with-proj --with-proj-share=/usr/share/proj \
  19. --with-gdal \
  20. --with-python \
  21. --with-geos \
  22. --with-sqlite \
  23. --with-bzlib \
  24. --with-zstd \
  25. --with-cairo --with-cairo-ldflags=-lfontconfig \
  26. --with-fftw \
  27. --with-postgres --with-postgres-includes='/usr/include/postgresql' \
  28. --without-freetype \
  29. --without-openmp \
  30. --without-opengl \
  31. --without-nls \
  32. --without-mysql \
  33. --without-odbc \
  34. --without-openmp \
  35. --without-ffmpeg \
  36. "
  37. # Set environmental variables for GRASS GIS compilation, without debug symbols
  38. ENV MYCFLAGS="-O2 -std=gnu99 -m64" \
  39. MYLDFLAGS="-s -Wl,--no-undefined -lblas" \
  40. # CXX stuff:
  41. LD_LIBRARY_PATH="/usr/local/lib" \
  42. LDFLAGS="$MYLDFLAGS" \
  43. CFLAGS="$MYCFLAGS" \
  44. CXXFLAGS="$MYCXXFLAGS" \
  45. NUMTHREADS=2
  46. # List of packages to be installed
  47. ENV PACKAGES="\
  48. attr \
  49. bash \
  50. bison \
  51. bzip2 \
  52. cairo \
  53. fftw \
  54. flex \
  55. freetype \
  56. gdal \
  57. gettext \
  58. geos \
  59. gnutls \
  60. libbz2 \
  61. libjpeg-turbo \
  62. libpng \
  63. musl \
  64. musl-utils \
  65. ncurses \
  66. openjpeg \
  67. openblas \
  68. py3-numpy \
  69. py3-pillow \
  70. py3-six \
  71. postgresql \
  72. sqlite \
  73. sqlite-libs \
  74. tiff \
  75. zstd \
  76. zstd-libs \
  77. " \
  78. # These packages are required to compile GRASS GIS.
  79. GRASS_BUILD_PACKAGES="\
  80. build-base \
  81. bzip2-dev \
  82. cairo-dev \
  83. fftw-dev \
  84. freetype-dev \
  85. g++ \
  86. gcc \
  87. gdal-dev \
  88. geos-dev \
  89. gnutls-dev \
  90. libc6-compat \
  91. libjpeg-turbo-dev \
  92. libpng-dev \
  93. make \
  94. openjpeg-dev \
  95. openblas-dev \
  96. postgresql-dev \
  97. sqlite-dev \
  98. tar \
  99. tiff-dev \
  100. unzip \
  101. vim \
  102. wget \
  103. zip \
  104. zstd-dev \
  105. "
  106. # ====================
  107. # INSTALL DEPENDENCIES
  108. # ====================
  109. WORKDIR /src
  110. ENV PYTHONBIN=python$PYTHON_VERSION
  111. RUN echo "Install Python";\
  112. apk add --no-cache $PYTHONBIN && \
  113. $PYTHONBIN -m ensurepip && \
  114. rm -r /usr/lib/python*/ensurepip && \
  115. pip$PYTHON_VERSION install --upgrade pip setuptools && \
  116. if [ ! -e /usr/bin/pip ]; then ln -s pip$PYTHON_VERSION /usr/bin/pip ; fi && \
  117. if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/$PYTHONBIN /usr/bin/python; fi && \
  118. rm -r /root/.cache
  119. # Add the packages
  120. RUN echo "Install main packages";\
  121. apk update; \
  122. apk add --no-cache \
  123. --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \
  124. --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
  125. $PACKAGES; \
  126. # Add packages just for the GRASS build process
  127. apk add --no-cache \
  128. --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \
  129. --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
  130. --virtual .build-deps $GRASS_BUILD_PACKAGES; \
  131. # echo LANG="en_US.UTF-8" > /etc/default/locale;
  132. #
  133. # install the latest projection library for GRASS GIS
  134. #
  135. echo "Install PROJ-$PROJ_VERSION";\
  136. echo " => Dowload proj-$PROJ_VERSION";\
  137. wget http://download.osgeo.org/proj/proj-$PROJ_VERSION.tar.gz && \
  138. tar xzvf proj-$PROJ_VERSION.tar.gz && \
  139. cd /src/proj-$PROJ_VERSION/ && \
  140. echo " => Dowload datumgrid-$PROJ_DATUMGRID_VERSION" &&\
  141. wget http://download.osgeo.org/proj/proj-datumgrid-$PROJ_DATUMGRID_VERSION.zip && \
  142. cd nad && \
  143. unzip ../proj-datumgrid-$PROJ_DATUMGRID_VERSION.zip && \
  144. cd .. && \
  145. echo " => configure" &&\
  146. ./configure --prefix=/usr/ && \
  147. echo " => compile" &&\
  148. make && \
  149. echo " => install" &&\
  150. make install && \
  151. ldconfig /etc/ld.so.conf.d; \
  152. #
  153. # Checkout and install GRASS GIS
  154. #
  155. echo "Install GRASS GIS";\
  156. echo " => Dowload grass-$GRASS_VERSION";\
  157. wget https://grass.osgeo.org/grass`echo $GRASS_VERSION | tr -d .`/source/snapshot/grass-$GRASS_VERSION.git_src_snapshot_latest.tar.gz && \
  158. # unpack source code package and remove tarball archive:
  159. mkdir /src/grass_build && \
  160. tar xfz grass-$GRASS_VERSION.git_src_snapshot_latest.tar.gz --strip=1 -C /src/grass_build && \
  161. rm -f grass-$GRASS_VERSION.git_src_snapshot_latest.tar.gz; \
  162. #
  163. # Fixup python shebangs - TODO: will be resolved in future by grass-core
  164. cd /src/grass_build && \
  165. find -name '*.py' | xargs sed -i 's,#!/usr/bin/env python,#!/usr/bin/env python3,' && \
  166. sed -i 's,python,python3,' include/Make/Platform.make.in && \
  167. #
  168. # Configure compile and install GRASS GIS
  169. #
  170. echo " => Configure and compile grass";\
  171. cd /src/grass_build && \
  172. /src/grass_build/configure $GRASS_CONFIG && \
  173. make -j $NUMTHREADS && \
  174. make install && \
  175. ldconfig /etc/ld.so.conf.d; \
  176. #
  177. # enable simple grass command regardless of version number
  178. #
  179. ln -s `find /usr/local/bin -name "grass*"` /usr/local/bin/grass; \
  180. #
  181. # Reduce the image size
  182. #
  183. rm -rf /src/*; \
  184. # remove build dependencies and any leftover apk cache
  185. apk del --no-cache --purge .build-deps; \
  186. rm -rf /var/cache/apk/*; \
  187. rm -rf /root/.cache; \
  188. # Remove unnecessary grass files
  189. rm -rf /usr/local/grass77/demolocation; \
  190. rm -rf /usr/local/grass77/docs; \
  191. rm -rf /usr/local/grass77/fonts; \
  192. rm -rf /usr/local/grass77/gui; \
  193. rm -rf /usr/local/grass77/share;
  194. # Unset environmental variables to avoid later compilation issues
  195. ENV INTEL="" \
  196. MYCFLAGS="" \
  197. MYLDFLAGS="" \
  198. MYCXXFLAGS="" \
  199. LD_LIBRARY_PATH="" \
  200. LDFLAGS="" \
  201. CFLAGS="" \
  202. CXXFLAGS="" \
  203. # set SHELL var to avoid /bin/sh fallback in interactive GRASS GIS sessions in docker
  204. SHELL="/bin/bash"
  205. # =====================
  206. # INSTALL GRASS-SESSION
  207. # =====================
  208. # install external Python API
  209. RUN pip install grass-session
  210. # set GRASSBIN
  211. ENV GRASSBIN="/usr/local/bin/grass"
  212. # ========
  213. # FINALIZE
  214. # ========
  215. # Data workdir
  216. WORKDIR /grassdb
  217. VOLUME /grassdb
  218. # GRASS GIS specific
  219. # allow work with MAPSETs that are not owned by current user
  220. ENV GRASS_SKIP_MAPSET_OWNER_CHECK=1 \
  221. LC_ALL="en_US.UTF-8"
  222. # debug
  223. RUN $GRASSBIN --config svn_revision version
  224. CMD [$GRASSBIN, "--version"]