From: Joshua Watt <jpewhacker@gmail.com>
To: Alex Kiernan <alex.kiernan@gmail.com>
Cc: Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH v2] classes/reproducible_build: Move SDE deploy to another directory
Date: Fri, 27 Sep 2019 13:50:48 -0500 [thread overview]
Message-ID: <85ca2995-11fe-99e1-e2fa-866110a9f6b8@gmail.com> (raw)
In-Reply-To: <CAO5Uq5TPxmXq0NWQixMLKmH9goUCXm8Ov=BaB8S_9Pmy8DPCYg@mail.gmail.com>
On 9/27/19 1:03 PM, Alex Kiernan wrote:
> On Thu, Sep 26, 2019 at 6:58 PM Joshua Watt <jpewhacker@gmail.com> wrote:
>> The deployment of the source date epoch file had a race condition where
>> any task attempting to read from the file would race with creation of
>> the sstate archive for the do_deploy_source_date_epoch task. The
>> creation of the sstate archive requires moving the directory to a
>> temporary location, then moving it back. This means that the file
>> disappears for a short period of time, which will cause a failure if any
>> other task is running and trying to open the file to get the current
>> source date epoch.
>>
>> The solution is to copy the source date epoch file to a separate
>> directory when deploying so the file never disappears. When the file is
>> restored from sstate, it is moved to the correct location after being
>> extracted.
>>
>> [YOCTO #13501]
>>
>> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
>> ---
>> meta/classes/reproducible_build.bbclass | 12 ++++++++++--
>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/meta/classes/reproducible_build.bbclass b/meta/classes/reproducible_build.bbclass
>> index 8788ad7145c..99b749a9ee2 100644
>> --- a/meta/classes/reproducible_build.bbclass
>> +++ b/meta/classes/reproducible_build.bbclass
>> @@ -39,19 +39,27 @@ inherit ${@oe.utils.ifelse(d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1', 'repr
>>
>> SDE_DIR ="${WORKDIR}/source-date-epoch"
>> SDE_FILE = "${SDE_DIR}/__source_date_epoch.txt"
>> +SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
>>
>> SSTATETASKS += "do_deploy_source_date_epoch"
>>
>> do_deploy_source_date_epoch () {
>> echo "Deploying SDE to ${SDE_DIR}."
>> + mkdir -p ${SDE_DEPLOYDIR}
>> + if [ -e ${SDE_FILE} ]; then
>> + cp -p ${SDE_FILE} ${SDE_DEPLOYDIR}/__source_date_epoch.txt
>> + fi
>> }
>>
>> python do_deploy_source_date_epoch_setscene () {
>> sstate_setscene(d)
>> + sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'), '__source_date_epoch.txt')
>> + if os.path.exists(sde_file):
>> + os.rename(sde_file, d.getVar('SDE_FILE'))
>> }
>>
>> -do_deploy_source_date_epoch[dirs] = "${SDE_DIR}"
>> -do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DIR}"
>> +do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
>> +do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DEPLOYDIR}"
>> addtask do_deploy_source_date_epoch_setscene
>> addtask do_deploy_source_date_epoch before do_configure after do_patch
>>
> This seems to have broken builds with reproducible builds enabled and
> sstate downloaded from a mirror - I just get a blizzard of:
>
> ERROR: Logfile of failure stored in:
> /home/akiernan/nanohub/build/tmp/work/x86_64-linux/automake-native/1.16.1-r0/temp/log.do_deploy_source_date_epoch_setscene.113823
> WARNING: Setscene task
> (virtual:native:/home/akiernan/nanohub/build/../poky/meta/recipes-devtools/automake/automake_1.16.1.bb:do_deploy_source_date_epoch_setscene)
> failed with exit code '1' - real task will be run instead
> ERROR: autoconf-native-2.69-r11 do_deploy_source_date_epoch_setscene:
> Error executing a python function in exec_python_func() autogenerated:
>
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
> 0001:
> *** 0002:do_deploy_source_date_epoch_setscene(d)
> 0003:
> File: '/home/akiernan/nanohub/build/../poky/meta/classes/reproducible_build.bbclass',
> lineno: 58, function: do_deploy_source_date_epoch_setscene
> 0054:python do_deploy_source_date_epoch_setscene () {
> 0055: sstate_setscene(d)
> 0056: sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'),
> '__source_date_epoch.txt')
> 0057: if os.path.exists(sde_file):
> *** 0058: os.rename(sde_file, d.getVar('SDE_FILE'))
> 0059:}
> 0060:
> 0061:do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
> 0062:do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DEPLOYDIR}"
> Exception: FileNotFoundError: [Errno 2] No such file or directory:
> '/home/akiernan/nanohub/build/tmp/work/x86_64-linux/autoconf-native/2.69-r11/deploy-source-date-epoch/__source_date_epoch.txt'
> -> '/home/akiernan/nanohub/build/tmp/work/x86_64-linux/autoconf-native/2.69-r11/source-date-epoch/__source_date_epoch.txt'
Sorry about that. It looks like destination directory isn't getting
created. You can try giving
http://git.yoctoproject.org/cgit.cgi/poky-contrib/commit/?h=jpew/hash-equivalence&id=7177bb4c4c174f0852b984b9b2d2d23de92e70cd
a try to see if it resolves the issue.
>
> ERROR: Logfile of failure stored in:
> /home/akiernan/nanohub/build/tmp/work/x86_64-linux/autoconf-native/2.69-r11/temp/log.do_deploy_source_date_epoch_setscene.113869
> WARNING: Setscene task
> (virtual:native:/home/akiernan/nanohub/build/../poky/meta/recipes-devtools/autoconf/autoconf_2.69.bb:do_deploy_source_date_epoch_setscene)
> failed with exit code '1' - real task will be run instead
> ERROR: m4-native-1.4.18-r0 do_deploy_source_date_epoch_setscene: Error
> executing a python function in exec_python_func() autogenerated:
>
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
> 0001:
> *** 0002:do_deploy_source_date_epoch_setscene(d)
> 0003:
> File: '/home/akiernan/nanohub/build/../poky/meta/classes/reproducible_build.bbclass',
> lineno: 58, function: do_deploy_source_date_epoch_setscene
> 0054:python do_deploy_source_date_epoch_setscene () {
> 0055: sstate_setscene(d)
> 0056: sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'),
> '__source_date_epoch.txt')
> 0057: if os.path.exists(sde_file):
> *** 0058: os.rename(sde_file, d.getVar('SDE_FILE'))
> 0059:}
> 0060:
> 0061:do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
> 0062:do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DEPLOYDIR}"
> Exception: FileNotFoundError: [Errno 2] No such file or directory:
> '/home/akiernan/nanohub/build/tmp/work/x86_64-linux/m4-native/1.4.18-r0/deploy-source-date-epoch/__source_date_epoch.txt'
> -> '/home/akiernan/nanohub/build/tmp/work/x86_64-linux/m4-native/1.4.18-r0/source-date-epoch/__source_date_epoch.txt'
>
> ERROR: Logfile of failure stored in:
> /home/akiernan/nanohub/build/tmp/work/x86_64-linux/m4-native/1.4.18-r0/temp/log.do_deploy_source_date_epoch_setscene.113897
>
>
next prev parent reply other threads:[~2019-09-27 18:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-16 18:21 [PATCH] classes/reproducible_build: Move SDE deploy to another directory Joshua Watt
2019-09-26 17:57 ` [PATCH v2] " Joshua Watt
2019-09-27 18:03 ` Alex Kiernan
2019-09-27 18:50 ` Joshua Watt [this message]
2019-09-27 19:48 ` Alex Kiernan
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=85ca2995-11fe-99e1-e2fa-866110a9f6b8@gmail.com \
--to=jpewhacker@gmail.com \
--cc=alex.kiernan@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
/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