From 65c56676008c20b3ad4a286e9f69e40b8b8b45c4 Mon Sep 17 00:00:00 2001 From: "Bernhard M. Wiedemann" Date: Mon, 2 Dec 2024 13:25:19 +0100 Subject: [PATCH 1/2] Use GNU tar to support --sort --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 7a5234ae03..ae695f63b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,9 @@ FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS elemental-bin ENV CGO_ENABLED=0 WORKDIR /src/ +# install GNU tar instead of busybox one to support --sort +RUN apk add --no-cache tar + # Add specific dirs to the image so cache is not invalidated when modifying non go files ADD go.mod . ADD go.sum . From f1e6c778c2b74b712d9f5f679bff159ae8a78268 Mon Sep 17 00:00:00 2001 From: "Bernhard M. Wiedemann" Date: Sun, 1 Dec 2024 18:17:31 +0100 Subject: [PATCH 2/2] Make tar creation deterministic for that, we sort entries, override owner+group+mtime and omit ctime+atime --- pkg/features/generate-tarballs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/features/generate-tarballs.go b/pkg/features/generate-tarballs.go index 225900970d..1c90de7f72 100644 --- a/pkg/features/generate-tarballs.go +++ b/pkg/features/generate-tarballs.go @@ -62,7 +62,7 @@ func main() { fmt.Printf("Generate %s from %s\n", output, input) - cmd := exec.Command("tar", "-C", inputDir, "-czvf", output, input) + cmd := exec.Command("tar", "--sort=name", "--mtime=@1", "--owner=0", "--group=0", "--numeric-owner", "--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime", "-C", inputDir, "-czvf", output, input) out, err := cmd.CombinedOutput() if err != nil {