[OE-core] 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 Openembedded-core
mailing list