[OE-core] [PATCH 1/2] package_manager: default to have scriptlet output captured in log

ChenQi Qi.Chen at windriver.com
Fri Dec 23 02:02:24 UTC 2016


On 12/22/2016 05:36 PM, Jussi Kukkonen wrote:
> On 21 December 2016 at 06:32, Chen Qi <Qi.Chen at windriver.com 
> <mailto:Qi.Chen at windriver.com>> wrote:
> >
> > We need to have scriptlet output captured in log. If we don't do so,
> > some useful information from scriptlets (especially postinstall script)
> > would be missing. In case a script has a warning message but it does not
> > necessarily have to fail, the message should be captured.
> >
> > Opkg has already done that. Change for rpm and dpkg so that scriptlet
> > output is captured and no warning message is missing.
> >
> > Signed-off-by: Chen Qi <Qi.Chen at windriver.com 
> <mailto:Qi.Chen at windriver.com>>
> > ---
> >  meta/lib/oe/package_manager.py | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/meta/lib/oe/package_manager.py 
> b/meta/lib/oe/package_manager.py
> > index e557473..6892106 100644
> > --- a/meta/lib/oe/package_manager.py
> > +++ b/meta/lib/oe/package_manager.py
> > @@ -669,11 +669,11 @@ class RpmPM(PackageManager):
> >          self.install_dir_path = os.path.join(self.target_rootfs, 
> self.install_dir_name)
> >          self.rpm_cmd = bb.utils.which(os.getenv('PATH'), "rpm")
> >          self.smart_cmd = bb.utils.which(os.getenv('PATH'), "smart")
> > -        # 0 = default, only warnings
> > -        # 1 = --log-level=info (includes information about 
> executing scriptlets and their output)
> > +        # 0 = --log-level=warning, only warnings
> > +        # 1 = --log-level=info (includes information about 
> executing scriptlets and their output), default
> >          # 2 = --log-level=debug
> >          # 3 = --log-level=debug plus dumps of scriplet content and 
> command invocation
> > -        self.debug_level = int(d.getVar('ROOTFS_RPM_DEBUG') or "0")
> > +        self.debug_level = int(d.getVar('ROOTFS_RPM_DEBUG') or "1")
> >          self.smart_opt = ["--log-level=%s" %
> >                           ("warning" if self.debug_level == 0 else
> >                            "info" if self.debug_level == 1 else
> > @@ -2025,7 +2025,8 @@ class DpkgPM(OpkgDpkgPM):
> >                          bb.note("Executing %s for package: %s ..." %
> > (control_script.name.lower(), pkg_name))
> >                          subprocess.check_output([p_full, 
> control_script.argument],
> > -                                stderr=subprocess.STDOUT)
> > +  stderr=subprocess.STDOUT).decode("utf-8")
> > +                        bb.note(output)
>
>
> This patch seems likely to be the reason for this autobuilder failure:
> https://autobuilder.yoctoproject.org/main/builders/nightly-deb-non-deb/builds/669/steps/BuildImages/logs/stdio
>

Sorry, I'll fix it immediately and send out V2.

Best Regards,
Chen Qi

> ---
> ERROR: core-image-sato-sdk-1.0-r0 do_rootfs: 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_rootfs(d)
>      0003:
> File: 
> '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-deb-non-deb/build/meta/classes/image.bbclass', 
> lineno: 266, function: do_rootfs
>      0262:
>      0263:    progress_reporter.next_stage()
>      0264:
>      0265:    # generate rootfs
>  *** 0266:    create_rootfs(d, progress_reporter=progress_reporter, 
> logcatcher=logcatcher)
>      0267:
>      0268:    progress_reporter.finish()
>      0269:}
>      0270:do_rootfs[dirs] = "${TOPDIR}"
> File: 
> '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-deb-non-deb/build/meta/lib/oe/rootfs.py', 
> lineno: 1009, function: create_rootfs
>      1005:        RpmRootfs(d, manifest_dir, progress_reporter, 
> logcatcher).create()
>      1006:    elif img_type == "ipk":
>      1007:        OpkgRootfs(d, manifest_dir, progress_reporter, 
> logcatcher).create()
>      1008:    elif img_type == "deb":
>  *** 1009:        DpkgRootfs(d, manifest_dir, progress_reporter, 
> logcatcher).create()
>      1010:
>      1011:    os.environ.clear()
>      1012:    os.environ.update(env_bkp)
>      1013:
> File: 
> '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-deb-non-deb/build/meta/lib/oe/rootfs.py', 
> lineno: 202, function: create
>      0198:        if self.progress_reporter:
>      0199:            self.progress_reporter.next_stage()
>      0200:
>      0201:        # call the package manager dependent create method
>  *** 0202:        self._create()
>      0203:
>      0204:        sysconfdir = self.image_rootfs + 
> self.d.getVar('sysconfdir')
>      0205:        bb.utils.mkdirhier(sysconfdir)
>      0206:        with open(sysconfdir + "/version", "w+") as ver:
> File: 
> '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-deb-non-deb/build/meta/lib/oe/rootfs.py', 
> lineno: 691, function: _create
>      0687:        self.pm.fix_broken_dependencies()
>      0688:
>      0689:        self.pm.mark_packages("installed")
>      0690:
>  *** 0691:        self.pm.run_pre_post_installs()
>      0692:
>      0693:        execute_pre_post_process(self.d, deb_post_process_cmds)
>      0694:
>      0695:        if self.progress_reporter:
> File: 
> '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-deb-non-deb/build/meta/lib/oe/package_manager.py', 
> lineno: 2029, function: run_pre_post_installs
>      2025:                        bb.note("Executing %s for package: 
> %s ..." %
>      2026: (control_script.name.lower(), pkg_name))
>      2027:  subprocess.check_output([p_full, control_script.argument],
>      2028:  stderr=subprocess.STDOUT).decode("utf-8")
>  *** 2029:                        bb.note(output)
>      2030:                    except subprocess.CalledProcessError as e:
>      2031:                        bb.note("%s for package %s failed 
> with %d:\n%s" %
>      2032:                                (control_script.name 
> <http://control_script.name>, pkg_name, e.returncode,
>      2033:  e.output.decode("utf-8")))
> Exception: NameError: name 'output' is not defined
> ---
>
>
> Thanks,
>   Jussi
>
>
> >
> >                      except subprocess.CalledProcessError as e:
> >                          bb.note("%s for package %s failed with 
> %d:\n%s" %
> >                                  (control_script.name 
> <http://control_script.name>, pkg_name, e.returncode,
> > --
> > 1.9.1
> >
> > --
> > _______________________________________________
> > Openembedded-core mailing list
> > Openembedded-core at lists.openembedded.org 
> <mailto:Openembedded-core at lists.openembedded.org>
> > http://lists.openembedded.org/mailman/listinfo/openembedded-core


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20161223/66a662fb/attachment-0002.html>


More information about the Openembedded-core mailing list