1FROM neurodebian:nd18.04@sha256:3b3f09ca5387f479f144a2e45fb191afa9c9f7c1bd0f03ac90941834a4e5a616
2# FROM thewtex/opengl:ubuntu1804@sha256:b9de45d4f594b57136f7ec3b890567ecea1421278ee4c7be80e11888bf8d23ba
3
4ENV DEBIAN_FRONTEND=noninteractive
5ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
6
7
8RUN apt-get update && apt-get install -y wget sudo locales \
9    && apt-get clean \
10    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
11# The gpg key import is a little flaky...
12# COPY .docker/neurodebian.gpg /usr/local/etc/neurodebian.gpg
13# RUN wget  -O- http://neuro.debian.net/lists/bionic.us-nh.full > /etc/apt/sources.list.d/neurodebian.sources.list && \
14#     apt-key add /usr/local/etc/neurodebian.gpg && \
15#     (apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true)
16
17# Configure environment
18RUN ln -sf  /bin/bash /bin/sh # use bash by default
19ENV SHELL=/bin/bash \
20    CONTAINER_USER="afni_user" \
21    CONTAINER_UID="1000" \
22    CONTAINER_GID="100" \
23    PYTHONUSERBASE=/opt/user_pip_packages \
24    TINI_SUBREAPER="" \
25    LANG="en_US.UTF-8" \
26    LC_ALL="en_US.UTF-8" \
27    AFNI_ROOT=/opt/afni/src
28
29ENV DESTDIR="$AFNI_ROOT/../install" \
30    PATH="$PYTHONUSERBASE/bin:$PATH" \
31    HOME=/home/$CONTAINER_USER
32# For any variables that should be present for all users of the container they
33# should be set in /etc/environment (variables set by ENV do not cleanly
34# propagate to all users). Should do this for PATH again later in the dockerfile (or
35# child files)
36ENV PRESERVED_VARS "PYTHONUSERBASE AFNI_ROOT DESTDIR PATH TINI_SUBREAPER LC_ALL"
37RUN bash -c 'for val in $PRESERVED_VARS;do \
38             echo $val=${!val} >> /etc/environment ; \
39             done'
40
41# Copy a script that we will use to correct permissions after running certain commands
42COPY .docker/fix-permissions /usr/local/bin/fix-permissions
43RUN chmod a+rx /usr/local/bin/fix-permissions
44
45# Add a lightweight init for container
46RUN wget https://github.com/krallin/tini/releases/download/v0.19.0/tini-static -O /usr/local/bin/tini && chmod a+x /usr/local/bin/tini
47
48# Enable prompt color in the skeleton .bashrc before creating the default CONTAINER_USER
49RUN sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' /etc/skel/.bashrc
50
51RUN echo "auth requisite pam_deny.so" >> /etc/pam.d/su && \
52    sed -i.bak -e 's/^%admin/#%admin/' /etc/sudoers && \
53    sed -i.bak -e 's/^%sudo/#%sudo/' /etc/sudoers && \
54    useradd -m -s /bin/bash -N -u $CONTAINER_UID $CONTAINER_USER && \
55    chmod g+w /etc/passwd && \
56    fix-permissions $HOME \
57    && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
58        && dpkg-reconfigure --frontend=noninteractive locales \
59        && update-locale LANG="en_US.UTF-8"
60
61# Install runtime and basic dependencies
62RUN apt-get update && apt-get install -y eatmydata && \
63    eatmydata apt-get install -y --no-install-recommends \
64    ca-certificates \
65    curl \
66    freeglut3-dev \
67    git \
68    libf2c2-dev \
69    libglew-dev \
70    libglib2.0-dev \
71    libglu1-mesa-dev \
72    libglw1-mesa-dev \
73    libgsl-dev \
74    libgts-dev \
75    libjpeg62-dev \
76    libmotif-dev \
77    libxi-dev \
78    libxmhtml-dev \
79    libxmu-dev \
80    libxpm-dev \
81    libxt-dev \
82    python3-rpy2 \
83    python3-wxgtk4.0 \
84    python3.6-dev \
85    qhull-bin \
86    r-base \
87    tcsh \
88    xvfb \
89    && apt-get clean \
90    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
91
92# Install development dependencies
93RUN apt-get update && apt-get install -y eatmydata && \
94    eatmydata apt-get install -y --no-install-recommends \
95    build-essential \
96    bzip2 \
97    f2c \
98    g++ \
99    gcc \
100    git-annex-standalone \
101    libtool \
102    m4 \
103    ncurses-dev \
104    ninja-build \
105    pkg-config \
106    && apt-get clean \
107    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
108
109# Install test dependencies and some useful tools
110RUN apt-get update && apt-get install -y eatmydata && \
111    eatmydata apt-get install -y --no-install-recommends \
112    gdb \
113    rsync \
114    tree \
115    valgrind \
116    vim \
117    x11-apps \
118    && apt-get clean \
119    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
120
121# set non interactive backend for matplotlib
122RUN mkdir -p /root/.config/matplotlib \
123    && echo "backend: Agg" > /root/.config/matplotlib/matplotlibrc
124
125RUN ln -s /usr/bin/python3 /usr/bin/python
126COPY .docker/start.sh /usr/local/bin
127RUN mkdir /usr/local/bin/image_startup.d && fix-permissions /usr/local/bin/image_startup.d
128RUN fix-permissions /opt
129USER $CONTAINER_UID
130
131
132###### Switch to non privileged user ######
133RUN bash -c 'mkdir -p $AFNI_ROOT/../{build,src,install} && fix-permissions $AFNI_ROOT/../..'
134
135ENV CMAKE_VER=3.14.7
136RUN wget -P /opt/cmake  https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \
137  ; cd /opt/cmake \
138  ; tar xzvf cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \
139  ;rm -fr cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \
140  && fix-permissions /opt
141ENV PATH="/opt/cmake/cmake-${CMAKE_VER}-Linux-x86_64/bin:$PATH"
142
143RUN mkdir $PYTHONUSERBASE
144# Add some more test dependencies
145RUN curl -fsSL https://bootstrap.pypa.io/get-pip.py \
146     | python3 - --no-cache-dir --prefix $PYTHONUSERBASE
147RUN python3 -m pip install \
148      --no-cache-dir \
149        autopep8 \
150        black==20.8b1 \
151        codecov \
152        cython \
153        datalad \
154        distro \
155        docker \
156        filelock \
157        gcovr \
158        ipython \
159        matplotlib \
160        nibabel \
161        'numpy>=1.14.5' \
162        pandas \
163        pdbpp \
164        pytest \
165        pytest-cov \
166        pytest-xdist \
167        scipy \
168        git+git://github.com/leej3/xvfbwrapper.git@add_support_for_xquartz_and_multi_threading \
169  && fix-permissions /opt \
170  && git config --global user.name "Docker Almighty" \
171  && git config --global user.email "nobody@example.com" \
172  && datalad wtf
173
174
175# add pdb alias ipy for easier pdb debugging
176RUN echo 'alias ipy from IPython import embed;embed()' >> ~/.pdbrc
177RUN mkdir $HOME/work && fix-permissions $HOME/work
178WORKDIR $HOME/
179
180ENTRYPOINT ["tini", "-g", "start.sh", "--"]
181
182