[OE-core] [PATCH] image.bbclass: Use deltask instead of noexec for package_write_rpm
Jason Wessel
jason.wessel at windriver.com
Fri Mar 2 20:27:10 UTC 2018
If you install an image into another image (this is the case for
custom initrd for example), it will fail with a non obvious python
backtrace. This patch modifies the package_manager.py print which
package causes the failure for the future, if it is missing a
manifest.
The error you get looks like this:
oe-core/meta/lib/oe/package_manager.py', lineno: 534, function: create_packages_dir
0530:
0531: for dep in rpmdeps:
0532: c = taskdepdata[dep][0]
0533: manifest, d2 = oe.sstatesig.find_sstate_manifest(c, taskdepdata[dep][2], taskname, d, multilibs)
*** 0534: if not os.path.exists(manifest):
0535: continue
0536: with open(manifest, "r") as f:
0537: for l in f:
0538: l = l.strip()
File: '/usr/lib/python3.5/genericpath.py', lineno: 19, function: exists
0015:# This is false for dangling symbolic links on systems that support them.
0016:def exists(path):
0017: """Test whether a path exists. Returns False for broken symbolic links"""
0018: try:
*** 0019: os.stat(path)
0020: except OSError:
0021: return False
0022: return True
0023:
Exception: TypeError: stat: can't specify None for path argument
The root cause of the problem was determined to be the noexec clause
in the image.bbclass. When the package_write_rpm task runs it expects
that a manifest will be generated. Not running the task eliminates
the problem.
Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
---
meta/classes/image.bbclass | 2 +-
meta/lib/oe/package_manager.py | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 23ed53d..ad44f11 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -629,7 +629,7 @@ deltask do_package_qa
do_packagedata[noexec] = "1"
do_package_write_ipk[noexec] = "1"
do_package_write_deb[noexec] = "1"
-do_package_write_rpm[noexec] = "1"
+deltask do_package_write_rpm
# Prepare the root links to point to the /usr counterparts.
create_merged_usr_symlinks() {
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 287ca9a..980649f 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -531,6 +531,8 @@ def create_packages_dir(d, rpm_repo_dir, deploydir, taskname, filterbydependenci
for dep in rpmdeps:
c = taskdepdata[dep][0]
manifest, d2 = oe.sstatesig.find_sstate_manifest(c, taskdepdata[dep][2], taskname, d, multilibs)
+ if not manifest:
+ bb.fatal("No manifest generated from: %s in %s" % (c, taskdepdata[dep][2]))
if not os.path.exists(manifest):
continue
with open(manifest, "r") as f:
--
2.7.4
More information about the Openembedded-core
mailing list