Hello Joshua, On Mon, Jan 13, 2025 at 3:58 PM Joshua Watt <[email protected]> wrote: > > On Mon, Jan 13, 2025 at 5:34 AM Igor Opaniuk via > lists.openembedded.org > <[email protected]> wrote: > > > > From: Igor Opaniuk <[email protected]> > > > > create_image_spdx() implementation assumes that image is indeed a file. > > If image recipe deploys a directory (for example, which contains an > > hierarchy of flash artifacts, that is used by SoC vendor-specific > > flashing tool) which follows ${IMAGE_NAME}.${IMAGE_TYPE} naming scheme, > > create_image_spdx() function will fail after trying to hash a directory: > > > > *** 0002:do_create_image_spdx(d) > > 0003: > > File: '.../meta/classes-recipe/create-spdx-image-3.0.bbclass', lineno: 48, > > function: do_create_image_spdx > > 0044:addtask do_create_rootfs_spdx_setscene > > 0045: > > 0046:python do_create_image_spdx() { > > 0047: import oe.spdx30_tasks > > *** 0048: oe.spdx30_tasks.create_image_spdx(d) > > 0049:} > > 0050:addtask do_create_image_spdx after do_image_complete > > do_create_rootfs_spdx before do_build > > 0051:SSTATETASKS += "do_create_image_spdx" > > ... > > File: '.../bitbake/lib/bb/utils.py', lineno: 536, function: _hasher > > 0532: > > 0533:def _hasher(method, filename): > > 0534: import mmap > > 0535: > > *** 0536: with open(filename, "rb") as f: > > 0537: try: > > 0538: with mmap.mmap(f.fileno(), 0, > > access=mmap.ACCESS_READ) as mm: > > 0539: for chunk in iter(lambda: mm.read(8192), b''): > > 0540: method.update(chunk) > > Exception: IsADirectoryError: [Errno 21] Is a directory: '...' > > > > Signed-off-by: Igor Opaniuk <[email protected]> > > --- > > meta/lib/oe/spdx30_tasks.py | 33 +++++++++++++++++++++------------ > > 1 file changed, 21 insertions(+), 12 deletions(-) > > > > diff --git a/meta/lib/oe/spdx30_tasks.py b/meta/lib/oe/spdx30_tasks.py > > index c60c97896c..20fb5644e3 100644 > > --- a/meta/lib/oe/spdx30_tasks.py > > +++ b/meta/lib/oe/spdx30_tasks.py > > @@ -1072,19 +1072,28 @@ def create_image_spdx(d): > > for image in task["images"]: > > image_filename = image["filename"] > > image_path = image_deploy_dir / image_filename > > - a = objset.add_root( > > - oe.spdx30.software_File( > > - _id=objset.new_spdxid("image", image_filename), > > - creationInfo=objset.doc.creationInfo, > > - name=image_filename, > > - verifiedUsing=[ > > - oe.spdx30.Hash( > > - algorithm=oe.spdx30.HashAlgorithm.sha256, > > - hashValue=bb.utils.sha256_file(image_path), > > - ) > > - ], > > + if os.path.isdir(image_path): > > + a = objset.add_root( > > + oe.spdx30.software_Package( > > + _id=objset.new_spdxid("image-files", > > image_filename), > > + creationInfo=objset.doc.creationInfo, > > + name=image_filename, > > + ) > > A "package" is not the correct thing to use here. It should > recursively add all the files (with their checksums). I think reusing > add_package_files() would be best, do you have an example of a recipe > that does this? Thanks for looking into this. Will rework with add_package_files() and send v2.
I stumbled upon this issue when I was reworking custom fstype implementation in [1] meta-qcom-hwe layer, which creates a tarball with all boot artifacts that are "consumed" by QDL tool [2] for flashing a target board. The idea was to create folder with all ready-to-flash artifacts besides a tarball, so we can test local builds right away avoiding the additional "unpack the tarball" step. I'm still not sure if it's the right approach, as the fundamental question is if image recipe output can be a directory (is it even legit?). [1] https://github.com/qualcomm-linux/meta-qcom-hwe/pull/122 [2] https://github.com/linux-msm/qdl > > > + ) > > + else: > > + a = objset.add_root( > > + oe.spdx30.software_File( > > + _id=objset.new_spdxid("image", image_filename), > > + creationInfo=objset.doc.creationInfo, > > + name=image_filename, > > + verifiedUsing=[ > > + oe.spdx30.Hash( > > + algorithm=oe.spdx30.HashAlgorithm.sha256, > > + hashValue=bb.utils.sha256_file(image_path), > > + ) > > + ], > > + ) > > ) > > - ) > > set_purposes( > > d, a, "SPDX_IMAGE_PURPOSE:%s" % imagetype, > > "SPDX_IMAGE_PURPOSE" > > ) > > -- > > 2.43.0 > > > > > > > > -- Best regards - Freundliche Grüsse - Meilleures salutations Igor Opaniuk Senior Software Engineer, Embedded & Security E: [email protected] W: www.foundries.io
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#209736): https://lists.openembedded.org/g/openembedded-core/message/209736 Mute This Topic: https://lists.openembedded.org/mt/110585648/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
