[bitbake-devel] hashequiv, pseudo, and GIDs

chris.laplante at agilent.com chris.laplante at agilent.com
Wed Dec 11 01:51:10 UTC 2019


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.

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.

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'
______________


More information about the bitbake-devel mailing list