All of lore.kernel.org
 help / color / mirror / Atom feed
* PermissionError when using image_list_installed_packages
@ 2018-11-20  7:43 Norman Stetter
  2018-11-20 10:05 ` Burton, Ross
  0 siblings, 1 reply; 2+ messages in thread
From: Norman Stetter @ 2018-11-20  7:43 UTC (permalink / raw)
  To: yocto


[-- Attachment #1.1: Type: text/plain, Size: 7268 bytes --]

Hi,

I am currently working on a BitBake task, which generates a html file containing a table of all packages used in my image.

To get a list of all packages I want to use 'image_list_installed_packages' from 'oe.rootfs', the way it is used in 'license.bbclass'.

My minimal test recipe looks like this:

SUMMARY = "Test recipe"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302<file://$%7bCOMMON_LICENSE_DIR%7d/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302>"

inherit license


python do_licensesinfo() {
  from oe.rootfs import image_list_installed_packages
  pkgs = image_list_installed_packages(d)
}
addtask licensesinfo
When I run the task 'licensesinfo' it fails giving this log:

DEBUG: Executing python function do_licensesinfo
ERROR: 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:do_licensesinfo(d)
     0003:
File: '/home/norman.stetter/build/yocto-rocko/sources/meta-guf/meta/recipes-bsp/images/guf-image-licenses.bb', lineno: 11, function: do_licensesinfo
     0007:
     0008:
     0009:python do_licensesinfo() {
     0010:  from oe.rootfs import image_list_installed_packages
 *** 0011:  pkgs = image_list_installed_packages(d)
     0012:}
     0013:addtask licensesinfo
     0014:
     0015:
File: '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/rootfs.py', lineno: 1026, function: image_list_installed_packages
     1022:        rootfs_dir = d.getVar('IMAGE_ROOTFS')
     1023:
     1024:    img_type = d.getVar('IMAGE_PKGTYPE')
     1025:    if img_type == "rpm":
 *** 1026:        return RpmPkgsList(d, rootfs_dir).list_pkgs()
     1027:    elif img_type == "ipk":
     1028:        return OpkgPkgsList(d, rootfs_dir, d.getVar("IPKGCONF_TARGET")).list_pkgs()
     1029:    elif img_type == "deb":
     1030:        return DpkgPkgsList(d, rootfs_dir).list_pkgs()
File: '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py', lineno: 258, function: list_pkgs
     0254:        pass
     0255:
     0256:class RpmPkgsList(PkgsList):
     0257:    def list_pkgs(self):
 *** 0258:        return RpmPM(self.d, self.rootfs_dir, self.d.getVar('TARGET_VENDOR')).list_installed()
     0259:
     0260:class OpkgPkgsList(PkgsList):
     0261:    def __init__(self, d, rootfs_dir, config_file):
     0262:        super(OpkgPkgsList, self).__init__(d, rootfs_dir)
File: '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py', lineno: 689, function: list_installed
     0685:                            symlinks=True)
     0686:
     0687:    def list_installed(self):
     0688:        output = self._invoke_dnf(["repoquery", "--installed", "--queryformat", "Package: %{name} %{arch} %{version} %{name}-%{version}-%{release}.%{arch}.rpm\nDependencies:\n%{requires}\nRecommendations:\n%{recommends}\nDependenciesEndHere:\n"],
 *** 0689:                                  print_output = False)
     0690:        packages = {}
     0691:        current_package = None
     0692:        current_deps = None
     0693:        current_state = "initial"
File: '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py', lineno: 734, function: _invoke_dnf
     0730:                             "--setopt=logdir=%s" % (self.d.getVar('T'))
     0731:                            ]
     0732:        cmd = [dnf_cmd] + standard_dnf_args + dnf_args
     0733:        try:
 *** 0734:            output = subprocess.check_output(cmd,stderr=subprocess.STDOUT).decode("utf-8")
     0735:            if print_output:
     0736:                bb.note(output)
     0737:            return output
     0738:        except subprocess.CalledProcessError as e:
File: '/usr/lib/python3.5/subprocess.py', lineno: 626, function: check_output
     0622:        # empty string. That is maintained here for backwards compatibility.
     0623:        kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
     0624:
     0625:    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
 *** 0626:               **kwargs).stdout
     0627:
     0628:
     0629:class CompletedProcess(object):
     0630:    """A process that has finished running.
File: '/usr/lib/python3.5/subprocess.py', lineno: 693, function: run
     0689:        if 'stdin' in kwargs:
     0690:            raise ValueError('stdin and input arguments may not both be used.')
     0691:        kwargs['stdin'] = PIPE
     0692:
 *** 0693:    with Popen(*popenargs, **kwargs) as process:
     0694:        try:
     0695:            stdout, stderr = process.communicate(input, timeout=timeout)
     0696:        except TimeoutExpired:
     0697:            process.kill()
File: '/usr/lib/python3.5/subprocess.py', lineno: 947, function: __init__
     0943:                                startupinfo, creationflags, shell,
     0944:                                p2cread, p2cwrite,
     0945:                                c2pread, c2pwrite,
     0946:                                errread, errwrite,
 *** 0947:                                restore_signals, start_new_session)
     0948:        except:
     0949:            # Cleanup if the child failed starting.
     0950:            for f in filter(None, (self.stdin, self.stdout, self.stderr)):
     0951:                try:
File: '/usr/lib/python3.5/subprocess.py', lineno: 1551, function: _execute_child
     1547:                                # The error must be from chdir(cwd).
     1548:                                err_msg += ': ' + repr(cwd)
     1549:                            else:
     1550:                                err_msg += ': ' + repr(orig_executable)
 *** 1551:                    raise child_exception_type(errno_num, err_msg)
     1552:                raise child_exception_type(err_msg)
     1553:
     1554:
     1555:        def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
Exception: PermissionError: [Errno 13] Permission denied

DEBUG: Python function do_licensesinfo finished
ERROR: Function failed: do_licensesinfo

So it looks like the invoked 'dnf' can't open a file due to permission issues.

But I never experienced any problems during my regular builds, which obviously also use 'image_list_installed_packages'.

Does someone know why I encounter this error only, when calling 'image_list_installed_packages' in my own recipe?


Regards,

Norman


Mit freundlichen Grüßen / Best regards
Norman Stetter
SW ENWICKLUNG EMBEDDED SYSTEMS
Garz & Fricke GmbH

21079 Hamburg
Direct: +49 40 791899 - 477
Fax: +49 40 791899 - 39
Norman.Stetter@garz-fricke.com
www.garz-fricke.com<http://www.garz-fricke.com/>
WE MAKE IT YOURS!
[cid:image001.jpg@01D480AD.2A332740]
Sitz der Gesellschaft: D-21079 Hamburg
Registergericht: Amtsgericht Hamburg, HRB 60514
Geschäftsführer: Matthias Fricke, Manfred Garz, Marc-Michael Braun

[cid:image002.jpg@01D480AD.2A332740]


[-- Attachment #1.2: Type: text/html, Size: 21205 bytes --]

[-- Attachment #2: image001.jpg --]
[-- Type: image/jpeg, Size: 14130 bytes --]

[-- Attachment #3: image002.jpg --]
[-- Type: image/jpeg, Size: 4565 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: PermissionError when using image_list_installed_packages
  2018-11-20  7:43 PermissionError when using image_list_installed_packages Norman Stetter
@ 2018-11-20 10:05 ` Burton, Ross
  0 siblings, 0 replies; 2+ messages in thread
From: Burton, Ross @ 2018-11-20 10:05 UTC (permalink / raw)
  To: Norman.Stetter; +Cc: Yocto-mailing-list


[-- Attachment #1.1: Type: text/plain, Size: 7931 bytes --]

Your recipe is a non-image recipe, so what image do you expect it to list
the manifest of?

On Tue, 20 Nov 2018 at 08:16, Norman Stetter <Norman.Stetter@garz-fricke.com>
wrote:

> Hi,
>
>
>
> I am currently working on a BitBake task, which generates a html file
> containing a table of all packages used in my image.
>
>
>
> To get a list of all packages I want to use 'image_list_installed_packages'
> from 'oe.rootfs', the way it is used in 'license.bbclass’.
>
>
>
> My minimal test recipe looks like this:
>
>
>
> SUMMARY = "Test recipe"
> SECTION = "examples"
> LICENSE = "MIT"
> LIC_FILES_CHKSUM = "
> file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
>
> inherit license
>
>
> python do_licensesinfo() {
>   from oe.rootfs import image_list_installed_packages
>   pkgs = image_list_installed_packages(d)
> }
> addtask licensesinfo
>
> When I run the task 'licensesinfo' it fails giving this log:
>
>
>
> DEBUG: Executing python function do_licensesinfo
> ERROR: 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:do_licensesinfo(d)
>      0003:
> File:
> '/home/norman.stetter/build/yocto-rocko/sources/meta-guf/meta/recipes-bsp/images/
> guf-image-licenses.bb', lineno: 11, function: do_licensesinfo
>      0007:
>      0008:
>      0009:python do_licensesinfo() {
>      0010:  from oe.rootfs import image_list_installed_packages
>  *** 0011:  pkgs = image_list_installed_packages(d)
>      0012:}
>      0013:addtask licensesinfo
>      0014:
>      0015:
> File:
> '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/rootfs.py',
> lineno: 1026, function: image_list_installed_packages
>      1022:        rootfs_dir = d.getVar('IMAGE_ROOTFS')
>      1023:
>      1024:    img_type = d.getVar('IMAGE_PKGTYPE')
>      1025:    if img_type == "rpm":
>  *** 1026:        return RpmPkgsList(d, rootfs_dir).list_pkgs()
>      1027:    elif img_type == "ipk":
>      1028:        return OpkgPkgsList(d, rootfs_dir,
> d.getVar("IPKGCONF_TARGET")).list_pkgs()
>      1029:    elif img_type == "deb":
>      1030:        return DpkgPkgsList(d, rootfs_dir).list_pkgs()
> File:
> '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py',
> lineno: 258, function: list_pkgs
>      0254:        pass
>      0255:
>      0256:class RpmPkgsList(PkgsList):
>      0257:    def list_pkgs(self):
>  *** 0258:        return RpmPM(self.d, self.rootfs_dir,
> self.d.getVar('TARGET_VENDOR')).list_installed()
>      0259:
>      0260:class OpkgPkgsList(PkgsList):
>      0261:    def __init__(self, d, rootfs_dir, config_file):
>      0262:        super(OpkgPkgsList, self).__init__(d, rootfs_dir)
> File:
> '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py',
> lineno: 689, function: list_installed
>      0685:                            symlinks=True)
>      0686:
>      0687:    def list_installed(self):
>      0688:        output = self._invoke_dnf(["repoquery", "--installed",
> "--queryformat", "Package: %{name} %{arch} %{version}
> %{name}-%{version}-%{release}.%{arch}.rpm\nDependencies:\n%{requires}\nRecommendations:\n%{recommends}\nDependenciesEndHere:\n"],
>  *** 0689:                                  print_output = False)
>      0690:        packages = {}
>      0691:        current_package = None
>      0692:        current_deps = None
>      0693:        current_state = "initial"
> File:
> '/home/norman.stetter/build/yocto-rocko/sources/poky/meta/lib/oe/package_manager.py',
> lineno: 734, function: _invoke_dnf
>      0730:                             "--setopt=logdir=%s" %
> (self.d.getVar('T'))
>      0731:                            ]
>      0732:        cmd = [dnf_cmd] + standard_dnf_args + dnf_args
>      0733:        try:
>  *** 0734:            output =
> subprocess.check_output(cmd,stderr=subprocess.STDOUT).decode("utf-8")
>      0735:            if print_output:
>      0736:                bb.note(output)
>      0737:            return output
>      0738:        except subprocess.CalledProcessError as e:
> File: '/usr/lib/python3.5/subprocess.py', lineno: 626, function:
> check_output
>      0622:        # empty string. That is maintained here for backwards
> compatibility.
>      0623:        kwargs['input'] = '' if kwargs.get('universal_newlines',
> False) else b''
>      0624:
>      0625:    return run(*popenargs, stdout=PIPE, timeout=timeout,
> check=True,
>  *** 0626:               **kwargs).stdout
>      0627:
>      0628:
>      0629:class CompletedProcess(object):
>      0630:    """A process that has finished running.
> File: '/usr/lib/python3.5/subprocess.py', lineno: 693, function: run
>      0689:        if 'stdin' in kwargs:
>      0690:            raise ValueError('stdin and input arguments may not
> both be used.')
>      0691:        kwargs['stdin'] = PIPE
>      0692:
>  *** 0693:    with Popen(*popenargs, **kwargs) as process:
>      0694:        try:
>      0695:            stdout, stderr = process.communicate(input,
> timeout=timeout)
>      0696:        except TimeoutExpired:
>      0697:            process.kill()
> File: '/usr/lib/python3.5/subprocess.py', lineno: 947, function: __init__
>      0943:                                startupinfo, creationflags,
> shell,
>      0944:                                p2cread, p2cwrite,
>      0945:                                c2pread, c2pwrite,
>      0946:                                errread, errwrite,
>  *** 0947:                                restore_signals,
> start_new_session)
>      0948:        except:
>      0949:            # Cleanup if the child failed starting.
>      0950:            for f in filter(None, (self.stdin, self.stdout,
> self.stderr)):
>      0951:                try:
> File: '/usr/lib/python3.5/subprocess.py', lineno: 1551, function:
> _execute_child
>      1547:                                # The error must be from
> chdir(cwd).
>      1548:                                err_msg += ': ' + repr(cwd)
>      1549:                            else:
>      1550:                                err_msg += ': ' +
> repr(orig_executable)
>  *** 1551:                    raise child_exception_type(errno_num,
> err_msg)
>      1552:                raise child_exception_type(err_msg)
>      1553:
>      1554:
>      1555:        def _handle_exitstatus(self, sts,
> _WIFSIGNALED=os.WIFSIGNALED,
> Exception: PermissionError: [Errno 13] Permission denied
>
> DEBUG: Python function do_licensesinfo finished
> ERROR: Function failed: do_licensesinfo
>
>
>
> So it looks like the invoked 'dnf' can't open a file due to permission
> issues.
>
>
>
> But I never experienced any problems during my regular builds, which
> obviously also use 'image_list_installed_packages'.
>
>
>
> Does someone know why I encounter this error only, when calling '
> image_list_installed_packages' in my own recipe?
>
>
>
>
>
> Regards,
>
>
>
> Norman
>
>
>
>
>
> Mit freundlichen Grüßen / Best regards
>
>
> *Norman Stetter *SW ENWICKLUNG EMBEDDED SYSTEMS
> Garz & Fricke GmbH
>
>
> 21079 Hamburg
>
> Direct: +49 40 791899 - 477
> Fax: +49 40 791899 - 39
> Norman.Stetter@garz-fricke.com
> www.garz-fricke.com
>
> WE MAKE IT YOURS!
>
> Sitz der Gesellschaft: D-21079 Hamburg
> Registergericht: Amtsgericht Hamburg, HRB 60514
> Geschäftsführer: Matthias Fricke, Manfred Garz, Marc-Michael Braun
>
>
> --
> _______________________________________________
> yocto mailing list
> yocto@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/yocto
>

[-- Attachment #1.2: Type: text/html, Size: 16028 bytes --]

[-- Attachment #2: image001.jpg --]
[-- Type: image/jpeg, Size: 14130 bytes --]

[-- Attachment #3: image002.jpg --]
[-- Type: image/jpeg, Size: 4565 bytes --]

[-- Attachment #4: image002.jpg --]
[-- Type: image/jpeg, Size: 4565 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-11-20 10:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-20  7:43 PermissionError when using image_list_installed_packages Norman Stetter
2018-11-20 10:05 ` Burton, Ross

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.