package_manager.py: get rid of ROOTFS_RPM_DEBUG in RpmPM()
PATCH 1/6 package_manager.py: get rid of ROOTFS_RPM_DEBUG in RpmPM()
This was undocumented, and it's better to just always enable full debug output, as this allows immediate generation of logs with full diagnostics when things go not as expected.
Also, change the output of dnf from note to debug level; this does not affect what is written to log file, but does reduce the verbosity of bitbake -v.
--- meta/lib/oe/package_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
meta/lib/oe/package_manager.py +2 -2
@@ -888,7 +888,7 @@ class RpmPM(PackageManager): os.environ['RPM_ETCCONFIGDIR'] = self.target_rootfs dnf_cmd = bb.utils.which(os.getenv('PATH'), "dnf") - standard_dnf_args = (["-v", "--rpmverbosity=debug"] if self.d.getVar('ROOTFS_RPM_DEBUG') else []) + ["-y", + standard_dnf_args = ["-v", "--rpmverbosity=debug", "-y", "-c", oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), "--setopt=reposdir=%s" %(oe.path.join(self.target_rootfs, "etc/yum.repos.d")), "--repofrompath=oe-repo,%s" % (self.rpm_repo_dir),
@@ -900,7 +900,7 @@ class RpmPM(PackageManager): try: output = subprocess.check_output(cmd,stderr=subprocess.STDOUT).decode("utf-8") if print_output: - bb.note(output) + bb.debug(1, output) return output except subprocess.CalledProcessError as e: if print_output:
Signature · 1 line
2.17.0
PATCH 2/6 gtk-immodules-cache.bbclass: convert cache creation to postinst_intercept mechanism
This has the following benefits:
- consistent with how the other caches are created into target rootfs
- only runs once per package manager transaction, instead of once per every immodule package
- correctly postpones to first boot if qemu is not working; from postinst itself this would've required special arrangements to avoid what is now a do_rootfs failure.
--- meta/classes/gtk-immodules-cache.bbclass | 70 ++++++++----------- .../update_gtk_immodules_cache | 18 +++++ 2 files changed, 46 insertions(+), 42 deletions(-) create mode 100644 scripts/postinst-intercepts/update_gtk_immodules_cache
meta/classes/gtk-immodules-cache.bbclass +28 -42
@@ -10,53 +10,39 @@ GTKIMMODULES_PACKAGES ?= "${PN}" gtk_immodule_cache_postinst() { if [ "x$D" != "x" ]; then - if [ -x $D${bindir}/gtk-query-immodules-2.0 ]; then - IMFILES=$(ls $D${libdir}/gtk-2.0/*/immodules/*.so) - ${@qemu_run_binary(d, '$D', '${bindir}/gtk-query-immodules-2.0')} \ - $IMFILES > $D${libdir}/gtk-2.0/2.10.0/immodules.cache 2>/dev/null && - sed -i -e "s:$D::" $D${libdir}/gtk-2.0/2.10.0/immodules.cache - fi - if [ -x $D${bindir}/gtk-query-immodules-3.0 ]; then - IMFILES=$(ls $D${libdir}/gtk-3.0/*/immodules/*.so) - ${@qemu_run_binary(d, '$D', '${bindir}/gtk-query-immodules-3.0')} \ - $IMFILES > $D${libdir}/gtk-3.0/3.0.0/immodules.cache 2>/dev/null && - sed -i -e "s:$D::" $D${libdir}/gtk-3.0/3.0.0/immodules.cache - fi - - [ $? -ne 0 ] && exit 1 - exit 0 -fi -if [ ! -z `which gtk-query-immodules-2.0` ]; then - gtk-query-immodules-2.0 > ${libdir}/gtk-2.0/2.10.0/immodules.cache -fi -if [ ! -z `which gtk-query-immodules-3.0` ]; then - gtk-query-immodules-3.0 > ${libdir}/gtk-3.0/3.0.0/immodules.cache + $INTERCEPT_DIR/postinst_intercept update_gtk_immodules_cache ${PKG} \ + mlprefix=${MLPREFIX} \ + binprefix=${MLPREFIX} \ + libdir=${libdir} \ + libexecdir=${libexecdir} \ + base_libdir=${base_libdir} \ + bindir=${bindir} +else + if [ ! -z `which gtk-query-immodules-2.0` ]; then + gtk-query-immodules-2.0 > ${libdir}/gtk-2.0/2.10.0/immodules.cache + fi + if [ ! -z `which gtk-query-immodules-3.0` ]; then + gtk-query-immodules-3.0 > ${libdir}/gtk-3.0/3.0.0/immodules.cache + fi fi } gtk_immodule_cache_postrm() { if [ "x$D" != "x" ]; then - if [ -x $D${bindir}/gtk-query-immodules-2.0 ]; then - IMFILES=$(ls $D${libdir}/gtk-2.0/*/immodules/*.so) - ${@qemu_run_binary(d, '$D', '${bindir}/gtk-query-immodules-2.0')} \ - $IMFILES > $D${libdir}/gtk-2.0/2.10.0/immodules.cache 2>/dev/null && - sed -i -e "s:$D::" $D${libdir}/gtk-2.0/2.10.0/immodules.cache - fi - if [ -x $D${bindir}/gtk-query-immodules-3.0 ]; then - IMFILES=$(ls $D${libdir}/gtk-3.0/*/immodules/*.so) - ${@qemu_run_binary(d, '$D', '${bindir}/gtk-query-immodules-3.0')} \ - $IMFILES > $D${libdir}/gtk-3.0/3.0.0/immodules.cache 2>/dev/null && - sed -i -e "s:$D::" $D${libdir}/gtk-3.0/3.0.0/immodules.cache - fi - - [ $? -ne 0 ] && exit 1 - exit 0 -fi -if [ ! -z `which gtk-query-immodules-2.0` ]; then - gtk-query-immodules-2.0 > ${libdir}/gtk-2.0/2.10.0/immodules.cache -fi -if [ ! -z `which gtk-query-immodules-3.0` ]; then - gtk-query-immodules-3.0 > ${libdir}/gtk-3.0/3.0.0/immodules.cache + $INTERCEPT_DIR/postinst_intercept update_gtk_immodules_cache ${PKG} \ + mlprefix=${MLPREFIX} \ + binprefix=${MLPREFIX} \ + libdir=${libdir} \ + libexecdir=${libexecdir} \ + base_libdir=${base_libdir} \ + bindir=${bindir} +else + if [ ! -z `which gtk-query-immodules-2.0` ]; then + gtk-query-immodules-2.0 > ${libdir}/gtk-2.0/2.10.0/immodules.cache + fi + if [ ! -z `which gtk-query-immodules-3.0` ]; then + gtk-query-immodules-3.0 > ${libdir}/gtk-3.0/3.0.0/immodules.cache + fi fi }
scripts/postinst-intercepts/update_gtk_immodules_cache new file +18 -0
@@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if [ -x $D${bindir}/gtk-query-immodules-2.0 ]; then + PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir} \ + $D/${bindir}/gtk-query-immodules-2.0 \ + > $D${libdir}/gtk-2.0/2.10.0/immodules.cache && + sed -i -e "s:$D::" $D${libdir}/gtk-2.0/2.10.0/immodules.cache + chown root:root $D${libdir}/gtk-2.0/2.10.0/immodules.cache +fi +if [ -x $D${bindir}/gtk-query-immodules-3.0 ]; then + PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir} \ + $D/${bindir}/gtk-query-immodules-3.0 \ + > $D${libdir}/gtk-3.0/3.0.0/immodules.cache && + sed -i -e "s:$D::" $D${libdir}/gtk-3.0/3.0.0/immodules.cache + chown root:root $D${libdir}/gtk-3.0/3.0.0/immodules.cache +fi
Signature · 1 line
2.17.0
PATCH 3/6 lib/oe/package_manager: turn postinst failure warnings into bitbake failures
In reply to Alexander KanavinSumo release provides a transition period so that deferrals to first boot via 'exit 1' can be converted to pkg_postinst_ontarget(). For the next release however, postinst script failures should be treated as such.
[YOCTO #12607]
--- meta/lib/oe/package_manager.py | 22 +++++++------------- meta/lib/oeqa/selftest/cases/runtime_test.py | 4 ++-- 2 files changed, 9 insertions(+), 17 deletions(-)
meta/lib/oe/package_manager.py +7 -15
@@ -84,10 +84,10 @@ def opkg_query(cmd_output): return output -# Note: this should be bb.fatal in the future. -def failed_postinsts_warn(pkgs, log_path): - bb.warn("""Intentionally failing postinstall scriptlets of %s to defer them to first boot is deprecated. Please place them into pkg_postinst_ontarget_${PN} (). -If deferring to first boot wasn't the intent, then scriptlet failure may mean an issue in the recipe, or a regression elsewhere. +def failed_postinsts_abort(pkgs, log_path): + bb.fatal("""Postinstall scriptlets of %s have failed. If the intention is to defer them to first boot, +then please place them into pkg_postinst_ontarget_${PN} (). +Deferring to first boot via 'exit 1' is no longer supported. Details of the failure are in %s.""" %(pkgs, log_path)) class Indexer(object, metaclass=ABCMeta):
@@ -789,9 +789,7 @@ class RpmPM(PackageManager): failed_scriptlets_pkgnames[line.split()[-1]] = True if len(failed_scriptlets_pkgnames) > 0: - failed_postinsts_warn(list(failed_scriptlets_pkgnames.keys()), self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) - for pkg in failed_scriptlets_pkgnames.keys(): - self.save_rpmpostinst(pkg) + failed_postinsts_abort(list(failed_scriptlets_pkgnames.keys()), self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) def remove(self, pkgs, with_dependencies = True): if len(pkgs) == 0:
@@ -1269,7 +1267,7 @@ class OpkgPM(OpkgDpkgPM): bb.warn(line) failed_pkgs.append(line.split(".")[0]) if failed_pkgs: - failed_postinsts_warn(failed_pkgs, self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) + failed_postinsts_abort(failed_pkgs, self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) except subprocess.CalledProcessError as e: (bb.fatal, bb.warn)[attempt_only]("Unable to install packages. " "Command '%s' returned %d:\n%s" %
@@ -1519,7 +1517,6 @@ class DpkgPM(OpkgDpkgPM): os.environ['INTERCEPT_DIR'] = self.intercepts_dir os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE') - failed_pkgs = [] for pkg_name in installed_pkgs: for control_script in control_scripts: p_full = os.path.join(info_dir, pkg_name + control_script.suffix)
@@ -1534,12 +1531,7 @@ class DpkgPM(OpkgDpkgPM): bb.warn("%s for package %s failed with %d:\n%s" % (control_script.name, pkg_name, e.returncode, e.output.decode("utf-8"))) - failed_postinsts_warn([pkg_name], self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) - failed_pkgs.append(pkg_name) - break - - if len(failed_pkgs): - self.mark_packages("unpacked", failed_pkgs) + failed_postinsts_abort([pkg_name], self.d.expand("${T}/log.do_${BB_CURRENTTASK}")) def update(self): os.environ['APT_CONFIG'] = self.apt_conf_file
meta/lib/oeqa/selftest/cases/runtime_test.py +2 -2
@@ -249,8 +249,8 @@ class Postinst(OESelftestTestCase): features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-rootfs-failing"\n' features += 'PACKAGE_CLASSES = "%s"\n' % classes self.write_config(features) - bb_result = bitbake('core-image-minimal') - self.assertGreaterEqual(bb_result.output.find("Intentionally failing postinstall scriptlets of ['postinst-rootfs-failing'] to defer them to first boot is deprecated."), 0, + bb_result = bitbake('core-image-minimal', ignore_status=True) + self.assertGreaterEqual(bb_result.output.find("Postinstall scriptlets of ['postinst-rootfs-failing'] have failed."), 0, "Warning about a failed scriptlet not found in bitbake output: %s" %(bb_result.output)) self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs-before-failure")),
Signature · 1 line
2.17.0
PATCH 4/6 qemuwrapper-cross: always fall back to x86_64 and i386 variants of qemu
In reply to Alexander KanavinThis helps in particular when executing nativesdk- postinsts; previously they were attempted only with target qemu, and this obivously failed.
This could be solved by properly mapping the binary to be run to the best available qemu variant for the binary architecture, but that would be a lot more invasive change, and so I think a simple fallback should be fine.
Also, add 'set -x' so we know exactly what is being executed.
--- .../qemu/qemuwrapper-cross_1.0.bb | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-)
meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb +11 -18
@@ -16,31 +16,24 @@ do_install () { echo "#!/bin/sh" > ${D}${bindir_crossscripts}/qemuwrapper qemu_binary=${@qemu_target_binary(d)} qemu_options='${QEMU_OPTIONS}' + echo "set -x" >> ${D}${bindir_crossscripts}/qemuwrapper echo "$qemu_binary $qemu_options \"\$@\"" >> ${D}${bindir_crossscripts}/qemuwrapper - fallback_qemu_bin= - case $qemu_binary in - "qemu-i386") - fallback_qemu_bin=qemu-x86_64 - ;; - "qemu-x86_64") - fallback_qemu_bin=qemu-i386 - ;; - *) - ;; - esac - - if [ -n "$fallback_qemu_bin" ]; then - - cat >> ${D}${bindir_crossscripts}/qemuwrapper << EOF + + cat >> ${D}${bindir_crossscripts}/qemuwrapper << EOF rc=\$? if [ \$rc = 255 ]; then - $fallback_qemu_bin "\$@" + qemu-x86_64 $qemu_options "\$@" rc=\$? fi -exit \$rc EOF - fi + cat >> ${D}${bindir_crossscripts}/qemuwrapper << EOF +if [ \$rc = 255 ]; then + qemu-i386 $qemu_options "\$@" + rc=\$? +fi +exit \$rc +EOF chmod +x ${D}${bindir_crossscripts}/qemuwrapper }
Signature · 1 line
2.17.0
PATCH 5/6 qemuwrapper-cross: set LD_LIBRARY_PATH directly
In reply to Alexander KanavinPreviously the library paths were passed down from recipes, and if said recipes were allarch, and library paths were something else than /lib and /usr/lib (multilib, x32, etc.), things broke down.
--- meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb | 2 +- scripts/postinst-intercepts/update_font_cache | 3 +-- scripts/postinst-intercepts/update_gio_module_cache | 3 +-- scripts/postinst-intercepts/update_gtk_immodules_cache | 6 ++---- scripts/postinst-intercepts/update_pixbuf_cache | 3 +-- 5 files changed, 6 insertions(+), 11 deletions(-)
meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb +1 -1
@@ -15,7 +15,7 @@ do_install () { echo "#!/bin/sh" > ${D}${bindir_crossscripts}/qemuwrapper qemu_binary=${@qemu_target_binary(d)} - qemu_options='${QEMU_OPTIONS}' + qemu_options='${QEMU_OPTIONS} -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir}' echo "set -x" >> ${D}${bindir_crossscripts}/qemuwrapper echo "$qemu_binary $qemu_options \"\$@\"" >> ${D}${bindir_crossscripts}/qemuwrapper
scripts/postinst-intercepts/update_font_cache +1 -2
@@ -2,6 +2,5 @@ set -e -PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/${libdir}:$D/${base_libdir} \ - -E ${fontconfigcacheenv} $D${bindir}/fc-cache --sysroot=$D --system-only ${fontconfigcacheparams} +PSEUDO_UNLOAD=1 qemuwrapper -L $D -E ${fontconfigcacheenv} $D${bindir}/fc-cache --sysroot=$D --system-only ${fontconfigcacheparams} chown -R root:root $D${fontconfigcachedir}
scripts/postinst-intercepts/update_gio_module_cache +1 -2
@@ -2,8 +2,7 @@ set -e -PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir} \ - $D${libexecdir}/${binprefix}gio-querymodules $D${libdir}/gio/modules/ +PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${libexecdir}/${binprefix}gio-querymodules $D${libdir}/gio/modules/ [ ! -e $D${libdir}/gio/modules/giomodule.cache ] || chown root:root $D${libdir}/gio/modules/giomodule.cache
scripts/postinst-intercepts/update_gtk_immodules_cache +2 -4
@@ -3,15 +3,13 @@ set -e if [ -x $D${bindir}/gtk-query-immodules-2.0 ]; then - PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir} \ - $D/${bindir}/gtk-query-immodules-2.0 \ + PSEUDO_UNLOAD=1 qemuwrapper -L $D $D/${bindir}/gtk-query-immodules-2.0 \ > $D${libdir}/gtk-2.0/2.10.0/immodules.cache && sed -i -e "s:$D::" $D${libdir}/gtk-2.0/2.10.0/immodules.cache chown root:root $D${libdir}/gtk-2.0/2.10.0/immodules.cache fi if [ -x $D${bindir}/gtk-query-immodules-3.0 ]; then - PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir} \ - $D/${bindir}/gtk-query-immodules-3.0 \ + PSEUDO_UNLOAD=1 qemuwrapper -L $D $D/${bindir}/gtk-query-immodules-3.0 \ > $D${libdir}/gtk-3.0/3.0.0/immodules.cache && sed -i -e "s:$D::" $D${libdir}/gtk-3.0/3.0.0/immodules.cache chown root:root $D${libdir}/gtk-3.0/3.0.0/immodules.cache
scripts/postinst-intercepts/update_pixbuf_cache +1 -2
@@ -5,7 +5,6 @@ set -e export GDK_PIXBUF_MODULEDIR=$D${libdir}/gdk-pixbuf-2.0/2.10.0/loaders export GDK_PIXBUF_FATAL_LOADER=1 -PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/${libdir}:$D/${base_libdir}\ - $D${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders \ +PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders \ >$GDK_PIXBUF_MODULEDIR/../loaders.cache && \ sed -i -e "s:$D::g" $GDK_PIXBUF_MODULEDIR/../loaders.cache
Signature · 1 line
2.17.0
PATCH 6/6 package_manger.py: rework postinst_intercept failures
In reply to Alexander KanavinPreviously a warning was printed regardless of context and nature of the failure.
Now, the following is considered when a failure happens:
1) whether we are installing packages into a target image, or populating a SDK with host or target packages.
2) whether the failure was due to qemu not supporting the target machine.
Accordingly, warnings, notes, and failures are printed, and postponing to first boot happens if possible.
--- meta/lib/oe/package_manager.py | 19 ++++++++++++++++--- meta/lib/oe/sdk.py | 12 ++++++------ .../qemu/qemuwrapper-cross_1.0.bb | 5 +++++ 3 files changed, 27 insertions(+), 9 deletions(-)
meta/lib/oe/package_manager.py +16 -3
@@ -370,7 +370,7 @@ class PackageManager(object, metaclass=ABCMeta): self._handle_intercept_failure(registered_pkgs) - def run_intercepts(self): + def run_intercepts(self, populate_sdk=None): intercepts_dir = self.intercepts_dir bb.note("Running intercept scripts:")
@@ -392,9 +392,22 @@ class PackageManager(object, metaclass=ABCMeta): output = subprocess.check_output(script_full, stderr=subprocess.STDOUT) if output: bb.note(output.decode("utf-8")) except subprocess.CalledProcessError as e: - bb.warn("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) bb.note("Exit code %d. Output:\n%s" % (e.returncode, e.output.decode("utf-8"))) - self._postpone_to_first_boot(script_full) + if populate_sdk == 'host': + bb.warn("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) + elif populate_sdk == 'target': + if "qemuwrapper: qemu usermode is not supported" in e.output.decode("utf-8"): + bb.warn("The postinstall intercept hook '%s' could not be executed due to missing qemu usermode support, details in %s/log.do_%s" + % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) + else: + bb.fatal("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) + else: + if "qemuwrapper: qemu usermode is not supported" in e.output.decode("utf-8"): + bb.note("The postinstall intercept hook '%s' could not be executed due to missing qemu usermode support, details in %s/log.do_%s" + % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) + self._postpone_to_first_boot(script_full) + else: + bb.fatal("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) @abstractmethod def update(self):
meta/lib/oe/sdk.py +6 -6
@@ -209,7 +209,7 @@ class RpmSdk(Sdk): self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) - self.target_pm.run_intercepts() + self.target_pm.run_intercepts(populate_sdk='target') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
@@ -220,7 +220,7 @@ class RpmSdk(Sdk): self._populate_sysroot(self.host_pm, self.host_manifest) self.install_locales(self.host_pm) - self.host_pm.run_intercepts() + self.host_pm.run_intercepts(populate_sdk='host') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND"))
@@ -297,7 +297,7 @@ class OpkgSdk(Sdk): self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) - self.target_pm.run_intercepts() + self.target_pm.run_intercepts(populate_sdk='target') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
@@ -308,7 +308,7 @@ class OpkgSdk(Sdk): self._populate_sysroot(self.host_pm, self.host_manifest) self.install_locales(self.host_pm) - self.host_pm.run_intercepts() + self.host_pm.run_intercepts(populate_sdk='host') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND"))
@@ -386,7 +386,7 @@ class DpkgSdk(Sdk): self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) - self.target_pm.run_intercepts() + self.target_pm.run_intercepts(populate_sdk='target') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
@@ -399,7 +399,7 @@ class DpkgSdk(Sdk): self._populate_sysroot(self.host_pm, self.host_manifest) self.install_locales(self.host_pm) - self.host_pm.run_intercepts() + self.host_pm.run_intercepts(populate_sdk='host') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND"))
meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb +5 -0
@@ -32,6 +32,11 @@ if [ \$rc = 255 ]; then qemu-i386 $qemu_options "\$@" rc=\$? fi + +if [ ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)} = False ]; then + echo "qemuwrapper: qemu usermode is not supported" +fi + exit \$rc EOF
Signature · 1 line
2.17.0