From: Paul Kocialkowski <contact@paulk.fr>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Date: Mon, 20 Jul 2015 10:06:41 +0200 [thread overview]
Message-ID: <1437379601.2338.5.camel@aldrin> (raw)
In-Reply-To: <1437379261-21163-1-git-send-email-contact@paulk.fr>
Le lundi 20 juillet 2015 ? 10:01 +0200, Paul Kocialkowski a ?crit :
> In order to achieve reproducible builds in U-Boot, timestamps that are defined
> at build-time have to be somewhat eliminated. The SOURCE_DATE_EPOCH environment
> variable allows setting a fixed value for those timestamps.
>
> Simply by setting SOURCE_DATE_EPOCH to a fixed value, a number of targets can be
> built reproducibly. This is the case for e.g. sunxi devices.
>
> However, some other devices might need some more tweaks, especially regarding
> the image generation tools.
Lunar, since you have contributed to this patch, feel free to add your
Signed-Off-By line here before it's merged!
Heiko, since this is based on your original patch, feel free to do the
same!
It would be nice to have this tested on as many boards as possible to
spot other areas that make the binaries not reproducible. However, I
doubt this patch will evolve much and other fixes should be sent in
subsequent patches.
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
> Makefile | 7 ++++---
> tools/default_image.c | 21 ++++++++++++++++++++-
> 2 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 37cc4c3..71aeac7 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1231,9 +1231,10 @@ define filechk_version.h
> endef
>
> define filechk_timestamp.h
> - (LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
> - LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
> - LC_ALL=C date +'#define U_BOOT_TZ "%z"')
> + (SOURCE_DATE="$${SOURCE_DATE_EPOCH:+@$$SOURCE_DATE_EPOCH}"; \
> + LC_ALL=C date -u -d "$${SOURCE_DATE:-now}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
> + LC_ALL=C date -u -d "$${SOURCE_DATE:-now}" +'#define U_BOOT_TIME "%T"'; \
> + LC_ALL=C date -u -d "$${SOURCE_DATE:-now}" +'#define U_BOOT_TZ "%z"' )
> endef
>
> $(version_h): include/config/uboot.release FORCE
> diff --git a/tools/default_image.c b/tools/default_image.c
> index cf5c0d4..18940af 100644
> --- a/tools/default_image.c
> +++ b/tools/default_image.c
> @@ -88,6 +88,9 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
> struct image_tool_params *params)
> {
> uint32_t checksum;
> + char *source_date_epoch;
> + struct tm *time_universal;
> + time_t time;
>
> image_header_t * hdr = (image_header_t *)ptr;
>
> @@ -96,9 +99,25 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
> sizeof(image_header_t)),
> sbuf->st_size - sizeof(image_header_t));
>
> + source_date_epoch = getenv("SOURCE_DATE_EPOCH");
> + if (source_date_epoch != NULL) {
> + time = (time_t) strtol(source_date_epoch, NULL, 10);
> +
> + time_universal = gmtime(&time);
> + if (time_universal == NULL) {
> + fprintf(stderr, "%s: SOURCE_DATE_EPOCH is not valid\n",
> + __func__);
> + time = 0;
> + } else {
> + time = mktime(time_universal);
> + }
> + } else {
> + time = sbuf->st_mtime;
> + }
> +
> /* Build new header */
> image_set_magic(hdr, IH_MAGIC);
> - image_set_time(hdr, sbuf->st_mtime);
> + image_set_time(hdr, time);
> image_set_size(hdr, sbuf->st_size - sizeof(image_header_t));
> image_set_load(hdr, params->addr);
> image_set_ep(hdr, params->ep);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150720/2b9bda00/attachment.sig>
next prev parent reply other threads:[~2015-07-20 8:06 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-20 8:01 [U-Boot] [PATCH] Reproducible U-Boot build support, using SOURCE_DATE_EPOCH Paul Kocialkowski
2015-07-20 8:06 ` Paul Kocialkowski [this message]
2015-07-20 11:21 ` Heiko Schocher
2015-07-20 13:30 ` Paul Kocialkowski
2015-07-20 15:13 ` Heiko Schocher
2015-07-21 16:20 ` Paul Kocialkowski
2015-07-27 17:36 ` Paul Kocialkowski
2015-07-20 14:45 ` Vagrant Cascadian
2015-07-21 16:18 ` Paul Kocialkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1437379601.2338.5.camel@aldrin \
--to=contact@paulk.fr \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox