Skip to content

Commit 41f3775

Browse files
authored
Merge pull request #57 from bedroge/bind_mount_optional
Always use fuse mounts by default in EESSI container, only use bind mounts when explicitly requested
2 parents f53567b + 435863c commit 41f3775

File tree

2 files changed

+18
-34
lines changed

2 files changed

+18
-34
lines changed

.github/workflows/tests_scripts.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,6 @@ jobs:
160160
export EESSI_VERSION_OVERRIDE="${{matrix.EESSI_VERSION}}"
161161
162162
out="${PWD}/eb-${EB_VERSION}.out"
163-
./eessi_container.sh --access rw --mode run --verbose /software-layer-scripts/run_in_compat_layer_env.sh ls 2>&1 | tee ${out}
163+
./eessi_container.sh --repository software.eessi.io,access=rw,mount=bind --mode run --verbose /software-layer-scripts/run_in_compat_layer_env.sh ls 2>&1 | tee ${out}
164164
echo $(grep "SINGULARITY_BIND" ${out})
165165
grep "SINGULARITY_BIND" ${out} | grep "software.eessi.io" || (echo "software.eessi.io did not seem to be bind mounted!" && exit 1)

eessi_container.sh

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -316,12 +316,9 @@ fi
316316
# iterate over entries in REPOSITORIES and check if they are known
317317
for cvmfs_repo in "${REPOSITORIES[@]}"
318318
do
319-
# split into name and access mode if ',access=' in $cvmfs_repo
320-
if [[ ${cvmfs_repo} == *",access="* ]] ; then
321-
cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification
322-
else
323-
cvmfs_repo_name="${cvmfs_repo}"
324-
fi
319+
readarray -td, cvmfs_repo_args < <(printf '%s' "$cvmfs_repo")
320+
cvmfs_repo_name=${cvmfs_repo_args[0]}
321+
325322
if [[ ! -n "${eessi_cvmfs_repos[${cvmfs_repo_name}]}" && ! -n ${cfg_cvmfs_repos[${cvmfs_repo_name}]} ]]; then
326323
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}"
327324
fi
@@ -331,7 +328,8 @@ done
331328
declare -A listed_repos=()
332329
for cvmfs_repo in "${REPOSITORIES[@]}"
333330
do
334-
cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode
331+
readarray -td, cvmfs_repo_args < <(printf '%s' "$cvmfs_repo")
332+
cvmfs_repo_name=${cvmfs_repo_args[0]}
335333
[[ ${VERBOSE} -eq 1 ]] && echo "checking for duplicates: '${cvmfs_repo}' and '${cvmfs_repo_name}'"
336334
# if cvmfs_repo_name is not in eessi_cvmfs_repos, assume it's in cfg_cvmfs_repos
337335
# and obtain actual repo_name from config
@@ -617,14 +615,8 @@ mkdir -p ${EESSI_TMPDIR}/repos_cfg
617615
for cvmfs_repo in "${REPOSITORIES[@]}"
618616
do
619617
[[ ${VERBOSE} -eq 1 ]] && echo "process CVMFS repo spec '${cvmfs_repo}'"
620-
# split into name and access mode if ',access=' in $cvmfs_repo
621-
if [[ ${cvmfs_repo} == *",access="* ]] ; then
622-
cvmfs_repo_name=${cvmfs_repo/,access=*/} # remove access mode specification
623-
cvmfs_repo_access=${cvmfs_repo/*,access=/} # remove repo name part
624-
else
625-
cvmfs_repo_name="${cvmfs_repo}"
626-
cvmfs_repo_access="${ACCESS}" # use globally defined access mode
627-
fi
618+
readarray -td, cvmfs_repo_args < <(printf '%s' "$cvmfs_repo")
619+
cvmfs_repo_name=${cvmfs_repo_args[0]}
628620
# if cvmfs_repo_name is in cfg_cvmfs_repos, it is a "repository ID" and was
629621
# derived from information in EESSI_REPOS_CFG_FILE, namely the section
630622
# names in that .ini-type file
@@ -761,45 +753,37 @@ do
761753
unset cfg_repo_id
762754
[[ ${VERBOSE} -eq 1 ]] && echo "add fusemount options for CVMFS repo '${cvmfs_repo}'"
763755
# split into name, access mode, and mount mode
764-
readarray -td, cvmfs_repo_args <<<"$cvmfs_repo"
765-
cvmfs_repo_name=$(sed -e 's/\\n//g' <<< "${cvmfs_repo_args[0]}")
756+
readarray -td, cvmfs_repo_args < <(printf '%s' "$cvmfs_repo")
757+
cvmfs_repo_name=${cvmfs_repo_args[0]}
766758
cvmfs_repo_access="${ACCESS}" # initialize to the default access mode
759+
cvmfs_repo_mount="fuse" # use fuse mounts by default
767760
for arg in ${cvmfs_repo_args[@]:1}; do
768761
if [[ $arg == "access="* ]]; then
769762
cvmfs_repo_access=${arg/access=}
770763
fi
771764
if [[ $arg == "mount="* ]]; then
772765
cvmfs_repo_mount=${arg/mount=}
773-
# check if the specified mount mode is a valid one
774-
if [[ ${cvmfs_repo_mount} != "bind" ]] && [[ ${cvmfs_repo_mount} != "fuse" ]]; then
775-
echo -e "ERROR: mount mode '${cvmfs_repo_mount}' for CVMFS repository\n '${cvmfs_repo_name}' is not known"
776-
exit ${REPOSITORY_ERROR_EXITCODE}
777-
fi
778766
fi
779767
done
780768

769+
# check if the specified mount mode is a valid one
770+
if [[ ${cvmfs_repo_mount} != "bind" ]] && [[ ${cvmfs_repo_mount} != "fuse" ]]; then
771+
echo -e "ERROR: mount mode '${cvmfs_repo_mount}' for CVMFS repository\n '${cvmfs_repo_name}' is not known"
772+
exit ${REPOSITORY_ERROR_EXITCODE}
773+
fi
774+
[[ ${VERBOSE} -eq 1 ]] && echo "Using a ${cvmfs_repo_mount} mount for /cvmfs/${cvmfs_repo_name}"
775+
781776
# obtain cvmfs_repo_name from EESSI_REPOS_CFG_FILE if cvmfs_repo is in cfg_cvmfs_repos
782777
if [[ ${cfg_cvmfs_repos[${cvmfs_repo_name}]} ]]; then
783778
[[ ${VERBOSE} -eq 1 ]] && echo "repo '${cvmfs_repo_name}' is not an EESSI CVMFS repository..."
784779
# cvmfs_repo_name is actually a repository ID, use that to obtain
785780
# the actual name from the EESSI_REPOS_CFG_FILE
786781
cfg_repo_id=${cvmfs_repo_name}
787-
echo "bob $cfg_repo_id"
788782
cvmfs_repo_name=$(cfg_get_value ${cfg_repo_id} "repo_name")
789-
echo $cvmfs_repo_name
790783
fi
791784
# remove project subdir in container
792785
cvmfs_repo_name=${cvmfs_repo_name%"/${EESSI_DEV_PROJECT}"}
793786

794-
# if a mount mode was not specified, we use a bind mount if the repository is available on the host,
795-
# and otherwise we use a fuse mount
796-
if [[ -z ${cvmfs_repo_mount} ]]; then
797-
cvmfs_repo_mount="fuse"
798-
if [[ -x $(command -v cvmfs_config) ]] && cvmfs_config probe ${cvmfs_repo_name} >& /dev/null; then
799-
cvmfs_repo_mount="bind"
800-
fi
801-
fi
802-
[[ ${VERBOSE} -eq 1 ]] && echo "Using a ${cvmfs_repo_mount} mount for /cvmfs/${cvmfs_repo_name}"
803787
# if a bind mount was requested, check if the repository is really available on the host
804788
if [[ ${cvmfs_repo_mount} == "bind" ]]; then
805789
if [[ ! -x $(command -v cvmfs_config) ]] || ! cvmfs_config probe ${cvmfs_repo_name} >& /dev/null; then

0 commit comments

Comments
 (0)