diff options
author | Alexander Kanavin <alexander.kanavin@linux.intel.com> | 2018-06-11 16:38:22 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-06-18 11:07:58 +0100 |
commit | 4699d29ac2a1a8607970638df9cf6478b1c02331 (patch) | |
tree | b580b6c62475011d6e1710e65d935235cbd679e9 /meta | |
parent | bdfca89b8025dd1fe7c09445c178993dfa9cdab9 (diff) | |
download | poky-4699d29ac2a1a8607970638df9cf6478b1c02331.tar.gz |
package_manager.py: rework postinst_intercept failures
Previously a warning was printed regardless of context and nature
of the failure, and because it was only a warning, it was mostly ignored.
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.
(From OE-Core rev: a335e78672b1e1ae3ea6427f6a805218e513bb52)
Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oe/package_manager.py | 19 | ||||
-rw-r--r-- | meta/lib/oe/sdk.py | 12 | ||||
-rw-r--r-- | meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb | 5 |
3 files changed, 27 insertions, 9 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py index 5ac729455e..20a41d53f8 100644 --- a/meta/lib/oe/package_manager.py +++ b/meta/lib/oe/package_manager.py | |||
@@ -370,7 +370,7 @@ class PackageManager(object, metaclass=ABCMeta): | |||
370 | self._handle_intercept_failure(registered_pkgs) | 370 | self._handle_intercept_failure(registered_pkgs) |
371 | 371 | ||
372 | 372 | ||
373 | def run_intercepts(self): | 373 | def run_intercepts(self, populate_sdk=None): |
374 | intercepts_dir = self.intercepts_dir | 374 | intercepts_dir = self.intercepts_dir |
375 | 375 | ||
376 | bb.note("Running intercept scripts:") | 376 | bb.note("Running intercept scripts:") |
@@ -392,9 +392,22 @@ class PackageManager(object, metaclass=ABCMeta): | |||
392 | output = subprocess.check_output(script_full, stderr=subprocess.STDOUT) | 392 | output = subprocess.check_output(script_full, stderr=subprocess.STDOUT) |
393 | if output: bb.note(output.decode("utf-8")) | 393 | if output: bb.note(output.decode("utf-8")) |
394 | except subprocess.CalledProcessError as e: | 394 | except subprocess.CalledProcessError as e: |
395 | bb.warn("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
396 | bb.note("Exit code %d. Output:\n%s" % (e.returncode, e.output.decode("utf-8"))) | 395 | bb.note("Exit code %d. Output:\n%s" % (e.returncode, e.output.decode("utf-8"))) |
397 | self._postpone_to_first_boot(script_full) | 396 | if populate_sdk == 'host': |
397 | bb.warn("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
398 | elif populate_sdk == 'target': | ||
399 | if "qemuwrapper: qemu usermode is not supported" in e.output.decode("utf-8"): | ||
400 | bb.warn("The postinstall intercept hook '%s' could not be executed due to missing qemu usermode support, details in %s/log.do_%s" | ||
401 | % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
402 | else: | ||
403 | bb.fatal("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
404 | else: | ||
405 | if "qemuwrapper: qemu usermode is not supported" in e.output.decode("utf-8"): | ||
406 | bb.note("The postinstall intercept hook '%s' could not be executed due to missing qemu usermode support, details in %s/log.do_%s" | ||
407 | % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
408 | self._postpone_to_first_boot(script_full) | ||
409 | else: | ||
410 | bb.fatal("The postinstall intercept hook '%s' failed, details in %s/log.do_%s" % (script, self.d.getVar('T'), self.d.getVar('BB_CURRENTTASK'))) | ||
398 | 411 | ||
399 | @abstractmethod | 412 | @abstractmethod |
400 | def update(self): | 413 | def update(self): |
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py index d6a503372a..0d39ea8a91 100644 --- a/meta/lib/oe/sdk.py +++ b/meta/lib/oe/sdk.py | |||
@@ -209,7 +209,7 @@ class RpmSdk(Sdk): | |||
209 | 209 | ||
210 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) | 210 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) |
211 | 211 | ||
212 | self.target_pm.run_intercepts() | 212 | self.target_pm.run_intercepts(populate_sdk='target') |
213 | 213 | ||
214 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) | 214 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) |
215 | 215 | ||
@@ -220,7 +220,7 @@ class RpmSdk(Sdk): | |||
220 | self._populate_sysroot(self.host_pm, self.host_manifest) | 220 | self._populate_sysroot(self.host_pm, self.host_manifest) |
221 | self.install_locales(self.host_pm) | 221 | self.install_locales(self.host_pm) |
222 | 222 | ||
223 | self.host_pm.run_intercepts() | 223 | self.host_pm.run_intercepts(populate_sdk='host') |
224 | 224 | ||
225 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) | 225 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) |
226 | 226 | ||
@@ -297,7 +297,7 @@ class OpkgSdk(Sdk): | |||
297 | 297 | ||
298 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) | 298 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) |
299 | 299 | ||
300 | self.target_pm.run_intercepts() | 300 | self.target_pm.run_intercepts(populate_sdk='target') |
301 | 301 | ||
302 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) | 302 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) |
303 | 303 | ||
@@ -308,7 +308,7 @@ class OpkgSdk(Sdk): | |||
308 | self._populate_sysroot(self.host_pm, self.host_manifest) | 308 | self._populate_sysroot(self.host_pm, self.host_manifest) |
309 | self.install_locales(self.host_pm) | 309 | self.install_locales(self.host_pm) |
310 | 310 | ||
311 | self.host_pm.run_intercepts() | 311 | self.host_pm.run_intercepts(populate_sdk='host') |
312 | 312 | ||
313 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) | 313 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) |
314 | 314 | ||
@@ -386,7 +386,7 @@ class DpkgSdk(Sdk): | |||
386 | 386 | ||
387 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) | 387 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) |
388 | 388 | ||
389 | self.target_pm.run_intercepts() | 389 | self.target_pm.run_intercepts(populate_sdk='target') |
390 | 390 | ||
391 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) | 391 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) |
392 | 392 | ||
@@ -399,7 +399,7 @@ class DpkgSdk(Sdk): | |||
399 | self._populate_sysroot(self.host_pm, self.host_manifest) | 399 | self._populate_sysroot(self.host_pm, self.host_manifest) |
400 | self.install_locales(self.host_pm) | 400 | self.install_locales(self.host_pm) |
401 | 401 | ||
402 | self.host_pm.run_intercepts() | 402 | self.host_pm.run_intercepts(populate_sdk='host') |
403 | 403 | ||
404 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) | 404 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) |
405 | 405 | ||
diff --git a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb index 4b1b46d0bb..4aada5232d 100644 --- a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb +++ b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb | |||
@@ -20,6 +20,11 @@ do_install () { | |||
20 | #!/bin/sh | 20 | #!/bin/sh |
21 | set -x | 21 | set -x |
22 | 22 | ||
23 | if [ ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)} = False ]; then | ||
24 | echo "qemuwrapper: qemu usermode is not supported" | ||
25 | fi | ||
26 | |||
27 | |||
23 | $qemu_binary $qemu_options "\$@" | 28 | $qemu_binary $qemu_options "\$@" |
24 | EOF | 29 | EOF |
25 | 30 | ||