Skip to content
26 changes: 5 additions & 21 deletions EESSI-install-software.sh
Original file line number Diff line number Diff line change
Expand Up @@ -185,9 +185,9 @@ fi
pr_diff=$(ls [0-9]*.diff | head -n 1)
export PR_DIFF="$PWD/$pr_diff"

# Only run install_scripts.sh if not in dev.eessi.io (for security)
# Also skip installing scripts for site-installs
if [[ -z ${EESSI_DEV_PROJECT} && -z "${EESSI_SITE_INSTALL_FORCE}" ]]; then
# Only run install_scripts.sh for software.eessi.io builds,
# i.e. skip it for site-installs (which also includes builds for dev.eessi.io)
if [[ -z "${EESSI_SITE_INSTALL_FORCE}" ]]; then
${TOPDIR}/install_scripts.sh --prefix ${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION} --eessi-version ${EESSI_VERSION}
fi

Expand Down Expand Up @@ -294,16 +294,6 @@ fi
export EASYBUILD_INSTALLPATH=${EESSI_PREFIX}/software/${EESSI_OS_TYPE}/${EESSI_SOFTWARE_SUBDIR_OVERRIDE}
echo "EASYBUILD_INSTALLPATH set to $EASYBUILD_INSTALLPATH"

# If in dev.eessi.io, allow building on top of software.eessi.io via EESSI-extend
if [[ ! -z ${EESSI_DEV_PROJECT} ]]; then
# We keep track of the old install path for settings paths to SitePackage.lua and .lmodrc later
EASYBUILD_INSTALLPATH_STANDARD=${EASYBUILD_INSTALLPATH}
# Need to unset $EESSI_CVMFS_INSTALL to use $EESSI_PROJECT_INSTALL
unset EESSI_CVMFS_INSTALL
export EESSI_PROJECT_INSTALL=${EESSI_CVMFS_REPO_OVERRIDE}
echo ">> \$EESSI_PROJECT_INSTALL set to ${EESSI_PROJECT_INSTALL}"
fi

# If we have EESSI_ACCELERATOR_TARGET_OVERRIDE set (and non-empty), then this implies building for a GPU target
# (this must be set _before_ we load EESSI-extend).
# We also make sure that EESSI_ACCELERATOR_TARGET is also set as EESSI_ACCELERATOR_TARGET_OVERRIDE must
Expand Down Expand Up @@ -469,14 +459,8 @@ else
fi

echo "DEBUG: before creating/updating lmod config files // EASYBUILD_INSTALLPATH='${EASYBUILD_INSTALLPATH}'"
if [[ ! -z ${EESSI_DEV_PROJECT} ]]; then
# Make sure .lmod files are not checked for dev.eeessi.io
export LMOD_CONFIG_DIR="${EASYBUILD_INSTALLPATH_STANDARD}/.lmod"
export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH_STANDARD}/.lmod"
else
export LMOD_CONFIG_DIR="${EASYBUILD_INSTALLPATH}/.lmod"
export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod"
fi
export LMOD_CONFIG_DIR="${EASYBUILD_INSTALLPATH}/.lmod"
export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod"

# If this is a site install, the old method of checking if lmodrc.lua was updated doesn't work
# We simply skip that step for now - it's hardly ever changed anyway
Expand Down
32 changes: 18 additions & 14 deletions bot/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -147,13 +147,11 @@ echo "bot/build.sh: EESSI_VERSION_OVERRIDE='${EESSI_VERSION_OVERRIDE}'"
# determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE}
# here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down
# "source init/eessi_defaults" via sourcing init/minimal_eessi_env
# Note: iff ${EESSI_DEV_PROJECT} is defined (building for dev.eessi.io), then we
# append the project subdirectory to ${EESSI_CVMFS_REPO_OVERRIDE}
export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/${REPOSITORY_NAME}${EESSI_DEV_PROJECT:+/$EESSI_DEV_PROJECT}
export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/${REPOSITORY_NAME}
echo "bot/build.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'"

# If we're not building for software.eessi.io, then consider this a site install
if [[ "${EESSI_CVMFS_REPO_OVERRIDE}" != "/cvmfs/software.eessi.io" && "${REPOSITORY_NAME}" != "dev.eessi.io" ]]; then
if [[ "${EESSI_CVMFS_REPO_OVERRIDE}" != "/cvmfs/software.eessi.io" ]]; then
# To build on top of EESSI, we need the software.eessi.io repository to be mounted next to the target repository
# The bot/build.sh script does this when the EESSI_SITE_INSTALL_FORCE environment variable is set
# Other build scripts will also respect this variable where needed in order to make sure that 'building on top'
Expand All @@ -172,6 +170,15 @@ if [[ "${EESSI_CVMFS_REPO_OVERRIDE}" != "/cvmfs/software.eessi.io" && "${REPOSIT
# Make sure that the compatibility layer is still used from software.eessi.io
export EESSI_CVMFS_COMPAT_REPO=/cvmfs/software.eessi.io
echo "EESSI_CVMFS_COMPAT_REPO=${EESSI_CVMFS_COMPAT_REPO}"

# Determine the relative path to the versions subdir for site installations
# by removing the /cvmfs/some.repo.tld part and appending /versions at the end
# E.g. EESSI_SITE_SOFTWARE_PREFIX=/cvmfs/my.site.tld/eessi/builds would result in eessi/builds/versions
# Note that this also works for dev.eessi.io builds, as these are configured as site installations
export EESSI_VERSIONS_SUBPATH="${EESSI_SITE_SOFTWARE_PREFIX#/cvmfs/${REPOSITORY_NAME}}/versions"
else
# For software.eessi.io the versions dir is always in the root of the repository
export EESSI_VERSIONS_SUBPATH=versions
fi

# determine CPU architecture to be used from entry .architecture in ${JOB_CFG_FILE}
Expand Down Expand Up @@ -216,16 +223,17 @@ COMMON_ARGS+=("--mode" "exec")
[[ ! -z ${REPOSITORY_ID} ]] && COMMON_ARGS+=("--repository" "${REPOSITORY_ID}")

# Also expose software.eessi.io when building on top of EESSI (i.e. when EESSI_SITE_INSTALL_FORCE is set)
# or on top of the EESSI compat layer (i.e. for dev.eessi.io)
if [[ "${REPOSITORY_NAME}" == "dev.eessi.io" || -n "${EESSI_SITE_INSTALL_FORCE}" ]]; then
if [[ -n "${EESSI_SITE_INSTALL_FORCE}" ]]; then
COMMON_ARGS+=("--repository" "software.eessi.io,access=ro")
fi

# Override the compat layer if EESSI_CVMFS_COMPAT_REPO is defined. This allows using a different repo for the
# compatibility layer compared to the EESSI_CVMFS_REPO (in which things will be installed)
# (this is already done for dev.eessi.io through a customized SLURM script but that could probably be removed then)
if [[ -n "${EESSI_CVMFS_COMPAT_REPO}" && -n "${EESSI_VERSION_OVERRIDE:-$EESSI_VERSION}" ]]; then
export EESSI_COMPAT_LAYER_DIR_OVERRIDE="${EESSI_CVMFS_COMPAT_REPO}/versions/${EESSI_VERSION_OVERRIDE:-$EESSI_VERSION}/compat/linux/$(uname -m)"
EESSI_COMPAT_VERSION=${EESSI_VERSION_OVERRIDE:-$EESSI_VERSION}
# Cut off any version suffix (2025.06-001 -> 2025.06)
EESSI_COMPAT_VERSION=${EESSI_COMPAT_VERSION%-*}
export EESSI_COMPAT_LAYER_DIR_OVERRIDE="${EESSI_CVMFS_COMPAT_REPO}/versions/${EESSI_COMPAT_VERSION}/compat/linux/$(uname -m)"
msg="bot:build.sh: Set EESSI_COMPAT_LAYER_DIR_OVERRIDE to $EESSI_COMPAT_LAYER_DIR_OVERRIDE since both EESSI_CVMFS_COMPAT_REPO"
msg="$msg (${EESSI_CVMFS_COMPAT_REPO}) and EESSI_VERSION_OVERRIDE (${EESSI_VERSION_OVERRIDE}) are defined"
echo "$msg"
Expand Down Expand Up @@ -359,10 +367,6 @@ else
export TARBALL=$(printf "eessi-%s-software-%s-%s-%s-%b%d.${tarball_extension}" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${filename_accelerators} ${EESSI_DEV_PROJECT:+$EESSI_DEV_PROJECT-} ${timestamp})
fi

# Export EESSI_DEV_PROJECT to use it (if needed) when making tarball
echo "bot/build.sh: EESSI_DEV_PROJECT='${EESSI_DEV_PROJECT}'"
export EESSI_DEV_PROJECT=${EESSI_DEV_PROJECT}

# value of first parameter to create_tarball.sh - TMP_IN_CONTAINER - needs to be
# synchronised with setting of TMP_IN_CONTAINER in eessi_container.sh
# TODO should we make this a configurable parameter of eessi_container.sh using
Expand All @@ -371,8 +375,8 @@ TMP_IN_CONTAINER=/tmp
tarball_accelerators=$(IFS=+; echo "${EESSI_ACCELERATOR_TARGET_OVERRIDES[*]}")
echo "Executing command to create tarball:"
echo "$software_layer_dir/eessi_container.sh ${COMMON_ARGS[@]} ${TARBALL_STEP_ARGS[@]}"
echo " -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} \"$tarball_accelerators\" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}"
echo " -- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSIONS_SUBPATH} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} \"$tarball_accelerators\" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}"
$software_layer_dir/eessi_container.sh "${COMMON_ARGS[@]}" "${TARBALL_STEP_ARGS[@]}" \
-- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} "$tarball_accelerators" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}
-- $software_layer_dir/create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSIONS_SUBPATH} ${EESSI_VERSION}${EESSI_SOFTWARE_LAYER_VERSION_SUFFIX} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} "$tarball_accelerators" /eessi_bot_job/${TARBALL} 2>&1 | tee -a ${tar_outerr}

exit 0
25 changes: 13 additions & 12 deletions create_tarball.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@ set -e

base_dir=$(dirname $(realpath $0))

if [ $# -ne 5 ]; then
echo "ERROR: Usage: $0 <EESSI tmp dir (example: /tmp/$USER/EESSI)> <version (example: 2023.06)> <CPU arch subdir (example: x86_64/amd/zen2)> <accelerator subdir (example: accel/nvidia/cc80)> <path to tarball>" >&2
if [ $# -ne 6 ]; then
echo "ERROR: Usage: $0 <EESSI tmp dir (example: /tmp/$USER/EESSI)> <relative path to versions subdir> <version (example: 2023.06)> <CPU arch subdir (example: x86_64/amd/zen2)> <accelerator subdir (example: accel/nvidia/cc80)> <path to tarball>" >&2
exit 1
fi
eessi_tmpdir=$1
eessi_version=$2
cpu_arch_subdir=$3
accel_subdirs="$4"
target_tarball=$5
eessi_versions_subpath=$2
eessi_version=$3
cpu_arch_subdir=$4
accel_subdirs="$5"
target_tarball=$6

tmpdir=`mktemp -d`
echo ">> tmpdir: $tmpdir"

os="linux"
source ${base_dir}/init/eessi_defaults
cvmfs_repo=${EESSI_CVMFS_REPO}
software_dir="${cvmfs_repo}/versions/${eessi_version}/software/${os}/${cpu_arch_subdir}"
software_dir="${cvmfs_repo}/${eessi_versions_subpath}/${eessi_version}/software/${os}/${cpu_arch_subdir}"
if [ ! -d ${software_dir} ]; then
echo "Software directory ${software_dir} does not exist?!" >&2
exit 2
Expand All @@ -29,18 +30,18 @@ fi
# Need to extract the cvmfs_repo_name from the cvmfs_repo variable
# - remove /${EESSI_DEV_PROJECT} from the end (if it exists)
# - remove /cvmfs/ from the beginning
cvmfs_repo_name=${cvmfs_repo%"/${EESSI_DEV_PROJECT}"}
cvmfs_repo_name=${cvmfs_repo%"/${eessi_versions_subpath}"}
cvmfs_repo_name=${cvmfs_repo_name#/cvmfs/}
overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo_name}/overlay-upper${EESSI_DEV_PROJECT:+/$EESSI_DEV_PROJECT}"
overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo_name}/overlay-upper${eessi_versions_subpath:+/$eessi_versions_subpath}"

software_dir_overlay="${overlay_upper_dir}/versions/${eessi_version}"
software_dir_overlay="${overlay_upper_dir}/${eessi_version}"
if [ ! -d ${software_dir_overlay} ]; then
echo "Software directory overlay ${software_dir_overlay} does not exist?!" >&2
exit 3
fi

current_workdir=${PWD}
cd ${overlay_upper_dir}/versions/
cd ${overlay_upper_dir}
echo ">> Collecting list of files/directories to include in tarball via ${PWD}..."

files_list=${tmpdir}/files.list.txt
Expand Down Expand Up @@ -115,7 +116,7 @@ if [ -r ${module_files_list} ]; then
cp ${module_files_list} ${current_workdir}/module_files.list.txt
fi

topdir=${cvmfs_repo}/versions/
topdir=${cvmfs_repo}/${eessi_versions_subpath}

echo ">> Creating tarball ${target_tarball} from ${topdir}..."
tar cavf ${target_tarball} -C ${topdir} --files-from=${files_list}
Expand Down
Loading