aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/sptmpdir.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/app/sptmpdir.go')
-rw-r--r--internal/app/sptmpdir.go33
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
+}