[OE-core] [bitbake-devel] hashequiv, pseudo, and GIDs

Joshua Watt jpewhacker at gmail.com
Wed Dec 11 04:03:20 UTC 2019


On Tue, Dec 10, 2019 at 7:51 PM chris.laplante--- via bitbake-devel
<bitbake-devel at lists.openembedded.org> wrote:
>
> Hello all,
>
> I'm encountering a failure like below when using hashequiv. What is happening is recipe "A" is installing some files in do_install, and changing the group of those files. The group is defined by a different recipe ("B"). There is no dependency between A and B, so when A:do_package runs, the group is not present in A's pseudo database. OEOuthashBasic tries to lookup the owning group name of the file, and a KeyError is raised.
>
> A workaround is to add:
>     DEPENDS += "B"
> to recipe A, so that the group ends up in A's pseudo database. This works, but seems really really hacky, since it's only necessary when hashequiv is active.

That doesn't quite make sense to me... It seems like you *should* have
the dependency on B to pull in the group that the do_install()
requires?

>
> So why is the group name used in the hash, as opposed to the GID? (I also have the same question regarding user name vs UID). If the GID was used we wouldn't have this issue.

That was done in response to this mailing list thread:
http://lists.openembedded.org/pipermail/openembedded-core/2019-January/277755.html

Basically, the GID and UID aren't stable values across builds so the
suggestion was to use the names. My understanding was that this
corresponded to how the user and groups are dealt with in general.

>
> Thanks,
> Chris
>
>
> ______________
> ERROR: A-1.0-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:sstate_report_unihash(d)
>      0003:
> File: '/home/laplante/yocto/sources/poky/meta/classes/sstate.bbclass', lineno: 802, function: sstate_report_unihash
>      0798:    report_unihash = getattr(bb.parse.siggen, 'report_unihash', None)
>      0799:
>      0800:    if report_unihash:
>      0801:        ss = sstate_state_fromvars(d)
>  *** 0802:        report_unihash(os.getcwd(), ss['task'], d)
>      0803:}
>      0804:
>      0805:#
>      0806:# Shell function to decompress and prepare a package for installation
> File: '/home/laplante/yocto/sources/poky/bitbake/lib/bb/siggen.py', lineno: 485, function: report_unihash
>      0481:
>      0482:            if "." in self.method:
>      0483:                (module, method) = self.method.rsplit('.', 1)
>      0484:                locs['method'] = getattr(importlib.import_module(module), method)
>  *** 0485:                outhash = bb.utils.better_eval('method(path, sigfile, task, d)', locs)
>      0486:            else:
>      0487:                outhash = bb.utils.better_eval(self.method + '(path, sigfile, task, d)', locs)
>      0488:
>      0489:            try:
> File: '/home/laplante/yocto/sources/poky/bitbake/lib/bb/utils.py', lineno: 421, function: better_eval
>      0417:    if extraglobals:
>      0418:        ctx = copy.copy(ctx)
>      0419:        for g in extraglobals:
>      0420:            ctx[g] = extraglobals[g]
>  *** 0421:    return eval(source, ctx, locals)
>      0422:
>      0423:@contextmanager
>      0424:def fileslocked(files):
>      0425:    """Context manager for locking and unlocking file locks."""
> File: '<string>', lineno: 1, function: <module>
>   File "<string>", line 1, in <module>
>
> File: '/home/laplante/yocto/sources/poky/meta/lib/oe/sstatesig.py', lineno: 553, function: OEOuthashBasic
>      0549:            process(root)
>      0550:            for f in files:
>      0551:                if f == 'fixmepath':
>      0552:                    continue
>  *** 0553:                process(os.path.join(root, f))
>      0554:    finally:
>      0555:        os.chdir(prev_dir)
>      0556:
>      0557:    return h.hexdigest()
> File: '/home/laplante/yocto/sources/poky/meta/lib/oe/sstatesig.py', lineno: 516, function: process
>      0512:                    add_perm(stat.S_IXOTH, 'x')
>      0513:
>      0514:                if include_owners:
>      0515:                    update_hash(" %10s" % pwd.getpwuid(s.st_uid).pw_name)
>  *** 0516:                    update_hash(" %10s" % grp.getgrgid(s.st_gid).gr_name)
>      0517:
>      0518:                update_hash(" ")
>      0519:                if stat.S_ISBLK(s.st_mode) or stat.S_ISCHR(s.st_mode):
>      0520:                    update_hash("%9s" % ("%d.%d" % (os.major(s.st_rdev), os.minor(s.st_rdev))))
> Exception: KeyError: 'getgrgid(): gid not found: 3004'
> ______________
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel


More information about the Openembedded-core mailing list