From ce0064384d782166b2b4d9277be49fd52872f34f Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 6 Jan 2026 22:19:47 +0900 Subject: internal/pkg: automatic overlay mount on root This makes it possible to use an Artifact as root without arranging for directory creation in the Artifact ahead of time. Signed-off-by: Ophestra --- internal/pkg/testdata/main.go | 64 +++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 18 deletions(-) (limited to 'internal/pkg/testdata') diff --git a/internal/pkg/testdata/main.go b/internal/pkg/testdata/main.go index 257d748f..bbf23400 100644 --- a/internal/pkg/testdata/main.go +++ b/internal/pkg/testdata/main.go @@ -9,6 +9,7 @@ import ( "os" "path" "slices" + "strings" "syscall" "hakurei.app/container/fhs" @@ -28,9 +29,14 @@ func main() { if !slices.Equal(os.Args, wantArgs) { log.Fatalf("Args: %q, want %q", os.Args, wantArgs) } - if wantEnv := []string{ - "HAKUREI_TEST=1", - }; !slices.Equal(wantEnv, os.Environ()) { + + var overlayRoot bool + wantEnv := []string{"HAKUREI_TEST=1"} + if len(os.Environ()) == 2 { + overlayRoot = true + wantEnv = []string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"} + } + if !slices.Equal(wantEnv, os.Environ()) { log.Fatalf("Environ: %q, want %q", os.Environ(), wantEnv) } const wantExec = "/opt/bin/testtool" @@ -51,11 +57,6 @@ func main() { log.Fatalf("Hostname: %q, want %q", hostname, wantHostname) } - ident := "oHuqV7p0v1Vd8IdAzjyYM8sfCS0P2LR5tfv5cb6Gbf2ZWUm8Ec-7hYPJ_qr183m7" - if hostNet { - ident = "I3T53NtN6HPAyyodHtq2B0clcsoS1nPdvCEb-Zc5K-hoqFGL2od1mftHhwG7gX1S" - } - var m *vfs.MountInfo if f, err := os.Open(fhs.Proc + "self/mountinfo"); err != nil { log.Fatalf("Open: error = %v", err) @@ -82,20 +83,47 @@ func main() { } } + const checksumEmptyDir = "MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU" + ident := "oHuqV7p0v1Vd8IdAzjyYM8sfCS0P2LR5tfv5cb6Gbf2ZWUm8Ec-7hYPJ_qr183m7" log.Println(m) - if m.Root != "/sysroot" || m.Target != "/" { - log.Fatal("unexpected root mount entry") - } next := func() { m = m.Next; log.Println(m) } - next() - if path.Base(m.Root) != "OLBgp1GsljhM2TJ-sbHjaiH9txEUvgdDTAzHv2P24donTt6_529l-9Ua0vFImLlb" { - log.Fatal("unexpected file artifact checksum") - } + if overlayRoot { + ident = "cIjP14zs5el6W_BQhufL_c0vWg-V6Z6pDpsbEa3sYtZ1381u1bKnH3N16RIrw-1S" - next() - if path.Base(m.Root) != "MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU" { - log.Fatal("unexpected artifact checksum") + if m.Root != "/" || m.Target != "/" || + m.Source != "overlay" || m.FsType != "overlay" { + log.Fatal("unexpected root mount entry") + } + var lowerdir string + for _, o := range strings.Split(m.FsOptstr, ",") { + const lowerdirKey = "lowerdir=" + if strings.HasPrefix(o, lowerdirKey) { + lowerdir = o[len(lowerdirKey):] + } + } + if path.Base(lowerdir) != checksumEmptyDir { + log.Fatal("unexpected artifact checksum") + } + + } else { + if hostNet { + ident = "I3T53NtN6HPAyyodHtq2B0clcsoS1nPdvCEb-Zc5K-hoqFGL2od1mftHhwG7gX1S" + } + + if m.Root != "/sysroot" || m.Target != "/" { + log.Fatal("unexpected root mount entry") + } + + next() + if path.Base(m.Root) != "OLBgp1GsljhM2TJ-sbHjaiH9txEUvgdDTAzHv2P24donTt6_529l-9Ua0vFImLlb" { + log.Fatal("unexpected file artifact checksum") + } + + next() + if path.Base(m.Root) != checksumEmptyDir { + log.Fatal("unexpected artifact checksum") + } } next() // testtool artifact -- cgit v1.3.1