summaryrefslogtreecommitdiff
path: root/share/spack/docker/Dockerfile
blob: 824403f2d2de7a3a1b6867d6c5cbf231039fd601 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
ARG BASE

FROM $BASE
MAINTAINER Spack Maintainers <maintainers@spack.io>

ARG BASE
ARG DISTRO
ARG DISTRO_VERSION

ENV DOCKERFILE_BASE=$BASE                     \
    DOCKERFILE_DISTRO=$DISTRO                 \
    DOCKERFILE_DISTRO_VERSION=$DISTRO_VERSION \
    SPACK_ROOT=/spack                         \
    FORCE_UNSAFE_CONFIGURE=1                  \
    DEBIAN_FRONTEND=noninteractive            \
    CURRENTLY_BUILDING_DOCKER_IMAGE=1         \
    container=docker

COPY bin   $SPACK_ROOT/bin
COPY etc   $SPACK_ROOT/etc
COPY lib   $SPACK_ROOT/lib
COPY share $SPACK_ROOT/share
COPY var   $SPACK_ROOT/var
RUN mkdir -p $SPACK_ROOT/opt/spack

MASK PUSH
MASK [[ $DISTRO == arch ]]
RUN pacman -Syu --noconfirm                                    \
 && pacman -Sy --noconfirm                                     \
        base-devel   ca-certificates curl    gcc               \
        gcc-fortran  git             gnupg2  inetutils         \
        iproute2     make            openssh procps-ng         \
        python       python-pip      sudo    tcl               \
        unzip                                                  \
 && echo 'nobody ALL=(ALL) NOPASSWD: ALL' >                    \
        /etc/sudoers.d/nobody-sudo                             \
 && sudo -u nobody git clone                                   \
        'https://aur.archlinux.org/lua-std-_debug.git'         \
        '/tmp/lua-std-_debug'                                  \
 && sudo -u nobody git clone                                   \
        'https://aur.archlinux.org/lua-std-normalize.git'      \
        '/tmp/lua-std-normalize'                               \
 && sudo -u nobody git clone                                   \
        'https://aur.archlinux.org/lua-posix.git'              \
        '/tmp/lua-posix'                                       \
 && (  cd /tmp/lua-std-_debug                                  \
 &&    sudo -u nobody makepkg -si --asdeps --noconfirm )       \
 && (  cd /tmp/lua-std-normalize                               \
 &&    sudo -u nobody makepkg -si --asdeps --noconfirm )       \
 && (  cd /tmp/lua-posix                                       \
 &&    sudo -u nobody makepkg -si --asdeps --noconfirm )       \
 && sudo -u nobody git clone                                   \
        'https://aur.archlinux.org/lmod.git' '/tmp/lmod'       \
 && (  cd /tmp/lmod                                            \
 &&    sudo -u nobody makepkg -si --noconfirm )                \
 && rm -rf /tmp/lua-std-_debug /tmp/lua-std-normalize          \
           /tmp/lmod /etc/sudoers.d/nobody-sudo

MASK [[ $DISTRO =~ (centos|rhel.*) ]]
RUN yum update -y

  MASK PUSH
  MASK [[ $DISTRO =~ rhel.* ]]
  RUN (  yum install -y yum-conf-repos.noarch                         \
   ||    yum install -y yum-conf-epel.noarch yum-conf-elrepo.noarch ) \
   && yum update -y
  MASK POP

RUN yum install -y epel-release                               \
 && yum update -y                                             \
 && yum --enablerepo epel groupinstall -y "Development Tools" \
 && yum --enablerepo epel install -y                          \
        curl           findutils gcc-c++    gcc               \
        gcc-gfortran   git       gnupg2     hostname          \
        iproute        Lmod      make       patch             \
        openssh-server python    python-pip tcl               \
        unzip                                                 \
 && rm -rf /var/cache/yum                                     \
 && yum clean all

MASK [[ $DISTRO == fedora ]]
RUN dnf update -y                                            \
 && dnf group install -y "C Development Tools and Libraries" \
 && dnf install -y                                           \
        @development-tools                                   \
        curl            findutils    gcc-c++     gcc         \
        gcc-gfortran    git          gnupg2      hostname    \
        iproute         Lmod         make        patch       \
        openssh-server  python       tcl         unzip       \
 && dnf clean all

MASK [[ $DISTRO == opensuse ]]
RUN zypper -n ref                                              \
 && zypper -n up --skip-interactive --no-recommends            \
 && zypper -n install -l --no-recommends --type pattern        \
        devel_basis  devel_C_C++                               \
 && zypper -n install -l --no-recommends                       \
        bash        bash-completion ca-certificates curl       \
        findutils   gcc             gcc-locale      gcc-c++    \
        gcc-fortran git             glibc-locale    gpg2       \
        hostname    iproute         lua-lmod        make       \
        patch       openssh         python          python-pip \
        python-xml  tcl             unzip                      \
 && zypper clean                                               \
 && rm -rf /var/cache/zypp/*

MASK [[ $DISTRO == ubuntu ]]
RUN apt-get -yqq update                                   \
 && apt-get -yqq install                                  \
        build-essential ca-certificates curl       g++    \
        gcc             gfortran        git        gnupg2 \
        iproute2        lmod            lua-posix  make   \
        openssh-server  python          python-pip tcl    \
        unzip

  MASK PUSH
  MASK [[ $DISTRO_VERSION == 18.04 ]]
  # [WORKAROUND]
  # https://bugs.launchpad.net/ubuntu/+source/lua-posix/+bug/1752082
  RUN ln -s posix_c.so /usr/lib/x86_64-linux-gnu/lua/5.2/posix.so
  MASK POP

RUN rm -rf /var/lib/apt/lists/*

MASK POP

RUN rm -rf $SPACK_ROOT/.git                                          \
 && pip install boto3                                                \
 && (  echo ". /usr/share/lmod/lmod/init/bash"                       \
    && echo ". $SPACK_ROOT/share/spack/setup-env.sh"                 \
    && echo "if [ \"\$CURRENTLY_BUILDING_DOCKER_IMAGE\" '!=' '1' ]"  \
    && echo "then"                                                   \
    && echo "  . $SPACK_ROOT/share/spack/spack-completion.bash"      \
    && echo "fi"                                                   ) \
        >> /etc/profile.d/spack.sh                                   \
 && ln -s $SPACK_ROOT/share/spack/docker/handle-ssh.sh               \
        /etc/profile.d/handle-ssh.sh                                 \
 && ln -s $SPACK_ROOT/share/spack/docker/handle-prompt.sh            \
        /etc/profile.d/handle-prompt.sh                              \
 && mkdir -p /root/.spack                                            \
 && cp $SPACK_ROOT/share/spack/docker/modules.yaml                   \
        /root/.spack/modules.yaml                                    \
 && rm -rf /root/*.*

MASK PUSH
MASK [[ $DISTRO_VERSION =~ (centos|fedora|opensuse|rhel.*) ]]
RUN rm -f /run/nologin
MASK POP

# [WORKAROUND]
# https://superuser.com/questions/1241548/
#     xubuntu-16-04-ttyname-failed-inappropriate-ioctl-for-device#1253889
RUN [ -f ~/.profile ]                                               \
 && sed -i 's/mesg n/( tty -s \\&\\& mesg n || true )/g' ~/.profile \
 || true

WORKDIR /root
SHELL ["/bin/bash", "-l", "-c"]
ENTRYPOINT ["/bin/bash", "/spack/share/spack/docker/entrypoint.bash"]
CMD ["docker-shell"]