Newer
Older
set -o errexit
set -o pipefail
set -o nounset
mkdir -p ${STACK_LOCATION}
cd ${STACK_LOCATION}
echo "Setting up spack"
if [ ! -d spack/.git ]; then
git clone https://github.com/spack/spack.git
git -C spack checkout $SPACK_VERSION
if [ ! -e ${SPACK_SYSTEM_CONFIG_PATH}/spack.yaml ]
then
spack/bin/spack env create ${environment}
fi
echo "Copying cp ${STACK_CONFIG_PATH}/spack.yaml to ${SPACK_SYSTEM_CONFIG_PATH}/"
cp ${STACK_CONFIG_PATH}/spack.yaml ${SPACK_SYSTEM_CONFIG_PATH}
cp -r "${STACK_CONFIG_PATH}/templates" ${SPACK_SYSTEM_CONFIG_PATH}
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
declare -A file_mapping
file_mapping["_common"]=""
file_mapping["_stack"]="_stack"
file_mapping["_acc_${acc_type}"]="_accel"
file_mapping["_${environment}"]="_env"
declare -A placeholders
placeholders["{target}"]="${target}"
placeholders["{gcc_version}"]=$(jq -Mrc '.stack.compilers.gcc.version' ${STACK_CONFIG})
if [ "${accelerator}" != "none" ]
then
placeholders["{${acc_type}_arch}"]="${acc_arch}"
fi
echo blip
for file in mirrors packages concretizer config definitions modules
do
for suffix in ${!file_mapping[@]}
do
src=${STACK_CONFIG_PATH}/${file}${suffix}.yaml
dst=${SPACK_SYSTEM_CONFIG_PATH}/${file}"${file_mapping[$suffix]}".yaml
if [ -e "${STACK_CONFIG_PATH}/${file}${suffix}.yaml" ]
then
echo "Copying $src to $dst"
cp "$src" "$dst"
for ph in ${!placeholders[@]}
do
rep=${placeholders[$ph]}
sed -i -e "s/$ph/$rep/g" "$dst"
done
fi
done
done
cat <<EOF > ${SPACK_SYSTEM_CONFIG_PATH}/config_stack.yaml
template_dirs:
- ${SPACK_SYSTEM_CONFIG_PATH}/templates
EOF
cat <<EOF > ${SPACK_SYSTEM_CONFIG_PATH}/modules_stack.yaml
modules:
default:
roots:
lmod: ${STACK_LOCATION}/spack/share/spack/lmod/${environment}
tcl: ${STACK_LOCATION}/spack/share/spack/modules/${environment}
EOF
mirrors=$(jq -Mrc '
.spack.mirrors
| to_entries
| map(select(.value.type="relative"))
| map(" \(.key): \(env.STACK_LOCATION)/\(.value.url)")
| .[]
cat <<EOF > ${SPACK_SYSTEM_CONFIG_PATH}/mirrors.yaml
mirrors:
${mirrors}
EOF
then
mv ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml packages.yaml.old
fi
echo "packages:" > ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml
export system_compiler=$(jq -Mrc '
.stack
| .system_compiler
| to_entries
| .[].value
export system_arch=$(jq -Mrc '
.stack.system_arch
' ${STACK_CONFIG})
| map(" \(.):\n require:\n - \"%\(env.system_compiler)\"\n - \"\(env.system_arch)\"")
| .[]
' ${STACK_CONFIG} >> ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml
if [ -e packages.yaml.old ]
yq eval-all --inplace 'select(fileIndex==0) *+ select(fileIndex==1)' \
${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml packages.yaml.old
rm packages.yaml.old
EXTERNAL_REPOS=$(jq -r '.spack.repos | keys[]' ${STACK_CONFIG})
spack_external_repos="${SPACK_SYSTEM_CONFIG_PATH}/external_repos"
echo "repos:" > ${SPACK_SYSTEM_CONFIG_PATH}/repos.yaml
for repo in ${EXTERNAL_REPOS}
do
repo_branch=$(jq -r ".spack.repos.\"${repo}\".branch" ${STACK_CONFIG})
echo " - ${spack_external_repos}/${repo}" >> ${SPACK_SYSTEM_CONFIG_PATH}/repos.yaml
echo "Cloning repo: ${repo}"
url_branch=$(jq -r ".spack.repos.\"${repo}\".url" ${STACK_CONFIG})
git clone -b ${repo_branch} ${url_branch} ${spack_external_repos}/${repo}
else
echo "Update repo: ${repo}"
git -C ${spack_external_repos}/$repo fetch
git -C ${spack_external_repos}/$repo checkout ${repo_branch}
git -C ${spack_external_repos}/$repo pull
for file in mirrors packages concretizer config modules repos
do
if [ -e "${SPACK_SYSTEM_CONFIG_PATH}/${file}.yaml" ]
then
cp "${SPACK_SYSTEM_CONFIG_PATH}/${file}.yaml" spack/etc/spack
fi
done
echo "Setting up buildcache"
spack/bin/spack gpg trust \
$GPG_PRIVATE_KEY
if [ ! -d ${MOUNT_POINT}/buildcache/build_cache ]; then
spack/bin/spack gpg publish \
-d ${MOUNT_POINT}/buildcache
if ! spack/bin/spack mirror list | grep buildcache; then
spack/bin/spack mirror add \
--type binary \
--scope system \
buildcache file://${MOUNT_POINT}/buildcache
spack/bin/spack buildcache keys \
--install \
--trust
#spack/bin/spack buildcache update-index /buildcache