From a69b4e66edb195a6ea5d7f32d8310762e0297970 Mon Sep 17 00:00:00 2001 From: julianmorillo Date: Thu, 26 Mar 2026 11:34:08 +0100 Subject: [PATCH 1/4] Use sandbox mode which is more robust in singularity cleanup phase --- eessi_container.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 71b0fa41..12605a08 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -1039,9 +1039,13 @@ for arg in "${PASS_THROUGH[@]}"; do ADDITIONAL_CONTAINER_OPTIONS+=(${arg}) done -echo "Launching container with command (next line):" -echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" -singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" +# using a sandbox image mode is more robust at the cleanup phase at the end +CONTAINER_SANDBOX=CONTAINER.removesuffix(".sif") + ".sandbox" +echo "Building a sandbox image with command (next line):" +echo "singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER}" +echo "Launching sandbox container with command (next line):" +echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER_SANDBOX} $@" +singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER_SANDBOX} "$@" exit_code=$? # 6. save tmp if requested (arg -s|--save) From 47406aca28a94da7687d55672d60f6d3912022b8 Mon Sep 17 00:00:00 2001 From: julianmorillo Date: Thu, 26 Mar 2026 11:50:09 +0100 Subject: [PATCH 2/4] Now with correct bash syntax --- eessi_container.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi_container.sh b/eessi_container.sh index 12605a08..c981e29e 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -1040,7 +1040,7 @@ for arg in "${PASS_THROUGH[@]}"; do done # using a sandbox image mode is more robust at the cleanup phase at the end -CONTAINER_SANDBOX=CONTAINER.removesuffix(".sif") + ".sandbox" +CONTAINER_SANDBOX="${CONTAINER%.sif}.sandbox" echo "Building a sandbox image with command (next line):" echo "singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER}" echo "Launching sandbox container with command (next line):" From 149dfaf968b410f96d1fdea07dd335122432af36 Mon Sep 17 00:00:00 2001 From: julianmorillo Date: Thu, 26 Mar 2026 12:58:13 +0100 Subject: [PATCH 3/4] Now with the singularity build command in place --- eessi_container.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi_container.sh b/eessi_container.sh index c981e29e..956c9393 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -1043,6 +1043,7 @@ done CONTAINER_SANDBOX="${CONTAINER%.sif}.sandbox" echo "Building a sandbox image with command (next line):" echo "singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER}" +singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER} echo "Launching sandbox container with command (next line):" echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER_SANDBOX} $@" singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER_SANDBOX} "$@" From d06e00f9f13d116051701c66baf84172c1017029 Mon Sep 17 00:00:00 2001 From: julianmorillo Date: Tue, 31 Mar 2026 12:15:22 +0200 Subject: [PATCH 4/4] Make the use of sandbox optional through an environment variable --- eessi_container.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 956c9393..4dd9c9b4 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -1039,15 +1039,23 @@ for arg in "${PASS_THROUGH[@]}"; do ADDITIONAL_CONTAINER_OPTIONS+=(${arg}) done -# using a sandbox image mode is more robust at the cleanup phase at the end -CONTAINER_SANDBOX="${CONTAINER%.sif}.sandbox" -echo "Building a sandbox image with command (next line):" -echo "singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER}" -singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER} -echo "Launching sandbox container with command (next line):" -echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER_SANDBOX} $@" -singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER_SANDBOX} "$@" +# EESSI_SINGULARITY_SANDBOX is an environment variable (typically set in site_config.sh, if needed) +if [[ -n "$EESSI_SINGULARITY_SANDBOX" ]]; then + # using a sandbox image mode is more robust at the cleanup phase at the end + CONTAINER_SANDBOX="${CONTAINER%.sif}.sandbox" + echo "Building a sandbox image with command (next line):" + echo "singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER}" + singularity build --sandbox ${CONTAINER_SANDBOX} ${CONTAINER} + echo "Launching sandbox container with command (next line):" + echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER_SANDBOX} $@" + singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER_SANDBOX} "$@" exit_code=$? +else + echo "Launching container with command (next line):" + echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" + singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" +exit_code=$? +fi # 6. save tmp if requested (arg -s|--save) if [[ ! -z ${SAVE} ]]; then