fix docker image entrypoints (#17105)
Also removes extraneous prompt and ssh handling logic.
This commit is contained in:
parent
0095c4c25c
commit
e816b66c94
@ -16,46 +16,42 @@ COPY share $SPACK_ROOT/share
|
|||||||
COPY var $SPACK_ROOT/var
|
COPY var $SPACK_ROOT/var
|
||||||
RUN mkdir -p $SPACK_ROOT/opt/spack
|
RUN mkdir -p $SPACK_ROOT/opt/spack
|
||||||
|
|
||||||
RUN yum update -y \
|
RUN ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
&& yum install -y epel-release \
|
/usr/local/bin/docker-shell \
|
||||||
&& yum update -y \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
|
/usr/local/bin/interactive-shell \
|
||||||
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
|
/usr/local/bin/spack-env
|
||||||
|
|
||||||
|
RUN yum update -y \
|
||||||
|
&& yum install -y epel-release \
|
||||||
|
&& yum update -y \
|
||||||
&& yum --enablerepo epel groupinstall -y "Development Tools" \
|
&& yum --enablerepo epel groupinstall -y "Development Tools" \
|
||||||
&& yum --enablerepo epel install -y \
|
&& yum --enablerepo epel install -y \
|
||||||
curl findutils gcc-c++ gcc \
|
curl \
|
||||||
gcc-gfortran git gnupg2 hostname \
|
findutils \
|
||||||
iproute Lmod make patch \
|
gcc-c++ \
|
||||||
openssh-server python python-pip tcl \
|
gcc \
|
||||||
unzip which \
|
gcc-gfortran \
|
||||||
&& pip install boto3 \
|
git \
|
||||||
&& rm -rf /var/cache/yum \
|
gnupg2 \
|
||||||
|
hostname \
|
||||||
|
iproute \
|
||||||
|
Lmod \
|
||||||
|
make \
|
||||||
|
patch \
|
||||||
|
python \
|
||||||
|
python-pip \
|
||||||
|
tcl \
|
||||||
|
unzip \
|
||||||
|
which \
|
||||||
|
&& pip install boto3 \
|
||||||
|
&& rm -rf /var/cache/yum \
|
||||||
&& yum clean all
|
&& yum clean all
|
||||||
|
|
||||||
RUN ( echo ". /usr/share/lmod/lmod/init/bash" \
|
RUN mkdir -p /root/.spack \
|
||||||
&& echo ". \$SPACK_ROOT/share/spack/setup-env.sh" \
|
&& cp $SPACK_ROOT/share/spack/docker/modules.yaml \
|
||||||
&& echo "if [ \"\$CURRENTLY_BUILDING_DOCKER_IMAGE\" '!=' '1' ]" \
|
/root/.spack/modules.yaml \
|
||||||
&& 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/*.* /run/nologin $SPACK_ROOT/.git
|
&& rm -rf /root/*.* /run/nologin $SPACK_ROOT/.git
|
||||||
|
|
||||||
# [WORKAROUND]
|
# [WORKAROUND]
|
||||||
@ -66,10 +62,10 @@ RUN [ -f ~/.profile ] \
|
|||||||
|| true
|
|| true
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
SHELL ["/bin/bash", "-l", "-c"]
|
SHELL ["docker-shell"]
|
||||||
|
|
||||||
# TODO: add a command to Spack that (re)creates the package cache
|
# TODO: add a command to Spack that (re)creates the package cache
|
||||||
RUN spack spec hdf5+mpi
|
RUN spack spec hdf5+mpi
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
||||||
CMD ["docker-shell"]
|
CMD ["interactive-shell"]
|
||||||
|
@ -16,46 +16,42 @@ COPY share $SPACK_ROOT/share
|
|||||||
COPY var $SPACK_ROOT/var
|
COPY var $SPACK_ROOT/var
|
||||||
RUN mkdir -p $SPACK_ROOT/opt/spack
|
RUN mkdir -p $SPACK_ROOT/opt/spack
|
||||||
|
|
||||||
RUN yum update -y \
|
RUN ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
&& yum install -y epel-release \
|
/usr/local/bin/docker-shell \
|
||||||
&& yum update -y \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
|
/usr/local/bin/interactive-shell \
|
||||||
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
|
/usr/local/bin/spack-env
|
||||||
|
|
||||||
|
RUN yum update -y \
|
||||||
|
&& yum install -y epel-release \
|
||||||
|
&& yum update -y \
|
||||||
&& yum --enablerepo epel groupinstall -y "Development Tools" \
|
&& yum --enablerepo epel groupinstall -y "Development Tools" \
|
||||||
&& yum --enablerepo epel install -y \
|
&& yum --enablerepo epel install -y \
|
||||||
curl findutils gcc-c++ gcc \
|
curl \
|
||||||
gcc-gfortran git gnupg2 hostname \
|
findutils \
|
||||||
iproute Lmod make patch \
|
gcc-c++ \
|
||||||
openssh-server python python-pip tcl \
|
gcc \
|
||||||
unzip which \
|
gcc-gfortran \
|
||||||
&& pip install boto3 \
|
git \
|
||||||
&& rm -rf /var/cache/yum \
|
gnupg2 \
|
||||||
|
hostname \
|
||||||
|
iproute \
|
||||||
|
Lmod \
|
||||||
|
make \
|
||||||
|
patch \
|
||||||
|
python \
|
||||||
|
python-pip \
|
||||||
|
tcl \
|
||||||
|
unzip \
|
||||||
|
which \
|
||||||
|
&& pip install boto3 \
|
||||||
|
&& rm -rf /var/cache/yum \
|
||||||
&& yum clean all
|
&& yum clean all
|
||||||
|
|
||||||
RUN ( echo ". /usr/share/lmod/lmod/init/bash" \
|
RUN mkdir -p /root/.spack \
|
||||||
&& echo ". \$SPACK_ROOT/share/spack/setup-env.sh" \
|
&& cp $SPACK_ROOT/share/spack/docker/modules.yaml \
|
||||||
&& echo "if [ \"\$CURRENTLY_BUILDING_DOCKER_IMAGE\" '!=' '1' ]" \
|
/root/.spack/modules.yaml \
|
||||||
&& 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/*.* /run/nologin $SPACK_ROOT/.git
|
&& rm -rf /root/*.* /run/nologin $SPACK_ROOT/.git
|
||||||
|
|
||||||
# [WORKAROUND]
|
# [WORKAROUND]
|
||||||
@ -66,10 +62,10 @@ RUN [ -f ~/.profile ] \
|
|||||||
|| true
|
|| true
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
SHELL ["/bin/bash", "-l", "-c"]
|
SHELL ["docker-shell"]
|
||||||
|
|
||||||
# TODO: add a command to Spack that (re)creates the package cache
|
# TODO: add a command to Spack that (re)creates the package cache
|
||||||
RUN spack spec hdf5+mpi
|
RUN spack spec hdf5+mpi
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
||||||
CMD ["docker-shell"]
|
CMD ["interactive-shell"]
|
||||||
|
@ -1,45 +1,143 @@
|
|||||||
#! /usr/bin/env bash -e
|
#! /usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
unset CURRENTLY_BUILDING_DOCKER_IMAGE
|
mode=oneshot
|
||||||
|
|
||||||
if [ "$1" '=' 'docker-shell' ] ; then
|
if [ "$( basename "$0" )" '=' 'spack-env' ] ; then
|
||||||
if [ -t 0 ] ; then
|
mode=spackenv
|
||||||
exec bash -il
|
elif [ "$( basename "$0" )" '=' 'docker-shell' ] ; then
|
||||||
else
|
mode=dockershell
|
||||||
(
|
elif [ "$( basename "$0" )" '=' 'interactive-shell' ] ; then
|
||||||
echo -n "It looks like you're trying to run an intractive shell"
|
mode=interactiveshell
|
||||||
echo -n " session, but either no psuedo-TTY is allocateed for this"
|
elif [ "$1" '=' 'docker-shell' ] ; then
|
||||||
echo -n " container's STDIN, or it is closed."
|
mode=dockershell
|
||||||
echo
|
shift
|
||||||
|
elif [ "$1" '=' 'interactive-shell' ] ; then
|
||||||
echo -n "Make sure you run docker with the --interactive and --tty"
|
mode=interactiveshell
|
||||||
echo -n " options."
|
shift
|
||||||
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
|
fi
|
||||||
|
|
||||||
|
case "$mode" in
|
||||||
|
"spackenv")
|
||||||
|
# Scenario 1: Run as if the image had no ENTRYPOINT
|
||||||
|
#
|
||||||
|
# Necessary for use cases where the command to run and all
|
||||||
|
# arguments must be accepted in the CMD portion. (e.g.: Gitlab CI
|
||||||
|
# Runners)
|
||||||
|
#
|
||||||
|
# Roughly equivalent to
|
||||||
|
# docker run ... --entrypoint spack-env ... sh -c "..."
|
||||||
|
#
|
||||||
|
# The shell script runs with spack pre-loaded and ready to use.
|
||||||
|
. $SPACK_ROOT/share/spack/setup-env.sh
|
||||||
|
unset CURRENTLY_BUILDING_DOCKER_IMAGE
|
||||||
|
exec "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"dockershell")
|
||||||
|
# Scenario 2: Accept shell code from a RUN command in a
|
||||||
|
# Dockerfile
|
||||||
|
#
|
||||||
|
# For new Docker images that start FROM this image as its base.
|
||||||
|
# Prepared so that subsequent RUN commands can take advantage of
|
||||||
|
# Spack without having to manually (re)initialize.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# FROM spack/centos7
|
||||||
|
# COPY spack.yaml .
|
||||||
|
# RUN spack install # <- Spack is loaded and ready to use.
|
||||||
|
# # No manual initialization necessary.
|
||||||
|
. $SPACK_ROOT/share/spack/setup-env.sh
|
||||||
|
exec bash -c "$*"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"interactiveshell")
|
||||||
|
# Scenario 3: Run an interactive shell session with Spack
|
||||||
|
# preloaded.
|
||||||
|
#
|
||||||
|
# Create a container meant for an interactive shell session.
|
||||||
|
# Additional checks are performed to ensure that stdin is a tty
|
||||||
|
# and additional shell completion files are sourced. The user is
|
||||||
|
# presented with a shell prompt from which they may issue Spack
|
||||||
|
# commands.
|
||||||
|
#
|
||||||
|
# This is the default behavior when running with no CMD or
|
||||||
|
# ENTRYPOINT overrides:
|
||||||
|
# docker run -it spack/centos7
|
||||||
|
if [ -t 0 ] ; then
|
||||||
|
. $SPACK_ROOT/share/spack/setup-env.sh
|
||||||
|
. $SPACK_ROOT/share/spack/spack-completion.bash
|
||||||
|
unset CURRENTLY_BUILDING_DOCKER_IMAGE
|
||||||
|
exec bash -i
|
||||||
|
else
|
||||||
|
(
|
||||||
|
echo -n "It looks like you're trying to run an"
|
||||||
|
echo -n " intractive shell session, but either no"
|
||||||
|
echo -n " psuedo-TTY is allocated for this container's"
|
||||||
|
echo " STDIN, or it is closed."
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo -n "Make sure you run docker with the --interactive"
|
||||||
|
echo -n " and --tty options."
|
||||||
|
echo
|
||||||
|
) >&2
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
"oneshot")
|
||||||
|
# Scenario 4: Run a one-shot Spack command from the host command
|
||||||
|
# line.
|
||||||
|
#
|
||||||
|
# Triggered by providing arguments to `docker run`. Arguments
|
||||||
|
# are passed along to the container's underlying spack
|
||||||
|
# installation, allowing users to use the image as if it were
|
||||||
|
# spack, itself. Pass volume mount information to `docker run`
|
||||||
|
# to persist the effects of running in this mode.
|
||||||
|
#
|
||||||
|
# This is the default behavior when running with a CMD override.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# # concretize the same spec on different OSes
|
||||||
|
# docker run --rm spack/ubuntu-xenial spec zlib
|
||||||
|
# docker run --rm spack/centos7 spec zlib
|
||||||
|
#
|
||||||
|
# # a "wetter" dry-run;
|
||||||
|
# # install a package and then throw away the results.
|
||||||
|
# docker run --rm spack/centos7 install libiconv
|
||||||
|
# docker run --rm spack/centos7 find libiconv
|
||||||
|
# ==> No package matches the query: libiconv
|
||||||
|
#
|
||||||
|
# # use docker volumes to persist changes
|
||||||
|
# docker run --rm -v ...:/spack spack/centos7 install ...
|
||||||
|
# docker run --rm -v ...:/spack spack/centos7 install ...
|
||||||
|
# docker run --rm -v ...:/spack spack/centos7 install ...
|
||||||
|
exec 3>&1
|
||||||
|
exec 4>&2
|
||||||
|
|
||||||
|
exec 1>&-
|
||||||
|
exec 2>&-
|
||||||
|
|
||||||
|
. $SPACK_ROOT/share/spack/setup-env.sh
|
||||||
|
unset CURRENTLY_BUILDING_DOCKER_IMAGE
|
||||||
|
|
||||||
|
exec 1>&3
|
||||||
|
exec 2>&4
|
||||||
|
|
||||||
|
exec 3>&-
|
||||||
|
exec 4>&-
|
||||||
|
|
||||||
|
spack "$@"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "INTERNAL ERROR - UNRECOGNIZED MODE: $mode" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
@ -1,173 +0,0 @@
|
|||||||
# Copyright 2013-2020 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 [ "$CURRENTLY_BUILDING_DOCKER_IMAGE" '!=' '1' ] ; then
|
|
||||||
|
|
||||||
if [ x$SPACK_PROMPT '!=' x0 ] ; then
|
|
||||||
|
|
||||||
__tmp="`mktemp -d`"
|
|
||||||
|
|
||||||
__trylock() {
|
|
||||||
local dir
|
|
||||||
dir="$__tmp/$1.lock"
|
|
||||||
mkdir "$dir" &>/dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__queue_init() {
|
|
||||||
local r
|
|
||||||
local w
|
|
||||||
|
|
||||||
mkdir "$__tmp/$1.read.lock" ; r=$?
|
|
||||||
mkdir "$__tmp/$1.write.lock" ; w=$?
|
|
||||||
|
|
||||||
if [ "$r" '=' '0' -a "$w" '=' '0' ] ; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
__queue_try_read() {
|
|
||||||
__trylock "$1.read"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__queue_try_write() {
|
|
||||||
__trylock "$1.write"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__queue_make_readable() {
|
|
||||||
rm -r "$__tmp/$1.read.lock" &>/dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__queue_make_writable() {
|
|
||||||
rm -r "$__tmp/$1.write.lock" &>/dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__read() {
|
|
||||||
cat "$__tmp/$1" 2> /dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__write() {
|
|
||||||
cat > "$__tmp/$1" 2> /dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
__revparse_head() {
|
|
||||||
head="`git -C "$SPACK_ROOT" rev-parse $@ HEAD 2>/dev/null`"
|
|
||||||
result="$?"
|
|
||||||
if [ "$result" '!=' '0' ] ; then
|
|
||||||
head="`git --git-dir="$SPACK_ROOT"/.git \\
|
|
||||||
--work-tree="$SPACK_ROOT" rev-parse $@ HEAD 2>/dev/null`"
|
|
||||||
result="$?"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$head"
|
|
||||||
return $result
|
|
||||||
}
|
|
||||||
|
|
||||||
__git_head() {
|
|
||||||
head="`__revparse_head --abbrev-ref`"
|
|
||||||
if [ "$?" '=' '0' ] ; then
|
|
||||||
if [ "$head" '=' 'HEAD' ] ; then
|
|
||||||
head="`__revparse_head | cut -c1-8`..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$head"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
__update_prompt() {
|
|
||||||
local prompt
|
|
||||||
prompt=''
|
|
||||||
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
|
|
||||||
prompt="$prompt "
|
|
||||||
fi
|
|
||||||
prompt="$prompt$linux_distro"
|
|
||||||
fi
|
|
||||||
|
|
||||||
git_head="`__git_head`"
|
|
||||||
|
|
||||||
if [ -n "$git_head" ] ; then
|
|
||||||
git_head='\[\e[1;32m\](\[\e[0;32m\]'"$git_head"'\[\e[1;32m\])'
|
|
||||||
if [ -n "$prompt" ] ; then
|
|
||||||
prompt="$prompt "
|
|
||||||
fi
|
|
||||||
prompt="$prompt$git_head"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$prompt" ] ; then
|
|
||||||
prompt="$prompt "
|
|
||||||
fi
|
|
||||||
prompt="$prompt"'\[\e[0;m\]\W: '
|
|
||||||
echo "$prompt" | __write prompt
|
|
||||||
}
|
|
||||||
|
|
||||||
set -m
|
|
||||||
(
|
|
||||||
__queue_init query
|
|
||||||
__queue_init prompt
|
|
||||||
|
|
||||||
__update_prompt
|
|
||||||
__queue_make_readable prompt
|
|
||||||
|
|
||||||
__queue_make_writable query
|
|
||||||
|
|
||||||
while sleep 0.010 ; do
|
|
||||||
last_q_time=''
|
|
||||||
|
|
||||||
while sleep 0.010 ; do
|
|
||||||
q_time="`date +%s%N`"
|
|
||||||
if __queue_try_read query ; then
|
|
||||||
last_q_time="$q_time"
|
|
||||||
__queue_make_writable query
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$last_q_time" -a \
|
|
||||||
"$(( (q_time - last_q_time)/10000000 > 100 ))" '=' '1' ] ; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
__update_prompt
|
|
||||||
__queue_make_readable prompt
|
|
||||||
done
|
|
||||||
) &>/dev/null &
|
|
||||||
set +m
|
|
||||||
|
|
||||||
__update_prompt_main_first_call=1
|
|
||||||
__update_prompt_main() {
|
|
||||||
if [ "$__update_prompt_main_first_call" '=' '1' ] ; then
|
|
||||||
while sleep 0.001 ; do
|
|
||||||
if __queue_try_read prompt ; then
|
|
||||||
PS1="`__read prompt`"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
__update_prompt_main_first_call=0
|
|
||||||
else
|
|
||||||
if __queue_try_read prompt ; then
|
|
||||||
PS1="`__read prompt`"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if __queue_try_write query ; then
|
|
||||||
__queue_make_readable query
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
PROMPT_COMMAND=__update_prompt_main
|
|
||||||
|
|
||||||
fi # [ x$SPACK_PROMPT '!=' x0 ]
|
|
||||||
|
|
||||||
fi # [ "$CURRENTLY_BUILDING_DOCKER_IMAGE" '!=' '1' ]
|
|
@ -1,50 +0,0 @@
|
|||||||
# Copyright 2013-2020 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 [ "$CURRENTLY_BUILDING_DOCKER_IMAGE" '!=' '1' ] ; then
|
|
||||||
|
|
||||||
uid="`id -u`"
|
|
||||||
if [ "$uid" '=' '0' ] ; then
|
|
||||||
key_types="dsa ecdsa rsa"
|
|
||||||
if [ "$DOCKERFILE_BASE" '!=' 'centos:6' ] ; then
|
|
||||||
key_types="${key_types} ed25519"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for key_type in $key_types ; do
|
|
||||||
private_key_file="/etc/ssh/ssh_host_${key_type}_key"
|
|
||||||
public_key_file="$private_key_file.pub"
|
|
||||||
|
|
||||||
if [ '!' -f "$private_key_file" ] ; then
|
|
||||||
ssh-keygen \
|
|
||||||
-q -t "$key_type" -N "" -f "$private_key_file"
|
|
||||||
chmod 600 "$private_key_file"
|
|
||||||
chmod 644 "$public_key_file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
mkdir -p /var/run/sshd
|
|
||||||
|
|
||||||
pgrep -u 0 -U 0 sshd &> /dev/null
|
|
||||||
if [ '!' "$?" '=' '0' ] ; then
|
|
||||||
nohup /usr/sbin/sshd -f /etc/ssh/sshd_config < /dev/null &> /dev/null
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ '!' -f "$HOME/.ssh/id_rsa" ] ; then
|
|
||||||
ssh-keygen \
|
|
||||||
-t rsa -C "spack.developer@docker.host" -N "" -f "$HOME/.ssh/id_rsa"
|
|
||||||
cat "$HOME/.ssh/id_rsa.pub" >> "$HOME/.ssh/authorized_keys"
|
|
||||||
chmod 600 "$HOME/.ssh/authorized_keys"
|
|
||||||
|
|
||||||
docker_ip="`ip address show dev eth0 |
|
|
||||||
grep inet |
|
|
||||||
cut -d' ' -f 6 |
|
|
||||||
cut -d/ -f 1`"
|
|
||||||
|
|
||||||
ssh-keyscan -t rsa 127.0.0.1 localhost "$docker_ip" "`hostname`" \
|
|
||||||
> "$HOME/.ssh/known_hosts" 2> /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi # [ "$CURRENTLY_BUILDING_DOCKER_IMAGE" '!=' '1' ]
|
|
@ -16,29 +16,35 @@ COPY share $SPACK_ROOT/share
|
|||||||
COPY var $SPACK_ROOT/var
|
COPY var $SPACK_ROOT/var
|
||||||
RUN mkdir -p $SPACK_ROOT/opt/spack
|
RUN mkdir -p $SPACK_ROOT/opt/spack
|
||||||
|
|
||||||
RUN apt-get -yqq update \
|
RUN ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
&& apt-get -yqq install --no-install-recommends \
|
/usr/local/bin/docker-shell \
|
||||||
build-essential \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
ca-certificates \
|
/usr/local/bin/interactive-shell \
|
||||||
curl \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
file \
|
/usr/local/bin/spack-env
|
||||||
g++ \
|
|
||||||
gcc \
|
RUN apt-get -yqq update \
|
||||||
gfortran \
|
&& apt-get -yqq install --no-install-recommends \
|
||||||
git \
|
build-essential \
|
||||||
gnupg2 \
|
ca-certificates \
|
||||||
iproute2 \
|
curl \
|
||||||
lmod \
|
file \
|
||||||
locales \
|
g++ \
|
||||||
lua-posix \
|
gcc \
|
||||||
make \
|
gfortran \
|
||||||
openssh-server \
|
git \
|
||||||
python3 \
|
gnupg2 \
|
||||||
python3-pip \
|
iproute2 \
|
||||||
tcl \
|
lmod \
|
||||||
unzip \
|
locales \
|
||||||
&& locale-gen en_US.UTF-8 \
|
lua-posix \
|
||||||
&& pip3 install boto3 \
|
make \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
tcl \
|
||||||
|
unzip \
|
||||||
|
&& locale-gen en_US.UTF-8 \
|
||||||
|
&& pip3 install boto3 \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Add LANG default to en_US.UTF-8
|
# Add LANG default to en_US.UTF-8
|
||||||
@ -46,33 +52,10 @@ ENV LANGUAGE en_US.UTF-8
|
|||||||
ENV LANG en_US.UTF-8
|
ENV LANG en_US.UTF-8
|
||||||
ENV LC_ALL en_US.UTF-8
|
ENV LC_ALL en_US.UTF-8
|
||||||
|
|
||||||
RUN ( echo ". /usr/share/lmod/lmod/init/bash" \
|
RUN mkdir -p /root/.spack \
|
||||||
&& echo ". \$SPACK_ROOT/share/spack/setup-env.sh" \
|
&& cp $SPACK_ROOT/share/spack/docker/modules.yaml \
|
||||||
&& echo "if [ \"\$CURRENTLY_BUILDING_DOCKER_IMAGE\" '!=' '1' ]" \
|
/root/.spack/modules.yaml \
|
||||||
&& echo "then" \
|
&& rm -rf /root/*.* /run/nologin $SPACK_ROOT/.git
|
||||||
&& 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/*.* $SPACK_ROOT/.git
|
|
||||||
|
|
||||||
# [WORKAROUND]
|
# [WORKAROUND]
|
||||||
# https://superuser.com/questions/1241548/
|
# https://superuser.com/questions/1241548/
|
||||||
@ -82,10 +65,10 @@ RUN [ -f ~/.profile ] \
|
|||||||
|| true
|
|| true
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
SHELL ["/bin/bash", "-l", "-c"]
|
SHELL ["docker-shell"]
|
||||||
|
|
||||||
# TODO: add a command to Spack that (re)creates the package cache
|
# TODO: add a command to Spack that (re)creates the package cache
|
||||||
RUN spack spec hdf5+mpi
|
RUN spack spec hdf5+mpi
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
||||||
CMD ["docker-shell"]
|
CMD ["interactive-shell"]
|
||||||
|
@ -16,29 +16,35 @@ COPY share $SPACK_ROOT/share
|
|||||||
COPY var $SPACK_ROOT/var
|
COPY var $SPACK_ROOT/var
|
||||||
RUN mkdir -p $SPACK_ROOT/opt/spack
|
RUN mkdir -p $SPACK_ROOT/opt/spack
|
||||||
|
|
||||||
RUN apt-get -yqq update \
|
RUN ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
&& apt-get -yqq install --no-install-recommends \
|
/usr/local/bin/docker-shell \
|
||||||
build-essential \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
ca-certificates \
|
/usr/local/bin/interactive-shell \
|
||||||
curl \
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
||||||
file \
|
/usr/local/bin/spack-env
|
||||||
g++ \
|
|
||||||
gcc \
|
RUN apt-get -yqq update \
|
||||||
gfortran \
|
&& apt-get -yqq install --no-install-recommends \
|
||||||
git \
|
build-essential \
|
||||||
gnupg2 \
|
ca-certificates \
|
||||||
iproute2 \
|
curl \
|
||||||
lmod \
|
file \
|
||||||
locales \
|
g++ \
|
||||||
lua-posix \
|
gcc \
|
||||||
make \
|
gfortran \
|
||||||
openssh-server \
|
git \
|
||||||
python3 \
|
gnupg2 \
|
||||||
python3-pip \
|
iproute2 \
|
||||||
tcl \
|
lmod \
|
||||||
unzip \
|
locales \
|
||||||
&& locale-gen en_US.UTF-8 \
|
lua-posix \
|
||||||
&& pip3 install boto3 \
|
make \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
tcl \
|
||||||
|
unzip \
|
||||||
|
&& locale-gen en_US.UTF-8 \
|
||||||
|
&& pip3 install boto3 \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Add LANG default to en_US.UTF-8
|
# Add LANG default to en_US.UTF-8
|
||||||
@ -46,33 +52,10 @@ ENV LANGUAGE en_US.UTF-8
|
|||||||
ENV LANG en_US.UTF-8
|
ENV LANG en_US.UTF-8
|
||||||
ENV LC_ALL en_US.UTF-8
|
ENV LC_ALL en_US.UTF-8
|
||||||
|
|
||||||
RUN ( echo ". /usr/share/lmod/lmod/init/bash" \
|
RUN mkdir -p /root/.spack \
|
||||||
&& echo ". \$SPACK_ROOT/share/spack/setup-env.sh" \
|
&& cp $SPACK_ROOT/share/spack/docker/modules.yaml \
|
||||||
&& echo "if [ \"\$CURRENTLY_BUILDING_DOCKER_IMAGE\" '!=' '1' ]" \
|
/root/.spack/modules.yaml \
|
||||||
&& echo "then" \
|
&& rm -rf /root/*.* /run/nologin $SPACK_ROOT/.git
|
||||||
&& 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/*.* $SPACK_ROOT/.git
|
|
||||||
|
|
||||||
# [WORKAROUND]
|
# [WORKAROUND]
|
||||||
# https://superuser.com/questions/1241548/
|
# https://superuser.com/questions/1241548/
|
||||||
@ -86,10 +69,10 @@ RUN [ -f ~/.profile ] \
|
|||||||
RUN ln -s posix_c.so /usr/lib/x86_64-linux-gnu/lua/5.2/posix.so
|
RUN ln -s posix_c.so /usr/lib/x86_64-linux-gnu/lua/5.2/posix.so
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
SHELL ["/bin/bash", "-l", "-c"]
|
SHELL ["docker-shell"]
|
||||||
|
|
||||||
# TODO: add a command to Spack that (re)creates the package cache
|
# TODO: add a command to Spack that (re)creates the package cache
|
||||||
RUN spack spec hdf5+mpi
|
RUN spack spec hdf5+mpi
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
||||||
CMD ["docker-shell"]
|
CMD ["interactive-shell"]
|
||||||
|
Loading…
Reference in New Issue
Block a user