diff --git a/pkg/api/core/image/create.go b/pkg/api/core/image/create.go index 5e331669..38495ad8 100644 --- a/pkg/api/core/image/create.go +++ b/pkg/api/core/image/create.go @@ -27,7 +27,7 @@ import ( "github.com/pkg/errors" ) -func imageFromTar(imagename string, r io.Reader) (name.Reference, v1.Image, error) { +func imageFromTar(imagename, architecture, OS string, r io.Reader) (name.Reference, v1.Image, error) { newRef, err := name.ParseReference(imagename) if err != nil { return nil, nil, err @@ -38,7 +38,20 @@ func imageFromTar(imagename string, r io.Reader) (name.Reference, v1.Image, erro return nil, nil, err } - img, err := mutate.Append(empty.Image, mutate.Addendum{ + baseImage := empty.Image + cfg, err := baseImage.ConfigFile() + if err != nil { + return nil, nil, err + } + + cfg.Architecture = architecture + cfg.OS = OS + + baseImage, err = mutate.ConfigFile(baseImage, cfg) + if err != nil { + return nil, nil, err + } + img, err := mutate.Append(baseImage, mutate.Addendum{ Layer: layer, History: v1.History{ CreatedBy: "luet", @@ -53,25 +66,25 @@ func imageFromTar(imagename string, r io.Reader) (name.Reference, v1.Image, erro } // CreateTar a imagetarball from a standard tarball -func CreateTar(srctar, dstimageTar, imagename string) error { +func CreateTar(srctar, dstimageTar, imagename, architecture, OS string) error { f, err := os.Open(srctar) if err != nil { return errors.Wrap(err, "Cannot open "+srctar) } defer f.Close() - return CreateTarReader(f, dstimageTar, imagename) + return CreateTarReader(f, dstimageTar, imagename, architecture, OS) } // CreateTarReader a imagetarball from a standard tarball -func CreateTarReader(r io.Reader, dstimageTar, imagename string) error { +func CreateTarReader(r io.Reader, dstimageTar, imagename, architecture, OS string) error { dstFile, err := os.Create(dstimageTar) if err != nil { return errors.Wrap(err, "Cannot create "+dstimageTar) } defer dstFile.Close() - newRef, img, err := imageFromTar(imagename, r) + newRef, img, err := imageFromTar(imagename, architecture, OS, r) if err != nil { return err } diff --git a/pkg/api/core/image/create_test.go b/pkg/api/core/image/create_test.go index ab36347e..5aea7a50 100644 --- a/pkg/api/core/image/create_test.go +++ b/pkg/api/core/image/create_test.go @@ -18,6 +18,7 @@ package image_test import ( "os" "path/filepath" + "runtime" . "github.com/mudler/luet/pkg/api/core/image" "github.com/mudler/luet/pkg/api/core/types" @@ -58,7 +59,7 @@ var _ = Describe("Create", func() { a.Compress(dir, 1) // Unfortunately there is no other easy way to test this - err = CreateTar(srcTar.Name(), dst.Name(), "testimage") + err = CreateTar(srcTar.Name(), dst.Name(), "testimage", runtime.GOARCH, runtime.GOOS) Expect(err).ToNot(HaveOccurred()) b.LoadImage(dst.Name()) diff --git a/pkg/api/core/types/artifact/artifact.go b/pkg/api/core/types/artifact/artifact.go index 03886a18..f6d99f57 100644 --- a/pkg/api/core/types/artifact/artifact.go +++ b/pkg/api/core/types/artifact/artifact.go @@ -27,6 +27,7 @@ import ( "os" "path" "path/filepath" + "runtime" "github.com/docker/docker/pkg/pools" v1 "github.com/google/go-containerregistry/pkg/v1" @@ -227,7 +228,7 @@ func (a *PackageArtifact) GenerateFinalImage(ctx *types.Context, imageName strin } defer os.RemoveAll(tempimage.Name()) // clean up - if err := image.CreateTarReader(decompressed, tempimage.Name(), imageName); err != nil { + if err := image.CreateTarReader(decompressed, tempimage.Name(), imageName, runtime.GOARCH, runtime.GOOS); err != nil { return errors.Wrap(err, "could not create image from tar") }