Re: KeyError: 'getpwuid(): uid not found: 1000' in do_package phase


Nicolas Jeker
 

On Mon, 2020-11-16 at 23:27 +0100, Martin Jansa wrote:
https://github.com/webOS-ports/meta-webos-ports/commit/9fd17a67cdbed92df13a14b002a189b4c6c2d442

is an example where it triggers this error, but doesn't trigger the
more common host-user-contaminated QA error (unless you happened to
use UID 1001 on host for the user running bitbake).

Similarly when the files are "installed" with e.g. "cp -a" for which
layers usually use "cp -R --no-dereference --preserve=mode,links -v".
On a related note, the do_install reference in the manual gives some
advice on how to use cp and tar without contaminating the build.

The relevant part:

Safe methods for installing files include the following:
* The install utility. This utility is the preferred method.
* The cp command with the "--no-preserve=ownership" option.
* The tar command with the "--no-same-owner" option. See the
bin_package.bbclass file in the meta/classes directory of the
Source Directory for an example.

https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#ref-tasks-install

On Mon, Nov 16, 2020 at 10:10 PM Marek Belisko <
marek.belisko@...> wrote:
On Mon, Nov 16, 2020 at 9:52 PM Joshua Watt <jpewhacker@...>
wrote:


On 11/16/20 2:38 PM, Marek Belisko wrote:

Hi,

I'm bumping my project based on zeus to dunfell. I've update all
layers and in one of my recipes I'm seeing following issue (not
see on
zeus at all):
WARNING: cv-my-test-1.0-r0 do_package: KeyError in
./package/srv/10%.png
ERROR: cv-my-test-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/ubuntu/projects/my-test-
/poky/meta/classes/sstate.bbclass',
lineno: 840, function: sstate_report_unihash
      0836:    report_unihash = getattr(bb.parse.siggen,
'report_unihash', None)
      0837:
      0838:    if report_unihash:
      0839:        ss = sstate_state_fromvars(d)
  *** 0840:        report_unihash(os.getcwd(), ss['task'], d)
      0841:}
      0842:
      0843:#
      0844:# Shell function to decompress and prepare a package
for installation
File: '/home/ubuntu/projects/my-test-
/poky/bitbake/lib/bb/siggen.py',
lineno: 555, function: report_unihash
      0551:
      0552:            if "." in self.method:
      0553:                (module, method) =
self.method.rsplit('.', 1)
      0554:                locs['method'] =
getattr(importlib.import_module(module), method)
  *** 0555:                outhash =
bb.utils.better_eval('method(path,
sigfile, task, d)', locs)
      0556:            else:
      0557:                outhash =
bb.utils.better_eval(self.method +
'(path, sigfile, task, d)', locs)
      0558:
      0559:            try:
File: '/home/ubuntu/projects/my-test-
/poky/bitbake/lib/bb/utils.py',
lineno: 420, function: better_eval
      0416:    if extraglobals:
      0417:        ctx = copy.copy(ctx)
      0418:        for g in extraglobals:
      0419:            ctx[g] = extraglobals[g]
  *** 0420:    return eval(source, ctx, locals)
      0421:
      0422:@contextmanager
      0423:def fileslocked(files):
      0424:    """Context manager for locking and unlocking file
locks."""
File: '<string>', lineno: 1, function: <module>
   File "<string>", line 1, in <module>

File: '/home/ubuntu/projects/my-test-
/poky/meta/lib/oe/sstatesig.py',
lineno: 595, function: OEOuthashBasic
      0591:            process(root)
      0592:            for f in files:
      0593:                if f == 'fixmepath':
      0594:                    continue
  *** 0595:                process(os.path.join(root, f))
      0596:    finally:
      0597:        os.chdir(prev_dir)
      0598:
      0599:    return h.hexdigest()
File: '/home/ubuntu/projects/my-test-
/poky/meta/lib/oe/sstatesig.py',
lineno: 551, function: process
      0547:                    add_perm(stat.S_IXOTH, 'x')
      0548:
      0549:                if include_owners:
      0550:                    try:
  *** 0551:                        update_hash(" %10s" %
pwd.getpwuid(s.st_uid).pw_name)
      0552:                        update_hash(" %10s" %
grp.getgrgid(s.st_gid).gr_name)
      0553:                    except KeyError:
      0554:                        bb.warn("KeyError in %s" %
path)
      0555:                        raise
Exception: KeyError: 'getpwuid(): uid not found: 1000'

ERROR: Logfile of failure stored in:
/home/ubuntu/projects/my-test-/build/tmp/work/aarch64-poky-
linux/cv-my-test/1.0-r0/temp/log.do_package.27454

Is this known issue or something related to my host setup?

This means the recipe is having host contamination (where the UID
of the user doing the build is leaking into the file system).
Some ideas what can be the source of that. This recipe is basically
just copying files from archive to final rootfs without any special
processing or so.

Thanks and BR,

marek



BR,

marek


Join yocto@lists.yoctoproject.org to automatically receive all group messages.