elemental-toolkit/reproducible-tar.patch

49 lines
1.7 KiB
Diff

From 65c56676008c20b3ad4a286e9f69e40b8b8b45c4 Mon Sep 17 00:00:00 2001
From: "Bernhard M. Wiedemann" <bwiedemann@suse.de>
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" <bwiedemann@suse.de>
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 {