The archiver doesn't support using multiconfig sharing the same TMPDIR.
When in the multiconfig and using the same TMPDIR: the two machines can make
the same copy at the same time to the same destination, which will not work.

This issiue can be replicated with meta-ti layer:
|# use a multiconfig machine
|MACHINE = "am64xx-evm"
|# archive sources for target recipes in conf/local.conf
|INHERIT += "archiver"
|COPYLEFT_RECIPE_TYPES = "target"
|ARCHIVER_MODE[src] = "original"
|ARCHIVER_MODE[diff] = "1"
|# and run bitbake with:
|bitbake mc:k3r5:gcc-source-11.2.0 gcc-source-11.2.0 -c do_unpack_and_patch -f

Fixes the following:
|ERROR: mc:k3r5:gcc-source-11.2.0-11.2.0-r0 do_unpack_and_patch: Error 
executing a python function in exec_func_python() autogenerated:
|
|The stack trace of python calls that resulted in this exception/failure was:
|File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
|     0001:
| *** 0002:do_unpack_and_patch(d)
|     0003:
|File: 
'/build/conf/../../layers/openembedded-core/meta/classes/archiver.bbclass', 
lineno: 489, function: do_unpack_and_patch
|     0485:    # Save the original source for creating the patches
|     0486:    if d.getVarFlag('ARCHIVER_MODE', 'diff') == '1':
|     0487:        src = d.getVar('S').rstrip('/')
|     0488:        src_orig = '%s.orig' % src
| *** 0489:        oe.path.copytree(src, src_orig)
|     0490:
|     0491:    if bb.data.inherits_class('dos2unix', d):
|     0492:        bb.build.exec_func('do_convert_crlf_to_lf', d)
|     0493:
|File: '/build/conf/../../layers/openembedded-core/meta/lib/oe/path.py', 
lineno: 94, function: copytree
|     0090:    # This way we also preserve hardlinks between files in the tree.
|     0091:
|     0092:    bb.utils.mkdirhier(dst)
|     0093:    cmd = "tar --xattrs --xattrs-include='*' -cf - -S -C %s -p . | 
tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dst)
| *** 0094:    subprocess.check_output(cmd, shell=True, 
stderr=subprocess.STDOUT)
|     0095:
|     0096:def copyhardlinktree(src, dst):
|     0097:    """Make a tree of hard links when possible, otherwise copy."""
|     0098:    bb.utils.mkdirhier(dst)
|File: '/usr/lib/python3.10/subprocess.py', lineno: 420, function: check_output
|     0416:        else:
|     0417:            empty = b''
|     0418:        kwargs['input'] = empty
|     0419:
| *** 0420:    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
|     0421:               **kwargs).stdout
|     0422:
|     0423:
|     0424:class CompletedProcess(object):
|File: '/usr/lib/python3.10/subprocess.py', lineno: 524, function: run
|     0520:            # We don't call process.wait() as .__exit__ does that 
for us.
|     0521:            raise
|     0522:        retcode = process.poll()
|     0523:        if check and retcode:
| *** 0524:            raise CalledProcessError(retcode, process.args,
|     0525:                                     output=stdout, stderr=stderr)
|     0526:    return CompletedProcess(process.args, retcode, stdout, stderr)
|     0527:
|     0528:
|Exception: subprocess.CalledProcessError: Command 'tar --xattrs 
--xattrs-include='*' -cf - -S -C 
/build/tmp-lmp/work-shared/gcc-11.2.0-r0/gcc-11.2.0 -p . | tar --xattrs 
--xattrs-include='*' |-xf - -C 
/build/tmp-lmp/work-shared/gcc-11.2.0-r0/gcc-11.2.0.orig' returned non-zero 
exit status 2.
|
|Subprocess output:
|tar: ./gcc/config/moxie/predicates.md: file changed as we read it
|tar: ./patches: Cannot stat: No such file or directory
|tar: Exiting with failure status due to previous errors
|
|ERROR: Logfile of failure stored in: 
/build/tmp-lmp/work-shared/gcc-11.2.0-r0/temp/log.do_unpack_and_patch.291906
|ERROR: Task 
(mc:k3r5:/build/conf/../../layers/openembedded-core/meta/recipes-devtools/gcc/gcc-source_11.2.bb:do_unpack_and_patch)
 failed with exit code '1'

Signed-off-by: Jose Quaresma <jose.quare...@foundries.io>
---

 v2: replace "bb.error" with "bb.fatal"
 v3: instead of failing make it more resilient

 meta/classes/archiver.bbclass | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index c19c770d11..b1d7aa0247 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -485,7 +485,8 @@ python do_unpack_and_patch() {
     # Save the original source for creating the patches
     if d.getVarFlag('ARCHIVER_MODE', 'diff') == '1':
         src = d.getVar('S').rstrip('/')
-        src_orig = '%s.orig' % src
+        # append machine name to avoid races in multiconfig when using the 
same TMPDIR
+        src_orig = '%s.orig.%s' % (src, d.getVar('MACHINE'))
         oe.path.copytree(src, src_orig)
 
     if bb.data.inherits_class('dos2unix', d):
-- 
2.36.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#166784): 
https://lists.openembedded.org/g/openembedded-core/message/166784
Mute This Topic: https://lists.openembedded.org/mt/91650171/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to