summaryrefslogtreecommitdiff
path: root/share/spack/docker/Dockerfile
blob: 0c3b49f3665eb72fc5d2a0810613945785b63650 (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
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            \
    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 -Sy --noconfirm                                     \
        base-devel   ca-certificates curl   gcc                \
        gcc-fortran  git             gnupg2 iproute2           \
        make         openssh         python python-pip         \
        sudo         tcl                                       \
 && echo 'nobody ALL=(ALL) NOPASSWD: ALL' >                    \
        /etc/sudoers.d/nobody-sudo                             \
 && sudo -u nobody git clone --depth 1                         \
        https://aur.archlinux.org/lua-posix.git /tmp/lua-posix \
 && sudo -u nobody git clone --depth 1                         \
        https://aur.archlinux.org/lmod.git /tmp/lmod           \
 && (  cd /tmp/lua-posix                                       \
    && sudo -u nobody makepkg -si --asdeps --noconfirm )       \
 && (  cd /tmp/lmod                                            \
    && sudo -u nobody makepkg -si --noconfirm )                \
 && rm -rf /tmp/lua-posix /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 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              \
 && 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                     \
 && 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                                        \
 && 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

  MASK PUSH
  MASK [[ $DISTRO_VERSION == bionic ]]
  # [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 ". $SPACK_ROOT/share/spack/spack-completion.bash" )      \
        >> /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

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