@@ -27,21 +27,21 @@ Prepare the build environment by setting the following environment variables:
2727
2828* IMAGE_BUILD_DATE: The build date of the ` repro ` image you want to reproduce.
2929For instance, if you're aiming to reproduce the ` repro-20260331.0.508794 ` image:
30- ` export IMAGE_BUILD_DATE="20260331" `
30+ * ` export IMAGE_BUILD_DATE="20260331" `
3131* IMAGE_BUILD_NUMBER: The build number of the ` repro ` image you want to reproduce.
3232For instance, if you're aiming to reproduce the ` repro-20260331.0.508794 ` image:
33- ` export IMAGE_BUILD_NUMBER="0.508794" `
33+ * ` export IMAGE_BUILD_NUMBER="0.508794" `
3434* ARCHIVE_SNAPSHOT: The date of the Arch Linux repository archive snaphot to build
3535the image against. This is based on the ` IMAGE_BUILD_DATE ` :
36- ` export ARCHIVE_SNAPSHOT=$(date -d "${IMAGE_BUILD_DATE} -1 day" +"%Y/%m/%d") `
36+ * ` export ARCHIVE_SNAPSHOT=$(date -d "${IMAGE_BUILD_DATE} -1 day" +"%Y/%m/%d") `
3737* SOURCE_DATE_EPOCH: The value to normalize timestamps with during the build.
3838This is based on the ` IMAGE_BUILD_DATE ` :
39- ` export SOURCE_DATE_EPOCH=$(date -u -d "${IMAGE_BUILD_DATE} 00:00:00" +"%s") `
39+ * ` export SOURCE_DATE_EPOCH=$(date -u -d "${IMAGE_BUILD_DATE} 00:00:00" +"%s") `
4040
4141## Build the rootFS and generate the Dockerfile
4242
4343From a clone of the [ archlinux-docker] ( https://gitlab.archlinux.org/archlinux/archlinux-docker )
44- repository, build the rootFS with the required paramaters :
44+ repository, build the rootFS with the required parameters :
4545
4646``` bash
4747make \
@@ -66,20 +66,16 @@ file from the pipeline to the one generated during the above local build (which
6666should be the same, indicating that the rootFS has been successfully reproduced).
6767
6868Additionally, you can check differences between the ` repro.tar.zst ` tarball from
69- the pipeline and the one built during your local build with ` diffoscope ` :
70- ` diffoscope /tmp/repro.tar.zst $PWD/output/repro.tar.zst ` (where ` /tmp/repro.tar.zst `
69+ the pipeline and the one built during your local build with ` diffoscope ` :
70+ ` diffoscope /tmp/repro.tar.zst $PWD/output/repro.tar.zst ` * (where ` /tmp/repro.tar.zst `
7171is the rootFS tarball downloaded from the pipeline and ` $PWD/output/repro.tar.zst ` is
72- the rootFS tarball you just built.
72+ the rootFS tarball you just built) * .
7373This should show no difference, acting as additional indicator that the rootFS has been
7474successfully reproduced.
7575
76- If the artifacts have already expired from the
77- [ archlinux-docker pipelines] ( https://gitlab.archlinux.org/archlinux/archlinux-docker/-/pipelines )
78- artifacts, that's not a big deal. You are still able to check the reproducibility of the image itself.
79-
8076## Build the image
8177
82- You can now (re)build the image against the rootFS and Dockerfile generated in the previous step.
78+ You can now (re)build the image against the rootFS and the Dockerfile generated in the previous step.
8379To do so, build the image with the required parameters:
8480
8581``` bash
@@ -110,11 +106,15 @@ podman inspect --format '{{.Digest}}' localhost/archlinux-docker:repro-${IMAGE_B
110106
111107Both digests should be identical, indicating that the image has been successfully reproduced.
112108
113- Additionally, you can check difference between the images pulled from Docker Hub and
114- the image you built with ` diffoci ` :
115- ` diffoci diff --semantic --verbose podman://docker.io/archlinux/archlinux:repro-${IMAGE_BUILD_DATE}.${IMAGE_BUILD_NUMBER} podman://localhost/archlinux-docker:repro-${IMAGE_BUILD_DATE}.${IMAGE_BUILD_NUMBER} `
109+ Additionally, you can check difference between the image pulled from Docker Hub and
110+ the image you built locally with ` diffoci ` :
111+
112+ ``` bash
113+ diffoci diff --semantic --verbose podman://docker.io/archlinux/archlinux:repro-${IMAGE_BUILD_DATE} .${IMAGE_BUILD_NUMBER} podman://localhost/archlinux-docker:repro-${IMAGE_BUILD_DATE} .${IMAGE_BUILD_NUMBER}
114+ ```
115+
116116This should show no difference, acting as additional indicator that the image has been
117- successfully reproduced (see the following section about the ` --semantic ` flag requirement).
117+ successfully reproduced * (see the following section about the ` --semantic ` flag requirement)* .
118118
119119### Note about ` diffoci ` requiring the ` --semantic ` flag (a.k.a "non-strict" mode)
120120
@@ -126,10 +126,11 @@ with e.g. `podman tag`.
126126
127127However, the image name & tag combination is automatically reported (and updated in the case
128128of a renaming) in the image annotations / metadata and it's apparently not possible to fully overwrite
129- it during build or update it post-build in a straightforward way. This introduces unavoidable non-determinism
129+ it during build or update it post-build in a straightforward way.
130+ This introduces unavoidable non-determinism
130131in the image annotations / metadata that ` diffoci ` will report by default.
131132See for instance the following ` diffoci ` output (with the reported difference being introduced by
132- using ` podman tag ` to "rename" one of the images with the "-rebuild " suffix, in order to avoid name collision):
133+ using ` podman tag ` to "rename" one of the images with the "-orig " suffix, in order to avoid name collision):
133134
134135```
135136Event: "DescriptorMismatch" (field "Annotations")
0 commit comments