From ff4944ce5a29ffc2e8a0b384914945625b15600b Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 22 Aug 2023 10:23:08 -0700 Subject: [PATCH] refactor: Bind stacker binary into container in SetupBuildContainerConfig Previously there were 3 individual calls to bind stacker into tools/static-stacker. This just changes that to 1 place, so after calling SetupBuildContainerConfig you can use stacker inside. Signed-off-by: Scott Moser --- pkg/stacker/bom.go | 22 ++-------------------- pkg/stacker/build.go | 28 ++++++++++++++-------------- pkg/stacker/grab.go | 13 +------------ 3 files changed, 17 insertions(+), 46 deletions(-) diff --git a/pkg/stacker/bom.go b/pkg/stacker/bom.go index c7a6e6c3..166f68bd 100644 --- a/pkg/stacker/bom.go +++ b/pkg/stacker/bom.go @@ -38,16 +38,7 @@ func BuildLayerArtifacts(sc types.StackerConfig, storage types.Storage, l types. return err } - binary, err := os.Readlink("/proc/self/exe") - if err != nil { - return err - } - - if err := c.BindMount(binary, "/stacker/tools/static-stacker", ""); err != nil { - return err - } - - cmd := []string{"/stacker/tools/static-stacker"} + cmd := []string{insideStaticStacker} if sc.Debug { cmd = append(cmd, "--debug") @@ -92,16 +83,7 @@ func VerifyLayerArtifacts(sc types.StackerConfig, storage types.Storage, l types return err } - binary, err := os.Readlink("/proc/self/exe") - if err != nil { - return err - } - - if err := c.BindMount(binary, "/stacker/tools/static-stacker", ""); err != nil { - return err - } - - cmd := []string{"/stacker/tools/static-stacker"} + cmd := []string{insideStaticStacker} if sc.Debug { cmd = append(cmd, "--debug") diff --git a/pkg/stacker/build.go b/pkg/stacker/build.go index 2ba4f7a2..fed86872 100644 --- a/pkg/stacker/build.go +++ b/pkg/stacker/build.go @@ -21,7 +21,10 @@ import ( "stackerbuild.io/stacker/pkg/types" ) -const DefaultShell = "/bin/sh" +const ( + DefaultShell = "/bin/sh" + insideStaticStacker = "/stacker/tools/static-stacker" +) type BuildArgs struct { Config types.StackerConfig @@ -687,6 +690,16 @@ func SetupBuildContainerConfig(config types.StackerConfig, storage types.Storage return err } + binary, err := os.Readlink("/proc/self/exe") + if err != nil { + return err + } + + // make stacker binary available inside container + if err := c.BindMount(binary, insideStaticStacker, ""); err != nil { + return err + } + rootfs, err := storage.GetLXCRootfsConfig(name) if err != nil { return err @@ -749,19 +762,6 @@ func SetupLayerConfig(config types.StackerConfig, c *container.Container, l type } else { log.Debugf("not bind mounting %s into container", artifactsDir) } - - // make stacker also available to run the internal bom cmds - binary, err := os.Readlink("/proc/self/exe") - if err != nil { - return errors.Wrapf(err, "couldn't find executable for bind mount") - } - - err = c.BindMount(binary, "/stacker/tools/static-stacker", "") - if err != nil { - return err - } - - log.Debugf("bind mounting %s into container", binary) } for k, v := range env { diff --git a/pkg/stacker/grab.go b/pkg/stacker/grab.go index d7fff91b..33974cf1 100644 --- a/pkg/stacker/grab.go +++ b/pkg/stacker/grab.go @@ -6,7 +6,6 @@ import ( "os" "path" - "github.com/pkg/errors" "stackerbuild.io/stacker/pkg/container" "stackerbuild.io/stacker/pkg/types" ) @@ -26,22 +25,12 @@ func Grab(sc types.StackerConfig, storage types.Storage, name string, source str } defer os.Remove(path.Join(sc.RootFSDir, name, "rootfs", "stacker")) - binary, err := os.Readlink("/proc/self/exe") - if err != nil { - return errors.Wrapf(err, "couldn't find executable for bind mount") - } - - err = c.BindMount(binary, "/stacker/tools/static-stacker", "") - if err != nil { - return err - } - err = SetupBuildContainerConfig(sc, storage, c, name) if err != nil { return err } - bcmd := []string{"/stacker/tools/static-stacker", "internal-go"} + bcmd := []string{insideStaticStacker, "internal-go"} err = c.Execute(append(bcmd, "cp", source, "/stacker/"+path.Base(source)), nil) if err != nil { return err