diff options
Diffstat (limited to 'internal/app/sptmpdir.go')
| -rw-r--r-- | internal/app/sptmpdir.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/internal/app/sptmpdir.go b/internal/app/sptmpdir.go new file mode 100644 index 00000000..00680ffb --- /dev/null +++ b/internal/app/sptmpdir.go @@ -0,0 +1,33 @@ +package app + +import ( + "hakurei.app/container" + "hakurei.app/hst" + "hakurei.app/system" + "hakurei.app/system/acl" +) + +// spTmpdirOp sets up TMPDIR inside the container. +type spTmpdirOp struct{} + +func (s spTmpdirOp) toSystem(state *outcomeStateSys, _ *hst.Config) error { + tmpdir, tmpdirInst := s.commonPaths(state.outcomeState) + state.sys.Ensure(tmpdir, 0700) + state.sys.UpdatePermType(system.User, tmpdir, acl.Execute) + state.sys.Ensure(tmpdirInst, 01700) + state.sys.UpdatePermType(system.User, tmpdirInst, acl.Read, acl.Write, acl.Execute) + return nil +} + +func (s spTmpdirOp) toContainer(state *outcomeStateParams) error { + // mount inner /tmp from share so it shares persistence and storage behaviour of host /tmp + _, tmpdirInst := s.commonPaths(state.outcomeState) + state.params.Bind(tmpdirInst, container.AbsFHSTmp, container.BindWritable) + return nil +} + +func (s spTmpdirOp) commonPaths(state *outcomeState) (tmpdir, tmpdirInst *container.Absolute) { + tmpdir = state.sc.SharePath.Append("tmpdir") + tmpdirInst = tmpdir.Append(state.identity.String()) + return +} |
