[ipxe-devel] [PATCH] reproducible timestamp
Geert Stappers
stappers at stappers.nl
Thu May 14 19:11:55 UTC 2020
On Mon, May 11, 2020 at 02:02:56PM +0000, Neil Roza wrote:
> Hello ipxe-devel,
>
> While I work on a reproducible build-id, there's no reason this patch for a
> reproducible timestamp needs to wait for it. Hence, the attached (and below
> inlined) patch diff allows a reproducible `BUILD_TIMESTAMP` when the
> following criteria are satisfied:
>
> * `git` command is available
> * the ipxe source tree is a git checkout
> * the git checkout is "clean" (no diff between working tree and index)
>
> If the aforementioned are satisfied, then the `BUILD_TIMESTAMP` is assigned
> the Unix timestamp of the HEAD commit. Otherwise, the `BUILD_TIMESTAMP` is
> assigned the Unix timestamp of "now"; i.e., heretofore legacy behavior.
>
> Inline diff follows...
Please also include a commit message.
Advice: Use `git format-patch ....`
> diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
> index 1dd14794..126a082a 100644
> --- a/src/Makefile.housekeeping
> +++ b/src/Makefile.housekeeping
> @@ -1168,9 +1168,14 @@ blib : $(BLIB)
> #
> BUILD_ID_CMD := perl -e 'printf "0x%08x", int ( rand ( 0xffffffff ) );'
>
> +# assumes first element in MAKEFILE_LIST is src/Makefile:
> +IPXE_DIR := $(abspath $(dir $(abspath $(firstword $(MAKEFILE_LIST))))/..)
> +
> # Build timestamp
> #
> -BUILD_TIMESTAMP := $(shell date +%s)
> +BUILD_TIMESTAMP := $(shell git -C $(IPXE_DIR) diff-files --quiet \
> + && git -C $(IPXE_DIR) show -s --format=%ct HEAD \
> + || date +%s)
>
> # Build version
> #
Recently wrote mcb30
|This seems like a reasonable approach, but would need to fail gracefully
|when built from something that isn't a git checkout. See the way that
|VERSIONS is handled for an example.
I found
src/Makefile:VERSIONS := $(shell git describe --tags --always --long --abbrev=1 --match "v*")
I did
cd /tmp
git describe --tags --always --long --abbrev=1 --match "v*"
I got
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
I think I haven't found what would fail gracefully
when built from a non-git-checkout.
Which way to go to get reproducable buildtimestamps in iPXE?
Regards
Geert Stappers
--
Silence is hard to parse
More information about the ipxe-devel
mailing list