178 lines
8.2 KiB
Docker
178 lines
8.2 KiB
Docker
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=/opt/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 \
|
|
&& ( echo "f=\\\"\\\$SPACK_ROOT/share/spack/docker/handle-ssh.sh\\\"" \
|
|
&& echo "if [ -f \\\"\\\$f\\\" ]" \
|
|
&& echo "then" \
|
|
&& echo " . \\\"\\\$f\\\"" \
|
|
&& echo "else" \
|
|
&& cat $SPACK_ROOT/share/spack/docker/handle-ssh.sh \
|
|
&& echo "fi" ) \
|
|
>> /etc/profile.d/handle-ssh.sh \
|
|
&& ( echo "f=\\\"\\\$SPACK_ROOT/share/spack/docker/handle-prompt.sh\\\"" \
|
|
&& echo "if [ -f \\\"\\\$f\\\" ]" \
|
|
&& echo "then" \
|
|
&& echo " . \\\"\\\$f\\\"" \
|
|
&& echo "else" \
|
|
&& cat $SPACK_ROOT/share/spack/docker/handle-prompt.sh \
|
|
&& echo "fi" ) \
|
|
>> /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"]
|
|
|
|
# TODO: add a command to Spack that (re)creates the package cache
|
|
RUN spack spec hdf5+mpi
|
|
|
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
|
CMD ["docker-shell"]
|
|
|