diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-02-28 20:42:33 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-02-28 20:44:44 +0900 |
| commit | c74c269b66770f0eddde255d2805b79f274409e9 (patch) | |
| tree | 02cb3e1bed01d24776d8d47a9c8fca47ed3d7343 /container | |
| parent | 4b0cce4db5f8e75c79e104f8c5ec02cb4541ed76 (diff) | |
container: use /proc/self/exe directly
This is a more reliable form of pathname to self and also cheaper than os.Executable.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container')
| -rw-r--r-- | container/container.go | 2 | ||||
| -rw-r--r-- | container/container_test.go | 5 | ||||
| -rw-r--r-- | container/executable.go | 3 | ||||
| -rw-r--r-- | container/fhs/abs.go | 2 | ||||
| -rw-r--r-- | container/fhs/fhs.go | 4 |
5 files changed, 12 insertions, 4 deletions
diff --git a/container/container.go b/container/container.go index a6457714..8b5ec01d 100644 --- a/container/container.go +++ b/container/container.go @@ -525,7 +525,7 @@ func New(ctx context.Context, msg message.Msg) *Container { p := &Container{ctx: ctx, msg: msg, Params: Params{Ops: new(Ops)}} c, cancel := context.WithCancel(ctx) p.cancel = cancel - p.cmd = exec.CommandContext(c, MustExecutable(msg)) + p.cmd = exec.CommandContext(c, fhs.ProcSelfExe) return p } diff --git a/container/container_test.go b/container/container_test.go index 852304e7..e00a63c7 100644 --- a/container/container_test.go +++ b/container/container_test.go @@ -773,14 +773,13 @@ func TestMain(m *testing.M) { func helperNewContainerLibPaths(ctx context.Context, libPaths *[]*check.Absolute, args ...string) (c *container.Container) { msg := message.New(nil) msg.SwapVerbose(testing.Verbose()) - executable := check.MustAbs(container.MustExecutable(msg)) c = container.NewCommand(ctx, msg, absHelperInnerPath, "helper", args...) c.Env = append(c.Env, envDoCheck+"=1") - c.Bind(executable, absHelperInnerPath, 0) + c.Bind(fhs.AbsProcSelfExe, absHelperInnerPath, 0) // in case test has cgo enabled - if entries, err := ldd.Resolve(ctx, msg, executable); err != nil { + if entries, err := ldd.Resolve(ctx, msg, nil); err != nil { log.Fatalf("ldd: %v", err) } else { *libPaths = ldd.Path(entries) diff --git a/container/executable.go b/container/executable.go index 67c43a70..b825306a 100644 --- a/container/executable.go +++ b/container/executable.go @@ -28,6 +28,9 @@ func copyExecutable(msg message.Msg) { } } +// MustExecutable calls [os.Executable] and terminates the process on error. +// +// Deprecated: This is no longer used and will be removed in 0.4. func MustExecutable(msg message.Msg) string { executableOnce.Do(func() { copyExecutable(msg) }) return executable diff --git a/container/fhs/abs.go b/container/fhs/abs.go index fda6971d..45c50bfd 100644 --- a/container/fhs/abs.go +++ b/container/fhs/abs.go @@ -42,6 +42,8 @@ var ( AbsDevShm = unsafeAbs(DevShm) // AbsProc is [Proc] as [check.Absolute]. AbsProc = unsafeAbs(Proc) + // AbsProcSelfExe is [ProcSelfExe] as [check.Absolute]. + AbsProcSelfExe = unsafeAbs(ProcSelfExe) // AbsSys is [Sys] as [check.Absolute]. AbsSys = unsafeAbs(Sys) ) diff --git a/container/fhs/fhs.go b/container/fhs/fhs.go index e0c1d861..6d098d0c 100644 --- a/container/fhs/fhs.go +++ b/container/fhs/fhs.go @@ -41,6 +41,10 @@ const ( // ProcSys points to a hierarchy below /proc/ that exposes a number of // kernel tunables. ProcSys = Proc + "sys/" + // ProcSelf resolves to the process's own /proc/pid directory. + ProcSelf = Proc + "self/" + // ProcSelfExe is a symbolic link to program pathname. + ProcSelfExe = ProcSelf + "exe" // Sys points to a virtual kernel file system exposing discovered devices // and other functionality. Sys = "/sys/" |
