aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/spruntime.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/app/spruntime.go')
-rw-r--r--internal/app/spruntime.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/app/spruntime.go b/internal/app/spruntime.go
new file mode 100644
index 00000000..c2e5518d
--- /dev/null
+++ b/internal/app/spruntime.go
@@ -0,0 +1,44 @@
+package app
+
+import (
+ "hakurei.app/container"
+ "hakurei.app/hst"
+ "hakurei.app/system"
+ "hakurei.app/system/acl"
+)
+
+// spRuntimeOp sets up XDG_RUNTIME_DIR inside the container.
+type spRuntimeOp struct{}
+
+func (s spRuntimeOp) toSystem(state *outcomeStateSys, _ *hst.Config) error {
+ runtimeDir, runtimeDirInst := s.commonPaths(state.outcomeState)
+ state.sys.Ensure(runtimeDir, 0700)
+ state.sys.UpdatePermType(system.User, runtimeDir, acl.Execute)
+ state.sys.Ensure(runtimeDirInst, 0700)
+ state.sys.UpdatePermType(system.User, runtimeDirInst, acl.Read, acl.Write, acl.Execute)
+ return nil
+}
+
+func (s spRuntimeOp) toContainer(state *outcomeStateParams) error {
+ const (
+ xdgRuntimeDir = "XDG_RUNTIME_DIR"
+ xdgSessionClass = "XDG_SESSION_CLASS"
+ xdgSessionType = "XDG_SESSION_TYPE"
+ )
+
+ state.runtimeDir = container.AbsFHSRunUser.Append(state.mapuid.String())
+ state.env[xdgRuntimeDir] = state.runtimeDir.String()
+ state.env[xdgSessionClass] = "user"
+ state.env[xdgSessionType] = "tty"
+
+ _, runtimeDirInst := s.commonPaths(state.outcomeState)
+ state.params.Tmpfs(container.AbsFHSRunUser, 1<<12, 0755)
+ state.params.Bind(runtimeDirInst, state.runtimeDir, container.BindWritable)
+ return nil
+}
+
+func (s spRuntimeOp) commonPaths(state *outcomeState) (runtimeDir, runtimeDirInst *container.Absolute) {
+ runtimeDir = state.sc.SharePath.Append("runtime")
+ runtimeDirInst = runtimeDir.Append(state.identity.String())
+ return
+}