summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorOmar Padron <omar.padron@kitware.com>2018-10-26 13:15:05 -0400
committerTodd Gamblin <tgamblin@llnl.gov>2018-10-26 10:15:05 -0700
commitaa1c814c7592c9e71f564181af3a8f2a115bd304 (patch)
tree7071718f8c473e9393c28211ca5d17634e6c43aa /share
parent734d903b0313e70f5d22959fdc34432643120d46 (diff)
downloadspack-aa1c814c7592c9e71f564181af3a8f2a115bd304.tar.gz
spack-aa1c814c7592c9e71f564181af3a8f2a115bd304.tar.bz2
spack-aa1c814c7592c9e71f564181af3a8f2a115bd304.tar.xz
spack-aa1c814c7592c9e71f564181af3a8f2a115bd304.zip
docker: unite Dockerfiles; auto-deploy images to DockerHub (#9329)
* Unite Dockerfiles - add build/run/push scripts * update docker documentation * update .travis.yml * switch to using a preprocessor on Dockerfiles * skip building docker images on pull requests * update files with copyright info * tweak when travis builds for docker files are done
Diffstat (limited to 'share')
-rw-r--r--share/spack/docker/.env1
-rw-r--r--share/spack/docker/Dockerfile132
-rwxr-xr-xshare/spack/docker/build-image.sh84
-rw-r--r--share/spack/docker/build/arch.dockerfile59
-rw-r--r--share/spack/docker/build/centos.dockerfile57
-rw-r--r--share/spack/docker/build/fedora.dockerfile56
-rw-r--r--share/spack/docker/build/opensuse.dockerfile65
-rw-r--r--share/spack/docker/build/scilinux.dockerfile62
-rw-r--r--share/spack/docker/build/ubuntu.dockerfile51
-rw-r--r--share/spack/docker/config/arch.bash18
-rw-r--r--share/spack/docker/config/centos.bash16
-rw-r--r--share/spack/docker/config/fedora.bash16
-rw-r--r--share/spack/docker/config/opensuse.bash16
-rw-r--r--share/spack/docker/config/scilinux.bash17
-rw-r--r--share/spack/docker/config/ubuntu.bash15
-rw-r--r--share/spack/docker/docker-compose.yml56
-rwxr-xr-xshare/spack/docker/dpp.bash77
-rwxr-xr-xshare/spack/docker/entrypoint.bash43
-rw-r--r--share/spack/docker/handle-prompt.sh (renamed from share/spack/docker/build/common/handle-prompt.sh)6
-rw-r--r--share/spack/docker/handle-ssh.sh (renamed from share/spack/docker/build/common/handle-ssh.sh)0
-rw-r--r--share/spack/docker/modules.yaml (renamed from share/spack/docker/build/common/modules.yaml)0
l---------share/spack/docker/push-image.sh1
l---------share/spack/docker/render-image-template.sh1
l---------share/spack/docker/run-image.sh1
24 files changed, 442 insertions, 408 deletions
diff --git a/share/spack/docker/.env b/share/spack/docker/.env
deleted file mode 100644
index 924ceb3f73..0000000000
--- a/share/spack/docker/.env
+++ /dev/null
@@ -1 +0,0 @@
-COMPOSE_PROJECT_NAME=spack
diff --git a/share/spack/docker/Dockerfile b/share/spack/docker/Dockerfile
new file mode 100644
index 0000000000..0c3b49f366
--- /dev/null
+++ b/share/spack/docker/Dockerfile
@@ -0,0 +1,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"]
+
diff --git a/share/spack/docker/build-image.sh b/share/spack/docker/build-image.sh
new file mode 100755
index 0000000000..fb12bdb833
--- /dev/null
+++ b/share/spack/docker/build-image.sh
@@ -0,0 +1,84 @@
+#! /usr/bin/env bash
+#
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+script="$( basename "$0" )"
+cd "$( dirname "$0" )"
+
+if [ -z "$BASE_IMAGE" ] ; then
+ BASE_IMAGE="ubuntu"
+fi
+
+if [ -z "$BASE_TAG" ] ; then
+ BASE_TAG="latest"
+fi
+
+if [ -z "$DISTRO" ] ; then
+ DISTRO="${BASE_IMAGE}"
+fi
+
+if [ -z "$DISTRO_VERSION" ] ; then
+ DISTRO_VERSION="${BASE_TAG}"
+fi
+
+if [ -z "$BASE_NAME" ] ; then
+ BASE_NAME="${DISTRO}"
+fi
+
+if [ "$BASE_TAG" '=' 'latest' ] ; then
+ BASE_TAG=""
+fi
+
+if [ -n "$BASE_TAG" ] ; then
+ BASE_TAG=":${BASE_TAG}"
+fi
+
+TAG="spack/${BASE_NAME}${BASE_TAG}"
+
+export BASE_IMAGE BASE_TAG DISTRO DISTRO_VERSION BASE_NAME TAG
+
+if [ "$script" '=' 'run-image.sh' ] ; then
+ com="docker run --rm -ti"
+
+ if [ -z "$DISABLE_MOUNT" ] ; then
+ DISABLE_MOUNT=1
+ if [ -z "$*" ] ; then
+ DISABLE_MOUNT=0
+ fi
+ fi
+
+ if [ "$DISABLE_MOUNT" '==' 0 ] ; then
+ com="${com} -v \"$( readlink -f ../../.. ):/spack\""
+ fi
+
+ eval "exec ${com}" "${TAG}" "$@"
+elif [ "$script" '=' 'render-image-template.sh' ] ; then
+ ./dpp.bash Dockerfile
+elif [ "$script" '=' 'push-image.sh' ] ; then
+ docker push "${TAG}"
+ for tag in ${EXTRA_TAGS} ; do
+ docker push "spack/${BASE_NAME}:${tag}"
+ done
+else
+ tag_options="-t ${TAG}"
+ for tag in ${EXTRA_TAGS} ; do
+ tag_options="${tag_options} -t spack/${BASE_NAME}:${tag}"
+ done
+
+ cache_options=""
+ if docker pull "${TAG}" ; then
+ cache_options="--cache-from ${TAG}"
+ fi
+
+ exec ./render-image-template.sh |
+ docker build -f - \
+ ${cache_options} \
+ ${tag_options} \
+ --build-arg BASE="${BASE_IMAGE}${BASE_TAG}" \
+ --build-arg DISTRO="${DISTRO}" \
+ --build-arg DISTRO_VERSION="${DISTRO_VERSION}" \
+ ../../..
+fi
diff --git a/share/spack/docker/build/arch.dockerfile b/share/spack/docker/build/arch.dockerfile
deleted file mode 100644
index 6aa9ac0118..0000000000
--- a/share/spack/docker/build/arch.dockerfile
+++ /dev/null
@@ -1,59 +0,0 @@
-FROM base/archlinux
-MAINTAINER Omar Padron <omar.padron@kitware.com>
-
-ENV SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- DISTRO=arch
-
-RUN pacman -Sy --noconfirm \
- base-devel \
- ca-certificates \
- curl \
- gcc \
- gcc-fortran \
- git \
- gnupg2 \
- iproute2 \
- make \
- openssh \
- python \
- sudo \
- tcl && \
- git clone --depth 1 git://github.com/spack/spack.git /spack && \
- 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 /spack/.git /etc/sudoers.d/nobody-sudo
-
-RUN ( cd /usr/share/lmod ; ln -s $( ls -d ./* | head -n 1 ) ./lmod )
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/build/centos.dockerfile b/share/spack/docker/build/centos.dockerfile
deleted file mode 100644
index 20c24b038f..0000000000
--- a/share/spack/docker/build/centos.dockerfile
+++ /dev/null
@@ -1,57 +0,0 @@
-FROM centos
-MAINTAINER Omar Padron <omar.padron@kitware.com>
-
-ENV SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- DISTRO=centos
-
-RUN yum update -y && \
- yum install -y epel-release && \
- yum update -y && \
- yum groupinstall -y "Development Tools" && \
- yum install -y \
- curl \
- findutils \
- gcc-c++ \
- gcc \
- gcc-gfortran \
- git \
- gnupg2 \
- hostname \
- iproute \
- Lmod \
- make \
- patch \
- openssh-server \
- python \
- tcl && \
- git clone --depth 1 git://github.com/spack/spack.git /spack && \
- rm -rf /spack/.git /var/cache/yum && yum clean all
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -f /run/nologin
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/build/fedora.dockerfile b/share/spack/docker/build/fedora.dockerfile
deleted file mode 100644
index bf06411d21..0000000000
--- a/share/spack/docker/build/fedora.dockerfile
+++ /dev/null
@@ -1,56 +0,0 @@
-FROM fedora:24
-MAINTAINER Omar Padron <omar.padron@kitware.com>
-
-ENV SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- 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 && \
- git clone --depth 1 git://github.com/spack/spack.git /spack && \
- rm -rf /spack/.git && dnf clean all
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -f /run/nologin
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/build/opensuse.dockerfile b/share/spack/docker/build/opensuse.dockerfile
deleted file mode 100644
index 46189a41c9..0000000000
--- a/share/spack/docker/build/opensuse.dockerfile
+++ /dev/null
@@ -1,65 +0,0 @@
-FROM opensuse
-MAINTAINER Omar Padron <omar.padron@kitware.com>
-
-ENV SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- 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-xml \
- tcl && \
- git clone --depth 1 git://github.com/spack/spack.git /spack && \
- zypper clean && \
- rm -rf /spack/.git /var/cache/zypp/*
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -f /run/nologin
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/build/scilinux.dockerfile b/share/spack/docker/build/scilinux.dockerfile
deleted file mode 100644
index 3827f5f60e..0000000000
--- a/share/spack/docker/build/scilinux.dockerfile
+++ /dev/null
@@ -1,62 +0,0 @@
-FROM sl:7
-MAINTAINER Patrick Gartung (gartung@fnal.gov)
-
-ENV SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- DISTRO=rhel7 \
- container=docker
-
-RUN yum update -y && \
- yum install -y yum-conf-repos.noarch && \
- yum update -y && \
- yum -y install 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 \
- tcl
-RUN git clone --depth=1 git://github.com/spack/spack.git /spack && \
- rm -rf /var/cache/yum /spack/.git && yum clean all
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -f /run/nologin
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/build/ubuntu.dockerfile b/share/spack/docker/build/ubuntu.dockerfile
deleted file mode 100644
index ac608ddd12..0000000000
--- a/share/spack/docker/build/ubuntu.dockerfile
+++ /dev/null
@@ -1,51 +0,0 @@
-FROM ubuntu
-MAINTAINER Omar Padron <omar.padron@kitware.com>
-
-ENV DEBIAN_FRONTEND=noninteractive \
- SPACK_ROOT=/spack \
- FORCE_UNSAFE_CONFIGURE=1 \
- DISTRO=ubuntu
-
-RUN apt-get -yqq update && apt-get -yqq install \
- build-essential \
- ca-certificates \
- curl \
- g++ \
- gcc \
- gfortran \
- git \
- gnupg2 \
- lmod \
- make \
- openssh-server \
- python \
- tcl && \
- git clone --depth 1 git://github.com/spack/spack.git /spack && \
- rm -rf /spack/.git && rm -rf /var/lib/apt/lists/*
-
-RUN echo "source /usr/share/lmod/lmod/init/bash" \
- > /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/setup-env.sh" \
- >> /etc/profile.d/spack.sh
-RUN echo "source /spack/share/spack/spack-completion.bash" \
- >> /etc/profile.d/spack.sh
-COPY common/handle-ssh.sh /etc/profile.d/handle-ssh.sh
-COPY common/handle-prompt.sh /etc/profile.d/handle-prompt.sh.source
-
-
-RUN ( \
- echo "export DISTRO=$DISTRO" ; \
- echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \
- echo "then" ; \
- echo "source /etc/profile.d/handle-prompt.sh.source" ; \
- echo "fi" ; \
-) > /etc/profile.d/handle-prompt.sh
-
-RUN mkdir -p /root/.spack
-COPY common/modules.yaml /root/.spack/modules.yaml
-
-RUN rm -rf /root/*.*
-
-WORKDIR /root
-ENTRYPOINT ["bash"]
-CMD ["-l"]
diff --git a/share/spack/docker/config/arch.bash b/share/spack/docker/config/arch.bash
new file mode 100644
index 0000000000..3cb2951c4b
--- /dev/null
+++ b/share/spack/docker/config/arch.bash
@@ -0,0 +1,18 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset DISTRO_VERSION
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE="base/archlinux"
+export BASE_NAME="archlinux"
+export BASE_TAG="2018.10.01"
+export DISTRO="arch"
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/config/centos.bash b/share/spack/docker/config/centos.bash
new file mode 100644
index 0000000000..bef7ad276b
--- /dev/null
+++ b/share/spack/docker/config/centos.bash
@@ -0,0 +1,16 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset DISTRO_VERSION
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE=centos
+export BASE_TAG="7"
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/config/fedora.bash b/share/spack/docker/config/fedora.bash
new file mode 100644
index 0000000000..fcf7425693
--- /dev/null
+++ b/share/spack/docker/config/fedora.bash
@@ -0,0 +1,16 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset DISTRO_VERSION
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE=fedora
+export BASE_TAG="24"
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/config/opensuse.bash b/share/spack/docker/config/opensuse.bash
new file mode 100644
index 0000000000..b0e11c17ac
--- /dev/null
+++ b/share/spack/docker/config/opensuse.bash
@@ -0,0 +1,16 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset DISTRO_VERSION
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE=opensuse
+export BASE_TAG="tumbleweed"
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/config/scilinux.bash b/share/spack/docker/config/scilinux.bash
new file mode 100644
index 0000000000..71fd737f69
--- /dev/null
+++ b/share/spack/docker/config/scilinux.bash
@@ -0,0 +1,17 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE=sl
+export BASE_TAG="7"
+export BASE_NAME=scilinux
+export DISTRO=rhel7
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/config/ubuntu.bash b/share/spack/docker/config/ubuntu.bash
new file mode 100644
index 0000000000..588848fb40
--- /dev/null
+++ b/share/spack/docker/config/ubuntu.bash
@@ -0,0 +1,15 @@
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+unset DISTRO
+unset BASE_IMAGE
+unset BASE_NAME
+unset BASE_TAG
+unset TAG
+unset EXTRA_TAGS
+
+export BASE_IMAGE=ubuntu
+export BASE_TAG="bionic"
+export EXTRA_TAGS="latest"
diff --git a/share/spack/docker/docker-compose.yml b/share/spack/docker/docker-compose.yml
deleted file mode 100644
index 4f37127e3f..0000000000
--- a/share/spack/docker/docker-compose.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-version: '3'
-services:
- arch:
- build:
- context: build
- dockerfile: arch.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- centos:
- build:
- context: build
- dockerfile: centos.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- fedora:
- build:
- context: build
- dockerfile: fedora.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- opensuse:
- build:
- context: build
- dockerfile: opensuse.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- scilinux:
- build:
- context: build
- dockerfile: scilinux.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- scilinux:
- build: ./spack_scilinux
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
- ubuntu:
- build:
- context: build
- dockerfile: ubuntu.dockerfile
- volumes:
- - '../../..:/spack'
- environment:
- PROMPT: "${PROMPT:-0}"
diff --git a/share/spack/docker/dpp.bash b/share/spack/docker/dpp.bash
new file mode 100755
index 0000000000..f41a9c5260
--- /dev/null
+++ b/share/spack/docker/dpp.bash
@@ -0,0 +1,77 @@
+#! /usr/bin/env bash
+#
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+function prefix_tokens() {
+ line="$1" ; shift
+ nprefix="$1"
+
+ line="${line::$nprefix} "
+ echo "${line::$nprefix}"
+}
+
+
+# read file contents, or stdin
+cat "$1" |
+
+# remove blank lines
+grep -v '^ *$' |
+
+# remove leading whitespace
+sed 's/^ *//g' |
+
+# remove comments
+grep -v '^#.*' |
+
+# remove trailing whitespace
+sed 's/ *$//g' |
+
+# remove extraneous whitespace
+sed 's/ */ /g' |
+
+# mask out subsections
+(
+ stack_level=1
+ mask_level=1
+
+ while read LINE ; do
+ try_print=1
+
+ if [ "$( prefix_tokens "$LINE" 10 )" '=' 'MASK PUSH ' ] ; then
+ tmp="$stack_level"
+ stack_level="$(( stack_level + 1 ))"
+ if [ "$mask_level" '=' "$tmp" ] ; then
+ mask_level="$stack_level"
+ fi
+ try_print=0
+ elif [ "$( prefix_tokens "$LINE" 9 )" '=' 'MASK POP ' ] ; then
+ stack_level="$(( stack_level - 1 ))"
+ if [ "$mask_level" -gt "$stack_level" ] ; then
+ mask_level="$stack_level"
+ fi
+ try_print=0
+ elif [ "$( prefix_tokens "$LINE" 5 )" '=' 'MASK ' ] ; then
+ if [ "$(( mask_level + 1 ))" -ge "$stack_level" ] ; then
+ mask_level="$stack_level"
+ eval "${LINE:5}"
+ if [ "$?" '!=' 0 ] ; then
+ mask_level="$(( mask_level - 1 ))"
+ fi
+ fi
+ try_print=0
+ fi
+
+ if [ "$stack_level" -lt 1 ] ; then
+ stack_level=1
+ mask_level=0
+ fi
+
+ if [ "$try_print" '=' 1 -a "$mask_level" '=' "$stack_level" ] ; then
+ echo "$LINE"
+ fi
+ done
+)
+
diff --git a/share/spack/docker/entrypoint.bash b/share/spack/docker/entrypoint.bash
new file mode 100755
index 0000000000..58d6281084
--- /dev/null
+++ b/share/spack/docker/entrypoint.bash
@@ -0,0 +1,43 @@
+#! /usr/bin/env bash -e
+#
+# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+if [ "$1" '=' 'docker-shell' ] ; then
+ if [ -t 0 ] ; then
+ exec bash -il
+ else
+ (
+ echo -n "It looks like you're trying to run an intractive shell"
+ echo -n " session, but either no psuedo-TTY is allocateed for this"
+ echo -n " container's STDIN, or it is closed."
+ echo
+
+ echo -n "Make sure you run docker with the --interactive and --tty"
+ echo -n " options."
+ echo
+ ) >&2
+
+ exit 1
+ fi
+else
+ exec 3>&1
+ exec 4>&2
+
+ exec 1>&-
+ exec 2>&-
+
+ source /etc/profile.d/spack.sh
+ source /etc/profile.d/handle-ssh.sh
+
+ exec 1>&3
+ exec 2>&4
+
+ exec 3>&-
+ exec 4>&-
+
+ spack "$@"
+ exit $?
+fi
diff --git a/share/spack/docker/build/common/handle-prompt.sh b/share/spack/docker/handle-prompt.sh
index 5a4910e3fa..d523ac3a31 100644
--- a/share/spack/docker/build/common/handle-prompt.sh
+++ b/share/spack/docker/handle-prompt.sh
@@ -3,6 +3,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+if [ x$SPACK_PROMPT '!=' x0 ] ; then
+
__tmp="`mktemp -d`"
__trylock() {
@@ -83,7 +85,7 @@ __git_head() {
__update_prompt() {
local prompt
prompt=''
- linux_distro="$DISTRO"
+ linux_distro="$DOCKERFILE_DISTRO"
if [ -n "$linux_distro" ] ; then
linux_distro='\[\e[1;34m\][\[\e[0;34m\]'"$linux_distro"'\[\e[1;34m\]]'
if [ -n "$prompt" ] ; then
@@ -163,3 +165,5 @@ __update_prompt_main() {
}
PROMPT_COMMAND=__update_prompt_main
+
+fi # [ x$SPACK_PROMPT '!=' x0 ]
diff --git a/share/spack/docker/build/common/handle-ssh.sh b/share/spack/docker/handle-ssh.sh
index f2139897cb..f2139897cb 100644
--- a/share/spack/docker/build/common/handle-ssh.sh
+++ b/share/spack/docker/handle-ssh.sh
diff --git a/share/spack/docker/build/common/modules.yaml b/share/spack/docker/modules.yaml
index 02907ecc40..02907ecc40 100644
--- a/share/spack/docker/build/common/modules.yaml
+++ b/share/spack/docker/modules.yaml
diff --git a/share/spack/docker/push-image.sh b/share/spack/docker/push-image.sh
new file mode 120000
index 0000000000..9e5dfdf52d
--- /dev/null
+++ b/share/spack/docker/push-image.sh
@@ -0,0 +1 @@
+./build-image.sh \ No newline at end of file
diff --git a/share/spack/docker/render-image-template.sh b/share/spack/docker/render-image-template.sh
new file mode 120000
index 0000000000..9e5dfdf52d
--- /dev/null
+++ b/share/spack/docker/render-image-template.sh
@@ -0,0 +1 @@
+./build-image.sh \ No newline at end of file
diff --git a/share/spack/docker/run-image.sh b/share/spack/docker/run-image.sh
new file mode 120000
index 0000000000..b3fd71be24
--- /dev/null
+++ b/share/spack/docker/run-image.sh
@@ -0,0 +1 @@
+build-image.sh \ No newline at end of file