Newer
Older
#!/bin/bash
# Absolute path to this script. /home/user/bin/foo.sh
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path wh
ere the symlink file was located
done
BASE_PATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

Luigi Calori
committed
TOP_PATH=$(dirname $(dirname $BASE_PATH))
PARENT_TOP_PATH=$(dirname $TOP_PATH)

Luigi Calori
committed
if [ -f ${BASE_CONFIG_PATH}/setup_var.sh ] ; then
source ${BASE_CONFIG_PATH}/setup_var.sh
fi
echo "base bath----${BASE_PATH}...."
echo "config path----${BASE_CONFIG_PATH}...."

Luigi Calori
committed
echo "parent top path ----${PARENT_TOP_PATH}...."
echo "check if spack environment active"
CURRENT_SPACK_VERSION=$(spack --version)
if [ "x${CURRENT_SPACK_VERSION}" == "x" ]; then
echo "spack not loaded, module creation mode"
INSTALL_SPACK_VERSION=0.14
DEFAULT_SPACK_VERSION=0.14.2
BA_SPACK_VERSION=0.14.2
DEFAULT_CLUSTER_NAME=$(readlink /cineca | cut -d/ -f2)
DEFAULT_SPACK_BA_BASE="/cineca/prod/opt/tools/spack"
DEFAULT_SPACK_BA_MODULES="/cineca/prod/opt/modulefiles/global/tools/spack"
DEFAULT_SPACK_BA_SITELOCAL_PREFIX="/cineca/prod/opt/modulefiles/global/sitelocal/tools/spack-"
SPACK_MODULE_VERSION=$DEFAULT_SPACK_VERSION
SPACK_GIT_VERSION=$DEFAULT_SPACK_VERSION
CLUSTER_NAME=$DEFAULT_CLUSTER_NAME
SPACK_BA_BASE=$DEFAULT_SPACK_BA_BASE
SPACK_BA_MODULES=$DEFAULT_SPACK_BA_MODULES
SPACK_BA_SITELOCAL_PREFIX=$DEFAULT_SPACK_BA_SITELOCAL_PREFIX
SPECIFIC_CONFIG_PATH="${BASE_CONFIG_PATH}/specific/${CLUSTER_NAME}"
if [ -f ${SPECIFIC_CONFIG_PATH}/setup_var.sh ] ; then
source ${SPECIFIC_CONFIG_PATH}/setup_var.sh
fi
if ! [[ "x$1" == "x" ]]; then
if ! [[ "x$2" == "x" ]]; then
CLUSTER_NAME=$2
if ! [[ "x$3" == "x" ]]; then
SPACK_BA_BASE=$3
if ! [[ "x$4" == "x" ]]; then
SPACK_BA_MODULES=$4
if ! [[ "x$5" == "x" ]]; then
SPACK_BA_SITELOCAL_PREFIX=$5
fi
fi
SPACK_ROOT=${SPACK_BA_BASE}/${SPACK_MODULE_VERSION}/none
DEPLOY_DIR=spack-${INSTALL_SPACK_VERSION}
CACHE_DIR=cache-${INSTALL_SPACK_VERSION}

Luigi Calori
committed
SPACK_UPSTREAM_DEPLOY_DIR="${PARENT_TOP_PATH}/${DEPLOY_DIR}"
SPACK_UPSTREAM_CACHE_DIR="${PARENT_TOP_PATH}/${CACHE_DIR}"
### deploying spack source
if [ -d ${SPACK_ROOT}/.git ] ; then
echo "Skipping spack git download, folder: ${SPACK_ROOT} is already under git"
else
GIT_DEPLOYER_TOOL="${TOP_PATH}/spack_deploy/bin/spack-deploy --workdir $BASE_PATH gitmanager deploy"
SPACK_GIT_BRANCH=$SPACK_GIT_VERSION
if [[ $SPACK_GIT_VERSION =~ $re ]] ; then
SPACK_GIT_BRANCH="v$SPACK_GIT_VERSION"
SPACK_GIT_BRANCH="$SPACK_GIT_VERSION"
fi
GIT_DEPLOYER_COMMAND="${GIT_DEPLOYER_TOOL} --origin_master ${SPACK_GIT_BRANCH} --integration_branch devel/${SPACK_GIT_BRANCH} --git_dest ${SPACK_ROOT}"
echo "Deploying spack git:"
echo "-->${GIT_DEPLOYER_COMMAND}<--"
#config file handling ( currently link
link_files="$(ls ${BASE_CONFIG_PATH}/common/*.yaml) $(ls ${BASE_CONFIG_PATH}/specific/${CLUSTER_NAME}/*.yaml)"
for link_file in $link_files; do
echo "processing $link_file"
filename=$(basename $link_file)
if [ -f ${SPACK_CONFIG_DIR}/$filename ]
then
echo "skipping link, file ${SPACK_CONFIG_DIR}/$filename already exists"
else
echo "linking $filename into $SPACK_CONFIG_DIR"
ln -s $link_file $SPACK_CONFIG_DIR
fi
done

Luigi Calori
committed
#create spack config repos from the corresponding .ini template
CUSTOM_REPO_DIR=${BASE_PATH}/repos
cat ${BASE_CONFIG_PATH}/common/repos.yaml.ini | sed -e "
s@__CUSTOM_REPO_DIR__@${CUSTOM_REPO_DIR}@" > ${SPACK_CONFIG_DIR}/repos.yaml
#module construction
#check if exists BA related sitelocal module file
MODULE_TEMPLATE_FILE_COMMON="${BASE_CONFIG_PATH}/common/BA/spack_module"
MODULE_TEMPLATE_FILE_SPECIFIC="${BASE_CONFIG_PATH}/specific/${CLUSTER_NAME}/BA/spack_module"
MODULE_TEMPLATE_FILE="${BASE_CONFIG_PATH}/common/BA/spack_module"
if [ -f ${MODULE_TEMPLATE_FILE_SPECIFIC} ]; then
MODULE_TEMPLATE_FILE="${MODULE_TEMPLATE_FILE_SPECIFIC}"
else
MODULE_TEMPLATE_FILE="${MODULE_TEMPLATE_FILE_COMMON}"
fi
BA_SITELOCAL_FILE=${SPACK_BA_SITELOCAL_PREFIX}${SPACK_MODULE_VERSION}
if ! [ -f ${BA_SITELOCAL_FILE} ]; then
echo "WARNING!! building module without BA"
BA_SITELOCAL_PREVIOUS_FILE=${SPACK_BA_SITELOCAL_PREFIX}${BA_SPACK_VERSION}
if [ -f ${BA_SITELOCAL_PREVIOUS_FILE} ]; then
cat ${BA_SITELOCAL_PREVIOUS_FILE} | sed s/${BA_SPACK_VERSION}/${SPACK_MODULE_VERSION}/ > ${BA_SITELOCAL_FILE}
else
echo "ERROR!! missing prefious sitelocal file -->${BA_SITELOCAL_PREVIOUS_FILE}"
fi
fi

Luigi Calori
committed
s/__SPACK_MODULE_VERSION__/${SPACK_MODULE_VERSION}/
s/__INSTALL_SPACK_VERSION__/${INSTALL_SPACK_VERSION}/

Luigi Calori
committed
s/__SPACK_MODULE_VERSION__/spack-${SPACK_VERSION}/
s@__SPACK_UPSTREAM_DEPLOY_DIR__@${SPACK_UPSTREAM_DEPLOY_DIR}@
s@__SPACK_UPSTREAM_CACHE_DIR__@${SPACK_UPSTREAM_CACHE_DIR}@
s@__DEPLOY_ROOT__@${BASE_CONFIG_PATH}@

Luigi Calori
committed
s@__DEFAULT_SPACK_BA_BASE__@${DEFAULT_SPACK_BA_BASE}@
s/__CLUSTER_NAME__/${CLUSTER_NAME}/" > ${SPACK_BA_MODULES}/${SPACK_MODULE_VERSION}

Simone Bna
committed
source ${SPACK_ROOT}/share/spack/setup-env.sh
#add system compiler
spack --no-env compiler add --scope site
else
echo "found active spack ${CURRENT_SPACK_VERSION}"
if [ "x" == "x${SPACK_DEPLOY_CLUSTER_NAME}" ]; then
echo "error missing env variable SPACK_DEPLOY_CLUSTER_NAME, spack has not been loaded through module. use--> module load spack"
else
echo "Available envs to be installed"
ENVIRONMENTS_PATH="${BASE_PATH}/envs"
install_dirs="$(python ${BASE_PATH}/sort_folders.py ${ENVIRONMENTS_PATH}/common ${ENVIRONMENTS_PATH}/specific/${SPACK_DEPLOY_CLUSTER_NAME})"
for dir in $install_dirs; do
if [ -d $dir ]
then
# echo "##processing dir $dir"
if [ -f ${dir}/install.sh ]
then
# echo "#executing ${dir}/install.sh "
echo "${dir}/install.sh "
else
if [ -f ${dir}/spack.yaml ]
then
# echo "#executing spack install inside env $dir"
echo "cd ${dir}; spack install"
fi
fi
fi
done
echo "please configure current spack install and modules as upstream for unprivileged users by:"
echo "${BASE_CONFIG_PATH}/build_config.sh"