mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
reproducible_builds: SOURCE_DATE_EPOCH should not be 0
A SOURCE_DATE_EPOCH of 0 might be misinterpreted by namely rpm as no SDE.
e.g.:
char *srcdate = getenv(SOURCE_DATE_EPOCH);
if (srcdate && rpmExpandNumeric(%{?clamp_mtime_to_source_date_epoch}))
Solve this by:
- providing a SOURCE_DATE_EPOCH_FALLBACK variable != 0
- changing defaults to use it
- using SOURCE_DATE_EPOCH_FALLBACK also when reading 0 out of sstate-cache
(From OE-Core rev: 9a1dde74e794362399193dc3f81c9685a83d0776)
Signed-off-by: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
e9e23ec77e
commit
7e9c2f33d4
@@ -37,10 +37,13 @@
|
|||||||
BUILD_REPRODUCIBLE_BINARIES ??= '1'
|
BUILD_REPRODUCIBLE_BINARIES ??= '1'
|
||||||
inherit ${@oe.utils.ifelse(d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1', 'reproducible_build_simple', '')}
|
inherit ${@oe.utils.ifelse(d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1', 'reproducible_build_simple', '')}
|
||||||
|
|
||||||
SDE_DIR ="${WORKDIR}/source-date-epoch"
|
SDE_DIR = "${WORKDIR}/source-date-epoch"
|
||||||
SDE_FILE = "${SDE_DIR}/__source_date_epoch.txt"
|
SDE_FILE = "${SDE_DIR}/__source_date_epoch.txt"
|
||||||
SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
|
SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
|
||||||
|
|
||||||
|
# A SOURCE_DATE_EPOCH of '0' might be misinterpreted as no SDE
|
||||||
|
export SOURCE_DATE_EPOCH_FALLBACK ??= "1302044400"
|
||||||
|
|
||||||
SSTATETASKS += "do_deploy_source_date_epoch"
|
SSTATETASKS += "do_deploy_source_date_epoch"
|
||||||
|
|
||||||
do_deploy_source_date_epoch () {
|
do_deploy_source_date_epoch () {
|
||||||
@@ -81,6 +84,10 @@ python create_source_date_epoch_stamp() {
|
|||||||
|
|
||||||
source_date_epoch = oe.reproducible.get_source_date_epoch(d, d.getVar('S'))
|
source_date_epoch = oe.reproducible.get_source_date_epoch(d, d.getVar('S'))
|
||||||
|
|
||||||
|
if source_date_epoch == 0 :
|
||||||
|
bb.debug(1, "source_date_epoch is 0, using SOURCE_DATE_EPOCH_FALLBACK instead.")
|
||||||
|
source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
|
||||||
|
|
||||||
bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
|
bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
|
||||||
bb.utils.mkdirhier(d.getVar('SDE_DIR'))
|
bb.utils.mkdirhier(d.getVar('SDE_DIR'))
|
||||||
with open(epochfile, 'w') as f:
|
with open(epochfile, 'w') as f:
|
||||||
@@ -93,15 +100,19 @@ def get_source_date_epoch_value(d):
|
|||||||
return cached
|
return cached
|
||||||
|
|
||||||
epochfile = d.getVar('SDE_FILE')
|
epochfile = d.getVar('SDE_FILE')
|
||||||
source_date_epoch = 0
|
source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
|
||||||
if os.path.isfile(epochfile):
|
if os.path.isfile(epochfile):
|
||||||
with open(epochfile, 'r') as f:
|
with open(epochfile, 'r') as f:
|
||||||
s = f.read()
|
s = f.read()
|
||||||
try:
|
try:
|
||||||
source_date_epoch = int(s)
|
source_date_epoch = int(s)
|
||||||
|
# workaround for old sstate with SDE_FILE content being 0 - use SOURCE_DATE_EPOCH_FALLBACK
|
||||||
|
if source_date_epoch == 0 :
|
||||||
|
source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
|
||||||
|
bb.warn("SOURCE_DATE_EPOCH value from sstate '%s' is deprecated/invalid. Reverting to SOURCE_DATE_EPOCH_FALLBACK '%s'" % (s, source_date_epoch))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
bb.warn("SOURCE_DATE_EPOCH value '%s' is invalid. Reverting to 0" % s)
|
bb.warn("SOURCE_DATE_EPOCH value '%s' is invalid. Reverting to SOURCE_DATE_EPOCH_FALLBACK" % s)
|
||||||
source_date_epoch = 0
|
source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
|
||||||
bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
|
bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
|
||||||
else:
|
else:
|
||||||
bb.debug(1, "Cannot find %s. SOURCE_DATE_EPOCH will default to %d" % (epochfile, source_date_epoch))
|
bb.debug(1, "Cannot find %s. SOURCE_DATE_EPOCH will default to %d" % (epochfile, source_date_epoch))
|
||||||
|
|||||||
Reference in New Issue
Block a user