From aa1c814c7592c9e71f564181af3a8f2a115bd304 Mon Sep 17 00:00:00 2001 From: Omar Padron Date: Fri, 26 Oct 2018 13:15:05 -0400 Subject: [PATCH] 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 --- .dockerignore | 6 + .travis.yml | 28 ++++ lib/spack/docs/docker_for_developers.rst | 17 +-- share/spack/docker/.env | 1 - share/spack/docker/Dockerfile | 132 ++++++++++++++++++ share/spack/docker/build-image.sh | 84 +++++++++++ share/spack/docker/build/arch.dockerfile | 59 -------- share/spack/docker/build/centos.dockerfile | 57 -------- share/spack/docker/build/fedora.dockerfile | 56 -------- share/spack/docker/build/opensuse.dockerfile | 65 --------- share/spack/docker/build/scilinux.dockerfile | 62 -------- share/spack/docker/build/ubuntu.dockerfile | 51 ------- share/spack/docker/config/arch.bash | 18 +++ share/spack/docker/config/centos.bash | 16 +++ share/spack/docker/config/fedora.bash | 16 +++ share/spack/docker/config/opensuse.bash | 16 +++ share/spack/docker/config/scilinux.bash | 17 +++ share/spack/docker/config/ubuntu.bash | 15 ++ share/spack/docker/docker-compose.yml | 56 -------- share/spack/docker/dpp.bash | 77 ++++++++++ share/spack/docker/entrypoint.bash | 43 ++++++ .../{build/common => }/handle-prompt.sh | 6 +- .../docker/{build/common => }/handle-ssh.sh | 0 .../docker/{build/common => }/modules.yaml | 0 share/spack/docker/push-image.sh | 1 + share/spack/docker/render-image-template.sh | 1 + share/spack/docker/run-image.sh | 1 + 27 files changed, 483 insertions(+), 418 deletions(-) create mode 100644 .dockerignore delete mode 100644 share/spack/docker/.env create mode 100644 share/spack/docker/Dockerfile create mode 100755 share/spack/docker/build-image.sh delete mode 100644 share/spack/docker/build/arch.dockerfile delete mode 100644 share/spack/docker/build/centos.dockerfile delete mode 100644 share/spack/docker/build/fedora.dockerfile delete mode 100644 share/spack/docker/build/opensuse.dockerfile delete mode 100644 share/spack/docker/build/scilinux.dockerfile delete mode 100644 share/spack/docker/build/ubuntu.dockerfile create mode 100644 share/spack/docker/config/arch.bash create mode 100644 share/spack/docker/config/centos.bash create mode 100644 share/spack/docker/config/fedora.bash create mode 100644 share/spack/docker/config/opensuse.bash create mode 100644 share/spack/docker/config/scilinux.bash create mode 100644 share/spack/docker/config/ubuntu.bash delete mode 100644 share/spack/docker/docker-compose.yml create mode 100755 share/spack/docker/dpp.bash create mode 100755 share/spack/docker/entrypoint.bash rename share/spack/docker/{build/common => }/handle-prompt.sh (96%) rename share/spack/docker/{build/common => }/handle-ssh.sh (100%) rename share/spack/docker/{build/common => }/modules.yaml (100%) create mode 120000 share/spack/docker/push-image.sh create mode 120000 share/spack/docker/render-image-template.sh create mode 120000 share/spack/docker/run-image.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..7dc5a44b2e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git +opt/spack +share/spack/docker/Dockerfile +share/spack/docker/build-image.sh +share/spack/docker/run-image.sh +share/spack/docker/push-image.sh diff --git a/.travis.yml b/.travis.yml index 34d8e5c3d3..d9216fed87 100644 --- a/.travis.yml +++ b/.travis.yml @@ -108,6 +108,11 @@ jobs: os: linux language: python env: [ TEST_SUITE=build, 'SPEC=mpich' ] + - stage: 'docker build' + sudo: required + os: linux + language: generic + env: TEST_SUITE=docker allow_failures: - dist: xenial @@ -115,6 +120,8 @@ stages: - 'style checks' - 'unit tests + documentation' - 'build tests' + - name: 'docker build' + if: type = push AND branch IN (develop, master) #============================================================================= @@ -187,8 +194,29 @@ before_script: #============================================================================= # Building #============================================================================= +services: + - docker + script: - share/spack/qa/run-$TEST_SUITE-tests + - if [[ "$TEST_SUITE" == "docker build" ]]; then + login_attempted=0; login_success=0; + for config in share/spack/docker/config/* ; do + source "$config" ; + ./share/spack/docker/build-image.sh; + if [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then + if [ "$login_attempted" '=' '0' ]; then + if echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; then + login_success=1; + fi; + login_attempted=1; + fi; + if [ "$login_success" '=' '1' ]; then + ./share/spack/docker/push-image.sh; + fi + fi + done; + fi - if [[ "$TEST_SUITE" == "unit" || "$TEST_SUITE" == "build" ]]; then codecov --env PYTHON_VERSION --required --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; diff --git a/lib/spack/docs/docker_for_developers.rst b/lib/spack/docs/docker_for_developers.rst index 70d5183011..2f1b5a949a 100644 --- a/lib/spack/docs/docker_for_developers.rst +++ b/lib/spack/docs/docker_for_developers.rst @@ -17,13 +17,13 @@ meant to serve as the companion documentation for the :ref:`packaging-guide`. Overview -------- -To get started, all you need is the latest version of ``docker`` and -``docker-compose``. +To get started, all you need is the latest version of ``docker``. .. code-block:: console $ cd share/spack/docker - $ docker-compose run --rm ubuntu + $ source config/ubuntu.bash + $ ./run-image.sh This command should drop you into an interactive shell where you can run spack within an isolated docker container running ubuntu. The copy of spack being @@ -32,13 +32,10 @@ you make should be immediately reflected in the running docker container. Feel free to add or modify any packages or to hack on spack, itself. Your contained copy of spack should immediately reflect all changes. -To work within a container running a different linux distro, change the "ubuntu" -argument to any one of the services listed under the ``docker-compose.yml`` -file. +To work within a container running a different linux distro, source one of the +other environment files under ``config``. .. code-block:: console - $ docker-compose config --services - fedora - ubuntu - $ docker-compose run --rm fedora + $ source config/fedora.bash + $ ./run-image.sh 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 + +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 - -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 - -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 - -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 - -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 - -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 similarity index 96% rename from share/spack/docker/build/common/handle-prompt.sh rename to 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 similarity index 100% rename from share/spack/docker/build/common/handle-ssh.sh rename to share/spack/docker/handle-ssh.sh diff --git a/share/spack/docker/build/common/modules.yaml b/share/spack/docker/modules.yaml similarity index 100% rename from share/spack/docker/build/common/modules.yaml rename to 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