diff options
Diffstat (limited to 'internal/app/spruntime.go')
| -rw-r--r-- | internal/app/spruntime.go | 44 |
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 +} |
