projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
17840: Deduplicate flag-parsing code.
[arvados.git]
/
lib
/
crunchrun
/
singularity.go
diff --git
a/lib/crunchrun/singularity.go
b/lib/crunchrun/singularity.go
index 61fecad0a13c06664890a9cf2dfffb8346b7a47e..5af023a83dc2dc61506818c88ccfadc5b0c22514 100644
(file)
--- a/
lib/crunchrun/singularity.go
+++ b/
lib/crunchrun/singularity.go
@@
-36,6
+36,8
@@
func newSingularityExecutor(logf func(string, ...interface{})) (*singularityExec
}, nil
}
}, nil
}
+func (e *singularityExecutor) Runtime() string { return "singularity" }
+
func (e *singularityExecutor) getOrCreateProject(ownerUuid string, name string, containerClient *arvados.Client) (*arvados.Group, error) {
var gp arvados.GroupList
err := containerClient.RequestAndDecode(&gp,
func (e *singularityExecutor) getOrCreateProject(ownerUuid string, name string, containerClient *arvados.Client) (*arvados.Group, error) {
var gp arvados.GroupList
err := containerClient.RequestAndDecode(&gp,
@@
-158,7
+160,22
@@
func (e *singularityExecutor) LoadImage(dockerImageID string, imageTarballPath s
return err
}
return err
}
+ // Set up a cache and tmp dir for singularity build
+ err = os.Mkdir(e.tmpdir+"/cache", 0700)
+ if err != nil {
+ return err
+ }
+ defer os.RemoveAll(e.tmpdir + "/cache")
+ err = os.Mkdir(e.tmpdir+"/tmp", 0700)
+ if err != nil {
+ return err
+ }
+ defer os.RemoveAll(e.tmpdir + "/tmp")
+
build := exec.Command("singularity", "build", imageFilename, "docker-archive://"+e.tmpdir+"/image.tar")
build := exec.Command("singularity", "build", imageFilename, "docker-archive://"+e.tmpdir+"/image.tar")
+ build.Env = os.Environ()
+ build.Env = append(build.Env, "SINGULARITY_CACHEDIR="+e.tmpdir+"/cache")
+ build.Env = append(build.Env, "SINGULARITY_TMPDIR="+e.tmpdir+"/tmp")
e.logf("%v", build.Args)
out, err := build.CombinedOutput()
// INFO: Starting build...
e.logf("%v", build.Args)
out, err := build.CombinedOutput()
// INFO: Starting build...
@@
-225,7
+242,7
@@
func (e *singularityExecutor) Create(spec containerSpec) error {
}
func (e *singularityExecutor) Start() error {
}
func (e *singularityExecutor) Start() error {
- args := []string{"singularity", "exec", "--containall", "--
no-home", "--
cleanenv", "--pwd", e.spec.WorkingDir}
+ args := []string{"singularity", "exec", "--containall", "--cleanenv", "--pwd", e.spec.WorkingDir}
if !e.spec.EnableNetwork {
args = append(args, "--net", "--network=none")
}
if !e.spec.EnableNetwork {
args = append(args, "--net", "--network=none")
}
@@
-240,7
+257,12
@@
func (e *singularityExecutor) Start() error {
sort.Strings(binds)
for _, path := range binds {
mount := e.spec.BindMounts[path]
sort.Strings(binds)
for _, path := range binds {
mount := e.spec.BindMounts[path]
- args = append(args, "--bind", mount.HostPath+":"+path+":"+readonlyflag[mount.ReadOnly])
+ if path == e.spec.Env["HOME"] {
+ // Singularity treates $HOME as special case
+ args = append(args, "--home", mount.HostPath+":"+path)
+ } else {
+ args = append(args, "--bind", mount.HostPath+":"+path+":"+readonlyflag[mount.ReadOnly])
+ }
}
// This is for singularity 3.5.2. There are some behaviors
}
// This is for singularity 3.5.2. There are some behaviors
@@
-250,11
+272,11
@@
func (e *singularityExecutor) Start() error {
env := make([]string, 0, len(e.spec.Env))
for k, v := range e.spec.Env {
if k == "HOME" {
env := make([]string, 0, len(e.spec.Env))
for k, v := range e.spec.Env {
if k == "HOME" {
- // $HOME is a special case
- args = append(args, "--home="+v)
- } else {
- env = append(env, "SINGULARITYENV_"+k+"="+v)
+ // Singularity treates $HOME as special case, this is handled
+ // with --home above
+ continue
}
}
+ env = append(env, "SINGULARITYENV_"+k+"="+v)
}
args = append(args, e.imageFilename)
}
args = append(args, e.imageFilename)