diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-11 21:06:44 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-12 00:52:18 +0900 |
| commit | 04e6bc3c5c99d6a99f17cfa5f69f34fe8941aee2 (patch) | |
| tree | 2ad64307c13e2f967fdf17c5f02e7682189b22e1 /cmd | |
| parent | 5c540f90aa5ac069a370cbef0ddd81fa268b43c5 (diff) | |
hst: expose scheduling policy
This is primarily useful for poorly written music players for now.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/hakurei/command.go | 23 | ||||
| -rw-r--r-- | cmd/hakurei/command_test.go | 4 |
2 files changed, 18 insertions, 9 deletions
diff --git a/cmd/hakurei/command.go b/cmd/hakurei/command.go index 26c48d78..242e1389 100644 --- a/cmd/hakurei/command.go +++ b/cmd/hakurei/command.go @@ -88,6 +88,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr flagGroups command.RepeatableFlag flagHomeDir string flagUserName string + flagSched string flagPrivateRuntime, flagPrivateTmpdir bool @@ -131,7 +132,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr log.Fatal(optionalErrorUnwrap(err)) return err } else if progPath, err = check.NewAbs(p); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) return err } } @@ -150,7 +151,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr et |= hst.EPipeWire } - config := &hst.Config{ + config := hst.Config{ ID: flagID, Identity: flagIdentity, Groups: flagGroups, @@ -177,6 +178,10 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr }, } + if err := config.SchedPolicy.UnmarshalText([]byte(flagSched)); err != nil { + log.Fatal(err) + } + // bind GPU stuff if et&(hst.EX11|hst.EWayland) != 0 { config.Container.Filesystem = append(config.Container.Filesystem, hst.FilesystemConfigJSON{FilesystemConfig: &hst.FSBind{ @@ -214,7 +219,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr homeDir = passwd.HomeDir } if a, err := check.NewAbs(homeDir); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) return err } else { config.Container.Home = a @@ -234,11 +239,11 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr config.SessionBus = dbus.NewConfig(flagID, true, flagDBusMpris) } else { if f, err := os.Open(flagDBusConfigSession); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) } else { decodeJSON(log.Fatal, "load session bus proxy config", f, &config.SessionBus) if err = f.Close(); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) } } } @@ -246,11 +251,11 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr // system bus proxy is optional if flagDBusConfigSystem != "nil" { if f, err := os.Open(flagDBusConfigSystem); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) } else { decodeJSON(log.Fatal, "load system bus proxy config", f, &config.SystemBus) if err = f.Close(); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) } } } @@ -266,7 +271,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr } } - outcome.Main(ctx, msg, config, -1) + outcome.Main(ctx, msg, &config, -1) panic("unreachable") }). Flag(&flagDBusConfigSession, "dbus-config", command.StringFlag("builtin"), @@ -287,6 +292,8 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr "Container home directory"). Flag(&flagUserName, "u", command.StringFlag("chronos"), "Passwd user name within sandbox"). + Flag(&flagSched, "sched", command.StringFlag(""), + "Scheduling policy to set for the container"). Flag(&flagPrivateRuntime, "private-runtime", command.BoolFlag(false), "Do not share XDG_RUNTIME_DIR between containers under the same identity"). Flag(&flagPrivateTmpdir, "private-tmpdir", command.BoolFlag(false), diff --git a/cmd/hakurei/command_test.go b/cmd/hakurei/command_test.go index 4edf4a0b..8b5ae638 100644 --- a/cmd/hakurei/command_test.go +++ b/cmd/hakurei/command_test.go @@ -36,7 +36,7 @@ Commands: }, { "run", []string{"run", "-h"}, ` -Usage: hakurei run [-h | --help] [--dbus-config <value>] [--dbus-system <value>] [--mpris] [--dbus-log] [--id <value>] [-a <int>] [-g <value>] [-d <value>] [-u <value>] [--private-runtime] [--private-tmpdir] [--wayland] [-X] [--dbus] [--pipewire] [--pulse] COMMAND [OPTIONS] +Usage: hakurei run [-h | --help] [--dbus-config <value>] [--dbus-system <value>] [--mpris] [--dbus-log] [--id <value>] [-a <int>] [-g <value>] [-d <value>] [-u <value>] [--sched <value>] [--private-runtime] [--private-tmpdir] [--wayland] [-X] [--dbus] [--pipewire] [--pulse] COMMAND [OPTIONS] Flags: -X Enable direct connection to X11 @@ -66,6 +66,8 @@ Flags: Do not share TMPDIR between containers under the same identity -pulse Enable PulseAudio compatibility daemon + -sched string + Scheduling policy to set for the container -u string Passwd user name within sandbox (default "chronos") -wayland |
