From 4e856438656ea0a1b30d52975f6b5415568df9a8 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 1 Aug 2025 04:04:36 +0900 Subject: container: implement autoroot as setup op This code is useful beyond just pd behaviour, and implementing it this way also reduces IPC overhead. Signed-off-by: Ophestra --- container/init.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'container/init.go') diff --git a/container/init.go b/container/init.go index d4fce6e6..8b178d8c 100644 --- a/container/init.go +++ b/container/init.go @@ -121,6 +121,10 @@ func Init(prepare func(prefix string), setVerbose func(verbose bool)) { log.Fatalf("cannot make / rslave: %v", err) } + /* early is called right before pivot_root into intermediate root; + this step is mostly for gathering information that would otherwise be difficult to obtain + via library functions after pivot_root, and implementations are expected to avoid changing + the state of the mount namespace */ for i, op := range *params.Ops { if op == nil { log.Fatalf("invalid op %d", i) @@ -159,6 +163,10 @@ func Init(prepare func(prefix string), setVerbose func(verbose bool)) { log.Fatalf("%v", err) } + /* apply is called right after pivot_root and entering the new root; + this step sets up the container filesystem, and implementations are expected to keep the host root + and sysroot mount points intact but otherwise can do whatever they need to; + chdir is allowed but discouraged */ for i, op := range *params.Ops { // ops already checked during early setup msg.Verbosef("%s %s", op.prefix(), op) -- cgit v1.3.1