mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
lib/oe/package_manager: turn postinst failure warnings into bitbake failures
Sumo 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] (From OE-Core rev: 42acb0ebde4e88bcdf34a541b700f19d8607abb0) Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
4434777705
commit
5e3a07180b
@@ -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))
|
||||
|
||||
def generate_locale_archive(d, rootfs, target_arch, localedir):
|
||||
@@ -858,9 +858,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:
|
||||
@@ -1341,7 +1339,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" %
|
||||
@@ -1594,7 +1592,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)
|
||||
@@ -1609,12 +1606,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
|
||||
|
||||
@@ -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")),
|
||||
|
||||
Reference in New Issue
Block a user