From a4e838beb3b59d91ce4b93506947cb0d89586d6a Mon Sep 17 00:00:00 2001 From: Alan O'Cais <alan.ocais@cecam.org> Date: Mon, 29 Jul 2024 13:43:19 +0200 Subject: [PATCH 01/52] Add Lmod wrapper for eessi_archdetect.sh --- init/lmod_eessi_archdetect_wrapper.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 init/lmod_eessi_archdetect_wrapper.sh diff --git a/init/lmod_eessi_archdetect_wrapper.sh b/init/lmod_eessi_archdetect_wrapper.sh new file mode 100644 index 0000000000..a90ca28285 --- /dev/null +++ b/init/lmod_eessi_archdetect_wrapper.sh @@ -0,0 +1 @@ +export EESSI_ARCHDETECT_OPTIONS=$($(dirname $(readlink -f $BASH_SOURCE))/eessi_archdetect.sh -a cpupath) From c9046186b992d5bf6d11e5d3854f1135662db1fd Mon Sep 17 00:00:00 2001 From: Alan O'Cais <alan.ocais@cecam.org> Date: Mon, 29 Jul 2024 13:52:12 +0200 Subject: [PATCH 02/52] Add comment --- init/lmod_eessi_archdetect_wrapper.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/init/lmod_eessi_archdetect_wrapper.sh b/init/lmod_eessi_archdetect_wrapper.sh index a90ca28285..c12452c71d 100644 --- a/init/lmod_eessi_archdetect_wrapper.sh +++ b/init/lmod_eessi_archdetect_wrapper.sh @@ -1 +1,2 @@ +# This can be leveraged by the source_sh() feature of Lmod export EESSI_ARCHDETECT_OPTIONS=$($(dirname $(readlink -f $BASH_SOURCE))/eessi_archdetect.sh -a cpupath) From 92767a4421203df209084671931ce54c64718896 Mon Sep 17 00:00:00 2001 From: Richard Top <richard.topouchian@uib.no> Date: Thu, 8 Aug 2024 08:08:40 +0000 Subject: [PATCH 03/52] {2023.06}[foss/2022b] h5py v3.8.0 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 d0f9f66b06..4e236656f5 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 @@ -4,4 +4,5 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21136 from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - - gnuplot-5.4.6-GCCcore-12.2.0.eb + - gnuplot-5.4.6-GCCcore-12.2.0.eb + - h5py-3.8.0-foss-2022b.eb From f9bbb59439fc811da28c690548f22046c99f1778 Mon Sep 17 00:00:00 2001 From: Alan O'Cais <alan.ocais@cecam.org> Date: Thu, 8 Aug 2024 10:25:15 +0200 Subject: [PATCH 04/52] Make sure the new script is shipped --- install_scripts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_scripts.sh b/install_scripts.sh index ab06e47997..6f01818840 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -86,7 +86,7 @@ TOPDIR=$(dirname $(realpath $0)) # Copy for init directory init_files=( bash eessi_archdetect.sh eessi_defaults eessi_environment_variables eessi_software_subdir_for_host.py - minimal_eessi_env README.md test.py + minimal_eessi_env README.md test.py lmod_eessi_archdetect_wrapper.sh ) copy_files_by_list ${TOPDIR}/init ${INSTALL_PREFIX}/init "${init_files[@]}" From 3cf558b03b83b8485fa28d42abbe7def64d3fdee Mon Sep 17 00:00:00 2001 From: Richard Top <richard.topouchian@uib.no> Date: Fri, 9 Aug 2024 08:02:41 +0000 Subject: [PATCH 05/52] {2023.06}[foss/2022b] MDAnalysis v2.4.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 d0f9f66b06..bd928e3608 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 @@ -4,4 +4,5 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21136 from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - - gnuplot-5.4.6-GCCcore-12.2.0.eb + - gnuplot-5.4.6-GCCcore-12.2.0.eb + - MDAnalysis-2.4.2-foss-2022b.eb From a10f8198703d84b912c4ac5859c4be6e9c486f8a Mon Sep 17 00:00:00 2001 From: Richard Top <richard.topouchian@uib.no> Date: Fri, 9 Aug 2024 09:32:34 +0000 Subject: [PATCH 06/52] {2023.06}[GCCcore/12.3.0] orjson v3.9.15 --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 4 ++++ 1 file changed, 4 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 0c08646cc8..e8fe8ab120 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 @@ -41,3 +41,7 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21136 from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - grpcio-1.57.0-GCCcore-12.3.0.eb + - orjson-3.9.15-GCCcore-12.3.0.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20880 + from-commit: bc6e08f89759b8b70166de5bfcb5056b9db8ec90 From 19e1bd201b1a718d899a0407db9118e1874247d4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste <kenneth.hoste@ugent.be> Date: Fri, 9 Aug 2024 15:05:22 +0200 Subject: [PATCH 07/52] {2023.06,a64fx}[foss/2023a] OpenFOAM 10, 11, v2312 --- .../2023.06/a64fx/eessi-2023.06-eb-4.9.2-2023a.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 5521b92398..f38c06ea8b 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 @@ -4,3 +4,17 @@ easyconfigs: - SciPy-bundle-2023.07-gfbf-2023a.eb - ESPResSo-4.2.2-foss-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 + - OpenFOAM-v2312-foss-2023a.eb: + options: + # https://github.com/easybuilders/easybuild-easyblocks/pull/3388 + include-easyblocks-from-commit: c8256a36e7062bc09f5ce30552a9de9827054c9e + # https://github.com/easybuilders/easybuild-easyconfigs/pull/20841 + from-commit: f0e91e6e430ebf902f7788ebb47f0203dee60649 From 4fd3d47b36a6d714344c52b80bcf1205afa958ab Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:15:45 +0200 Subject: [PATCH 08/52] Rebuild hatchling-1.18.0-GCCcore-12.3.0 --- ...0814-eb-4.9.2-hatchling-1.18.0-updated-easyconfig.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240814-eb-4.9.2-hatchling-1.18.0-updated-easyconfig.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240814-eb-4.9.2-hatchling-1.18.0-updated-easyconfig.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240814-eb-4.9.2-hatchling-1.18.0-updated-easyconfig.yml new file mode 100644 index 0000000000..7ab02420ca --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240814-eb-4.9.2-hatchling-1.18.0-updated-easyconfig.yml @@ -0,0 +1,9 @@ +# 2024.08.14 +# hatchling-1.18.0 rebuild to account for easyconfig changed upstream +# see https://gitlab.com/eessi/support/-/issues/85 and +# https://github.com/easybuilders/easybuild-easyconfigs/pull/20389 +easyconfigs: + - hatchling-1.18.0-GCCcore-12.3.0.eb: + options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20389 + from-commit: 9580c0d67d6dd97b160b768a839bfcba6d5b21b9 From 53d5e26d84f57ecc425f2c6a441a793df83930a7 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Wed, 14 Aug 2024 17:32:29 +0200 Subject: [PATCH 09/52] Fix test_suite not being able to retrieve memory on systems that use cgroups v2 --- test_suite.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 6e73fbd87c..cfaec82026 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -157,7 +157,13 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -cgroup_mem_bytes=$(cat /hostsys/fs/cgroup/memory/slurm/uid_${UID}/job_${SLURM_JOB_ID}/memory.limit_in_bytes) +cgroup_v1_mem_limit="/sys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" +cgroup_v2_mem_limit="/sys/fs/cgroup/$(</proc/self/cpuset)/memory.max" +if [ -f "$cgroup_v1_mem_limit" ]; then + cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") +else [ -f "$cgroup_v2_mem_limit" ]; then + cgroup_mem_bytes=$(cat "$cgroup_v2_mem_limit") +fi if [[ $? -eq 0 ]]; then # Convert to MiB cgroup_mem_mib=$((cgroup_mem_bytes/(1024*1024))) From 936edb89723ff48392b5b710b9e5b9cd847beb9e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Wed, 14 Aug 2024 17:36:40 +0200 Subject: [PATCH 10/52] Add something in order to prove that this fixes the test --- .../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 9d13d5eb3a..695c4a06d9 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 @@ -22,3 +22,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21136 from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - MODFLOW-6.4.4-foss-2023a.eb + - gnuplot-5.4.8-GCCcore-12.3.0.eb From 4e52f59e1e90988a3721e8bf768a1f8d60182c6b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Wed, 14 Aug 2024 17:41:19 +0200 Subject: [PATCH 11/52] Fix if-else syntax --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index cfaec82026..5749e5c995 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -161,7 +161,7 @@ cgroup_v1_mem_limit="/sys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in cgroup_v2_mem_limit="/sys/fs/cgroup/$(</proc/self/cpuset)/memory.max" if [ -f "$cgroup_v1_mem_limit" ]; then cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") -else [ -f "$cgroup_v2_mem_limit" ]; then +else cgroup_mem_bytes=$(cat "$cgroup_v2_mem_limit") fi if [[ $? -eq 0 ]]; then From 33a8a87550f88a6da7ffe06888f6f72d2ad72f02 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 11:46:03 +0200 Subject: [PATCH 12/52] If max is specified in the cgroupsv2 file, just get the system memory --- test_suite.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 5749e5c995..02b22361db 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -163,10 +163,19 @@ if [ -f "$cgroup_v1_mem_limit" ]; then cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") else cgroup_mem_bytes=$(cat "$cgroup_v2_mem_limit") + if [ "$cgroup_mem_bytes" = 'max' ]; then + # In cgroupsv2, the memory.max file may contain 'max', meaning the group can use the full system memory + # Here, we get the system memory from /proc/meminfo. Units are supposedly always in kb, but lets match them too + cgroup_mem_kilobytes=$(grep -oP 'MemTotal:\s+\K\d+(?=\s+kB)' /proc/meminfo) + if [[ $? -eq 0 ]] || [[ -z "$cgroup_mem_kilobytes" ]]; then + fatal_error "Failed to get memory limit from /proc/meminfo" + fi + cgroup_mem_bytes=$(("$cgroup_mem_kilobytes"*1024)) + fi fi if [[ $? -eq 0 ]]; then # Convert to MiB - cgroup_mem_mib=$((cgroup_mem_bytes/(1024*1024))) + cgroup_mem_mib=$(("$cgroup_mem_bytes"/(1024*1024))) else fatal_error "Failed to get the memory limit in bytes from the current cgroup" fi From e69642c1e450bc4a6803c83fedc2a15843a398e2 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 13:05:00 +0200 Subject: [PATCH 13/52] Correct bash test --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 02b22361db..2986e37f7b 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -167,7 +167,7 @@ else # In cgroupsv2, the memory.max file may contain 'max', meaning the group can use the full system memory # Here, we get the system memory from /proc/meminfo. Units are supposedly always in kb, but lets match them too cgroup_mem_kilobytes=$(grep -oP 'MemTotal:\s+\K\d+(?=\s+kB)' /proc/meminfo) - if [[ $? -eq 0 ]] || [[ -z "$cgroup_mem_kilobytes" ]]; then + if [[ $? -ne 0 ]]; then || [[ -z "$cgroup_mem_kilobytes" ]]; then fatal_error "Failed to get memory limit from /proc/meminfo" fi cgroup_mem_bytes=$(("$cgroup_mem_kilobytes"*1024)) From b1902b34161455ef0f77880346ef14aa033bb6f9 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 13:07:50 +0200 Subject: [PATCH 14/52] Fix syntax error --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 2986e37f7b..847f5ea18e 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -167,7 +167,7 @@ else # In cgroupsv2, the memory.max file may contain 'max', meaning the group can use the full system memory # Here, we get the system memory from /proc/meminfo. Units are supposedly always in kb, but lets match them too cgroup_mem_kilobytes=$(grep -oP 'MemTotal:\s+\K\d+(?=\s+kB)' /proc/meminfo) - if [[ $? -ne 0 ]]; then || [[ -z "$cgroup_mem_kilobytes" ]]; then + if [[ $? -ne 0 ]] || [[ -z "$cgroup_mem_kilobytes" ]]; then fatal_error "Failed to get memory limit from /proc/meminfo" fi cgroup_mem_bytes=$(("$cgroup_mem_kilobytes"*1024)) From 8f39d6f9814f3e3ad30c46277b62a4cf17168f2f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 14:42:39 +0200 Subject: [PATCH 15/52] Exclude TensorFlow test for now, it seems to get stuck. First lets make sure we run the test suite on the zen4 prefix... --- test_suite.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 847f5ea18e..7598d9fad0 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -209,7 +209,9 @@ fi # Run all tests echo "Running tests: reframe ${REFRAME_ARGS} --run" -reframe ${REFRAME_ARGS} --run +# Exclude TensorFlow, which got stuck on https://github.com/EESSI/software-layer/pull/670#issuecomment-2291084266 +# Let's first make sure the test suite runs on the zen4 prefix... +reframe ${REFRAME_ARGS} --run --exclude TensorFlow reframe_exit_code=$? if [[ ${reframe_exit_code} -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." From 932d9a09e17b8798948522d0d3a1e0dfc4c0bc13 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 15:06:05 +0200 Subject: [PATCH 16/52] Add some debugging echo's --- test_suite.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 7598d9fad0..69002bdbb5 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -74,8 +74,13 @@ fi TMPDIR=$(mktemp -d) echo ">> Setting up environment..." -module --force purge +# No module command, we are outside of the compat layer +# module --force purge +echo "Current EESSI env:" +env | grep "EESSI" +echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE before calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) +echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE after calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash From 8eb07102bf23d9f3dee1146cafb947823b4144f5 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 15:31:10 +0200 Subject: [PATCH 17/52] Make sure test suite only lists. Also make sure python script that uses archspec is called in a shell that has EESSI initialized, so that archspec is available --- test_suite.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 69002bdbb5..6845b230ef 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -79,7 +79,9 @@ echo ">> Setting up environment..." echo "Current EESSI env:" env | grep "EESSI" echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE before calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" -export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) +# For this call to be succesful, it needs to be able to import archspec (which is part of EESSI) +# Thus, we execute it in a subshell where EESSI is already initialized (a bit like a bootstrap) +export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(source $TOPDIR/init/bash; python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE after calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash @@ -216,7 +218,9 @@ fi echo "Running tests: reframe ${REFRAME_ARGS} --run" # Exclude TensorFlow, which got stuck on https://github.com/EESSI/software-layer/pull/670#issuecomment-2291084266 # Let's first make sure the test suite runs on the zen4 prefix... -reframe ${REFRAME_ARGS} --run --exclude TensorFlow +#reframe ${REFRAME_ARGS} --run --exclude TensorFlow +# Limit to listing again, until we are sure we run with zen4... +reframe ${REFRAME_ARGS} --list reframe_exit_code=$? if [[ ${reframe_exit_code} -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." From 584c637f2ae87f39bf0d50a0ae8c639d7c1a370b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 16:14:57 +0200 Subject: [PATCH 18/52] Redirect the output from sourcing the init script, as that is not what we want to capture in the environment variable --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 6845b230ef..86a347931b 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -81,7 +81,7 @@ env | grep "EESSI" echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE before calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" # For this call to be succesful, it needs to be able to import archspec (which is part of EESSI) # Thus, we execute it in a subshell where EESSI is already initialized (a bit like a bootstrap) -export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(source $TOPDIR/init/bash; python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) +export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(source $TOPDIR/init/bash > /dev/null 2>&1; python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE after calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash From faddc7515ea0cf28ab8bd65da15980eb61c6786c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 17:13:17 +0200 Subject: [PATCH 19/52] Remove debugging echo's --- test_suite.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 86a347931b..f9f6d0113a 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -74,10 +74,6 @@ fi TMPDIR=$(mktemp -d) echo ">> Setting up environment..." -# No module command, we are outside of the compat layer -# module --force purge -echo "Current EESSI env:" -env | grep "EESSI" echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE before calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" # For this call to be succesful, it needs to be able to import archspec (which is part of EESSI) # Thus, we execute it in a subshell where EESSI is already initialized (a bit like a bootstrap) From bd24ca8e613aa9f511c64f2689aff037e06cc2b6 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 17:24:59 +0200 Subject: [PATCH 20/52] Remove gnuplot and add ReFrame --- .../2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml | 2 ++ .../2023.06/zen4/eessi-2023.06-eb-4.9.2-2023a.yml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml diff --git a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml new file mode 100644 index 0000000000..f1fde247d0 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml @@ -0,0 +1,2 @@ +easyconfigs: + - ReFrame-4.3.3.eb 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 695c4a06d9..9d13d5eb3a 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 @@ -22,4 +22,3 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21136 from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - MODFLOW-6.4.4-foss-2023a.eb - - gnuplot-5.4.8-GCCcore-12.3.0.eb From 9845452b29054d5739d2e89abafaa5e1ea4410c2 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Thu, 15 Aug 2024 18:32:40 +0200 Subject: [PATCH 21/52] Debugging issue with loading ReFrame --- test_suite.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test_suite.sh b/test_suite.sh index f9f6d0113a..fe08f7bf83 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -82,6 +82,14 @@ echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE after calling eessi_software_subdir.py: $EE source $TOPDIR/init/bash +# DEBUGGING +echo "Checking if ReFrame module exists:" +ls -al /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen4/modules/all/ReFrame/4.3.3.lua +echo "Checking available ReFrame modules" +module av ReFrame +echo "Checking if we can load ReFrame when ignoring the cache" +module load --ignore_cache ReFrame + # Load the ReFrame module # Currently, we load the default version. Maybe we should somehow make this configurable in the future? module load ReFrame From 64d483acade68942dd3408972c15ce0a9d0326c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Pe=C4=8Dar?= <jurij.pecar@embl.de> Date: Fri, 16 Aug 2024 10:25:23 +0200 Subject: [PATCH 22/52] {2023.06}[GCC/13.2.0] STAR 2.7.11b --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 1 + 1 file changed, 1 insertion(+) 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 883483f5d2..dcac6cfc72 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 @@ -15,3 +15,4 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 + - STAR-2.7.11b-GCC-13.2.0.eb From 56b9be9ad48d41a2555fdeb3c072297ebcd29dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Pe=C4=8Dar?= <jurij.pecar@embl.de> Date: Fri, 16 Aug 2024 11:12:42 +0200 Subject: [PATCH 23/52] {2023.06}[GCC/13.2.0] STAR 2.7.11b try 2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 2 ++ 1 file changed, 2 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 dcac6cfc72..5011c9d49c 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 @@ -15,4 +15,6 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 + - xxd-9.1.0307-GCCcore-13.2.0.eb + - HTSlib-1.19.1-GCC-13.2.0.eb - STAR-2.7.11b-GCC-13.2.0.eb From d189d21dd4b3e3f052a4850814e0b6602d67236f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= <trz42@users.noreply.github.com> Date: Fri, 16 Aug 2024 12:52:49 +0200 Subject: [PATCH 24/52] Remove redundant easyconfigs easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml Co-authored-by: Kenneth Hoste <kenneth.hoste@ugent.be> --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 2 -- 1 file changed, 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 5011c9d49c..dcac6cfc72 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 @@ -15,6 +15,4 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 - - xxd-9.1.0307-GCCcore-13.2.0.eb - - HTSlib-1.19.1-GCC-13.2.0.eb - STAR-2.7.11b-GCC-13.2.0.eb From 3ce0c951b2308b66f04989aeab64ddd69415d313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20Pe=C4=8Dar?= <jurij.pecar@embl.de> Date: Fri, 16 Aug 2024 22:47:35 +0200 Subject: [PATCH 25/52] Update eessi-2023.06-eb-4.9.2-2023b.yml fetch updated .eb file to remove hardcoded -mavx2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml | 3 +++ 1 file changed, 3 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 dcac6cfc72..8479061de7 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 @@ -16,3 +16,6 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 - STAR-2.7.11b-GCC-13.2.0.eb + options: + #see https://github.com/easybuilders/easybuild-easyconfigs/pull/21200 + from-commit: cd8b1ce595195f132125d9b25a98a9efe702c72a From 95f9d6d7dc33375ff961030aa340d1c8d7a8d13c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20R=C3=B6blitz?= <trz42@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:20:38 +0200 Subject: [PATCH 26/52] Add missing ':' at end of line --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.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-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index 8479061de7..edfd491cce 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 @@ -15,7 +15,7 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21034 from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 - - STAR-2.7.11b-GCC-13.2.0.eb + - STAR-2.7.11b-GCC-13.2.0.eb: options: #see https://github.com/easybuilders/easybuild-easyconfigs/pull/21200 from-commit: cd8b1ce595195f132125d9b25a98a9efe702c72a From 56251cdfccbcefc977abd9633138d6d05f4f24cf Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 09:58:53 +0200 Subject: [PATCH 27/52] Add ReFrame for Zen4 --- .../2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml diff --git a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml new file mode 100644 index 0000000000..f1fde247d0 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml @@ -0,0 +1,2 @@ +easyconfigs: + - ReFrame-4.3.3.eb From ab203e2e125857e824d9e9e7c38a6db350276cac Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 11:35:21 +0200 Subject: [PATCH 28/52] Add gnuplot back in as test build --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 1 + .../map_software_to_test.py | 57 +++++++++++++++++++ .../eessi_test_mapping/software_to_tests.yml | 7 +++ tests/eessi_test_mapping/test_mapping.yml | 5 ++ 4 files changed, 70 insertions(+) create mode 100644 tests/eessi_test_mapping/map_software_to_test.py create mode 100644 tests/eessi_test_mapping/software_to_tests.yml create mode 100644 tests/eessi_test_mapping/test_mapping.yml 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 e8fe8ab120..e13b1935fd 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 @@ -45,3 +45,4 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20880 from-commit: bc6e08f89759b8b70166de5bfcb5056b9db8ec90 + - gnuplot-5.4.8-GCCcore-12.3.0.eb diff --git a/tests/eessi_test_mapping/map_software_to_test.py b/tests/eessi_test_mapping/map_software_to_test.py new file mode 100644 index 0000000000..464921b11b --- /dev/null +++ b/tests/eessi_test_mapping/map_software_to_test.py @@ -0,0 +1,57 @@ +import yaml +import re +import os + +def load_mappings(file_path): + """Load the YAML mappings from a file.""" + with open(file_path, 'r') as file: + config = yaml.safe_load(file) + return config['mappings'] + +def get_tests_for_software(software_name, mappings): + """Get the list of tests for a given software name based on the first matching regex pattern.""" + + # Iterate over patterns in the order they appear in the YAML file + for pattern, tests in mappings.items(): + if re.match(pattern, software_name): + return tests + + # If no matches are found, return the default tests if they exist + if 'default_tests' in mappings: + return mappings['default_tests'] + + return [] + +def read_software_names(file_path): + """Read software names from the module_files.list.txt file.""" + with open(file_path, 'r') as file: + software_names = [line.strip() for line in file if line.strip()] + return software_names + +if __name__ == "__main__": + mappings = load_mappings("software_to_tests.yml") + + # Check if the file module_files.list.txt exists + module_file_path = "module_files.list.txt" + if not os.path.exists(module_file_path): + print(f"Error: {module_file_path} does not exist.") + else: + software_names = read_software_names(module_file_path) + tests_to_run = [] + for software_name in software_names: + additional_tests = get_tests_for_software(software_name, mappings) + for test in additional_tests: + if test not in tests_to_run: + tests_to_run.append(test) + + if additional_tests: + print(f"Software: {software_name} -> Tests: {additional_tests}") + else: + print(f"Software: {software_name} -> No tests found") + + if tests_to_run: + arg_string = " ".join([f"-n {test_name}" for test_name in tests_to_run]) + print(f"Full list of tests to run: {tests_to_run}") + print(f"Argument string: {arg_string}") + else: + print(f"Full list of tests to run: No tests found") diff --git a/tests/eessi_test_mapping/software_to_tests.yml b/tests/eessi_test_mapping/software_to_tests.yml new file mode 100644 index 0000000000..2c6d504fae --- /dev/null +++ b/tests/eessi_test_mapping/software_to_tests.yml @@ -0,0 +1,7 @@ +mappings: + gnuplot/*: + - EESSI_ESPRESSO + Perl/*: + - EESSI_GROMACS + default_tests: + - EESSI_OSU diff --git a/tests/eessi_test_mapping/test_mapping.yml b/tests/eessi_test_mapping/test_mapping.yml new file mode 100644 index 0000000000..603e765a64 --- /dev/null +++ b/tests/eessi_test_mapping/test_mapping.yml @@ -0,0 +1,5 @@ +mappings: + - gnuplot/*: + - EESSI_ESPRESSO + - Perl/*: + - EESSI_GROMACS From cd0c6c6dedfebd884a6df96f0b5f796dbf029789 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 11:36:10 +0200 Subject: [PATCH 29/52] Remove ReFrame, as that was now build and deployed in a separate PR --- .../2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml diff --git a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml b/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml deleted file mode 100644 index f1fde247d0..0000000000 --- a/easystacks/software.eessi.io/2023.06/zen4/eessi-2023.06-eb-4.9.2-001-system.yml +++ /dev/null @@ -1,2 +0,0 @@ -easyconfigs: - - ReFrame-4.3.3.eb From 6f63aea97a24571d87f1017d1af2b5decad6203a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 11:48:17 +0200 Subject: [PATCH 30/52] These files belonged to another PR... --- .../map_software_to_test.py | 57 ------------------- .../eessi_test_mapping/software_to_tests.yml | 7 --- tests/eessi_test_mapping/test_mapping.yml | 5 -- 3 files changed, 69 deletions(-) delete mode 100644 tests/eessi_test_mapping/map_software_to_test.py delete mode 100644 tests/eessi_test_mapping/software_to_tests.yml delete mode 100644 tests/eessi_test_mapping/test_mapping.yml diff --git a/tests/eessi_test_mapping/map_software_to_test.py b/tests/eessi_test_mapping/map_software_to_test.py deleted file mode 100644 index 464921b11b..0000000000 --- a/tests/eessi_test_mapping/map_software_to_test.py +++ /dev/null @@ -1,57 +0,0 @@ -import yaml -import re -import os - -def load_mappings(file_path): - """Load the YAML mappings from a file.""" - with open(file_path, 'r') as file: - config = yaml.safe_load(file) - return config['mappings'] - -def get_tests_for_software(software_name, mappings): - """Get the list of tests for a given software name based on the first matching regex pattern.""" - - # Iterate over patterns in the order they appear in the YAML file - for pattern, tests in mappings.items(): - if re.match(pattern, software_name): - return tests - - # If no matches are found, return the default tests if they exist - if 'default_tests' in mappings: - return mappings['default_tests'] - - return [] - -def read_software_names(file_path): - """Read software names from the module_files.list.txt file.""" - with open(file_path, 'r') as file: - software_names = [line.strip() for line in file if line.strip()] - return software_names - -if __name__ == "__main__": - mappings = load_mappings("software_to_tests.yml") - - # Check if the file module_files.list.txt exists - module_file_path = "module_files.list.txt" - if not os.path.exists(module_file_path): - print(f"Error: {module_file_path} does not exist.") - else: - software_names = read_software_names(module_file_path) - tests_to_run = [] - for software_name in software_names: - additional_tests = get_tests_for_software(software_name, mappings) - for test in additional_tests: - if test not in tests_to_run: - tests_to_run.append(test) - - if additional_tests: - print(f"Software: {software_name} -> Tests: {additional_tests}") - else: - print(f"Software: {software_name} -> No tests found") - - if tests_to_run: - arg_string = " ".join([f"-n {test_name}" for test_name in tests_to_run]) - print(f"Full list of tests to run: {tests_to_run}") - print(f"Argument string: {arg_string}") - else: - print(f"Full list of tests to run: No tests found") diff --git a/tests/eessi_test_mapping/software_to_tests.yml b/tests/eessi_test_mapping/software_to_tests.yml deleted file mode 100644 index 2c6d504fae..0000000000 --- a/tests/eessi_test_mapping/software_to_tests.yml +++ /dev/null @@ -1,7 +0,0 @@ -mappings: - gnuplot/*: - - EESSI_ESPRESSO - Perl/*: - - EESSI_GROMACS - default_tests: - - EESSI_OSU diff --git a/tests/eessi_test_mapping/test_mapping.yml b/tests/eessi_test_mapping/test_mapping.yml deleted file mode 100644 index 603e765a64..0000000000 --- a/tests/eessi_test_mapping/test_mapping.yml +++ /dev/null @@ -1,5 +0,0 @@ -mappings: - - gnuplot/*: - - EESSI_ESPRESSO - - Perl/*: - - EESSI_GROMACS From 4fef822203aed8a523771d14afa7b7d51f628c72 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 12:05:34 +0200 Subject: [PATCH 31/52] Remove gnuplot again, it was already present... --- .../2023.06/eessi-2023.06-eb-4.9.2-2023a.yml | 1 - test_suite.sh | 6 +----- 2 files changed, 1 insertion(+), 6 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 e13b1935fd..e8fe8ab120 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 @@ -45,4 +45,3 @@ easyconfigs: options: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20880 from-commit: bc6e08f89759b8b70166de5bfcb5056b9db8ec90 - - gnuplot-5.4.8-GCCcore-12.3.0.eb diff --git a/test_suite.sh b/test_suite.sh index fe08f7bf83..fffd4a7888 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -220,11 +220,7 @@ fi # Run all tests echo "Running tests: reframe ${REFRAME_ARGS} --run" -# Exclude TensorFlow, which got stuck on https://github.com/EESSI/software-layer/pull/670#issuecomment-2291084266 -# Let's first make sure the test suite runs on the zen4 prefix... -#reframe ${REFRAME_ARGS} --run --exclude TensorFlow -# Limit to listing again, until we are sure we run with zen4... -reframe ${REFRAME_ARGS} --list +reframe ${REFRAME_ARGS} --run reframe_exit_code=$? if [[ ${reframe_exit_code} -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." From a22ee425509b016fbaad5e0437087e8a2acd8696 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz <thomas.roblitz@uib.no> Date: Mon, 19 Aug 2024 14:36:02 +0200 Subject: [PATCH 32/52] use upper directory of former 'rw' session in 'ro' mode --- eessi_container.sh | 71 +++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index e404b7ee18..7f0c64ef27 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -254,7 +254,7 @@ if [[ ${LIST_REPOS} -eq 1 ]]; then default_label=", default" else default_label="" - fi + fi echo " ${cvmfs_repo} [CVMFS config repo${default_label}]" done for cfg_repo in "${!cfg_cvmfs_repos[@]}" @@ -323,7 +323,7 @@ do 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 + # 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 @@ -595,11 +595,11 @@ do # 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} + cfg_repo_id=${cvmfs_repo_name} - # obtain CVMFS repository name from section for the given ID + # 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 '.') + # 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 @@ -609,15 +609,15 @@ do # 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 } + # 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: + # 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 @@ -641,7 +641,7 @@ do # 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 + # ${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= @@ -726,7 +726,7 @@ do 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 + # 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 @@ -736,15 +736,46 @@ do # 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}" + # need to distinguish between basic "ro" access and "ro" after a "rw" session + if [[ -d ${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-upper ]]; then + # the overlay-upper directory is only created in a read-write-session, thus + # we are resuming from such a session here (otherwise there shouldn't be such + # directory yet as it is only created for read-write-sessions a bit further + # below); the overlay-upper directory can only exist because it is part of + # the ${RESUME} directory or tarball + # to be able to see the contents of the read-write session we have to mount + # the fuse-overlayfs (in read-only mode) on top of the CernVM-FS repository + + # make the target CernVM-FS repository available under /cvmfs_ro + export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs_ro/${cvmfs_repo_name}" + + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") + + # now, put the overlay-upper read-only on top of the repo and make it available under the usual prefix /cvmfs + EESSI_READONLY_OVERLAY="container:fuse-overlayfs" + # The contents of the previous session are available under + # ${EESSI_TMPDIR} which is bind mounted to ${TMP_IN_CONTAINER}. + # Hence, we have to use ${TMP_IN_CONTAINER}/${cvmfs_repo_name}/overlay-upper + # the left-most directory given for the lowerdir argument is put on top, + # and with no upperdir=... the whole overlayfs is made available read-only + EESSI_READONLY_OVERLAY+=" -o lowerdir=${TMP_IN_CONTAINER}/${cvmfs_repo_name}/overlay-upper:/cvmfs_ro/${cvmfs_repo_name}" + EESSI_READONLY_OVERLAY+=" /cvmfs/${cvmfs_repo_name}" + export EESSI_READONLY_OVERLAY + + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY_OVERLAY}") + export EESSI_FUSE_MOUNTS + else + # basic "ro" access that doesn't require any fuseoverlay-fs + export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs/${cvmfs_repo_name}" - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") - export EESSI_FUSE_MOUNTS + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") + export EESSI_FUSE_MOUNTS + fi 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 - [[ ${VERBOSE} -eq 1 ]] && echo -e "TMP directory contents:\n$(ls -l ${EESSI_TMPDIR})" + [[ ${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}" @@ -762,7 +793,7 @@ do 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} + 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) From 634abb077d9f0283f6452c4bcb35e1e3f7b30fd4 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Mon, 19 Aug 2024 14:39:21 +0200 Subject: [PATCH 33/52] Be a bit more verbose, for easier debugging of future issues. Remove statements that were inserted just to debug this particular issue --- test_suite.sh | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index fffd4a7888..464670b653 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -74,22 +74,13 @@ fi TMPDIR=$(mktemp -d) echo ">> Setting up environment..." -echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE before calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" # For this call to be succesful, it needs to be able to import archspec (which is part of EESSI) # Thus, we execute it in a subshell where EESSI is already initialized (a bit like a bootstrap) export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(source $TOPDIR/init/bash > /dev/null 2>&1; python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) -echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE after calling eessi_software_subdir.py: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" +echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash -# DEBUGGING -echo "Checking if ReFrame module exists:" -ls -al /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen4/modules/all/ReFrame/4.3.3.lua -echo "Checking available ReFrame modules" -module av ReFrame -echo "Checking if we can load ReFrame when ignoring the cache" -module load --ignore_cache ReFrame - # Load the ReFrame module # Currently, we load the default version. Maybe we should somehow make this configurable in the future? module load ReFrame @@ -147,24 +138,29 @@ echo "Configured reframe with the following environment variables:" env | grep "RFM_" # Inject correct CPU/memory properties into the ReFrame config file +echo "Collecting system-specific input for the ReFrame configuration file" cpuinfo=$(lscpu) if [[ "${cpuinfo}" =~ CPU\(s\):[^0-9]*([0-9]+) ]]; then cpu_count=${BASH_REMATCH[1]} + echo "Detected CPU count: ${cpu_count}" else fatal_error "Failed to get the number of CPUs for the current test hardware with lscpu." fi if [[ "${cpuinfo}" =~ Socket\(s\):[^0-9]*([0-9]+) ]]; then socket_count=${BASH_REMATCH[1]} + echo "Detected socket count: ${socket_count}" else fatal_error "Failed to get the number of sockets for the current test hardware with lscpu." fi if [[ "${cpuinfo}" =~ (Thread\(s\) per core:[^0-9]*([0-9]+)) ]]; then threads_per_core=${BASH_REMATCH[2]} + echo "Detected threads per core: ${threads_per_core}" else fatal_error "Failed to get the number of threads per core for the current test hardware with lscpu." fi if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then cores_per_socket=${BASH_REMATCH[2]} + echo "Detected cores per socket: ${cores_per_socket}" else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi @@ -190,12 +186,18 @@ if [[ $? -eq 0 ]]; then else fatal_error "Failed to get the memory limit in bytes from the current cgroup" fi +echo "Detected available memory: ${cgroup_mem_mib} MiB" + +echo "Replacing detected system information in template ReFrame config file..." cp ${RFM_CONFIG_FILE_TEMPLATE} ${RFM_CONFIG_FILES} sed -i "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILES sed -i "s/__MEM_PER_NODE__/${cgroup_mem_mib}/g" $RFM_CONFIG_FILES +# Make debugging easier by printing the final config file: +echo "Final config file (after replacements):" +cat "${RFM_CONFIG_FILES}" # Workaround for https://github.com/EESSI/software-layer/pull/467#issuecomment-1973341966 export PSM3_DEVICES='self,shm' # this is enough, since we only run single node for now From 05c0b038868e2e72510570896f46c31d74710d32 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 11:02:37 +0200 Subject: [PATCH 34/52] Make things more verbose, so we see where the memory limit comes from --- test_suite.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 464670b653..be11fba565 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -167,8 +167,10 @@ fi cgroup_v1_mem_limit="/sys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" cgroup_v2_mem_limit="/sys/fs/cgroup/$(</proc/self/cpuset)/memory.max" if [ -f "$cgroup_v1_mem_limit" ]; then + echo "Getting memory limit from file $cgroup_v1_mem_limit" cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") -else +elif [ -f "$cgroup_v2_mem_limit" ]; then + echo "Getting memory limit from file $cgroup_v2_mem_limit" cgroup_mem_bytes=$(cat "$cgroup_v2_mem_limit") if [ "$cgroup_mem_bytes" = 'max' ]; then # In cgroupsv2, the memory.max file may contain 'max', meaning the group can use the full system memory @@ -179,6 +181,8 @@ else fi cgroup_mem_bytes=$(("$cgroup_mem_kilobytes"*1024)) fi +else + fatal_error "Both files ${cgroup_v1_mem_limit} and ${cgroup_v2_mem_limit} couldn't be found. Failed to get the memory limit from the current cgroup" fi if [[ $? -eq 0 ]]; then # Convert to MiB From 141070701f2777a75706ee7e458f5a42bd3f63ee Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 11:50:31 +0200 Subject: [PATCH 35/52] More verobse --- test_suite.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test_suite.sh b/test_suite.sh index be11fba565..73ef5d966f 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -166,6 +166,9 @@ else fi cgroup_v1_mem_limit="/sys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" cgroup_v2_mem_limit="/sys/fs/cgroup/$(</proc/self/cpuset)/memory.max" +echo "cpuset_file: $(</proc/self/cpuset)" +echo "ls -al /sys/fs/cgroup/memory/$(</proc/self/cpuset)" +ls -al "/sys/fs/cgroup/memory/$(</proc/self/cpuset)" if [ -f "$cgroup_v1_mem_limit" ]; then echo "Getting memory limit from file $cgroup_v1_mem_limit" cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") From 2576568352973d5b81dd41d43cc08ccd2ad26237 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz <thomas.roblitz@uib.no> Date: Tue, 20 Aug 2024 11:50:49 +0200 Subject: [PATCH 36/52] add messages to help understanding which mount options were used --- eessi_container.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eessi_container.sh b/eessi_container.sh index 7f0c64ef27..34fa833d99 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -746,6 +746,10 @@ do # to be able to see the contents of the read-write session we have to mount # the fuse-overlayfs (in read-only mode) on top of the CernVM-FS repository + echo "While processing '${cvmfs_repo_name}' to be mounted 'read-only' we detected an overlay-upper" + echo " directory (${EESSI_TMPDIR}/${cvmfs_repo_name}/overlay-upper) likely from a previous" + echo " session. Will use it as left-most directory in 'lowerdir' argument for fuse-overlayfs." + # make the target CernVM-FS repository available under /cvmfs_ro export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs_ro/${cvmfs_repo_name}" @@ -766,6 +770,8 @@ do export EESSI_FUSE_MOUNTS else # basic "ro" access that doesn't require any fuseoverlay-fs + echo "Mounting '${cvmfs_repo_name}' 'read-only' without fuse-overlayfs." + export EESSI_READONLY="container:cvmfs2 ${cvmfs_repo_name} /cvmfs/${cvmfs_repo_name}" EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") From b24c30d8c68bb024dc84b8bbab6aabc2e0c9eda2 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 11:56:25 +0200 Subject: [PATCH 37/52] Of course, we should use the mounted dir /hostsys. It is entirely possible that inside the container, the /sys directory is different --- test_suite.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 73ef5d966f..7c3b7bfb0f 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -164,11 +164,11 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -cgroup_v1_mem_limit="/sys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" -cgroup_v2_mem_limit="/sys/fs/cgroup/$(</proc/self/cpuset)/memory.max" +cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" +cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</proc/self/cpuset)/memory.max" echo "cpuset_file: $(</proc/self/cpuset)" -echo "ls -al /sys/fs/cgroup/memory/$(</proc/self/cpuset)" -ls -al "/sys/fs/cgroup/memory/$(</proc/self/cpuset)" +echo "ls -al /hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" +ls -al "/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" if [ -f "$cgroup_v1_mem_limit" ]; then echo "Getting memory limit from file $cgroup_v1_mem_limit" cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") From a53074e0be0becc4f58bc650f1ce9597e68d096d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 11:59:47 +0200 Subject: [PATCH 38/52] get cpuset file from host as well --- bot/test.sh | 2 +- test_suite.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bot/test.sh b/bot/test.sh index d3f3630ea8..4a917af91e 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -206,7 +206,7 @@ else fi # Bind mount /sys/fs/cgroup so that we can determine the amount of memory available in our cgroup for # Reframe configuration -TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro") +TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro,/proc/self:/hostproc/self:ro"") # prepare arguments to test_suite.sh (specific to test step) declare -a TEST_SUITE_ARGS=() diff --git a/test_suite.sh b/test_suite.sh index 7c3b7bfb0f..6f42547df0 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -164,8 +164,8 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" -cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</proc/self/cpuset)/memory.max" +cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</hostproc/self/cpuset)/memory.limit_in_bytes" +cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</hostproc/self/cpuset)/memory.max" echo "cpuset_file: $(</proc/self/cpuset)" echo "ls -al /hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" ls -al "/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" From 8b4e63b88e3d5d33a616a2969b03f61d86dbb8e8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 12:02:31 +0200 Subject: [PATCH 39/52] Removed duplicate quote --- bot/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/test.sh b/bot/test.sh index 4a917af91e..fe40a7c06c 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -206,7 +206,7 @@ else fi # Bind mount /sys/fs/cgroup so that we can determine the amount of memory available in our cgroup for # Reframe configuration -TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro,/proc/self:/hostproc/self:ro"") +TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro,/proc/self:/hostproc/self:ro") # prepare arguments to test_suite.sh (specific to test step) declare -a TEST_SUITE_ARGS=() From 8ae3eed71860ccf7293248e3808e2673796bd69c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste <kenneth.hoste@ugent.be> Date: Tue, 20 Aug 2024 12:05:20 +0200 Subject: [PATCH 40/52] use more recent commit for installing STAR 2.7.11b w/ GCC/13.2.0 --- .../2023.06/eessi-2023.06-eb-4.9.2-2023b.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-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2023b.yml index edfd491cce..a1e45f0baa 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 @@ -17,5 +17,5 @@ easyconfigs: from-commit: 76e7fc6657bab64bfbec826540a3a8f0040258f2 - STAR-2.7.11b-GCC-13.2.0.eb: options: - #see https://github.com/easybuilders/easybuild-easyconfigs/pull/21200 - from-commit: cd8b1ce595195f132125d9b25a98a9efe702c72a + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/21200 + from-commit: 765ba900daf5953e306c4dad896febe52fdd6c00 From 6d194632ae7c3b73d80e569e46e123cfb91d120d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 12:07:21 +0200 Subject: [PATCH 41/52] Apparently, bind-mounting the hosts /proc gives garbage, but reading it from the containers' /proc is fine. So let's do that --- test_suite.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 6f42547df0..7c3b7bfb0f 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -164,8 +164,8 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</hostproc/self/cpuset)/memory.limit_in_bytes" -cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</hostproc/self/cpuset)/memory.max" +cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" +cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</proc/self/cpuset)/memory.max" echo "cpuset_file: $(</proc/self/cpuset)" echo "ls -al /hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" ls -al "/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" From c2b55354bbc44693b27ced7d40608a39ad6ada64 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 12:16:27 +0200 Subject: [PATCH 42/52] Remove the bind-mind for /proc, it's not needed anymore --- bot/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/test.sh b/bot/test.sh index fe40a7c06c..d3f3630ea8 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -206,7 +206,7 @@ else fi # Bind mount /sys/fs/cgroup so that we can determine the amount of memory available in our cgroup for # Reframe configuration -TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro,/proc/self:/hostproc/self:ro") +TEST_STEP_ARGS+=("--extra-bind-paths" "/sys/fs/cgroup:/hostsys/fs/cgroup:ro") # prepare arguments to test_suite.sh (specific to test step) declare -a TEST_SUITE_ARGS=() From a8602734a213f331ccd77718b96970196b4748fa Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 12:20:28 +0200 Subject: [PATCH 43/52] Cleanup debugging output --- test_suite.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 7c3b7bfb0f..5dae1c1bf3 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -166,9 +166,6 @@ else fi cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</proc/self/cpuset)/memory.max" -echo "cpuset_file: $(</proc/self/cpuset)" -echo "ls -al /hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" -ls -al "/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)" if [ -f "$cgroup_v1_mem_limit" ]; then echo "Getting memory limit from file $cgroup_v1_mem_limit" cgroup_mem_bytes=$(cat "$cgroup_v1_mem_limit") From 997427b401a4f5ca1f45c623359d1cdefd762250 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 13:35:58 +0200 Subject: [PATCH 44/52] Show effect of disableing LMOD cache --- test_suite.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test_suite.sh b/test_suite.sh index 464670b653..2a54956c50 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -81,6 +81,18 @@ echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash +# Demonstrate the effect of disabling the cache +echo "Trying to load modules while LMOD cache is used" +# export LMOD_IGNORE_CACHE=1 +module av patchelf +module load patchelf/0.17.2-GCCcore-12.2.0.eb +command -v patchelf +echo "Trying to load modules while LMOD cache is not used" +export LMOD_IGNORE_CACHE=1 +module av patchelf +module load patchelf/0.17.2-GCCcore-12.2.0.eb +command -v patchelf + # Load the ReFrame module # Currently, we load the default version. Maybe we should somehow make this configurable in the future? module load ReFrame From 14a89cb2c74c8c8adafc5d53ecde9223130f8b01 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 13:37:13 +0200 Subject: [PATCH 45/52] Add patchelf to demonstrate effect of cache in test step --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 a22b78718f..6996e6f712 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 @@ -6,4 +6,5 @@ easyconfigs: from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - gnuplot-5.4.6-GCCcore-12.2.0.eb - h5py-3.8.0-foss-2022b.eb - - MDAnalysis-2.4.2-foss-2022b.eb + - MDAnalysis-2.4.2-foss-2022b.eb + - patchelf-0.17.2-GCCcore-12.2.0.eb From e6cceb5d8c6f014f1788419698607d3f7f6ac9ed Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 16:06:28 +0200 Subject: [PATCH 46/52] Fix module name --- test_suite.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 2a54956c50..bb1913e086 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -85,12 +85,12 @@ source $TOPDIR/init/bash echo "Trying to load modules while LMOD cache is used" # export LMOD_IGNORE_CACHE=1 module av patchelf -module load patchelf/0.17.2-GCCcore-12.2.0.eb +module load patchelf/0.17.2-GCCcore-12.2.0 command -v patchelf echo "Trying to load modules while LMOD cache is not used" export LMOD_IGNORE_CACHE=1 module av patchelf -module load patchelf/0.17.2-GCCcore-12.2.0.eb +module load patchelf/0.17.2-GCCcore-12.2.0 command -v patchelf # Load the ReFrame module From 129973eb71263f9ef1189d91eb7baaf83f982eae Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 20:05:47 +0200 Subject: [PATCH 47/52] Remove debugging output, add clarifying comments --- test_suite.sh | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index bb1913e086..41af69643a 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -81,17 +81,9 @@ echo "EESSI_SOFTWARE_SUBDIR_OVERRIDE: $EESSI_SOFTWARE_SUBDIR_OVERRIDE" source $TOPDIR/init/bash -# Demonstrate the effect of disabling the cache -echo "Trying to load modules while LMOD cache is used" -# export LMOD_IGNORE_CACHE=1 -module av patchelf -module load patchelf/0.17.2-GCCcore-12.2.0 -command -v patchelf -echo "Trying to load modules while LMOD cache is not used" +# We have to ignore the LMOD cache, otherwise the software that is built in the build step cannot be found/loaded +# Reason is that the LMOD cache is normally only updated on the Stratum 0, once everything is ingested export LMOD_IGNORE_CACHE=1 -module av patchelf -module load patchelf/0.17.2-GCCcore-12.2.0 -command -v patchelf # Load the ReFrame module # Currently, we load the default version. Maybe we should somehow make this configurable in the future? From af8d9dc69f1af69b0f94749db79c92b2d1706465 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Tue, 20 Aug 2024 20:06:38 +0200 Subject: [PATCH 48/52] Don't add patchelf, this PR wasn't really about that - we just used it to prove that disabling the LMOD cache was needed --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.2-2022b.yml | 3 +-- 1 file changed, 1 insertion(+), 2 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 6996e6f712..a22b78718f 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 @@ -6,5 +6,4 @@ easyconfigs: from-commit: d8076ebaf8cb915762adebf88d385cc672b350dc - gnuplot-5.4.6-GCCcore-12.2.0.eb - h5py-3.8.0-foss-2022b.eb - - MDAnalysis-2.4.2-foss-2022b.eb - - patchelf-0.17.2-GCCcore-12.2.0.eb + - MDAnalysis-2.4.2-foss-2022b.eb From b82e18322870c36781966637daa06d17dc53f453 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <casparl@tcn1.local.snellius.surf.nl> Date: Wed, 21 Aug 2024 12:03:51 +0200 Subject: [PATCH 49/52] Add clear description for why we use /hostsys --- test_suite.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test_suite.sh b/test_suite.sh index 5dae1c1bf3..584c9dccfc 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -164,6 +164,11 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi + +# The /sys inside the container is not the same as the /sys of the host +# We want to extract the memory limit from the cgroup on the host (which is typically set by SLURM). +# Thus, bot/test.sh bind-mounts the host's /sys/fs/cgroup into /hostsys/fs/cgroup +# and that's the prefix we use to extract the memory limit from cgroup_v1_mem_limit="/hostsys/fs/cgroup/memory/$(</proc/self/cpuset)/memory.limit_in_bytes" cgroup_v2_mem_limit="/hostsys/fs/cgroup/$(</proc/self/cpuset)/memory.max" if [ -f "$cgroup_v1_mem_limit" ]; then From 00839e1b3e478b25afd01888b41db936d3ec1bbf Mon Sep 17 00:00:00 2001 From: Kenneth Hoste <kenneth.hoste@ugent.be> Date: Wed, 21 Aug 2024 18:50:46 +0200 Subject: [PATCH 50/52] {2023.06,a64fx}[foss/2023a] R v4.3.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 f38c06ea8b..2f884f1838 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 @@ -18,3 +18,4 @@ easyconfigs: include-easyblocks-from-commit: c8256a36e7062bc09f5ce30552a9de9827054c9e # https://github.com/easybuilders/easybuild-easyconfigs/pull/20841 from-commit: f0e91e6e430ebf902f7788ebb47f0203dee60649 + - R-4.3.2-gfbf-2023a.eb From 2a339c3bb4f07af6698cdc65c75a90f1b8754665 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Fri, 23 Aug 2024 09:56:41 +0200 Subject: [PATCH 51/52] Create 20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml --- ...2-GObject-Introspection-filter-envvars-a64fx.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml new file mode 100644 index 0000000000..782db66e78 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml @@ -0,0 +1,13 @@ +# 2024.08.23 +# 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. +# This rebuild was not done initially for A64FX. This file is meant to do the same as the +# previous rebuild of GObject-Introspection-1.76.1-GCCcore-12.3.0 in other architectures, +# but for A64FX. +# +# See https://github.com/EESSI/software-layer/issues/196 +easyconfigs: + - GObject-Introspection-1.76.1-GCCcore-12.3.0.eb From 73cf81abc14185c42440bad5660bf023e44d8146 Mon Sep 17 00:00:00 2001 From: Neves-P <p.m.santos.neves@rug.nl> Date: Fri, 23 Aug 2024 10:01:04 +0200 Subject: [PATCH 52/52] Renamed to correct date --- ...40823-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easystacks/software.eessi.io/2023.06/rebuilds/{20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml => 20240823-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml} (100%) diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240823-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml similarity index 100% rename from easystacks/software.eessi.io/2023.06/rebuilds/20240719-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml rename to easystacks/software.eessi.io/2023.06/rebuilds/20240823-eb-4.9.2-GObject-Introspection-filter-envvars-a64fx.yml