Re: [OE-core] [PATCH v5] util-linux: split uuid in separate recipe to allow bootstrapping

Alexandre Belloni
2021-02-27T15:08:05Z

On 27/02/2021 15:52:25+0100, Alexandre Belloni wrote:
> Hello,
>
> On 25/02/2021 15:30:35+0000, Luca Bocassi wrote:
> > From: Luca Boccassi <luca.boccassi@microsoft.com>
> >
> > Recently util-linux gained an (optional) build dependency on libcryptsetup.
> > But libcryptsetup build-depends on util-linux for blkid (optional, can be disabled)
> > and uuid (mandatory).
> > Split out util-linux-uuid in a different recipe to break the cycle.
> >
> > https://github.com/karelzak/util-linux/pull/898
> >
> > Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
> > ---
> > v1: util-linux 2.35 is not out yet, but I'd like to get the preparatory work
> > underway as I'm not sure if this is the best approach or if there are
> > alternatives. Suggestions and comments very welcome. Thanks!
> > v2: changed packages names to reflect old ones (eg: libuuid1 -> util-linux-libuuid)
> > and leave uuid build enable in main recipe to allow for uuidgen build to happen,
> > as it does not have its own autoconf switch. Delete the library manualy from
> > the main recipe after build instead, and add dependency.
> > Might help to break loop python3 -> util-linux -> libselinux -> python3, as it's
> > only libuuid that is needed, see https://lists.yoctoproject.org/g/yocto/message/47570
> > v3: rebased and refactored to have a common util-linux.inc file
> > v4: added RDEPENDS on util-linux-libuuid on various packages to fix QA warnings
> > v5: remove RDEPENDS and instead have util-linux RDEPEND on util-linux-uuid.
> > Removed PACKAGES_remove and instead filter out libuuid via the package generation
> > regex.
> > Rebased on util-linux 2.36.2.
> >
> > .../util-linux/util-linux-uuid_2.36.2.bb | 22 ++++++++
> > meta/recipes-core/util-linux/util-linux.inc | 41 ++++++++++++++
> > .../util-linux/util-linux_2.36.2.bb | 53 +++++--------------
> > 3 files changed, 75 insertions(+), 41 deletions(-)
> > create mode 100644 meta/recipes-core/util-linux/util-linux-uuid_2.36.2.bb
> > create mode 100644 meta/recipes-core/util-linux/util-linux.inc
> >
>
> With this patch, there is a very weird failure on the autobuilders, two
> a-full builds failed with this:
>
> ERROR: musl-1.2.2+gitAUTOINC+e5d2823631-r0 do_package: 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:extend_recipe_sysroot(d)
> 0003:
> File: '/home/pokybuild/yocto-worker/poky-tiny/build/meta/classes/staging.bbclass', lineno: 582, function: extend_recipe_sysroot
> 0578: if "/bin/" in l or "/sbin/" in l:
> 0579: # defer /*bin/* files until last in case they need libs
> 0580: binfiles[l] = (targetdir, dest)
> 0581: else:
> *** 0582: staging_copyfile(l, targetdir, dest, postinsts, seendirs)
> 0583:
> 0584: # Handle deferred binfiles
> 0585: for l in binfiles:
> 0586: (targetdir, dest) = binfiles[l]
> File: '/home/pokybuild/yocto-worker/poky-tiny/build/meta/classes/staging.bbclass', lineno: 157, function: staging_copyfile
> 0153: os.symlink(linkto, dest)
> 0154: #bb.warn(c)
> 0155: else:
> 0156: try:
> *** 0157: os.link(c, dest)
> 0158: except OSError as err:
> 0159: if err.errno == errno.EXDEV:
> 0160: bb.utils.copyfile(c, dest)
> 0161: else:
> Exception: FileExistsError: [Errno 17] File exists: '/home/pokybuild/yocto-worker/poky-tiny/build/build/tmp/sysroots-components/core2-32/libgcc/usr/lib/i686-poky-linux-musl/10.2.0/libgcc_eh.a' -> '/home/pokybuild/yocto-worker/poky-tiny/build/build/tmp/work/core2-32-poky-linux-musl/musl/1.2.2+gitAUTOINC+e5d2823631-r0/recipe-sysroot/usr/lib/i686-poky-linux-musl/10.2.0/libgcc_eh.a'
> ERROR: Logfile of failure stored in: /home/pokybuild/yocto-worker/poky-tiny/build/build/tmp/work/core2-32-poky-linux-musl/musl/1.2.2+gitAUTOINC+e5d2823631-r0/temp/log.do_package.4051328
> NOTE: recipe musl-1.2.2+gitAUTOINC+e5d2823631-r0: task do_package: Failed
> ERROR: Task (/home/pokybuild/yocto-worker/poky-tiny/build/meta/recipes-core/musl/musl_git.bb:do_package) failed with exit code '1'
>
> This also happens with glibc-2.33-r0:
>
>
> ERROR: glibc-2.33-r0 do_package: Error executing a python function in exec_python_func() autogenerated:
> [...]
> Exception: FileExistsError: [Errno 17] File exists: '/home/pokybuild/yocto-worker/edgerouter/build/build/tmp/sysroots-components/mips64/libgcc/usr/lib/mips64-poky-linux/10.2.0/libgcc.a' -> '/home/pokybuild/yocto-worker/edgerouter/build/build/tmp/work/mips64-poky-linux/glibc/2.33-r0/recipe-sysroot/usr/lib/mips64-poky-linux/10.2.0/libgcc.a'
> ERROR: Logfile of failure stored in: /home/pokybuild/yocto-worker/edgerouter/build/build/tmp/work/mips64-poky-linux/glibc/2.33-r0/temp/log.do_package.29993
> NOTE: recipe glibc-2.33-r0: task do_package: Failed
> ERROR: Task (/home/pokybuild/yocto-worker/edgerouter/build/meta/recipes-core/glibc/glibc_2.33.bb:do_package) failed with exit code '1'
>

Not sure this helps but we also get:

WARNING: nativesdk-util-linux-2.36.2-r0 do_package_qa: QA Issue: nativesdk-util-linux rdepends on nativesdk-util-linux-uuid, but it isn't a build dependency? [build-deps]

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering