Re: [Reproducible-builds] [U-Boot] [PATCH] build: create time and date independent binary

2015-07-20 Thread Heiko Schocher

Hello Vagrant,

Am 19.07.2015 um 15:14 schrieb Vagrant Cascadian:

On 2015-07-19, Holger Levsen wrote:

All this said, if you send me patches, I will probably deploy them as I'm
very curious and more reproducibility efforts are good :-) We can can
always decide to remove or move them later.


I wish to make all contributions upstream. What would really help at
first would be to have all targets built regularly to see where work is
needed. This is where I think the Debian infrastructure could help, in a
similar way as what was started for Coreboot.


FWIW, I was planning on including this patch to u-boot in the next
upload to Debian:

   
https://anonscm.debian.org/cgit/collab-maint/u-boot.git/tree/debian/patches/use-date-from-debian-changelog.patch?h=experimental-2015.07

I *think* that actually makes u-boot build reproducibly with Debian's
reproducible builds toolchain when SOURCE_DATE_EPOCH is set, but I
haven't tested it fully. I might have missed some other sources of
non-determinism...


Hoping to get some armhf buildd nodes up an running soonish... although
it should also be buildable with the cross-toolchains, if the
reproducible buildds coulld be made to support that.


Did you see my v2 patch [1] for u-boot?

It also builds now u-boot images created with mkimage reproducible ...

If I interpret your patch from above correct, you add with
SOURCE_DATE_EPOCH a specific fix timestamp?

I think, this could be included to my approach too ...

If SOURCE_DATE_EPOCH is defined, use it, fi not defined
define U_BOOT_DATE, U_BOOT_TIME and U_BOOT_TZ
with my default settings from [1] ...

All only if CONFIG_SYS_EXACT_BINARY is set in the u-boot
config of course ...

What do you think?

bye,
Heiko
[1] http://patchwork.ozlabs.org/patch/487530/
--
DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds


Re: [Reproducible-builds] [PATCH] Reproducible U-Boot build support, using SOURCE_DATE_EPOCH

2015-07-20 Thread Heiko Schocher

Hello Paul,

Am 20.07.2015 um 10:06 schrieb Paul Kocialkowski:

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!


I am just on the jump into my holidays, so I have not yet the time
to test it ... I want to try it for all builds with the scripts
I posted with my v2 ... but a first fast look into your patch looks
nice, if it works, it is ok with me ... I am back aprox. july 5th.

maybe a README entry would be fine ;-)

Thanks!

bye,
Heiko


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 cont...@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);




--
DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Re: [Reproducible-builds] [PATCH] Reproducible U-Boot build support, using SOURCE_DATE_EPOCH

2015-07-20 Thread Heiko Schocher

Hello Paul,

Am 20.07.2015 um 15:30 schrieb Paul Kocialkowski:

I am just on the jump into my holidays, so I have not yet the time
to test it ... I want to try it for all builds with the scripts
I posted with my v2 ... but a first fast look into your patch looks
nice, if it works, it is ok with me ... I am back aprox. july 5th.


Okay, maybe I'll have a go at your scripts then! The idea to coordinate


Uh.. I am just a script beginner, they are not perfect ...

Maybe this can be done/added at travis.org ?
See u-boot builds there:
https://travis-ci.org/u-boot/u-boot/


with Debian developers would be to use their infrastructure to
automatically test as many u-boot targets as possible in an automated
and periodical manner (e.g. once a month), so that we can easily spot
which target is broken or which commit introduced a regression.


This sounds good ... feel free to trigger me, if I can help.

bye,
Heiko



maybe a README entry would be fine ;-)


Good point, that makes sense. I'll craft that in v2. I'll just wait for
some more feedback before sending a new version.

Thanks!


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 cont...@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);








--
DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds