Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
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.
--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)
Makefile +4 -3
@@ -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
tools/default_image.c +20 -1
@@ -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);
Signature · 1 line
1.9.1
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Le lundi 20 juillet 2015 ? 10:01 +0200, Paul Kocialkowski a ?crit :
Quoted 9 lines
In order to achieve reproducible builds in U-Boot, timestamps that are defined at build-time have to be somewhat eliminated. The
SOURCE_DATE_EPOCHenvironment variable allows setting a fixed value for those timestamps.Simply by setting
SOURCE_DATE_EPOCHto 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.
Quoted 55 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +16
-0@@ -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 {
tools/default_image.c static void image_set_header(void *ptr, struct stat *sbuf, int ifd, · line 123
Quoted 10 lines
tools/default_image.c +4
-1+ 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>
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Hello Paul,
Am 20.07.2015 um 10:06 schrieb Paul Kocialkowski:
Quoted 8 lines
Le lundi 20 juillet 2015 ? 10:01 +0200, Paul Kocialkowski a ?crit :
Quoted 7 lines
In order to achieve reproducible builds in U-Boot, timestamps that are defined at build-time have to be somewhat eliminated. The
SOURCE_DATE_EPOCHenvironment variable allows setting a fixed value for those timestamps.Simply by setting
SOURCE_DATE_EPOCHto a fixed value, a number of targets can be built reproducibly. This is the case for e.g. sunxi devices.
Quoted 8 lines
Quoted 2 lines
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
Quoted 72 lines
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.
Quoted 65 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +20
-1@@ -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);
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Quoted 4 lines
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 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.
Quoted 1 line
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!
Quoted 63 lines
Quoted 63 lines
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.
Quoted 58 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +19
-0@@ -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; + } +
Quoted 9 lines
Quoted 8 lines
tools/default_image.c static void image_set_header(void *ptr, struct stat *sbuf, int ifd, · line 123
Quoted 7 lines
tools/default_image.c +1
-1/* 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/4c3ba6fa/attachment.sig>
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Hello Paul,
Am 20.07.2015 um 15:30 schrieb Paul Kocialkowski:
Quoted 6 lines
Quoted 4 lines
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/
Quoted 4 lines
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
Quoted 81 lines
Quoted 2 lines
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!
Quoted 72 lines
Quoted 71 lines
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.
Quoted 65 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +20
-1@@ -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);
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Le lundi 20 juillet 2015 ? 17:13 +0200, Heiko Schocher a ?crit :
Quoted 11 lines
Hello Paul,
Am 20.07.2015 um 15:30 schrieb Paul Kocialkowski:
Quoted 6 lines
Quoted 4 lines
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 ...
I'll let you know when I have some time to do the testing properly then!
Quoted 3 lines
Maybe this can be done/added at travis.org ?
See u-boot builds there:
https://travis-ci.org/u-boot/u-boot/
I don't like the idea of using a third-party's architecture for that. This is service as a software substitute: see
http://www.gnu.org/philosophy/who-does-that-server-really-serve.html
Quoted 5 lines
Quoted 4 lines
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.
Quoted 86 lines
This sounds good ... feel free to trigger me, if I can help.
bye,
HeikoQuoted 81 lines
Quoted 2 lines
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!
Quoted 72 lines
Quoted 71 lines
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.
Quoted 65 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +20
-1@@ -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/20150721/aa506d01/attachment.sig>
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
In reply to Heiko SchocherLe lundi 20 juillet 2015 ? 17:13 +0200, Heiko Schocher a ?crit :
Quoted 11 lines
Hello Paul,
Am 20.07.2015 um 15:30 schrieb Paul Kocialkowski:
Quoted 6 lines
Quoted 4 lines
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 ...
I got around testing your scripts with the latest version of my patch yesterday. The scripts look good, they get the job done.
I tried building on all the supported ARM boards (grep CONFIG_ARM in configs/) and all boards appear to be reproducible.
However, it turns out that when build with the -C and O= arguments (to indicate the source directory and to output objects in a separate directory), the binaries differed. However, running the second call of your scripts after moving the directory didn't result in a change.
I have yet to figure out exactly what the differences are and what they are caused by.
Quoted 9 lines
Maybe this can be done/added at travis.org ?
See u-boot builds there:
https://travis-ci.org/u-boot/u-boot/Quoted 4 lines
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.
Quoted 86 lines
This sounds good ... feel free to trigger me, if I can help.
bye,
HeikoQuoted 81 lines
Quoted 2 lines
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!
Quoted 72 lines
Quoted 71 lines
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.
Quoted 65 lines
Signed-off-by Paul Kocialkowski <[email protected]>--- Makefile | 7 ++++--- tools/default_image.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-)Makefile +4
-3@@ -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 FORCEtools/default_image.c +20
-1@@ -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/20150727/1bd39fb8/attachment.sig>
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
In reply to Paul KocialkowskiQuoted 3 lines · Paul Kocialkowski
In order to achieve reproducible builds in U-Boot, timestamps that are defined at build-time have to be somewhat eliminated. The
SOURCE_DATE_EPOCHenvironment variable allows setting a fixed value for those timestamps.
...
Quoted 8 lines
Makefile +0
-0@@ -1231,9 +1231,10 @@ define filechk_version.h endef define filechk_timestamp.h
Makefile define filechk_version.h · line 1240
Quoted 10 lines
Makefile +4
-3- (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
This does effectively hard-code U_BOOT_TZ to UTC; may as well not call date for setting U_BOOT_TZ. Or conditionally set it to UTC only when SOURCE_DATE_EPOCH is set?
Any reason not to use the longhand options for date, e.g. --utc and --date ? They're more readable; are they less portable?
live well,
vagrant
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150720/5d306ea6/attachment.sig>
PATCH 1/1 Reproducible U-Boot build support, using SOURCE_DATE_EPOCH
Le lundi 20 juillet 2015 ? 07:45 -0700, Vagrant Cascadian a ?crit :
Quoted 22 lines · Paul Kocialkowski
Quoted 3 lines
In order to achieve reproducible builds in U-Boot, timestamps that are defined at build-time have to be somewhat eliminated. The
SOURCE_DATE_EPOCHenvironment variable allows setting a fixed value for those timestamps....
Quoted 17 lines
Makefile +4
-3@@ -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
Quoted 5 lines
Makefile define filechk_version.h · line 1240
Quoted 1 line
Makefile +0
-0$(version_h): include/config/uboot.release FORCEThis does effectively hard-code
U_BOOT_TZto UTC; may as well not call date for settingU_BOOT_TZ. Or conditionally set it to UTC only whenSOURCE_DATE_EPOCHis set?
That's true, but I like how consistent those commands look. Either way, it's not a dramatic overhead, but I agree it's slightly confusing. If you really think it's worth it, I could simply hardcode UTC in v2. Just let me know!
I'd rather keep everything in one call (doing UTC only when SOURCE_DATE_EPOCH is set looks overkill).
Quoted 2 lines
Any reason not to use the longhand options for date, e.g. --utc and --date ? They're more readable; are they less portable?
I don't think they are, but the short options look fine to me. Note that out of those lines, two still fit in a 80 chars column. Adding long options would make readability harder in that regard.
As far as I'm concerned, it's fine as it is, but if you really think it would be a worthwhile addition to use the long options, let me know. Please do check that it doesn't break portability, too.
Thanks for the review!
Signature · 16 lines
Paul Kocialkowski, Replicant developer Replicant is a fully free Android distribution running on several devices, a free software mobile operating system putting the emphasis on freedom and privacy/security. Website: http://www.replicant.us/ Blog: http://blog.replicant.us/ Wiki/tracker/forums: http://redmine.replicant.us/ -------------- 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/20150721/1d0bf2bf/attachment.sig>