From: Tom Clegg Date: Tue, 17 May 2022 18:13:34 +0000 (-0400) Subject: Merge branch '19081-singularity-no-eval' X-Git-Tag: 2.5.0~170 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/844ff7cc1dc1c93a29b7ad8eca2987b987cf89e6?hp=-c Merge branch '19081-singularity-no-eval' refs #19081 Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- 844ff7cc1dc1c93a29b7ad8eca2987b987cf89e6 diff --combined lib/crunchrun/singularity.go index 879c46c898,61992b312d..1af0d420e4 --- a/lib/crunchrun/singularity.go +++ b/lib/crunchrun/singularity.go @@@ -10,7 -10,6 +10,7 @@@ import "os" "os/exec" "sort" + "strings" "syscall" "time" @@@ -37,13 -36,7 +37,13 @@@ func newSingularityExecutor(logf func(s }, nil } -func (e *singularityExecutor) Runtime() string { return "singularity" } +func (e *singularityExecutor) Runtime() string { + buf, err := exec.Command("singularity", "--version").CombinedOutput() + if err != nil { + return "singularity (unknown version)" + } + return strings.TrimSuffix(string(buf), "\n") +} func (e *singularityExecutor) getOrCreateProject(ownerUuid string, name string, containerClient *arvados.Client) (*arvados.Group, error) { var gp arvados.GroupList @@@ -299,6 -292,14 +299,14 @@@ func (e *singularityExecutor) execCmd(p // us to select specific devices we need to propagate that. env = append(env, "SINGULARITYENV_CUDA_VISIBLE_DEVICES="+cudaVisibleDevices) } + // Singularity's default behavior is to evaluate each + // SINGULARITYENV_* env var with a shell as a double-quoted + // string and pass the result to the contained + // process. Singularity 3.10+ has an option to pass env vars + // through literally without evaluating, which is what we + // want. See https://github.com/sylabs/singularity/pull/704 + // and https://dev.arvados.org/issues/19081 + env = append(env, "SINGULARITY_NO_EVAL=1") args = append(args, e.imageFilename) args = append(args, e.spec.Command...)