[OE-core] [PATCH 0/1] rpm_4.14.0: clamp timestamps

Juro Bystricky juro.bystricky at intel.com
Tue Jan 2 23:16:12 UTC 2018


The recipe for RPM has been upgraded to version 4.14.0.
This version introduced a new macro "clamp_mtime_to_source_date_epoch".
The macro allows the RPM packages to set buildtime and mtime of files to
values as specified by SOURCE_DATE_EPOCH. This, however, is not the enabled by default:
The default setting for "clamp_mtime_to_source_date_epoch" is "0".
This patch sets the macro to "1", thus allowing clamping of the timestamps.
As the user needs to jump through some hoops to set SOURCE_DATE_EPOCH in
the environment, clamping the timestamps is very likely what the user wants.

I am aware that the macro can be set on command line.
This would involve patching the file package_rpm.bbclass, something like:

cmd = cmd + " --define 'clamp_mtime_to_source_date_epoch 1'"

However, I think a better approach was to patch the upgraded recipe for the RPM,
in order to keep package_rpm.bbclass as RPM version agnostic as possible.

I tested this patch by a simple test, adding to local.conf:

export SOURCE_DATE_EPOCH
SOURCE_DATE_EPOCH="0"
PACKAGE_CLASSES = "package_rpm package_deb"

Then I ran twice (in two different folders, same machine, different times, no SSTATE):

$ bitbake core-image-minimal

The build created 3952 target packages (RPM and Debian each).

Without this patch the binary package comparison for RPM packages was:

Same: 538
Different: 3414
Total: 3952

With the patch the results were substantially better (same numbers for RPM and Debian):

Same: 3917
Different: 35
Total: 3952

Few caveats:
You need two additional patches by Alex Kanavin:
"rpm: update to 4.14.0"
"package.bbclass: replace rpm/debugedit with dwarfsrcfiles"

The resulting numbers need to be taken with a grain of salt, as there are
addional factors that can cause different results.
I realize SOURCE_DATE_EPOCH should be determined based on source code,
instead of setting it to "0", but that is not crucial to test the patch.

Finally, RPM 4.14.0 supports yet another macro "_buildhost" which should be used
to define some kind of a "standard" buildhost name in order to improve
reproducibility. (Otherwise, I think, buildost is taken from /etc/hosts).
But that's a subject of a separate patch.


Juro Bystricky (1):
  rpm_4.14.0: clamp timestamps by default

 .../recipes-devtools/rpm/files/0001-support-sde.patch | 19 +++++++++++++++++++
 meta/recipes-devtools/rpm/rpm_4.14.0.bb               |  1 +
 2 files changed, 20 insertions(+)
 create mode 100644 meta/recipes-devtools/rpm/files/0001-support-sde.patch

-- 
2.7.4




More information about the Openembedded-core mailing list