From 03e66d87cb07fb9d7c2f7f0daff93928f6b25f2d Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 5 Apr 2024 20:51:55 +0200 Subject: [PATCH 01/63] {2023.06}[foss/2023a] QuantumESPRESSO 7.3.1 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 44952e2765..6cb243556a 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -71,3 +71,9 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20238 from-pr: 20238 + - QuantumESPRESSO-7.3.1-foss-2023a.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20138 + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3257 + options: + from-pr: 20138 + include-easyblocks-from-pr: 3257 From 61a788281119974079712a3ee9b1beeaa7fb24b9 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Sun, 14 Apr 2024 13:53:43 +0200 Subject: [PATCH 02/63] Update eessi-2023.06-eb-4.9.0-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 6cb243556a..1e1e7fee14 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -76,4 +76,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyblocks/pull/3257 options: from-pr: 20138 - include-easyblocks-from-pr: 3257 + include-easyblocks-from-pr: 3306 From e8c2d0636e087d4e565d5d5993d2894fa21da6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Mon, 17 Jun 2024 15:10:28 +0200 Subject: [PATCH 03/63] first steps to support multiple CVMFS repositories --- eessi_container.sh | 99 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 22 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index fb14e2118f..9b1ab69a3b 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -48,7 +48,11 @@ HTTPS_PROXY_ERROR_EXITCODE=$((${ANY_ERROR_EXITCODE} << 10)) RUN_SCRIPT_MISSING_EXITCODE=$((${ANY_ERROR_EXITCODE} << 11)) NVIDIA_MODE_UNKNOWN_EXITCODE=$((${ANY_ERROR_EXITCODE} << 12)) +# we use an associative array for storing sets of settings per CVMFS repository +declare -A cvmfs_repo_settings + # CernVM-FS settings +# TODO may need to put them into repository specific map CVMFS_VAR_LIB="var-lib-cvmfs" CVMFS_VAR_RUN="var-run-cvmfs" @@ -89,8 +93,9 @@ display_help() { echo " MODE==install for a CUDA installation, MODE==run to" echo " attach a GPU, MODE==all for both [default: false]" echo " -r | --repository CFG - configuration file or identifier defining the" - echo " repository to use [default: EESSI via" - echo " default container, see --container]" + echo " repository to use; can be given multiple times" + echo " [default: software.eessi.io via CVMFS config available" + echo " via default container, see --container]" echo " -u | --resume DIR/TGZ - resume a previous run from a directory or tarball," echo " where DIR points to a previously used tmp directory" echo " (check for output 'Using DIR as tmp ...' of a previous" @@ -123,7 +128,7 @@ STORAGE= LIST_REPOS=0 MODE="shell" SETUP_NVIDIA=0 -REPOSITORY="EESSI" +REPOSITORIES=() RESUME= SAVE= HTTP_PROXY=${http_proxy:-} @@ -179,7 +184,7 @@ while [[ $# -gt 0 ]]; do shift 2 ;; -r|--repository) - REPOSITORY="$2" + REPOSITORIES+=("$2") shift 2 ;; -s|--save) @@ -221,22 +226,50 @@ done set -- "${POSITIONAL_ARGS[@]}" +# define a list of CVMFS repositories that are accessible via the +# CVMFS config repository which is always mounted +declare -A eessi_cvmfs_repos=(["dev.eessi.io"]="extra", ["riscv.eessi.io"]="extra", ["software.eessi.io"]="default") +eessi_default_cvmfs_repo="software.eessi.io" + +# if REPOSITORIES is empty add default repository given above +if [[ ${#REPOSITORIES[@]} -eq 0 ]]; then + REPOSITORIES+=(${eessi_default_cvmfs_repo}) +fi + +# define a list of CVMFS repositories that are accessible via the +# configuration file provided via $EESSI_REPOS_CFG_FILE +declare -A cfg_cvmfs_repos=() +if [[ -r ${EESSI_REPOS_CFG_FILE} ]]; then + cfg_load ${EESSI_REPOS_CFG_FILE} + sections=$(cfg_sections) + while IFS= read -r repo_id + do + cfg_cvmfs_repos[${repo_id}]=${EESSI_REPOS_CFG_FILE} + done <<< "${sections}" +fi + if [[ ${LIST_REPOS} -eq 1 ]]; then - echo "Listing available repositories with format 'name [source]':" - echo " EESSI [default]" - if [[ -r ${EESSI_REPOS_CFG_FILE} ]]; then - cfg_load ${EESSI_REPOS_CFG_FILE} - sections=$(cfg_sections) - while IFS= read -r repo_id - do - echo " ${repo_id} [${EESSI_REPOS_CFG_FILE}]" - done <<< "${sections}" - fi + echo "Listing available repositories with format 'name [source[, 'default']]'." + echo "Note, without argument '--repository' the one labeled 'default' will be mounted." + for cvmfs_repo in "${!eessi_cvmfs_repos[@]}" + do + if [[ ${eessi_cvmfs_repos[${cvmfs_repo}]} == "default" ]] ; then + default_label=", default" + else + default_label="" + fi + echo " ${cvmfs_repo} [CVMFS config repo${default_label}]" + done + for cfg_repo in "${!cfg_cvmfs_repos[@]}" + do + echo " ${cfg_repo} [${cfg_cvmfs_repos[$cfg_repo]}]" + done exit 0 fi # 1. check if argument values are valid # (arg -a|--access) check if ACCESS is supported +# TODO use the value as global setting, suffix to --repository can specify an access mode per repository if [[ "${ACCESS}" != "ro" && "${ACCESS}" != "rw" ]]; then fatal_error "unknown access method '${ACCESS}'" "${ACCESS_UNKNOWN_EXITCODE}" fi @@ -260,10 +293,16 @@ if [[ ${SETUP_NVIDIA} -eq 1 ]]; then fi fi -# TODO (arg -r|--repository) check if repository is known +# TODO (arg -r|--repository) check if all explicitly listed repositories are known # REPOSITORY_ERROR_EXITCODE -if [[ ! -z "${REPOSITORY}" && "${REPOSITORY}" != "EESSI" && ! -r ${EESSI_REPOS_CFG_FILE} ]]; then - fatal_error "arg '--repository ${REPOSITORY}' requires a cfg file at '${EESSI_REPOS_CFG_FILE}'" "${REPOSITORY_ERROR_EXITCODE}" +if [[ ${#REPOSITORIES[@]} -ne 0 ]] ; then + # iterate over entries in REPOSITORIES and check if they are known + for cvmfs_repo in "${REPOSITORIES[@]}" + do + if [[ ! -n "${eessi_cvmfs_repos[${cvmfs_repo}]}" && ! -n ${cfg_cvmfs_repos[${cvmfs_repo}]} ]]; then + fatal_error "The repository '${cvmfs_repo}' is not an EESSI CVMFS repository or it is not known how to mount it (could be due to a typo or missing configuration). Run '$0 -l' to obtain a list of available repositories." "${REPOSITORY_ERROR_EXITCODE}" + fi + done fi # TODO (arg -u|--resume) check if it exists, if user has read permission, @@ -337,22 +376,36 @@ if [[ ! -z ${RESUME} && -f ${RESUME} ]]; then fi # 3. set up common vars and directories +# TODO change to be able to support multiple CVMFS repositories # directory structure should be: # ${EESSI_HOST_STORAGE} # |-singularity_cache -# |-${CVMFS_VAR_LIB} -# |-${CVMFS_VAR_RUN} -# |-overlay-upper -# |-overlay-work # |-home # |-repos_cfg -# |-opt-eessi (unless otherwise specificed for host_injections) +# |-CVMFS_REPO_1 +# | |-repo_settings (name, access_mode, host_injections) +# | |-${CVMFS_VAR_LIB} +# | |-${CVMFS_VAR_RUN} +# | |-overlay-upper +# | |-overlay-work +# | |-opt-eessi (unless otherwise specificed for host_injections) +# |-CVMFS_REPO_n +# |-repo_settings (name, access_mode, host_injections) +# |-${CVMFS_VAR_LIB} +# |-${CVMFS_VAR_RUN} +# |-overlay-upper +# |-overlay-work +# |-opt-eessi (unless otherwise specificed for host_injections) # tmp dir for EESSI EESSI_TMPDIR=${EESSI_HOST_STORAGE} mkdir -p ${EESSI_TMPDIR} [[ ${VERBOSE} -eq 1 ]] && echo "EESSI_TMPDIR=${EESSI_TMPDIR}" +# TODO make this specific to repository +# TODO move this code to when we already know which repositories we want to access +# actually we should know this already here, but we should rather move this to +# where repository args are being processed # Set host_injections directory and ensure it is a writable directory (if user provided) if [ -z ${USER_HOST_INJECTIONS+x} ]; then # Not set, so use our default @@ -486,6 +539,8 @@ if [[ ${FAKEROOT} -eq 1 ]]; then ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") fi +exit 0; # CONTINUE HERE +# TODO iterate over repositories in array REPOSITORIES # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg From c7a1ca2fbbb736b3eea2242c7143aaa3be063fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Tue, 18 Jun 2024 15:05:17 +0200 Subject: [PATCH 04/63] further changes to support multiple repositories --- eessi_container.sh | 248 +++++++++++++++++++++++++++------------------ 1 file changed, 148 insertions(+), 100 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 9b1ab69a3b..d561d37792 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -228,16 +228,14 @@ set -- "${POSITIONAL_ARGS[@]}" # define a list of CVMFS repositories that are accessible via the # CVMFS config repository which is always mounted +# TODO instead of hard-coding the 'extra' and 'default' repositories here one +# could have another script in the GitHub and/or CVMFS repository which +# provides this "configuration" declare -A eessi_cvmfs_repos=(["dev.eessi.io"]="extra", ["riscv.eessi.io"]="extra", ["software.eessi.io"]="default") -eessi_default_cvmfs_repo="software.eessi.io" - -# if REPOSITORIES is empty add default repository given above -if [[ ${#REPOSITORIES[@]} -eq 0 ]]; then - REPOSITORIES+=(${eessi_default_cvmfs_repo}) -fi +eessi_default_cvmfs_repo="software.eessi.io,access=${ACCESS}" # define a list of CVMFS repositories that are accessible via the -# configuration file provided via $EESSI_REPOS_CFG_FILE +# configuration file provided via $EESSI_REPOS_CFG_FILE declare -A cfg_cvmfs_repos=() if [[ -r ${EESSI_REPOS_CFG_FILE} ]]; then cfg_load ${EESSI_REPOS_CFG_FILE} @@ -267,6 +265,11 @@ if [[ ${LIST_REPOS} -eq 1 ]]; then exit 0 fi +# if REPOSITORIES is empty add default repository given above +if [[ ${#REPOSITORIES[@]} -eq 0 ]]; then + REPOSITORIES+=(${eessi_default_cvmfs_repo}) +fi + # 1. check if argument values are valid # (arg -a|--access) check if ACCESS is supported # TODO use the value as global setting, suffix to --repository can specify an access mode per repository @@ -295,15 +298,45 @@ fi # TODO (arg -r|--repository) check if all explicitly listed repositories are known # REPOSITORY_ERROR_EXITCODE -if [[ ${#REPOSITORIES[@]} -ne 0 ]] ; then - # iterate over entries in REPOSITORIES and check if they are known - for cvmfs_repo in "${REPOSITORIES[@]}" - do - if [[ ! -n "${eessi_cvmfs_repos[${cvmfs_repo}]}" && ! -n ${cfg_cvmfs_repos[${cvmfs_repo}]} ]]; then - fatal_error "The repository '${cvmfs_repo}' is not an EESSI CVMFS repository or it is not known how to mount it (could be due to a typo or missing configuration). Run '$0 -l' to obtain a list of available repositories." "${REPOSITORY_ERROR_EXITCODE}" +# iterate over entries in REPOSITORIES and check if they are known +for cvmfs_repo in "${REPOSITORIES[@]}" +do + # split into name and access mode if ',access=' in $cvmfs_repo + if [[ ${cvmfs_repo} == *",access="* ]] ; then + cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification + else + cvmfs_repo_name="${cvmfs_repo}" + fi + if [[ ! -n "${eessi_cvmfs_repos[${cvmfs_repo_name}]}" && ! -n ${cfg_cvmfs_repos[${cvmfs_repo_name}]} ]]; then + fatal_error "The repository '${cvmfs_repo_name}' is not an EESSI CVMFS repository or it is not known how to mount it (could be due to a typo or missing configuration). Run '$0 -l' to obtain a list of available repositories." "${REPOSITORY_ERROR_EXITCODE}" + fi +done + +# make sure each repository is only listed once +declare -A listed_repos=() +for cvmfs_repo in "${REPOSITORIES[@]}" +do + cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode + echo "checking for duplicates: '${cvmfs_repo}' and '${cvmfs_repo_name}'" + # if cvmfs_repo_name is not in eessi_cvmfs_repos, assume it's in cfg_cvmfs_repos + # and obtain actual repo_name from config + cfg_repo_id='' + if [[ ! -n "${eessi_cvmfs_repos[${cvmfs_repo_name}]}" ]] ; then + [[ ${VERBOSE} -eq 1 ]] && echo "repo '${cvmfs_repo_name}' is not an EESSI CVMFS repository..." + # cvmfs_repo_name is actually a repository ID, use that to obtain + # the actual name from the EESSI_REPOS_CFG_FILE + cfg_repo_id=${cvmfs_repo_name} + cvmfs_repo_name=$(cfg_get_value ${cfg_repo_id} "repo_name") + fi + if [[ -n "${listed_repos[${cvmfs_repo_name}]}" ]] ; then + via_cfg="" + if [[ -n "${cfg_repo_id}" ]] ; then + via_cfg=" (via repository ID '${cfg_repo_id}')" fi - done -fi + fatal_error "CVMFS repository '${cvmfs_repo_name}'${via_cfg} listed multiple times" + fi + listed_repos+=([${cvmfs_repo_name}]=true) +done # TODO (arg -u|--resume) check if it exists, if user has read permission, # if it contains data from a previous run @@ -382,17 +415,15 @@ fi # |-singularity_cache # |-home # |-repos_cfg +# |-${CVMFS_VAR_LIB} +# |-${CVMFS_VAR_RUN} # |-CVMFS_REPO_1 # | |-repo_settings (name, access_mode, host_injections) -# | |-${CVMFS_VAR_LIB} -# | |-${CVMFS_VAR_RUN} # | |-overlay-upper # | |-overlay-work # | |-opt-eessi (unless otherwise specificed for host_injections) # |-CVMFS_REPO_n # |-repo_settings (name, access_mode, host_injections) -# |-${CVMFS_VAR_LIB} -# |-${CVMFS_VAR_RUN} # |-overlay-upper # |-overlay-work # |-opt-eessi (unless otherwise specificed for host_injections) @@ -402,7 +433,7 @@ EESSI_TMPDIR=${EESSI_HOST_STORAGE} mkdir -p ${EESSI_TMPDIR} [[ ${VERBOSE} -eq 1 ]] && echo "EESSI_TMPDIR=${EESSI_TMPDIR}" -# TODO make this specific to repository +# TODO make this specific to repository? # TODO move this code to when we already know which repositories we want to access # actually we should know this already here, but we should rather move this to # where repository args are being processed @@ -481,6 +512,7 @@ fi [[ ${VERBOSE} -eq 1 ]] && echo "CONTAINER=${CONTAINER}" # set env vars and create directories for CernVM-FS +# TODO need to use separate values for separate repos? EESSI_CVMFS_VAR_LIB=${EESSI_TMPDIR}/${CVMFS_VAR_LIB} EESSI_CVMFS_VAR_RUN=${EESSI_TMPDIR}/${CVMFS_VAR_RUN} mkdir -p ${EESSI_CVMFS_VAR_LIB} @@ -539,92 +571,106 @@ if [[ ${FAKEROOT} -eq 1 ]]; then ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") fi -exit 0; # CONTINUE HERE # TODO iterate over repositories in array REPOSITORIES # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg -if [[ "${REPOSITORY}" == "EESSI" ]]; then - # need to source defaults as late as possible (see other sourcing below) - source ${TOPDIR}/init/eessi_defaults - - # strip "/cvmfs/" from default setting - repo_name=${EESSI_CVMFS_REPO/\/cvmfs\//} -else - # TODO implement more flexible specification of repo cfgs - # REPOSITORY => repo-id OR repo-cfg-file (with a single section) OR - # repo-cfg-file:repo-id (repo-id defined in repo-cfg-file) - # - # for now, assuming repo-id is defined in config file pointed to - # EESSI_REPOS_CFG_FILE, which is to be copied into the working directory - # (could also become part of the software layer to define multiple - # standard EESSI repositories) - cfg_load ${EESSI_REPOS_CFG_FILE} - - # copy repos.cfg to job directory --> makes it easier to inspect the job - cp -a ${EESSI_REPOS_CFG_FILE} ${EESSI_TMPDIR}/repos_cfg/. - - # cfg file should include: repo_name, repo_version, config_bundle, - # map { local_filepath -> container_filepath } - # - # repo_name_domain is the domain part of the repo_name, e.g., - # eessi.io for software.eessi.io - # - # where config bundle includes the files (-> target location in container) - # - default.local -> /etc/cvmfs/default.local - # contains CVMFS settings, e.g., CVMFS_HTTP_PROXY, CVMFS_QUOTA_LIMIT, ... - # - ${repo_name_domain}.conf -> /etc/cvmfs/domain.d/${repo_name_domain}.conf - # contains CVMFS settings, e.g., CVMFS_SERVER_URL (Stratum 1s), - # CVMFS_KEYS_DIR, CVMFS_USE_GEOAPI, ... - # - ${repo_name_domain}/ -> /etc/cvmfs/keys/${repo_name_domain} - # a directory that contains the public key to access the repository, key - # itself then doesn't need to be BIND mounted - # - ${repo_name_domain}/${repo_name}.pub - # (-> /etc/cvmfs/keys/${repo_name_domain}/${repo_name}.pub - # the public key to access the repository, key itself is BIND mounted - # via directory ${repo_name_domain} - repo_name=$(cfg_get_value ${REPOSITORY} "repo_name") - # derive domain part from repo_name (everything after first '.') - repo_name_domain=${repo_name#*.} - repo_version=$(cfg_get_value ${REPOSITORY} "repo_version") - config_bundle=$(cfg_get_value ${REPOSITORY} "config_bundle") - config_map=$(cfg_get_value ${REPOSITORY} "config_map") - - # convert config_map into associative array cfg_file_map - cfg_init_file_map "${config_map}" - [[ ${VERBOSE} -eq 1 ]] && cfg_print_map - - # use information to set up dir ${EESSI_TMPDIR}/repos_cfg, - # define BIND mounts and override repo name and version - # check if config_bundle exists, if so, unpack it into ${EESSI_TMPDIR}/repos_cfg - # if config_bundle is relative path (no '/' at start) prepend it with - # EESSI_REPOS_CFG_DIR - config_bundle_path= - if [[ ! "${config_bundle}" =~ ^/ ]]; then - config_bundle_path=${EESSI_REPOS_CFG_DIR}/${config_bundle} - else - config_bundle_path=${config_bundle} - fi +[[ ${VERBOSE} -eq 1 ]] && echo +[[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS before processing REPOSITORIES\n BIND_PATHS=${BIND_PATHS}" +[[ ${VERBOSE} -eq 1 ]] && echo +for cvmfs_repo in "${REPOSITORIES[@]}" +do + echo "process CVMFS repo spec '${cvmfs_repo}'" + # split into name and access mode if ',access=' in $cvmfs_repo + if [[ ${cvmfs_repo} == *",access="* ]] ; then + cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification + cvmfs_repo_access=${cvmfs_repo/*,access=/} # remove repo name part + else + cvmfs_repo_name="${cvmfs_repo}" + cvmfs_repo_access="${ACCESS}" # use globally defined access mode + fi + # if cvmfs_repo_name is in cfg_cvmfs_repos, it is a "repository ID" and was + # derived from information in EESSI_REPOS_CFG_FILE, namely the section + # names in that .ini-type file + # in the if-block below, we'll use cfg_repo_id to refer to that ID + # we need to process/provide the config from EESSI_REPOS_CFG_FILE, such + # that the necessary information for accessing a CVMFS repository is made + # available inside the container + if [[ -n "${cfg_cvmfs_repos[${cvmfs_repo_name}]}" ]] ; then + cfg_repo_id=${cvmfs_repo_name} + + # obtain CVMFS repository name from section for the given ID + cfg_repo_name=$(cfg_get_value ${cfg_repo_id} "repo_name") + # derive domain part from (cfg_)repo_name (everything after first '.') + repo_name_domain=${repo_name#*.} + + # cfg_cvmfs_repos is populated through reading the file pointed to by + # EESSI_REPOS_CFG_FILE. We need to copy that file and data it needs + # into the job's working directory. + + # copy repos.cfg to job directory --> makes it easier to inspect the job + cp -a ${EESSI_REPOS_CFG_FILE} ${EESSI_TMPDIR}/repos_cfg/. + + # cfg file should include sections (one per CVMFS repository to be mounted) + # with each section containing the settings: + # - repo_name, + # - repo_version, + # - config_bundle, and + # - a map { filepath_in_bundle -> container_filepath } + # + # The config_bundle includes the files which are mapped ('->') to a target + # location in container: + # - default.local -> /etc/cvmfs/default.local + # contains CVMFS settings, e.g., CVMFS_HTTP_PROXY, CVMFS_QUOTA_LIMIT, ... + # - ${repo_name_domain}.conf -> /etc/cvmfs/domain.d/${repo_name_domain}.conf + # contains CVMFS settings, e.g., CVMFS_SERVER_URL (Stratum 1s), + # CVMFS_KEYS_DIR, CVMFS_USE_GEOAPI, ... + # - ${repo_name_domain}/ -> /etc/cvmfs/keys/${repo_name_domain} + # a directory that contains the public key to access the repository, key + # itself then doesn't need to be BIND mounted + # - ${repo_name_domain}/${cfg_repo_name}.pub + # (-> /etc/cvmfs/keys/${repo_name_domain}/${cfg_repo_name}.pub + # the public key to access the repository, key itself is BIND mounted + # via directory ${repo_name_domain} + cfg_repo_version=$(cfg_get_value ${cfg_repo_id} "repo_version") + cfg_config_bundle=$(cfg_get_value ${cfg_repo_id} "config_bundle") + cfg_config_map=$(cfg_get_value ${cfg_repo_id} "config_map") + + # convert cfg_config_map into associative array cfg_file_map + cfg_init_file_map "${cfg_config_map}" + [[ ${VERBOSE} -eq 1 ]] && cfg_print_map + + # use information to set up dir ${EESSI_TMPDIR}/repos_cfg and define + # BIND mounts + # check if config_bundle exists, if so, unpack it into + # ${EESSI_TMPDIR}/repos_cfg; if it doesn't, exit with an error + # if config_bundle is relative path (no '/' at start) prepend it with + # EESSI_REPOS_CFG_DIR + config_bundle_path= + if [[ ! "${cfg_config_bundle}" =~ ^/ ]]; then + config_bundle_path=${EESSI_REPOS_CFG_DIR}/${cfg_config_bundle} + else + config_bundle_path=${cfg_config_bundle} + fi - if [[ ! -r ${config_bundle_path} ]]; then - fatal_error "config bundle '${config_bundle_path}' is not readable" ${REPOSITORY_ERROR_EXITCODE} - fi + if [[ ! -r ${config_bundle_path} ]]; then + fatal_error "config bundle '${config_bundle_path}' is not readable" ${REPOSITORY_ERROR_EXITCODE} + fi - # only unpack config_bundle if we're not resuming from a previous run - if [[ -z ${RESUME} ]]; then - tar xf ${config_bundle_path} -C ${EESSI_TMPDIR}/repos_cfg - fi + # only unpack cfg_config_bundle if we're not resuming from a previous run + if [[ -z ${RESUME} ]]; then + tar xf ${config_bundle_path} -C ${EESSI_TMPDIR}/repos_cfg + fi - for src in "${!cfg_file_map[@]}" - do - target=${cfg_file_map[${src}]} - BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" - done - export EESSI_VERSION_OVERRIDE=${repo_version} - export EESSI_CVMFS_REPO_OVERRIDE="/cvmfs/${repo_name}" - # need to source defaults as late as possible (after *_OVERRIDEs) - source ${TOPDIR}/init/eessi_defaults -fi + for src in "${!cfg_file_map[@]}" + do + target=${cfg_file_map[${src}]} + BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" + done + fi + [[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS after processing '${cvmfs_repo}'\n BIND_PATHS=${BIND_PATHS}" + [[ ${VERBOSE} -eq 1 ]] && echo +done # if http_proxy is not empty, we assume that the machine accesses internet # via a proxy. then we need to add CVMFS_HTTP_PROXY to @@ -650,14 +696,16 @@ if [[ ! -z ${http_proxy} ]]; then export BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/default.local:/etc/cvmfs/default.local" fi fi +exit 0; # CONTINUE HERE # 4. set up vars and dirs specific to a scenario declare -a EESSI_FUSE_MOUNTS=() -# always mount cvmfs-config repo (to get access to software.eessi.io) +# always mount cvmfs-config repo (to get access to EESSI repositories such as software.eessi.io) EESSI_FUSE_MOUNTS+=("--fusemount" "container:cvmfs2 cvmfs-config.cern.ch /cvmfs/cvmfs-config.cern.ch") +# TODO iterate over REPOSITORIES and either use repository-specific access mode or global setting (possibly a global default) if [[ "${ACCESS}" == "ro" ]]; then export EESSI_READONLY="container:cvmfs2 ${repo_name} /cvmfs/${repo_name}" From 934059a731f55d5a11cc10b6e3719abf65b1d478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Wed, 19 Jun 2024 15:21:27 +0200 Subject: [PATCH 05/63] configure multiple fusemounts --- eessi_container.sh | 123 +++++++++++++++++++++++++++------------------ 1 file changed, 74 insertions(+), 49 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index d561d37792..c549d04d8c 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -52,7 +52,6 @@ NVIDIA_MODE_UNKNOWN_EXITCODE=$((${ANY_ERROR_EXITCODE} << 12)) declare -A cvmfs_repo_settings # CernVM-FS settings -# TODO may need to put them into repository specific map CVMFS_VAR_LIB="var-lib-cvmfs" CVMFS_VAR_RUN="var-run-cvmfs" @@ -272,7 +271,7 @@ fi # 1. check if argument values are valid # (arg -a|--access) check if ACCESS is supported -# TODO use the value as global setting, suffix to --repository can specify an access mode per repository +# use the value as global setting, suffix to --repository can specify an access mode per repository if [[ "${ACCESS}" != "ro" && "${ACCESS}" != "rw" ]]; then fatal_error "unknown access method '${ACCESS}'" "${ACCESS_UNKNOWN_EXITCODE}" fi @@ -317,7 +316,7 @@ declare -A listed_repos=() for cvmfs_repo in "${REPOSITORIES[@]}" do cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode - echo "checking for duplicates: '${cvmfs_repo}' and '${cvmfs_repo_name}'" + [[ ${VERBOSE} -eq 1 ]] && echo "checking for duplicates: '${cvmfs_repo}' and '${cvmfs_repo_name}'" # if cvmfs_repo_name is not in eessi_cvmfs_repos, assume it's in cfg_cvmfs_repos # and obtain actual repo_name from config cfg_repo_id='' @@ -409,7 +408,6 @@ if [[ ! -z ${RESUME} && -f ${RESUME} ]]; then fi # 3. set up common vars and directories -# TODO change to be able to support multiple CVMFS repositories # directory structure should be: # ${EESSI_HOST_STORAGE} # |-singularity_cache @@ -528,14 +526,18 @@ fi [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_HOME=${SINGULARITY_HOME}" # define paths to add to SINGULARITY_BIND (added later when all BIND mounts are defined) -BIND_PATHS="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi" +if [[ -z ${SINGULARITY_BIND} ]] ; then + SINGULARITY_BIND="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi" +else + SINGULARITY_BIND="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi,${SINGULARITY_BIND}" +fi # provide a '/tmp' inside the container -BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" +SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" if [[ ! -z ${EXTRA_BIND_PATHS} ]]; then - BIND_PATHS="${BIND_PATHS},${EXTRA_BIND_PATHS}" + SINGULARITY_BIND="${SINGULARITY_BIND},${EXTRA_BIND_PATHS}" fi -[[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" +[[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" declare -a ADDITIONAL_CONTAINER_OPTIONS=() @@ -556,8 +558,8 @@ if [[ ${SETUP_NVIDIA} -eq 1 ]]; then EESSI_USR_LOCAL_CUDA=${EESSI_TMPDIR}/usr-local-cuda mkdir -p ${EESSI_VAR_LOG} mkdir -p ${EESSI_USR_LOCAL_CUDA} - BIND_PATHS="${BIND_PATHS},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" - [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" + SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" + [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" if [[ "${NVIDIA_MODE}" == "install" ]] ; then # No GPU so we need to "trick" Lmod to allow us to load CUDA modules even without a CUDA driver # (this variable means EESSI_OVERRIDE_GPU_CHECK=1 will be set inside the container) @@ -571,16 +573,16 @@ if [[ ${FAKEROOT} -eq 1 ]]; then ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") fi -# TODO iterate over repositories in array REPOSITORIES # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg [[ ${VERBOSE} -eq 1 ]] && echo -[[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS before processing REPOSITORIES\n BIND_PATHS=${BIND_PATHS}" +[[ ${VERBOSE} -eq 1 ]] && echo -e "SINGULARITY_BIND before processing REPOSITORIES\n SINGULARITY_BIND=${SINGULARITY_BIND}" [[ ${VERBOSE} -eq 1 ]] && echo +# iterate over repositories in array REPOSITORIES for cvmfs_repo in "${REPOSITORIES[@]}" do - echo "process CVMFS repo spec '${cvmfs_repo}'" + [[ ${VERBOSE} -eq 1 ]] && echo "process CVMFS repo spec '${cvmfs_repo}'" # split into name and access mode if ',access=' in $cvmfs_repo if [[ ${cvmfs_repo} == *",access="* ]] ; then cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification @@ -665,17 +667,21 @@ do for src in "${!cfg_file_map[@]}" do target=${cfg_file_map[${src}]} - BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" + # if target is alreay BIND mounted, exit with an error + if [[ ${SINGULARITY_BIND} =~ "${target}" ]]; then + fatal_error "target '${target}' is already listed in paths to bind mount into the container ('${SINGULARITY_BIND}')" ${REPOSITORY_ERROR_EXITCODE} + fi + export SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" done fi - [[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS after processing '${cvmfs_repo}'\n BIND_PATHS=${BIND_PATHS}" + [[ ${VERBOSE} -eq 1 ]] && echo -e "SINGULARITY_BIND after processing '${cvmfs_repo}'\n SINGULARITY_BIND=${SINGULARITY_BIND}" [[ ${VERBOSE} -eq 1 ]] && echo done # if http_proxy is not empty, we assume that the machine accesses internet # via a proxy. then we need to add CVMFS_HTTP_PROXY to -# ${EESSI_TMPDIR}/repos_cfg/default.local on host (and possibly add a BIND -# MOUNT if it was not yet in BIND_PATHS) +# ${EESSI_TMPDIR}/repos_cfg/default.local on the host (and possibly add a BIND +# MOUNT if it was not yet in SINGULARITY_BIND) if [[ ! -z ${http_proxy} ]]; then # TODO tolerate other formats for proxy URLs, for now assume format is # http://SOME_HOSTNAME:SOME_PORT/ @@ -691,12 +697,14 @@ if [[ ! -z ${http_proxy} ]]; then [[ ${VERBOSE} -eq 1 ]] && echo "contents of default.local" [[ ${VERBOSE} -eq 1 ]] && cat ${EESSI_TMPDIR}/repos_cfg/default.local - # if default.local is not BIND mounted into container, add it to BIND_PATHS - if [[ ! ${BIND_PATHS} =~ "${EESSI_TMPDIR}/repos_cfg/default.local:/etc/cvmfs/default.local" ]]; then - export BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/default.local:/etc/cvmfs/default.local" + # if default.local is not BIND mounted into container, add it to SINGULARITY_BIND + src=${EESSI_TMPDIR}/repos_cfg/default.local + target=/etc/cvmfs/default.local + if [[ ${SINGULARITY_BIND} =~ "${target}" ]]; then + fatal_error "BIND target in '${src}:${target}' is already in paths to be bind mounted into the container ('${SINGULARITY_BIND}')" ${REPOSITORY_ERROR_EXITCODE} fi + export SINGULARITY_BIND="${SINGULARITY_BIND},${src}:${target}" fi -exit 0; # CONTINUE HERE # 4. set up vars and dirs specific to a scenario @@ -705,42 +713,59 @@ declare -a EESSI_FUSE_MOUNTS=() # always mount cvmfs-config repo (to get access to EESSI repositories such as software.eessi.io) EESSI_FUSE_MOUNTS+=("--fusemount" "container:cvmfs2 cvmfs-config.cern.ch /cvmfs/cvmfs-config.cern.ch") -# TODO iterate over REPOSITORIES and either use repository-specific access mode or global setting (possibly a global default) -if [[ "${ACCESS}" == "ro" ]]; then - export EESSI_READONLY="container:cvmfs2 ${repo_name} /cvmfs/${repo_name}" - - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") - export EESSI_FUSE_MOUNTS -fi +# iterate over REPOSITORIES and either use repository-specific access mode or global setting (possibly a global default) +for cvmfs_repo in "${REPOSITORIES[@]}" +do + [[ ${VERBOSE} -eq 1 ]] && echo "add fusemount options for CVMFS repo '${cvmfs_repo}'" + # split into name and access mode if ',access=' in $cvmfs_repo + if [[ ${cvmfs_repo} == *",access="* ]] ; then + cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification + cvmfs_repo_access=${cvmfs_repo/*,access=/} # remove repo name part + else + cvmfs_repo_name="${cvmfs_repo}" + cvmfs_repo_access="${ACCESS}" # use globally defined access mode + fi + # obtain cvmfs_repo_name from EESSI_REPOS_CFG_FILE if cvmfs_repo is in cfg_cvmfs_repos + if [[ ${cfg_cvmfs_repos[${cvmfs_repo_name}]} ]]; then + [[ ${VERBOSE} -eq 1 ]] && echo "repo '${cvmfs_repo_name}' is not an EESSI CVMFS repository..." + # cvmfs_repo_name is actually a repository ID, use that to obtain + # the actual name from the EESSI_REPOS_CFG_FILE + cfg_repo_id=${cvmfs_repo_name} + cvmfs_repo_name=$(cfg_get_value ${cfg_repo_id} "repo_name") + fi -if [[ "${ACCESS}" == "rw" ]]; then - mkdir -p ${EESSI_TMPDIR}/overlay-upper - mkdir -p ${EESSI_TMPDIR}/overlay-work + # add fusemount options depending on requested access mode ('ro' - read-only; 'rw' - read & write) + if [[ ${cvmfs_repo_access} == "ro" ]] ; then + export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs/${cvmfs_repo_name}" - # set environment variables for fuse mounts in Singularity container - export EESSI_READONLY="container:cvmfs2 ${repo_name} /cvmfs_ro/${repo_name}" + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") + export EESSI_FUSE_MOUNTS + elif [[ ${cvmfs_repo_access} == "rw" ]] ; then + # use repo-specific overlay directories + mkdir -p ${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-upper + mkdir -p ${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-work - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") + # set environment variables for fuse mounts in Singularity container + export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs_ro/${cvmfs_repo_name}" - EESSI_WRITABLE_OVERLAY="container:fuse-overlayfs" - EESSI_WRITABLE_OVERLAY+=" -o lowerdir=/cvmfs_ro/${repo_name}" - EESSI_WRITABLE_OVERLAY+=" -o upperdir=${TMP_IN_CONTAINER}/overlay-upper" - EESSI_WRITABLE_OVERLAY+=" -o workdir=${TMP_IN_CONTAINER}/overlay-work" - EESSI_WRITABLE_OVERLAY+=" ${EESSI_CVMFS_REPO}" - export EESSI_WRITABLE_OVERLAY + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_WRITABLE_OVERLAY}") - export EESSI_FUSE_MOUNTS -fi + EESSI_WRITABLE_OVERLAY="container:fuse-overlayfs" + EESSI_WRITABLE_OVERLAY+=" -o lowerdir=/cvmfs_ro/${cvmfs_repo_name}" + EESSI_WRITABLE_OVERLAY+=" -o upperdir=${TMP_IN_CONTAINER}/${cvmfs_repo_name}/overlay-upper" + EESSI_WRITABLE_OVERLAY+=" -o workdir=${TMP_IN_CONTAINER}/${cvmfs_repo_name}/overlay-work" + EESSI_WRITABLE_OVERLAY+=" /cvmfs/${cvmfs_repo_name}" + export EESSI_WRITABLE_OVERLAY + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_WRITABLE_OVERLAY}") + export EESSI_FUSE_MOUNTS + else + echo -e "ERROR: access mode '${cvmfs_repo_access}' for CVMFS repository\n '${cvmfs_repo_name}' is not known" + exit ${REPOSITORY_ERROR_EXITCODE} + fi +done # 5. run container -# final settings -if [[ -z ${SINGULARITY_BIND} ]]; then - export SINGULARITY_BIND="${BIND_PATHS}" -else - export SINGULARITY_BIND="${SINGULARITY_BIND},${BIND_PATHS}" -fi [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" # pass $EESSI_SOFTWARE_SUBDIR_OVERRIDE into build container (if set) From 32f413328cd3b8f1da7ea7521f7458c20cd7232b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Wed, 19 Jun 2024 16:02:40 +0200 Subject: [PATCH 06/63] revert back changes related to BIND_PATHS and SINGULARITY_BIND + some polishing --- eessi_container.sh | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index c549d04d8c..163792f622 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -416,12 +416,10 @@ fi # |-${CVMFS_VAR_LIB} # |-${CVMFS_VAR_RUN} # |-CVMFS_REPO_1 -# | |-repo_settings (name, access_mode, host_injections) # | |-overlay-upper # | |-overlay-work # | |-opt-eessi (unless otherwise specificed for host_injections) # |-CVMFS_REPO_n -# |-repo_settings (name, access_mode, host_injections) # |-overlay-upper # |-overlay-work # |-opt-eessi (unless otherwise specificed for host_injections) @@ -526,18 +524,15 @@ fi [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_HOME=${SINGULARITY_HOME}" # define paths to add to SINGULARITY_BIND (added later when all BIND mounts are defined) -if [[ -z ${SINGULARITY_BIND} ]] ; then - SINGULARITY_BIND="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi" -else - SINGULARITY_BIND="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi,${SINGULARITY_BIND}" -fi +BIND_PATHS="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi" + # provide a '/tmp' inside the container -SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" +BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" if [[ ! -z ${EXTRA_BIND_PATHS} ]]; then - SINGULARITY_BIND="${SINGULARITY_BIND},${EXTRA_BIND_PATHS}" + BIND_PATHS="${BIND_PATHS},${EXTRA_BIND_PATHS}" fi -[[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" +[[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" declare -a ADDITIONAL_CONTAINER_OPTIONS=() @@ -558,8 +553,8 @@ if [[ ${SETUP_NVIDIA} -eq 1 ]]; then EESSI_USR_LOCAL_CUDA=${EESSI_TMPDIR}/usr-local-cuda mkdir -p ${EESSI_VAR_LOG} mkdir -p ${EESSI_USR_LOCAL_CUDA} - SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" - [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" + BIND_PATHS="${BIND_PATHS},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" + [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" if [[ "${NVIDIA_MODE}" == "install" ]] ; then # No GPU so we need to "trick" Lmod to allow us to load CUDA modules even without a CUDA driver # (this variable means EESSI_OVERRIDE_GPU_CHECK=1 will be set inside the container) @@ -577,7 +572,7 @@ fi # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg [[ ${VERBOSE} -eq 1 ]] && echo -[[ ${VERBOSE} -eq 1 ]] && echo -e "SINGULARITY_BIND before processing REPOSITORIES\n SINGULARITY_BIND=${SINGULARITY_BIND}" +[[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS before processing REPOSITORIES\n BIND_PATHS=${BIND_PATHS}" [[ ${VERBOSE} -eq 1 ]] && echo # iterate over repositories in array REPOSITORIES for cvmfs_repo in "${REPOSITORIES[@]}" @@ -668,20 +663,20 @@ do do target=${cfg_file_map[${src}]} # if target is alreay BIND mounted, exit with an error - if [[ ${SINGULARITY_BIND} =~ "${target}" ]]; then - fatal_error "target '${target}' is already listed in paths to bind mount into the container ('${SINGULARITY_BIND}')" ${REPOSITORY_ERROR_EXITCODE} + if [[ ${BIND_PATHS} =~ "${target}" ]]; then + fatal_error "target '${target}' is already listed in paths to bind mount into the container ('${BIND_PATHS}')" ${REPOSITORY_ERROR_EXITCODE} fi - export SINGULARITY_BIND="${SINGULARITY_BIND},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" + BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" done fi - [[ ${VERBOSE} -eq 1 ]] && echo -e "SINGULARITY_BIND after processing '${cvmfs_repo}'\n SINGULARITY_BIND=${SINGULARITY_BIND}" + [[ ${VERBOSE} -eq 1 ]] && echo -e "BIND_PATHS after processing '${cvmfs_repo}'\n BIND_PATHS=${BIND_PATHS}" [[ ${VERBOSE} -eq 1 ]] && echo done # if http_proxy is not empty, we assume that the machine accesses internet # via a proxy. then we need to add CVMFS_HTTP_PROXY to # ${EESSI_TMPDIR}/repos_cfg/default.local on the host (and possibly add a BIND -# MOUNT if it was not yet in SINGULARITY_BIND) +# MOUNT if it was not yet in BIND_PATHS) if [[ ! -z ${http_proxy} ]]; then # TODO tolerate other formats for proxy URLs, for now assume format is # http://SOME_HOSTNAME:SOME_PORT/ @@ -697,13 +692,13 @@ if [[ ! -z ${http_proxy} ]]; then [[ ${VERBOSE} -eq 1 ]] && echo "contents of default.local" [[ ${VERBOSE} -eq 1 ]] && cat ${EESSI_TMPDIR}/repos_cfg/default.local - # if default.local is not BIND mounted into container, add it to SINGULARITY_BIND + # if default.local is not BIND mounted into container, add it to BIND_PATHS src=${EESSI_TMPDIR}/repos_cfg/default.local target=/etc/cvmfs/default.local - if [[ ${SINGULARITY_BIND} =~ "${target}" ]]; then - fatal_error "BIND target in '${src}:${target}' is already in paths to be bind mounted into the container ('${SINGULARITY_BIND}')" ${REPOSITORY_ERROR_EXITCODE} + if [[ ${BIND_PATHS} =~ "${target}" ]]; then + fatal_error "BIND target in '${src}:${target}' is already in paths to be bind mounted into the container ('${BIND_PATHS}')" ${REPOSITORY_ERROR_EXITCODE} fi - export SINGULARITY_BIND="${SINGULARITY_BIND},${src}:${target}" + BIND_PATHS="${BIND_PATHS},${src}:${target}" fi # 4. set up vars and dirs specific to a scenario @@ -744,6 +739,7 @@ do # use repo-specific overlay directories mkdir -p ${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-upper mkdir -p ${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-work + [[ ${VERBOSE} -eq 1 ]] && echo -e "TMP directory contents:\n$(ls -l ${EESSI_TMPDIR})" # set environment variables for fuse mounts in Singularity container export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs_ro/${cvmfs_repo_name}" @@ -766,6 +762,12 @@ do done # 5. run container +# final settings +if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${BIND_PATHS}" +else + export SINGULARITY_BIND="${SINGULARITY_BIND},${BIND_PATHS}" +fi [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_BIND=${SINGULARITY_BIND}" # pass $EESSI_SOFTWARE_SUBDIR_OVERRIDE into build container (if set) From 07de7008e60586d146cd4986de9d0a4f7e505731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Thu, 20 Jun 2024 09:07:24 +0200 Subject: [PATCH 07/63] store repository settings under tmp --- eessi_container.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/eessi_container.sh b/eessi_container.sh index 163792f622..eaa4f59af9 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -416,10 +416,12 @@ fi # |-${CVMFS_VAR_LIB} # |-${CVMFS_VAR_RUN} # |-CVMFS_REPO_1 +# | |-repo_settings.sh (name, id, access, host_injections) # | |-overlay-upper # | |-overlay-work # | |-opt-eessi (unless otherwise specificed for host_injections) # |-CVMFS_REPO_n +# |-repo_settings.sh (name, id, access, host_injections) # |-overlay-upper # |-overlay-work # |-opt-eessi (unless otherwise specificed for host_injections) @@ -711,6 +713,7 @@ EESSI_FUSE_MOUNTS+=("--fusemount" "container:cvmfs2 cvmfs-config.cern.ch /cvmfs/ # iterate over REPOSITORIES and either use repository-specific access mode or global setting (possibly a global default) for cvmfs_repo in "${REPOSITORIES[@]}" do + unset cfg_repo_id [[ ${VERBOSE} -eq 1 ]] && echo "add fusemount options for CVMFS repo '${cvmfs_repo}'" # split into name and access mode if ',access=' in $cvmfs_repo if [[ ${cvmfs_repo} == *",access="* ]] ; then @@ -729,6 +732,9 @@ do cvmfs_repo_name=$(cfg_get_value ${cfg_repo_id} "repo_name") fi + # always create a directory for the repository (e.g., to store settings, ...) + mkdir -p ${EESSI_TMPDIR}/${cvmfs_repo_name} + # add fusemount options depending on requested access mode ('ro' - read-only; 'rw' - read & write) if [[ ${cvmfs_repo_access} == "ro" ]] ; then export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs/${cvmfs_repo_name}" @@ -759,6 +765,20 @@ do echo -e "ERROR: access mode '${cvmfs_repo_access}' for CVMFS repository\n '${cvmfs_repo_name}' is not known" exit ${REPOSITORY_ERROR_EXITCODE} fi + # create repo_settings.sh file in ${EESSI_TMPDIR}/${cvmfs_repo_name} to store + # (intention is that the file could be just sourced to obtain the settings) + # repo_name = ${cvmfs_repo_name} + # repo_id = ${cfg_repo_id} # empty if not an EESSI repo + # repo_access = ${cvmfs_repo_access} + # repo_host_injections = [ {"src_path":"target_path"}... ] # TODO + settings= + #[[ -n ${cfg_repo_id} ]] && settings="[${cvmfs_repo_name}]\n" || settings="[${cfg_repo_id}]\n" + settings="${settings}repo_name = ${cvmfs_repo_name}\n" + settings="${settings}repo_id = ${cfg_repo_id}\n" + settings="${settings}repo_access = ${cvmfs_repo_access}\n" + # TODO iterate over host_injections (first need means to define them (globally and/or per repository) + # settings="${settings}repo_host_injections = ${host_injections}\n" + echo -e "${settings}" > ${EESSI_TMPDIR}/${cvmfs_repo_name}/repo_settings.sh done # 5. run container From d9c1fb1104f19e741b8ac2a5a652eb22e07bf241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Tue, 25 Jun 2024 10:17:51 +0200 Subject: [PATCH 08/63] removed unnecessary variable --- eessi_container.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index eaa4f59af9..4b7b4eb719 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -48,9 +48,6 @@ HTTPS_PROXY_ERROR_EXITCODE=$((${ANY_ERROR_EXITCODE} << 10)) RUN_SCRIPT_MISSING_EXITCODE=$((${ANY_ERROR_EXITCODE} << 11)) NVIDIA_MODE_UNKNOWN_EXITCODE=$((${ANY_ERROR_EXITCODE} << 12)) -# we use an associative array for storing sets of settings per CVMFS repository -declare -A cvmfs_repo_settings - # CernVM-FS settings CVMFS_VAR_LIB="var-lib-cvmfs" CVMFS_VAR_RUN="var-run-cvmfs" From e25cd1e720a3a0e787409093d561d5892929d10a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= Date: Tue, 25 Jun 2024 10:23:18 +0200 Subject: [PATCH 09/63] add more information about repository-specific access modes --- eessi_container.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 4b7b4eb719..9d2ce6c25f 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -70,7 +70,8 @@ export EESSI_REPOS_CFG_FILE="${EESSI_REPOS_CFG_DIR}/repos.cfg" display_help() { echo "usage: $0 [OPTIONS] [[--] SCRIPT or COMMAND]" echo " OPTIONS:" - echo " -a | --access {ro,rw} - ro (read-only), rw (read & write) [default: ro]" + echo " -a | --access {ro,rw} - sets access globally for all CVMFS repositories:" + echo " ro (read-only), rw (read & write) [default: ro]" echo " -b | --extra-bind-paths - specify extra paths to be bound into the container." echo " To specify multiple bind paths, separate by comma." echo " Example: '/src:/dest:ro,/src2:/dest2:rw'" @@ -89,7 +90,9 @@ display_help() { echo " MODE==install for a CUDA installation, MODE==run to" echo " attach a GPU, MODE==all for both [default: false]" echo " -r | --repository CFG - configuration file or identifier defining the" - echo " repository to use; can be given multiple times" + echo " repository to use; can be given multiple times;" + echo " CFG may include a suffix ';access={ro,rw}' to" + echo " overwrite the global access mode for this repository" echo " [default: software.eessi.io via CVMFS config available" echo " via default container, see --container]" echo " -u | --resume DIR/TGZ - resume a previous run from a directory or tarball," From f07fd8567f1154cb8b4f0ab338979caff4dbfcce Mon Sep 17 00:00:00 2001 From: torri Date: Wed, 26 Jun 2024 14:03:51 +0200 Subject: [PATCH 10/63] fix for broken curl installation --- init/eessi_environment_variables | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 78851a9c95..d6e5b75dce 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -15,6 +15,20 @@ function show_msg { fi } +function check_rhel_ca { + + os=$(grep -oP '(?<=^ID_LIKE=).+' /etc/os-release | tr -d '"') + + version_id=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"') + version_major=${version_id%\.*} + + if [[ $os =~ "rhel" ]] && [ $version_major -gt 7 ] + then + export CURL_CA_BUNDLE=/etc/pki/tls/certs/ca-bundle.crt + fi +} + + # set up minimal environment: $EESSI_PREFIX, $EESSI_VERSION, $EESSI_OS_TYPE, $EESSI_CPU_FAMILY, $EPREFIX source $EESSI_INIT_DIR_PATH/minimal_eessi_env @@ -106,6 +120,8 @@ if [ -d $EESSI_PREFIX ]; then false fi + # Fix wrong path for RHEL >=8 libcurl + check_rhel_ca else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" From 9f841a2cbcf1c27ea6d7517bbb4edba9cb3744b8 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 1 Jul 2024 15:03:18 +0200 Subject: [PATCH 11/63] {2023.06}[foss/2023a] CP2K 2023.1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index ade226c217..bd412f1579 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -1,2 +1,3 @@ easyconfigs: - BCFtools-1.18-GCC-12.3.0.eb + - CP2K-2023.1-foss-2023a.eb From 9747ee497161f23dd999094e78bae6c863c5a9fb Mon Sep 17 00:00:00 2001 From: torri Date: Mon, 1 Jul 2024 16:31:37 +0200 Subject: [PATCH 12/63] simplified the implementation --- init/eessi_environment_variables | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index d6e5b75dce..c28ddb45d9 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -15,20 +15,6 @@ function show_msg { fi } -function check_rhel_ca { - - os=$(grep -oP '(?<=^ID_LIKE=).+' /etc/os-release | tr -d '"') - - version_id=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"') - version_major=${version_id%\.*} - - if [[ $os =~ "rhel" ]] && [ $version_major -gt 7 ] - then - export CURL_CA_BUNDLE=/etc/pki/tls/certs/ca-bundle.crt - fi -} - - # set up minimal environment: $EESSI_PREFIX, $EESSI_VERSION, $EESSI_OS_TYPE, $EESSI_CPU_FAMILY, $EPREFIX source $EESSI_INIT_DIR_PATH/minimal_eessi_env @@ -121,7 +107,11 @@ if [ -d $EESSI_PREFIX ]; then fi # Fix wrong path for RHEL >=8 libcurl - check_rhel_ca + rhel_libcurl_file="/etc/pki/tls/certs/ca-bundle.crt" + if [ -f $rhel_libcurl_file ]; then + show_msg "Found libcurl CAs file at RHEL location, setting CURL_CA_BUNDLE" + export CURL_CA_BUNDLE=$rhel_libcurl_file + fi else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" From ba8de248ef1de35d2eecb359dd33ebcdb3981da0 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 2 Jul 2024 12:22:46 +0200 Subject: [PATCH 13/63] add from-pr 20951 for ARM support --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index bd412f1579..5d4aa9a772 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -1,3 +1,6 @@ easyconfigs: - BCFtools-1.18-GCC-12.3.0.eb - - CP2K-2023.1-foss-2023a.eb + - CP2K-2023.1-foss-2023a.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 + options: + from-pr: 20951 From 51c6b1c998a69d8dd4a75f4f83b101b5ba81f1b4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 Jul 2024 10:51:41 +0200 Subject: [PATCH 14/63] improve comment that explains setting of `$CURL_CA_BUNDLE` on RHEL-based systems Co-authored-by: ocaisa --- init/eessi_environment_variables | 3 +++ 1 file changed, 3 insertions(+) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index c28ddb45d9..f5bb387955 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -107,6 +107,9 @@ if [ -d $EESSI_PREFIX ]; then fi # Fix wrong path for RHEL >=8 libcurl + # This is required here because we ship curl in our compat layer. If we only provided + # curl as a module file we could instead do this via a `modluafooter` in an EasyBuild + # hook (or via an Lmod hook) rhel_libcurl_file="/etc/pki/tls/certs/ca-bundle.crt" if [ -f $rhel_libcurl_file ]; then show_msg "Found libcurl CAs file at RHEL location, setting CURL_CA_BUNDLE" From d56cd31a81ae2a88adf8ca6b0d15e11df5624d7a Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 3 Jul 2024 12:07:22 +0200 Subject: [PATCH 15/63] add hook for missing installation check on aarch64 --- eb_hooks.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index e6f0cf0dd2..b4862cb572 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -294,6 +294,22 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") +def parse_hook_CP2K_remove_deps_for_aarch64(ec, *args, **kwargs): + """ + Remove x86_64 specific dependencies for the CI and missing installations to pass on aarch64 + """ + if ec.name == 'CP2K' and ec.version in ('2023.1',): + if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': + # LIBXSMM is not supported on ARM with GCC 12.2.0 and 12.3.0 + # See https://www.cp2k.org/dev:compiler_support + # See https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 + # we need this hook because we check for missing installations for all CPU targets + # on an x86_64 VM in GitHub Actions (so condition based on ARCH in LAMMPS easyconfig is always true) + ec['dependencies'] = [dep for dep in ec['dependencies'] if dep[0] not in ('libxsmm',)] + else: + raise EasyBuildError("CP2K-specific hook triggered for non-CP2K easyconfig?!")] + + def pre_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwargs): """ Solve issues with compiling or running the tests on both @@ -693,6 +709,7 @@ def inject_gpu_property(ec): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, + 'CP2K': parse_hook_CP2K_remove_deps_for_aarch64, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, From 95dd8a02239cbff967a3a5e51e3186398693bfed Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 3 Jul 2024 12:56:06 +0200 Subject: [PATCH 16/63] fix CP2K hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index b4862cb572..4dc39c2fe8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -307,7 +307,7 @@ def parse_hook_CP2K_remove_deps_for_aarch64(ec, *args, **kwargs): # on an x86_64 VM in GitHub Actions (so condition based on ARCH in LAMMPS easyconfig is always true) ec['dependencies'] = [dep for dep in ec['dependencies'] if dep[0] not in ('libxsmm',)] else: - raise EasyBuildError("CP2K-specific hook triggered for non-CP2K easyconfig?!")] + raise EasyBuildError("CP2K-specific hook triggered for non-CP2K easyconfig?!") def pre_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwargs): From 84de38a958417daf880c347dba0e9ae728d0e3f0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 Jul 2024 21:37:43 +0200 Subject: [PATCH 17/63] {2023.06,zen4}[foss/2023a] ParaView 5.11.2 --- .../2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml index 09f525364f..d4c70c562d 100644 --- a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml @@ -2,3 +2,4 @@ easyconfigs: - ESPResSo-4.2.2-foss-2023a.eb - TensorFlow-2.13.0-foss-2023a.eb - R-4.3.2-gfbf-2023a.eb + - ParaView-5.11.2-foss-2023a.eb From c895bf16668c588d7eec827092849d883ce10bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Jul 2024 13:24:12 +0200 Subject: [PATCH 18/63] remove TODO for using separate cache dirs for each repo --- eessi_container.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi_container.sh b/eessi_container.sh index 9d2ce6c25f..94de82df0f 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -510,7 +510,6 @@ fi [[ ${VERBOSE} -eq 1 ]] && echo "CONTAINER=${CONTAINER}" # set env vars and create directories for CernVM-FS -# TODO need to use separate values for separate repos? EESSI_CVMFS_VAR_LIB=${EESSI_TMPDIR}/${CVMFS_VAR_LIB} EESSI_CVMFS_VAR_RUN=${EESSI_TMPDIR}/${CVMFS_VAR_RUN} mkdir -p ${EESSI_CVMFS_VAR_LIB} From 417f4dd9b82795520e5923a9c1532ed04f384747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Jul 2024 13:24:44 +0200 Subject: [PATCH 19/63] fix usage line for access permissions --- eessi_container.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi_container.sh b/eessi_container.sh index 94de82df0f..e404b7ee18 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -91,7 +91,7 @@ display_help() { echo " attach a GPU, MODE==all for both [default: false]" echo " -r | --repository CFG - configuration file or identifier defining the" echo " repository to use; can be given multiple times;" - echo " CFG may include a suffix ';access={ro,rw}' to" + echo " CFG may include a suffix ',access={ro,rw}' to" echo " overwrite the global access mode for this repository" echo " [default: software.eessi.io via CVMFS config available" echo " via default container, see --container]" From d8cf6a60540b36b5c3e64c687af5d1482df021a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Jul 2024 13:41:40 +0200 Subject: [PATCH 20/63] check for software.eessi.io in the default --list-repos output --- .github/workflows/test_eessi_container_script.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_eessi_container_script.yml b/.github/workflows/test_eessi_container_script.yml index d31feb23fe..c0346774cb 100644 --- a/.github/workflows/test_eessi_container_script.yml +++ b/.github/workflows/test_eessi_container_script.yml @@ -45,7 +45,8 @@ jobs: elif [[ ${{matrix.SCRIPT_TEST}} == 'listrepos_default' ]]; then outfile=out_listrepos.txt ./eessi_container.sh --verbose --list-repos | tee ${outfile} - grep "EESSI" ${outfile} + # make sure that the default EESSI software repository is available + grep "software.eessi.io" ${outfile} # test use of --list-repos with custom repos.cfg elif [[ ${{matrix.SCRIPT_TEST}} == 'listrepos_custom' ]]; then From aa9895e44ac1afd5a44524d004161f3804449a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Jul 2024 15:27:27 +0200 Subject: [PATCH 21/63] fix regex to find the custom EESSI version in the output of --list-repos --- .github/workflows/test_eessi_container_script.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_eessi_container_script.yml b/.github/workflows/test_eessi_container_script.yml index c0346774cb..d44788927f 100644 --- a/.github/workflows/test_eessi_container_script.yml +++ b/.github/workflows/test_eessi_container_script.yml @@ -58,11 +58,12 @@ jobs: echo "[EESSI/20HT.TP]" >> cfg/repos.cfg echo "repo_version = 20HT.TP" >> cfg/repos.cfg ./eessi_container.sh --verbose --list-repos | tee ${outfile} - grep "EESSI" ${outfile} + # make sure that the default EESSI software repository is available + grep "software.eessi.io" ${outfile} export EESSI_REPOS_CFG_DIR_OVERRIDE=${PWD}/cfg ./eessi_container.sh --verbose --list-repos | tee ${outfile2} - grep "[EESSI/2023.02]" ${outfile2} + grep "EESSI/20AB.CD" ${outfile2} # test use of --mode run elif [[ ${{matrix.SCRIPT_TEST}} == 'run' ]]; then From cbedafef9f104540151ca9093bc2e95b178036b3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 4 Jul 2024 21:07:39 +0200 Subject: [PATCH 22/63] {2023.06,a64fx}[foss/2023a] ParaView 5.11.2 --- .../2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml index 3fe1e43d3f..5521b92398 100644 --- a/easystacks/software.eessi.io/2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml @@ -3,3 +3,4 @@ easyconfigs: - foss-2023a.eb - SciPy-bundle-2023.07-gfbf-2023a.eb - ESPResSo-4.2.2-foss-2023a.eb + - ParaView-5.11.2-foss-2023a.eb From c97dd7ed8e9d7cc23436927f4dfff00fae93d623 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 4 Jul 2024 21:58:10 +0200 Subject: [PATCH 23/63] add missing /cvmfs/ in $EESSI_CVMFS_REPO_OVERRIDE defined by bot/build.sh and bot/test.sh --- bot/build.sh | 2 +- bot/test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index c9a362fdca..145be740d3 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -138,7 +138,7 @@ 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 -export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/$(cfg_get_value "repository" "repo_name") echo "bot/build.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" # determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} diff --git a/bot/test.sh b/bot/test.sh index 04bff346cd..d3f3630ea8 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -160,7 +160,7 @@ echo "bot/test.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_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 -export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/$(cfg_get_value "repository" "repo_name") echo "bot/test.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" # determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} From 3bae44ca2c8ee6cf0b53f753b74f47314d532222 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 4 Jul 2024 21:58:10 +0200 Subject: [PATCH 24/63] add missing /cvmfs/ in $EESSI_CVMFS_REPO_OVERRIDE defined by bot/build.sh and bot/test.sh --- bot/build.sh | 2 +- bot/test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index c9a362fdca..145be740d3 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -138,7 +138,7 @@ 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 -export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/$(cfg_get_value "repository" "repo_name") echo "bot/build.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" # determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} diff --git a/bot/test.sh b/bot/test.sh index 04bff346cd..d3f3630ea8 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -160,7 +160,7 @@ echo "bot/test.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_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 -export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +export EESSI_CVMFS_REPO_OVERRIDE=/cvmfs/$(cfg_get_value "repository" "repo_name") echo "bot/test.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" # determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} From 3fc6cdc1558e21005470e815adeb3f8620ec53e8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 5 Jul 2024 08:18:27 +0200 Subject: [PATCH 25/63] reduce parallellism when building Qt5 on A64FX systems, due to scarce memory --- eb_hooks.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index e6f0cf0dd2..40071ea067 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -81,8 +81,11 @@ def post_ready_hook(self, *args, **kwargs): """ # 'parallel' easyconfig parameter is set via EasyBlock.set_parallel in ready step based on available cores. # here we reduce parallellism to only use half of that for selected software, - # to avoid failing builds/tests due to out-of-memory problems - if self.name in ['TensorFlow', 'libxc']: + # to avoid failing builds/tests due to out-of-memory problems; + memory_hungry_build = self.name in ['libxc', 'TensorFlow'] + # on A64FX systems, (HBM) memory is typically scarce, so we need to use fewer cores for some builds + memory_hungry_build_a64fx = self.name in ['Qt5'] + if memory_hungry_build or memory_hungry_build_a64fx: parallel = self.cfg['parallel'] if parallel > 1: self.cfg['parallel'] = parallel // 2 From a74669585a742ca83e9b976d7f6854a20570460f Mon Sep 17 00:00:00 2001 From: Richard Top Date: Fri, 5 Jul 2024 12:24:01 +0000 Subject: [PATCH 26/63] {2023.06}[GCCcore/12.3.0-GCC/12.3.0-gompi/2023a] bio-packages --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index ade226c217..7fc42e2e34 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -1,2 +1,17 @@ easyconfigs: - BCFtools-1.18-GCC-12.3.0.eb + - BWA-0.7.18-GCCcore-12.3.0.eb + - CapnProto-1.0.1-GCCcore-12.3.0.eb + - DendroPy-4.6.1-GCCcore-12.3.0.eb + - DIAMOND-2.1.8-GCC-12.3.0.eb + - FastME-2.1.6.3-GCC-12.3.0.eb + - fastp-0.23.4-GCC-12.3.0.eb + - HMMER-3.4-gompi-2023a.eb + - IQ-TREE-2.3.5-gompi-2023a.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20955 + from-commit: 185f88b9a03d65a7fb74edc7acb4221e87e90784 + - KronaTools-2.8.1-GCCcore-12.3.0.eb + - LSD2-2.4.1-GCCcore-12.3.0.eb + - MAFFT-7.520-GCC-12.3.0-with-extensions.eb + - ncbi-vdb-3.0.10-gompi-2023a.e From 4d9390ef015f03abe54ca3f61cd84ca6b1164c07 Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Fri, 5 Jul 2024 14:30:32 +0200 Subject: [PATCH 27/63] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index 7fc42e2e34..34ec3257e8 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -14,4 +14,4 @@ easyconfigs: - KronaTools-2.8.1-GCCcore-12.3.0.eb - LSD2-2.4.1-GCCcore-12.3.0.eb - MAFFT-7.520-GCC-12.3.0-with-extensions.eb - - ncbi-vdb-3.0.10-gompi-2023a.e + - ncbi-vdb-3.0.10-gompi-2023a.eb From 868a8a8c94e932762299aabc6c6ed4eca749ef42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Jul 2024 16:07:05 +0200 Subject: [PATCH 28/63] /tmp/overlay-upper should now be /tmp//overlay-upper --- create_tarball.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_tarball.sh b/create_tarball.sh index 0a7669f73f..ed999cde89 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -26,7 +26,7 @@ if [ ! -d ${software_dir} ]; then exit 2 fi -overlay_upper_dir="${eessi_tmpdir}/overlay-upper" +overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo}/overlay-upper" software_dir_overlay="${overlay_upper_dir}/versions/${eessi_version}" if [ ! -d ${software_dir_overlay} ]; then From d5ecd74837cde2feb834275632e327beb182c00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Jul 2024 21:58:23 +0200 Subject: [PATCH 29/63] remove /cvmfs/ from cvmfs_repo variable --- create_tarball.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/create_tarball.sh b/create_tarball.sh index ed999cde89..2dee665060 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -26,7 +26,8 @@ if [ ! -d ${software_dir} ]; then exit 2 fi -overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo}/overlay-upper" +cvmfs_repo_name=${cvmfs_repo#/cvmfs/} +overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo_name}/overlay-upper" software_dir_overlay="${overlay_upper_dir}/versions/${eessi_version}" if [ ! -d ${software_dir_overlay} ]; then From 49cbcc8de452e9cc51a3969b860932caf109a9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Jul 2024 22:02:31 +0200 Subject: [PATCH 30/63] implement changes from https://github.com/EESSI/software-layer/pull/635 and https://github.com/EESSI/software-layer/pull/636 --- create_tarball.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/create_tarball.sh b/create_tarball.sh index 0a7669f73f..2dee665060 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -26,7 +26,8 @@ if [ ! -d ${software_dir} ]; then exit 2 fi -overlay_upper_dir="${eessi_tmpdir}/overlay-upper" +cvmfs_repo_name=${cvmfs_repo#/cvmfs/} +overlay_upper_dir="${eessi_tmpdir}/${cvmfs_repo_name}/overlay-upper" software_dir_overlay="${overlay_upper_dir}/versions/${eessi_version}" if [ ! -d ${software_dir_overlay} ]; then From 88eebb9ee7245c56e4ad623c4055b8f4c365b59a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 6 Jul 2024 11:26:40 +0200 Subject: [PATCH 31/63] rebuild OpenFOAM-10-foss-2023a.eb and OpenFOAM-11-foss-2023a.eb without -ftree-vectorize --- ...20240706-eb-4.9.2-OpenFOAM-no-ftree-vectorize.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240706-eb-4.9.2-OpenFOAM-no-ftree-vectorize.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240706-eb-4.9.2-OpenFOAM-no-ftree-vectorize.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240706-eb-4.9.2-OpenFOAM-no-ftree-vectorize.yml new file mode 100644 index 0000000000..c12d244790 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240706-eb-4.9.2-OpenFOAM-no-ftree-vectorize.yml @@ -0,0 +1,12 @@ +# 2024.07.06 +# OpenFOAM 10 and 11 built with GCC 11.3.0 or 12.3.0 and -ftree-vectorize yields incorrect results, +# see https://github.com/easybuilders/easybuild-easyconfigs/issues/20927 +easyconfigs: + - OpenFOAM-10-foss-2023a.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20958 + from-commit: dbadb2074464d816740ee0e95595c2cb31b6338f + - OpenFOAM-11-foss-2023a.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20958 + from-commit: dbadb2074464d816740ee0e95595c2cb31b6338f From f2507201e02ea6da362f784fad1bbb5b27caa4a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 6 Jul 2024 11:29:01 +0200 Subject: [PATCH 32/63] {2023.06,zen4}[foss/2023a] OpenFOAM 10 + 11 --- .../2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml index d4c70c562d..65a12695e4 100644 --- a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml @@ -3,3 +3,11 @@ easyconfigs: - TensorFlow-2.13.0-foss-2023a.eb - R-4.3.2-gfbf-2023a.eb - ParaView-5.11.2-foss-2023a.eb + - OpenFOAM-10-foss-2023a.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20958 + from-commit: dbadb2074464d816740ee0e95595c2cb31b6338f + - OpenFOAM-11-foss-2023a.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20958 + from-commit: dbadb2074464d816740ee0e95595c2cb31b6338f From 085e32a603842363607eeb10743f1f20107afd27 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Sat, 6 Jul 2024 12:10:46 +0200 Subject: [PATCH 33/63] {2023.06}[foss/2023a] Extrae 4.2.0 Alternative to #554 --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index 38bfa81142..fd26743499 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml @@ -1,3 +1,7 @@ easyconfigs: - IPython-8.17.2-GCCcore-13.2.0.eb - dlb-3.4-gompi-2023b.eb + - Extrae-4.2.0-gompi-2023b.eb: + options: + from-pr: 20690 + include-easyblocks-from-pr: 3339 From 7cb667929694c8a330a5e3f4921ea97e258f933a Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Sun, 7 Jul 2024 12:56:29 +0200 Subject: [PATCH 34/63] Re-add hook from #554 but keep running tests --- eb_hooks.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index e6f0cf0dd2..42b230c006 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1,5 +1,6 @@ # Hooks to customize how EasyBuild installs software in EESSI # see https://docs.easybuild.io/en/latest/Hooks.html +import glob import os import re @@ -353,6 +354,31 @@ def pre_configure_hook_BLIS_a64fx(self, *args, **kwargs): else: raise EasyBuildError("BLIS-specific hook triggered for non-BLIS easyconfig?!") +def pre_configure_hook_extrae(self, *args, **kwargs): + """ + Pre-configure hook for Extrae + - avoid use of 'which' in configure script + - specify correct path to binutils (in compat layer) + """ + if self.name == 'Extrae': + + # determine path to Prefix installation in compat layer via $EPREFIX + eprefix = get_eessi_envvar('EPREFIX') + + binutils_lib_path_glob_pattern = os.path.join(eprefix, 'usr', 'lib*', 'binutils', '*-pc-linux-gnu', '2.*') + binutils_lib_path = glob.glob(binutils_lib_path_glob_pattern) + if len(binutils_lib_path) == 1: + self.cfg.update('configopts', '--with-binutils=' + binutils_lib_path[0]) + else: + raise EasyBuildError("Failed to isolate path for binutils libraries using %s, got %s", + binutils_lib_path_glob_pattern, binutils_lib_path) + + # replace use of 'which' with 'command -v', since 'which' is broken in EESSI build container; + # this must be done *after* running configure script, because initial configuration re-writes configure script, + # and problem due to use of which only pops up when running make ?! + self.cfg.update('prebuildopts', "cp config/mpi-macros.m4 config/mpi-macros.m4.orig && sed -i 's/`which /`command -v /g' config/mpi-macros.m4 && ") + else: + raise EasyBuildError("Extrae-specific hook triggered for non-Extrae easyconfig?!") def pre_configure_hook_gromacs(self, *args, **kwargs): """ @@ -711,6 +737,7 @@ def inject_gpu_property(ec): PRE_CONFIGURE_HOOKS = { 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, 'BLIS': pre_configure_hook_BLIS_a64fx, + 'Extrae': pre_configure_hook_extrae, 'GROMACS': pre_configure_hook_gromacs, 'libfabric': pre_configure_hook_libfabric_disable_psm3_x86_64_generic, 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, From b07445e75cb874fb87003df1d92a5ba879deac4c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 7 Jul 2024 21:56:20 +0200 Subject: [PATCH 35/63] only use half the cores for Qt5 when building for A64FX --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 40071ea067..3b381e5963 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -84,7 +84,8 @@ def post_ready_hook(self, *args, **kwargs): # to avoid failing builds/tests due to out-of-memory problems; memory_hungry_build = self.name in ['libxc', 'TensorFlow'] # on A64FX systems, (HBM) memory is typically scarce, so we need to use fewer cores for some builds - memory_hungry_build_a64fx = self.name in ['Qt5'] + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + memory_hungry_build_a64fx = cpu_target == CPU_TARGET_A64FX and self.name in ['Qt5'] if memory_hungry_build or memory_hungry_build_a64fx: parallel = self.cfg['parallel'] if parallel > 1: From d6d5a2bb5c2eead7cd931ea307ea4cd3b44bf9db Mon Sep 17 00:00:00 2001 From: Helena Vela Beltran <47674829+hvelab@users.noreply.github.com> Date: Mon, 8 Jul 2024 17:18:02 +0200 Subject: [PATCH 36/63] Update init/eessi_environment_variables Add bigger comment Co-authored-by: ocaisa --- init/eessi_environment_variables | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index f5bb387955..9417d5b2a2 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -106,15 +106,15 @@ if [ -d $EESSI_PREFIX ]; then false fi - # Fix wrong path for RHEL >=8 libcurl - # This is required here because we ship curl in our compat layer. If we only provided - # curl as a module file we could instead do this via a `modluafooter` in an EasyBuild - # hook (or via an Lmod hook) - rhel_libcurl_file="/etc/pki/tls/certs/ca-bundle.crt" - if [ -f $rhel_libcurl_file ]; then - show_msg "Found libcurl CAs file at RHEL location, setting CURL_CA_BUNDLE" - export CURL_CA_BUNDLE=$rhel_libcurl_file - fi + # Fix wrong path for RHEL >=8 libcurl + # This is required here because we ship curl in our compat layer. If we only provided + # curl as a module file we could instead do this via a `modluafooter` in an EasyBuild + # hook (or via an Lmod hook) + rhel_libcurl_file="/etc/pki/tls/certs/ca-bundle.crt" + if [ -f $rhel_libcurl_file ]; then + show_msg "Found libcurl CAs file at RHEL location, setting CURL_CA_BUNDLE" + export CURL_CA_BUNDLE=$rhel_libcurl_file + fi else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" From 0fef63a6ce712956e04b9cb007c21565d624f1fa Mon Sep 17 00:00:00 2001 From: ocaisa Date: Tue, 9 Jul 2024 00:15:40 +0200 Subject: [PATCH 37/63] Update eb_hooks.py --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 42b230c006..f43b695266 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -365,7 +365,7 @@ def pre_configure_hook_extrae(self, *args, **kwargs): # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') - binutils_lib_path_glob_pattern = os.path.join(eprefix, 'usr', 'lib*', 'binutils', '*-pc-linux-gnu', '2.*') + binutils_lib_path_glob_pattern = os.path.join(eprefix, 'usr', 'lib*', 'binutils', '*-linux-gnu', '2.*') binutils_lib_path = glob.glob(binutils_lib_path_glob_pattern) if len(binutils_lib_path) == 1: self.cfg.update('configopts', '--with-binutils=' + binutils_lib_path[0]) From 28eabaaefcde5b112b60e8c94f46494ab7b0944e Mon Sep 17 00:00:00 2001 From: Xin An Date: Fri, 12 Jul 2024 12:11:19 +0200 Subject: [PATCH 38/63] {2023.06}[gfbf/2023b] Pystencils 1.3.4 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 15c02951d7..3963f79ecd 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -58,3 +58,4 @@ easyconfigs: options: from-pr: 20201 - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb + - pystencils-1.3.4-gfbf-2023b.eb From 2ca3684b845165425af638daaea27897fd1cbe7e Mon Sep 17 00:00:00 2001 From: Xin An <34663977+xinan1911@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:29:19 +0200 Subject: [PATCH 39/63] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 3963f79ecd..8d9779c59c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -58,4 +58,7 @@ easyconfigs: options: from-pr: 20201 - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb - - pystencils-1.3.4-gfbf-2023b.eb + - pystencils-1.3.4-gfbf-2023b.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20889 + from-commit: c66c4788a17f7e4f55aa23f9fdb782aad97c9ce7 From 641288af0c2bc1d1e35d411815465abdeb8a1ddc Mon Sep 17 00:00:00 2001 From: Xin An <34663977+xinan1911@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:08:14 +0200 Subject: [PATCH 40/63] Update eessi-2023.06-eb-4.9.0-2023b.yml Remove pystencils --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 8d9779c59c..15c02951d7 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -58,7 +58,3 @@ easyconfigs: options: from-pr: 20201 - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb - - pystencils-1.3.4-gfbf-2023b.eb: - options: - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20889 - from-commit: c66c4788a17f7e4f55aa23f9fdb782aad97c9ce7 From bb8b4aa1442c032b88d6cacc94b2d8f42cce3721 Mon Sep 17 00:00:00 2001 From: Xin An <34663977+xinan1911@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:10:02 +0200 Subject: [PATCH 41/63] add pystencils update eessi-2023.06-eb-4.9.2-2023b --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index 38bfa81142..e0057f18ab 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml @@ -1,3 +1,7 @@ easyconfigs: - IPython-8.17.2-GCCcore-13.2.0.eb - dlb-3.4-gompi-2023b.eb + - pystencils-1.3.4-gfbf-2023b.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20889 + from-commit: c66c4788a17f7e4f55aa23f9fdb782aad97c9ce7 From f204afa5d804dee715476ac3d2a96e8e69fa6842 Mon Sep 17 00:00:00 2001 From: crivella Date: Mon, 15 Jul 2024 10:47:34 +0200 Subject: [PATCH 42/63] Add MetalWalls to easystack file --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 4b58cb6106..0cdbd4b5b3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -74,3 +74,4 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20238 from-pr: 20238 + - MetalWalls-21.06.1-foss-2023a.eb From 58fb56f2a8f2fb11d5df2b8332388ace82eda993 Mon Sep 17 00:00:00 2001 From: crivella Date: Tue, 16 Jul 2024 14:41:39 +0200 Subject: [PATCH 43/63] Switch target to EB 4.9.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 - .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 0cdbd4b5b3..4b58cb6106 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -74,4 +74,3 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20238 from-pr: 20238 - - MetalWalls-21.06.1-foss-2023a.eb diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index 34ec3257e8..e7730d1eb6 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -15,3 +15,4 @@ easyconfigs: - LSD2-2.4.1-GCCcore-12.3.0.eb - MAFFT-7.520-GCC-12.3.0-with-extensions.eb - ncbi-vdb-3.0.10-gompi-2023a.eb + - MetalWalls-21.06.1-foss-2023a.eb From a7a895408c9b194cd8aeff27dd5f17f54a5fc514 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 17 Jul 2024 13:45:39 +0200 Subject: [PATCH 44/63] Move changes to latest eb release --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 6 ------ .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 428c1ac77f..4b58cb6106 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -74,9 +74,3 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20238 from-pr: 20238 - - QuantumESPRESSO-7.3.1-foss-2023a.eb: - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20138 - # see https://github.com/easybuilders/easybuild-easyblocks/pull/3257 - options: - from-pr: 20138 - include-easyblocks-from-pr: 3257 diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index e7730d1eb6..af69b288e8 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -16,3 +16,9 @@ easyconfigs: - MAFFT-7.520-GCC-12.3.0-with-extensions.eb - ncbi-vdb-3.0.10-gompi-2023a.eb - MetalWalls-21.06.1-foss-2023a.eb + - QuantumESPRESSO-7.3.1-foss-2023a.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20138 + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3338 + options: + from-pr: 20138 + include-easyblocks-from-pr: 3338 From 0ab0440e4ee990bbe76d7e8b7d0912701b21e8fa Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 17 Jul 2024 14:00:00 +0200 Subject: [PATCH 45/63] Allow initialisation scripts to be used with bash < 4.2 --- init/bash | 2 +- init/eessi_defaults | 2 +- init/eessi_environment_variables | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/init/bash b/init/bash index 93471e075e..4ad09f6a1b 100644 --- a/init/bash +++ b/init/bash @@ -1,7 +1,7 @@ function show_msg { # only echo msg if EESSI_SILENT is unset msg=$1 - if [[ ! -v EESSI_SILENT ]]; then + if [[ -z ${EESSI_SILENT+x} ]]; then echo "$msg" fi } diff --git a/init/eessi_defaults b/init/eessi_defaults index c1ce82d1ce..654a829425 100644 --- a/init/eessi_defaults +++ b/init/eessi_defaults @@ -12,7 +12,7 @@ if [[ $(uname -m) == "riscv64" ]]; then export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/riscv.eessi.io}" export EESSI_VERSION="${EESSI_VERSION_OVERRIDE:=20240402}" - if [[ ! -v EESSI_SILENT ]]; then + if [[ -z ${EESSI_SILENT+x} ]]; then echo "RISC-V architecture detected, but there is no RISC-V support yet in the production repository." echo "Automatically switching to version ${EESSI_VERSION} of the RISC-V development repository ${EESSI_CVMFS_REPO}." echo "For more details about this repository, see https://www.eessi.io/docs/repositories/riscv.eessi.io/." diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 9417d5b2a2..3e35f845a1 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -10,7 +10,7 @@ function error() { function show_msg { # only echo msg if EESSI_SILENT is unset msg=$1 - if [[ ! -v EESSI_SILENT ]]; then + if [[ -z ${EESSI_SILENT+x} ]]; then echo "$msg" fi } From 5ff9d1660c736ddf88052035fa7a10a6ac7a33c1 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 18 Jul 2024 16:02:55 +0200 Subject: [PATCH 46/63] Fixes for ARM --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 4 ++-- eb_hooks.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index bc7bee302a..3f18d02db5 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml @@ -7,5 +7,5 @@ easyconfigs: from-commit: c66c4788a17f7e4f55aa23f9fdb782aad97c9ce7 - Extrae-4.2.0-gompi-2023b.eb: options: - from-pr: 20690 - include-easyblocks-from-pr: 3339 + from-pr: 21017 + include-easyblocks-from-pr: 3393 diff --git a/eb_hooks.py b/eb_hooks.py index ec08e96847..73adce90f1 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -362,7 +362,7 @@ def pre_configure_hook_extrae(self, *args, **kwargs): """ Pre-configure hook for Extrae - avoid use of 'which' in configure script - - specify correct path to binutils (in compat layer) + - specify correct path to binutils/zlib (in compat layer) """ if self.name == 'Extrae': @@ -377,6 +377,9 @@ def pre_configure_hook_extrae(self, *args, **kwargs): raise EasyBuildError("Failed to isolate path for binutils libraries using %s, got %s", binutils_lib_path_glob_pattern, binutils_lib_path) + # zlib is a filtered dependency, so we need to manually specify it's location to avoid the host version + self.cfg.update('configopts', '--with-libz=' + eprefix) + # replace use of 'which' with 'command -v', since 'which' is broken in EESSI build container; # this must be done *after* running configure script, because initial configuration re-writes configure script, # and problem due to use of which only pops up when running make ?! From 192e494b56603dcead6b30c19e00064efe7b2769 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 18 Jul 2024 16:59:47 +0200 Subject: [PATCH 47/63] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index 3f18d02db5..f118e94adb 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml @@ -7,5 +7,7 @@ easyconfigs: from-commit: c66c4788a17f7e4f55aa23f9fdb782aad97c9ce7 - Extrae-4.2.0-gompi-2023b.eb: options: - from-pr: 21017 - include-easyblocks-from-pr: 3393 + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21017 + from-commit: 120f4d56efebd2bc61382db4c84a664a339c66cf + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3393 + include-easyblocks-from-commit: c4951c78d62fa5cf8e9f6fe0ead212d2a4d7cb9c From 8b350fd435924a18705d1869c0bc87be15d76465 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 18 Jul 2024 18:02:08 +0200 Subject: [PATCH 48/63] Update eessi-2023.06-eb-4.9.2-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index ed9896191b..f40d7d85e1 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -19,4 +19,4 @@ easyconfigs: - CP2K-2023.1-foss-2023a.eb: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 options: - from-pr: 20951 \ No newline at end of file + from-pr: 20951 From c0bec39b3c0528f9bde6f91c853f08b75cee1796 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 19 Jul 2024 09:28:03 +0200 Subject: [PATCH 49/63] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index f40d7d85e1..bd6c767260 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -17,6 +17,6 @@ easyconfigs: - ncbi-vdb-3.0.10-gompi-2023a.eb - MetalWalls-21.06.1-foss-2023a.eb - CP2K-2023.1-foss-2023a.eb: - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 options: - from-pr: 20951 + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 + from-commit: a92667fe32396bbd4106243658625f7ff2adcd68 From a61925fb430a0e1b1adaf22f8e7e7c81a782dadf Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 19 Jul 2024 09:34:19 +0200 Subject: [PATCH 50/63] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index af69b288e8..67cc4bc155 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -17,8 +17,8 @@ easyconfigs: - ncbi-vdb-3.0.10-gompi-2023a.eb - MetalWalls-21.06.1-foss-2023a.eb - QuantumESPRESSO-7.3.1-foss-2023a.eb: - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20138 - # see https://github.com/easybuilders/easybuild-easyblocks/pull/3338 options: - from-pr: 20138 - include-easyblocks-from-pr: 3338 + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20138 + from-commit: dbdaacc0739fdee91baa9123864ea4428cf21273 + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3338 + include-easyblocks-from-commit: 32e45bd1f2d916732ca5852d55d17fa4d99e388b From 1660e048811192f8d072815963e960fdd9620828 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 19 Jul 2024 09:49:39 +0200 Subject: [PATCH 51/63] Remove duplicate testing of PRs --- .github/workflows/test-software.eessi.io.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 06c02c8834..d4d980901f 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -1,6 +1,10 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Check for missing software installations in software.eessi.io -on: [push, pull_request, workflow_dispatch] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: + workflow_dispatch: permissions: contents: read # to fetch code (actions/checkout) jobs: From 4d93a2d87b7289b12ab65daac9ddcc16e69a47ee Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 19 Jul 2024 09:57:54 +0200 Subject: [PATCH 52/63] Restrict tests for all CI --- .github/workflows/scorecards.yml | 2 +- .github/workflows/test_eessi_container_script.yml | 6 +++++- .github/workflows/test_licenses.yml | 5 ++++- .github/workflows/tests.yml | 5 ++++- .github/workflows/tests_archdetect.yml | 5 ++++- .github/workflows/tests_init.yml | 5 ++++- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 5b482763f2..91c2576b7d 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -10,7 +10,7 @@ on: - cron: '25 15 * * 3' push: branches: - - '2023.06-software.eessi.io' + - '*-software.eessi.io' # Declare default permissions as read only. permissions: read-all diff --git a/.github/workflows/test_eessi_container_script.yml b/.github/workflows/test_eessi_container_script.yml index d44788927f..fb587ec489 100644 --- a/.github/workflows/test_eessi_container_script.yml +++ b/.github/workflows/test_eessi_container_script.yml @@ -1,6 +1,10 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests for eessi_container.sh script -on: [push, pull_request, workflow_dispatch] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: + workflow_dispatch: permissions: contents: read # to fetch code (actions/checkout) jobs: diff --git a/.github/workflows/test_licenses.yml b/.github/workflows/test_licenses.yml index 6b6387d47d..bf6965c620 100644 --- a/.github/workflows/test_licenses.yml +++ b/.github/workflows/test_licenses.yml @@ -1,6 +1,9 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Test software licenses -on: [push, pull_request] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: permissions: contents: read # to fetch code (actions/checkout) jobs: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8249e50d9b..940614b6bb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,6 +1,9 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests -on: [push, pull_request] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: permissions: contents: read # to fetch code (actions/checkout) jobs: diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 4f5d3d174d..f5b42b3d55 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -1,6 +1,9 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests for eessi_archdetect.sh -on: [push, pull_request] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: permissions: contents: read # to fetch code (actions/checkout) jobs: diff --git a/.github/workflows/tests_init.yml b/.github/workflows/tests_init.yml index 6c356a9184..8581681d63 100644 --- a/.github/workflows/tests_init.yml +++ b/.github/workflows/tests_init.yml @@ -1,6 +1,9 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests for init scripts -on: [push, pull_request] +on: + push: + branches: [ "*-software.eessi.io" ] + pull_request: permissions: contents: read # to fetch code (actions/checkout) jobs: From 8a2eca3cf3c949cff5fb1f61e1a3ef4e6d2cdfd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 12:06:20 +0200 Subject: [PATCH 53/63] add a hook for GObject-Introspection that prevents environment vars from being set if EB filters them --- eb_hooks.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 73adce90f1..deea409cf4 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -387,6 +387,24 @@ def pre_configure_hook_extrae(self, *args, **kwargs): else: raise EasyBuildError("Extrae-specific hook triggered for non-Extrae easyconfig?!") + +def pre_configure_hook_gobject_introspection(self, *args, **kwargs): + """ + pre-configure hook for GObject-Introspection: + - prevent GObject-Introspection from setting $LD_LIBRARY_PATH if Easybuild is configured to filter it + that are configured to be filtered by EasyBuild, see: + https://github.com/EESSI/software-layer/issues/196 + """ + if self.name == 'GObject-Introspection': + # inject a line that removes all items from runtime_path_envvar that are in $EASYBUILD_FILTER_ENVVARS + sed_cmd = r'sed -i "s@\(^\s*runtime_path_envvar = \)\(.*\)@' + sed_cmd += r'\1\2\n\1 [x for x in runtime_path_envvar if not x in os.environ.get(\'EASYBUILD_FILTER_ENV_VARS\', \'\').split(\',\')]@g"' + sed_cmd += ' %(start_dir)s/giscanner/ccompiler.py && ' + self.cfg.update('preconfigopts', sed_cmd) + else: + raise EasyBuildError("GObject-Introspection-specific hook triggered for non-GObject-Introspection easyconfig?!") + + def pre_configure_hook_gromacs(self, *args, **kwargs): """ Pre-configure hook for GROMACS: @@ -744,6 +762,7 @@ def inject_gpu_property(ec): PRE_CONFIGURE_HOOKS = { 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, 'BLIS': pre_configure_hook_BLIS_a64fx, + 'GObject-Introspection': pre_configure_hook_gobject_introspection, 'Extrae': pre_configure_hook_extrae, 'GROMACS': pre_configure_hook_gromacs, 'libfabric': pre_configure_hook_libfabric_disable_psm3_x86_64_generic, From 62c1f7d000473bd53a60fa7d814dcccf11978524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 13:45:42 +0200 Subject: [PATCH 54/63] rebuild all GObject-Introspection versions to apply new hook --- ...eb-4.9.2-GObject-Introspection-filter-envvars.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml new file mode 100644 index 0000000000..676a2fe548 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml @@ -0,0 +1,12 @@ +# 2024.07.19 +# GObject-Introspection sets $LD_LIBRARY_PATH (to many different paths, including $EPREFIX/lib) +# when calling gcc, and this causes a lot of issues for, especially, scripts using /bin/bash. +# +# This rebuild ensures (by using a new EasyBuild hook) that GObject-Introspection will not set +# environment variables that are configured to be filtered by EasyBuild. +# +# See https://github.com/EESSI/software-layer/issues/196 +easyconfigs: + - GObject-Introspection-1.74.0-GCCcore-12.2.0.eb + - GObject-Introspection-1.76.1-GCCcore-12.3.0.eb + - GObject-Introspection-1.78.1-GCCcore-13.2.0.eb From 6277bc382003651012a8196bc7667ae1a3371704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 13:58:53 +0200 Subject: [PATCH 55/63] fix comment Co-authored-by: ocaisa --- eb_hooks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index deea409cf4..aa9bde383a 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -391,8 +391,7 @@ def pre_configure_hook_extrae(self, *args, **kwargs): def pre_configure_hook_gobject_introspection(self, *args, **kwargs): """ pre-configure hook for GObject-Introspection: - - prevent GObject-Introspection from setting $LD_LIBRARY_PATH if Easybuild is configured to filter it - that are configured to be filtered by EasyBuild, see: + - prevent GObject-Introspection from setting $LD_LIBRARY_PATH if EasyBuild is configured to filter it, see: https://github.com/EESSI/software-layer/issues/196 """ if self.name == 'GObject-Introspection': From 5593999aa6acfaef2d235abc987a908643109cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 14:39:10 +0200 Subject: [PATCH 56/63] remove the at-spi2-core hook --- eb_hooks.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index deea409cf4..00d26df37b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -486,21 +486,6 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") -def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): - """ - pre-configure hook for at-spi2-core: - - instruct GObject-Introspection's g-ir-scanner tool to not set $LD_LIBRARY_PATH - when EasyBuild is configured to filter it, see: - https://github.com/EESSI/software-layer/issues/196 - """ - if self.name == 'at-spi2-core': - if build_option('filter_env_vars') and 'LD_LIBRARY_PATH' in build_option('filter_env_vars'): - sed_cmd = 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ' - self.cfg.update('preconfigopts', sed_cmd) - else: - raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") - - def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: @@ -760,7 +745,6 @@ def inject_gpu_property(ec): } PRE_CONFIGURE_HOOKS = { - 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, 'BLIS': pre_configure_hook_BLIS_a64fx, 'GObject-Introspection': pre_configure_hook_gobject_introspection, 'Extrae': pre_configure_hook_extrae, From 46a9c85149e1a9ff29bc8da9c322eda639c7f923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 14:39:34 +0200 Subject: [PATCH 57/63] rebuild at-spi2-core with the rebuilt GObject-Introspection --- .../20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml index 676a2fe548..a61cd9705b 100644 --- a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars.yml @@ -10,3 +10,5 @@ easyconfigs: - GObject-Introspection-1.74.0-GCCcore-12.2.0.eb - GObject-Introspection-1.76.1-GCCcore-12.3.0.eb - GObject-Introspection-1.78.1-GCCcore-13.2.0.eb + - at-spi2-core-2.46.0-GCCcore-12.2.0.eb + - at-spi2-core-2.49.91-GCCcore-12.3.0.eb From bd328a2c357a4f1fe998d4b922363abe4461b904 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 19 Jul 2024 15:03:34 +0200 Subject: [PATCH 58/63] Use instead of (CentOS6) --- init/eessi_archdetect.sh | 2 +- init/eessi_environment_variables | 2 +- init/minimal_eessi_env | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh index e89bc75e13..ddfed1bfae 100755 --- a/init/eessi_archdetect.sh +++ b/init/eessi_archdetect.sh @@ -89,7 +89,7 @@ cpupath(){ *) log "ERROR" "cpupath: Unsupported CPU architecture $machine_type" esac # spec files are located in a subfolder with this script - local base_dir=$(dirname $(realpath $0)) + local base_dir=$(dirname $(readlink -f $0)) update_arch_specs "$base_dir/arch_specs/${spec_file}" # Identify the host CPU vendor diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 3e35f845a1..8c10b1fca8 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -1,6 +1,6 @@ # this script is *sourced*, not executed, so can't rely on $0 to determine path to self # $BASH_SOURCE points to correct path, see also http://mywiki.wooledge.org/BashFAQ/028 -EESSI_INIT_DIR_PATH=$(dirname $(realpath $BASH_SOURCE)) +EESSI_INIT_DIR_PATH=$(dirname $(readlink -f $BASH_SOURCE)) function error() { echo -e "\e[31mERROR: $1\e[0m" >&2 diff --git a/init/minimal_eessi_env b/init/minimal_eessi_env index 03b337ccf7..5273f27862 100644 --- a/init/minimal_eessi_env +++ b/init/minimal_eessi_env @@ -2,7 +2,7 @@ # # this script is *sourced*, not executed, so can't rely on $0 to determine path to self # $BASH_SOURCE points to correct path, see also http://mywiki.wooledge.org/BashFAQ/028 -EESSI_INIT_DIR_PATH=$(dirname $(realpath $BASH_SOURCE)) +EESSI_INIT_DIR_PATH=$(dirname $(readlink -f $BASH_SOURCE)) # set up defaults: EESSI_CVMFS_REPO, EESSI_VERSION # script takes *_OVERRIDEs into account From 20eafc70aec97f46f311b27fe9b44b845964f723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 19 Jul 2024 15:30:35 +0200 Subject: [PATCH 59/63] rebuild GObject-Introspection for zen4 --- ....9.2-GObject-Introspection-filter-envvars-zen4.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-zen4.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-zen4.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-zen4.yml new file mode 100644 index 0000000000..2c9b411736 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-zen4.yml @@ -0,0 +1,11 @@ +# 2024.07.19 +# GObject-Introspection sets $LD_LIBRARY_PATH (to many different paths, including $EPREFIX/lib) +# when calling gcc, and this causes a lot of issues for, especially, scripts using /bin/bash. +# +# This rebuild ensures (by using a new EasyBuild hook) that GObject-Introspection will not set +# environment variables that are configured to be filtered by EasyBuild. +# +# See https://github.com/EESSI/software-layer/issues/196 +easyconfigs: + - GObject-Introspection-1.76.1-GCCcore-12.3.0.eb + - GObject-Introspection-1.78.1-GCCcore-13.2.0.eb From 55a32613d3f6c4a295186cd93e33234e88146e48 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Mon, 22 Jul 2024 13:54:55 +0000 Subject: [PATCH 60/63] {2023.06}[gompi/2022b] BLAST+ V2.14.0 --- .../2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml new file mode 100644 index 0000000000..ce28312e8c --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml @@ -0,0 +1,4 @@ +easyconfigs: + - BLAST+-2.14.0-gompi-2022b.eb: + options: + from-commit: 1775912a1d36101d560e1355967732b07e82cd24 From 808a9032f942d1a88108a0b7d7067498b7e6e2d5 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Tue, 23 Jul 2024 10:09:09 +0200 Subject: [PATCH 61/63] {2023.06}[gompi/2023a] amdahl 0.3.1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml index 7e9f4ff05a..d405d17193 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023a.yml @@ -26,3 +26,4 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20951 from-commit: a92667fe32396bbd4106243658625f7ff2adcd68 + - amdahl-0.3.1-gompi-2023a.eb From 7d06f13fa83c7774d74ca9a09499ee34f7f1b17b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 23 Jul 2024 15:56:21 +0200 Subject: [PATCH 62/63] add pyMBE 0.8.0 --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index f118e94adb..883483f5d2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml @@ -11,3 +11,7 @@ easyconfigs: from-commit: 120f4d56efebd2bc61382db4c84a664a339c66cf # see https://github.com/easybuilders/easybuild-easyblocks/pull/3393 include-easyblocks-from-commit: c4951c78d62fa5cf8e9f6fe0ead212d2a4d7cb9c + - pyMBE-0.8.0-foss-2023b.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 + from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 From c0c784efbcb98389d6c61c43b2442dd07a981703 Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:25:45 +0200 Subject: [PATCH 63/63] Update eessi-2023.06-eb-4.9.2-2022b.yml --- .../2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml index ce28312e8c..7a04eaa9d3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml @@ -1,4 +1,2 @@ easyconfigs: - - BLAST+-2.14.0-gompi-2022b.eb: - options: - from-commit: 1775912a1d36101d560e1355967732b07e82cd24 + - BLAST+-2.14.0-gompi-2022b.eb