Re: [OE-core] [PATCH] staging: Handle races between binaries and their libs
On Fri, 2020-02-14 at 17:01 +, Peter Kjellerstedt wrote: > Shouldn't /sbin/ be treated the same way as /bin/? I guess so, yes. I've done that. Cheers, Richard -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [OE-core] [PATCH] staging: Handle races between binaries and their libs
> -Original Message- > From: openembedded-core-boun...@lists.openembedded.org boun...@lists.openembedded.org> On Behalf Of Richard Purdie > Sent: den 14 februari 2020 14:03 > To: openembedded-core@lists.openembedded.org > Subject: [OE-core] [PATCH] staging: Handle races between binaries and > their libs > > There is a long standing issue where a binary could be installed into the > sysroot before its library dependencies. We've always argued nothing should > use the binary until its been installed by a dependency but there are issues Change "its" to "it has". > around binaries which conflict with the host system, for example patch, > python3, gzip and more. > > With the recent patch changes we've see issues like: Change "see" to "seen". > ERROR: gdb-cross-canadian-powerpc-8.3.1-r0 do_patch: Command Error: 'quilt > --quiltrc > /home/pokybuild/yocto-worker/qemuppc/build/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gdb-cross-canadian-powerpc/8.3.1-r0/recipe-sysroot-native/etc/quiltrc > push' exited with 0 Output: > Applying patch 0009-Change-order-of-CFLAGS.patch > patch: /lib64/libattr.so.1: version `ATTR_1.3' not found (required by patch) > Patch 0009-Change-order-of-CFLAGS.patch does not apply (enforce with -f) > > which is a symptom of this issue (libattr-native is a dependency of > patch-native). > > There are other ways to fix this such as disabling libattr in patch, > installing > patch to a subdirectory and requiring PATH manipulation and so on. > > We can simply fix the staging code to handle /bin/ after everything else so > lets Change "lets" to "let's". > do that and avoid all these other complications. Shouldn't /sbin/ be treated the same way as /bin/? //Peter > Signed-off-by: Richard Purdie > --- > meta/classes/staging.bbclass | 12 +++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass > index 4dd2ed01010..530e23b1853 100644 > --- a/meta/classes/staging.bbclass > +++ b/meta/classes/staging.bbclass > @@ -470,6 +470,7 @@ python extend_recipe_sysroot() { > elif os.path.lexists(depdir + "/" + c): > os.unlink(depdir + "/" + c) > > +binfiles = {} > # Now handle installs > for dep in configuredeps: > c = setscenedeps[dep][0] > @@ -562,7 +563,16 @@ python extend_recipe_sysroot() { > if l.endswith("/"): > staging_copydir(l, targetdir, dest, seendirs) > continue > -staging_copyfile(l, targetdir, dest, postinsts, seendirs) > +if "/bin/" in l: > +# defer /bin/* files until last in case they need > libs > +binfiles[l] = (targetdir, dest) > +else: > +staging_copyfile(l, targetdir, dest, postinsts, > seendirs) > + > +# Handle deferred binfiles > +for l in binfiles: > +(targetdir, dest) = binfiles[l] > +staging_copyfile(l, targetdir, dest, postinsts, seendirs) > > bb.note("Installed into sysroot: %s" % str(msg_adding)) > bb.note("Skipping as already exists in sysroot: %s" % str(msg_exists)) > -- > 2.20.1 //Peter -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [OE-core] [PATCH] staging: Handle races between binaries and their libs
On Fri, Feb 14, 2020 at 6:51 AM Richard Purdie wrote: > > On Fri, 2020-02-14 at 06:46 -0800, Khem Raj wrote: > > On Fri, Feb 14, 2020 at 5:03 AM Richard Purdie > > wrote: > > > There is a long standing issue where a binary could be installed > > > into the > > > sysroot before its library dependencies. We've always argued > > > nothing should > > > use the binary until its been installed by a dependency but there > > > are issues > > > around binaries which conflict with the host system, for example > > > patch, > > > python3, gzip and more. > > > > > > With the recent patch changes we've see issues like: > > > ERROR: gdb-cross-canadian-powerpc-8.3.1-r0 do_patch: Command Error: > > > 'quilt --quiltrc /home/pokybuild/yocto- > > > worker/qemuppc/build/build/tmp/work/x86_64-nativesdk-pokysdk- > > > linux/gdb-cross-canadian-powerpc/8.3.1-r0/recipe-sysroot- > > > native/etc/quiltrc push' exited with 0 Output: > > > Applying patch 0009-Change-order-of-CFLAGS.patch > > > patch: /lib64/libattr.so.1: version `ATTR_1.3' not found (required > > > by patch) > > > Patch 0009-Change-order-of-CFLAGS.patch does not apply (enforce > > > with -f) > > > > > > which is a symptom of this issue (libattr-native is a dependency of > > > patch-native). > > > > > > > ah so this was the problem I wondered > > Its one problem we're seeing, I'm still not sure those two other > patches of yours apply cleanly though... :/ > I have resent the patches for musl upgrade using git send-mail instead of ./scripts/send-pull-request, can you try these from mailing list ? > Cheers, > > Richard > -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [OE-core] [PATCH] staging: Handle races between binaries and their libs
On Fri, 2020-02-14 at 06:46 -0800, Khem Raj wrote: > On Fri, Feb 14, 2020 at 5:03 AM Richard Purdie > wrote: > > There is a long standing issue where a binary could be installed > > into the > > sysroot before its library dependencies. We've always argued > > nothing should > > use the binary until its been installed by a dependency but there > > are issues > > around binaries which conflict with the host system, for example > > patch, > > python3, gzip and more. > > > > With the recent patch changes we've see issues like: > > ERROR: gdb-cross-canadian-powerpc-8.3.1-r0 do_patch: Command Error: > > 'quilt --quiltrc /home/pokybuild/yocto- > > worker/qemuppc/build/build/tmp/work/x86_64-nativesdk-pokysdk- > > linux/gdb-cross-canadian-powerpc/8.3.1-r0/recipe-sysroot- > > native/etc/quiltrc push' exited with 0 Output: > > Applying patch 0009-Change-order-of-CFLAGS.patch > > patch: /lib64/libattr.so.1: version `ATTR_1.3' not found (required > > by patch) > > Patch 0009-Change-order-of-CFLAGS.patch does not apply (enforce > > with -f) > > > > which is a symptom of this issue (libattr-native is a dependency of > > patch-native). > > > > ah so this was the problem I wondered Its one problem we're seeing, I'm still not sure those two other patches of yours apply cleanly though... :/ Cheers, Richard -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [OE-core] [PATCH] staging: Handle races between binaries and their libs
On Fri, Feb 14, 2020 at 5:03 AM Richard Purdie wrote: > > There is a long standing issue where a binary could be installed into the > sysroot before its library dependencies. We've always argued nothing should > use the binary until its been installed by a dependency but there are issues > around binaries which conflict with the host system, for example patch, > python3, gzip and more. > > With the recent patch changes we've see issues like: > ERROR: gdb-cross-canadian-powerpc-8.3.1-r0 do_patch: Command Error: 'quilt > --quiltrc > /home/pokybuild/yocto-worker/qemuppc/build/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gdb-cross-canadian-powerpc/8.3.1-r0/recipe-sysroot-native/etc/quiltrc > push' exited with 0 Output: > Applying patch 0009-Change-order-of-CFLAGS.patch > patch: /lib64/libattr.so.1: version `ATTR_1.3' not found (required by patch) > Patch 0009-Change-order-of-CFLAGS.patch does not apply (enforce with -f) > > which is a symptom of this issue (libattr-native is a dependency of > patch-native). > ah so this was the problem I wondered > There are other ways to fix this such as disabling libattr in patch, > installing > patch to a subdirectory and requiring PATH manipulation and so on. > > We can simply fix the staging code to handle /bin/ after everything else so > lets > do that and avoid all these other complications. > > Signed-off-by: Richard Purdie > --- > meta/classes/staging.bbclass | 12 +++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass > index 4dd2ed01010..530e23b1853 100644 > --- a/meta/classes/staging.bbclass > +++ b/meta/classes/staging.bbclass > @@ -470,6 +470,7 @@ python extend_recipe_sysroot() { > elif os.path.lexists(depdir + "/" + c): > os.unlink(depdir + "/" + c) > > +binfiles = {} > # Now handle installs > for dep in configuredeps: > c = setscenedeps[dep][0] > @@ -562,7 +563,16 @@ python extend_recipe_sysroot() { > if l.endswith("/"): > staging_copydir(l, targetdir, dest, seendirs) > continue > -staging_copyfile(l, targetdir, dest, postinsts, seendirs) > +if "/bin/" in l: > +# defer /bin/* files until last in case they need > libs > +binfiles[l] = (targetdir, dest) > +else: > +staging_copyfile(l, targetdir, dest, postinsts, > seendirs) > + > +# Handle deferred binfiles > +for l in binfiles: > +(targetdir, dest) = binfiles[l] > +staging_copyfile(l, targetdir, dest, postinsts, seendirs) > > bb.note("Installed into sysroot: %s" % str(msg_adding)) > bb.note("Skipping as already exists in sysroot: %s" % str(msg_exists)) > -- > 2.20.1 > > -- > ___ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
[OE-core] [PATCH] staging: Handle races between binaries and their libs
There is a long standing issue where a binary could be installed into the sysroot before its library dependencies. We've always argued nothing should use the binary until its been installed by a dependency but there are issues around binaries which conflict with the host system, for example patch, python3, gzip and more. With the recent patch changes we've see issues like: ERROR: gdb-cross-canadian-powerpc-8.3.1-r0 do_patch: Command Error: 'quilt --quiltrc /home/pokybuild/yocto-worker/qemuppc/build/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gdb-cross-canadian-powerpc/8.3.1-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: Applying patch 0009-Change-order-of-CFLAGS.patch patch: /lib64/libattr.so.1: version `ATTR_1.3' not found (required by patch) Patch 0009-Change-order-of-CFLAGS.patch does not apply (enforce with -f) which is a symptom of this issue (libattr-native is a dependency of patch-native). There are other ways to fix this such as disabling libattr in patch, installing patch to a subdirectory and requiring PATH manipulation and so on. We can simply fix the staging code to handle /bin/ after everything else so lets do that and avoid all these other complications. Signed-off-by: Richard Purdie --- meta/classes/staging.bbclass | 12 +++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass index 4dd2ed01010..530e23b1853 100644 --- a/meta/classes/staging.bbclass +++ b/meta/classes/staging.bbclass @@ -470,6 +470,7 @@ python extend_recipe_sysroot() { elif os.path.lexists(depdir + "/" + c): os.unlink(depdir + "/" + c) +binfiles = {} # Now handle installs for dep in configuredeps: c = setscenedeps[dep][0] @@ -562,7 +563,16 @@ python extend_recipe_sysroot() { if l.endswith("/"): staging_copydir(l, targetdir, dest, seendirs) continue -staging_copyfile(l, targetdir, dest, postinsts, seendirs) +if "/bin/" in l: +# defer /bin/* files until last in case they need libs +binfiles[l] = (targetdir, dest) +else: +staging_copyfile(l, targetdir, dest, postinsts, seendirs) + +# Handle deferred binfiles +for l in binfiles: +(targetdir, dest) = binfiles[l] +staging_copyfile(l, targetdir, dest, postinsts, seendirs) bb.note("Installed into sysroot: %s" % str(msg_adding)) bb.note("Skipping as already exists in sysroot: %s" % str(msg_exists)) -- 2.20.1 -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core