* [PATCH v3 0/2] image-bootfiles: new class
@ 2024-05-28 9:08 Marcus Folkesson
2024-05-28 9:08 ` [PATCH v3 1/2] bootimg-partition: break out code to a common library Marcus Folkesson
2024-05-28 9:08 ` [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem Marcus Folkesson
0 siblings, 2 replies; 7+ messages in thread
From: Marcus Folkesson @ 2024-05-28 9:08 UTC (permalink / raw)
To: openembedded-core, Quentin Schulz; +Cc: Marcus Folkesson
The image-bootfiles class is used to put all files listed in
IMAGE_BOOT_FILES into the root filesystem.
IMAGE_BOOT_FILES is used by the bootimg-partition wic plugin to put the
files into a boot partition.
Be able to list files as "boot files" in e.g. your .conf or image files
instead of install those in every recipe is a good thing.
It is not always desired to have a separate boot partition for boot
files. Sometimes it could be good to have them as a part of the root
filesystem.
For example, if a double copy strategy is used for update the system,
then you probably want to update both the boot files and root filesystem
at the same time as there may be dependencies.
v2:
- Removed the documentation from the patch series (will be submitted later)
- Break out the parts in bootimg-partition that is used by
image-bootfiles to a common library
- Make the destination directory in root filesystem configurable
v3:
- See changelog in patches
Marcus Folkesson (2):
bootimg-partition: break out code to a common library.
image-bootfiles.bbclass: new class, copy boot files to root filesystem
meta/classes/image-bootfiles.bbclass | 38 +++++++++++++
meta/lib/oe/bootfiles.py | 56 +++++++++++++++++++
.../wic/plugins/source/bootimg-partition.py | 39 +------------
3 files changed, 97 insertions(+), 36 deletions(-)
create mode 100644 meta/classes/image-bootfiles.bbclass
create mode 100644 meta/lib/oe/bootfiles.py
--
2.45.1
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v3 1/2] bootimg-partition: break out code to a common library. 2024-05-28 9:08 [PATCH v3 0/2] image-bootfiles: new class Marcus Folkesson @ 2024-05-28 9:08 ` Marcus Folkesson 2024-05-28 11:01 ` Quentin Schulz 2024-05-28 9:08 ` [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem Marcus Folkesson 1 sibling, 1 reply; 7+ messages in thread From: Marcus Folkesson @ 2024-05-28 9:08 UTC (permalink / raw) To: openembedded-core, Quentin Schulz; +Cc: Marcus Folkesson Break out the code that parse IMAGE_BOOT_FILES to a common library. Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de> --- Notes: v3: - Removed unnecessary "import glob" - Explicitely tell that bootfiles_populate() returns a tuple meta/lib/oe/bootfiles.py | 56 +++++++++++++++++++ .../wic/plugins/source/bootimg-partition.py | 39 +------------ 2 files changed, 59 insertions(+), 36 deletions(-) create mode 100644 meta/lib/oe/bootfiles.py diff --git a/meta/lib/oe/bootfiles.py b/meta/lib/oe/bootfiles.py new file mode 100644 index 0000000000..666141df4e --- /dev/null +++ b/meta/lib/oe/bootfiles.py @@ -0,0 +1,56 @@ +# +# SPDX-License-Identifier: MIT +# +# Copyright (C) 2024 Marcus Folkesson +# Author: Marcus Folkesson <marcus.folkesson@gmail.com> +# +# Utility functions handling boot files +# +# Look into deploy_dir and search for boot_files. +# Returns a list of tuples with (original filepath relative to +# deploy_dir, desired filepath renaming) +# +# Heavily inspired of bootimg-partition.py +# +def get_boot_files(deploy_dir, boot_files): + import re + import os + + if boot_files is None: + return None + + # list of tuples (src_name, dst_name) + deploy_files = [] + for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files): + if ';' in src_entry: + dst_entry = tuple(src_entry.split(';')) + if not dst_entry[0] or not dst_entry[1]: + raise ValueError('Malformed boot file entry: %s' % src_entry) + else: + dst_entry = (src_entry, src_entry) + + deploy_files.append(dst_entry) + + install_files = [] + for deploy_entry in deploy_files: + src, dst = deploy_entry + if '*' in src: + # by default install files under their basename + entry_name_fn = os.path.basename + if dst != src: + # unless a target name was given, then treat name + # as a directory and append a basename + entry_name_fn = lambda name: \ + os.path.join(dst, + os.path.basename(name)) + + srcs = glob(os.path.join(deploy_dir, src)) + + for entry in srcs: + src = os.path.relpath(entry, deploy_dir) + entry_dst_name = entry_name_fn(entry) + install_files.append((src, entry_dst_name)) + else: + install_files.append((src, dst)) + + return install_files diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py index 1071d1af3f..b22a448b65 100644 --- a/scripts/lib/wic/plugins/source/bootimg-partition.py +++ b/scripts/lib/wic/plugins/source/bootimg-partition.py @@ -18,6 +18,8 @@ import re from glob import glob +from oe.bootfiles import get_boot_files + from wic import WicError from wic.engine import get_custom_config from wic.pluginbase import SourcePlugin @@ -66,42 +68,7 @@ class BootimgPartitionPlugin(SourcePlugin): logger.debug('Boot files: %s', boot_files) - # list of tuples (src_name, dst_name) - deploy_files = [] - for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files): - if ';' in src_entry: - dst_entry = tuple(src_entry.split(';')) - if not dst_entry[0] or not dst_entry[1]: - raise WicError('Malformed boot file entry: %s' % src_entry) - else: - dst_entry = (src_entry, src_entry) - - logger.debug('Destination entry: %r', dst_entry) - deploy_files.append(dst_entry) - - cls.install_task = []; - for deploy_entry in deploy_files: - src, dst = deploy_entry - if '*' in src: - # by default install files under their basename - entry_name_fn = os.path.basename - if dst != src: - # unless a target name was given, then treat name - # as a directory and append a basename - entry_name_fn = lambda name: \ - os.path.join(dst, - os.path.basename(name)) - - srcs = glob(os.path.join(kernel_dir, src)) - - logger.debug('Globbed sources: %s', ', '.join(srcs)) - for entry in srcs: - src = os.path.relpath(entry, kernel_dir) - entry_dst_name = entry_name_fn(entry) - cls.install_task.append((src, entry_dst_name)) - else: - cls.install_task.append((src, dst)) - + cls.install_task = get_boot_files(kernel_dir, boot_files) if source_params.get('loader') != "u-boot": return -- 2.45.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] bootimg-partition: break out code to a common library. 2024-05-28 9:08 ` [PATCH v3 1/2] bootimg-partition: break out code to a common library Marcus Folkesson @ 2024-05-28 11:01 ` Quentin Schulz 2024-05-28 11:48 ` Marcus Folkesson 0 siblings, 1 reply; 7+ messages in thread From: Quentin Schulz @ 2024-05-28 11:01 UTC (permalink / raw) To: Marcus Folkesson, openembedded-core Hi Marcus, On 5/28/24 11:08 AM, Marcus Folkesson wrote: > Break out the code that parse IMAGE_BOOT_FILES to a common library. > > Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> > Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de> > --- > > Notes: > v3: > - Removed unnecessary "import glob" Ah, there was a misunderstanding here, the "wrong" import glob got removed :) > - Explicitely tell that bootfiles_populate() returns a tuple > > meta/lib/oe/bootfiles.py | 56 +++++++++++++++++++ > .../wic/plugins/source/bootimg-partition.py | 39 +------------ > 2 files changed, 59 insertions(+), 36 deletions(-) > create mode 100644 meta/lib/oe/bootfiles.py > > diff --git a/meta/lib/oe/bootfiles.py b/meta/lib/oe/bootfiles.py > new file mode 100644 > index 0000000000..666141df4e > --- /dev/null > +++ b/meta/lib/oe/bootfiles.py > @@ -0,0 +1,56 @@ > +# > +# SPDX-License-Identifier: MIT > +# > +# Copyright (C) 2024 Marcus Folkesson > +# Author: Marcus Folkesson <marcus.folkesson@gmail.com> > +# > +# Utility functions handling boot files > +# > +# Look into deploy_dir and search for boot_files. > +# Returns a list of tuples with (original filepath relative to > +# deploy_dir, desired filepath renaming) > +# > +# Heavily inspired of bootimg-partition.py > +# > +def get_boot_files(deploy_dir, boot_files): > + import re > + import os > + We need from glob import glob here........ > + if boot_files is None: > + return None > + > + # list of tuples (src_name, dst_name) > + deploy_files = [] > + for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files): > + if ';' in src_entry: > + dst_entry = tuple(src_entry.split(';')) > + if not dst_entry[0] or not dst_entry[1]: > + raise ValueError('Malformed boot file entry: %s' % src_entry) > + else: > + dst_entry = (src_entry, src_entry) > + > + deploy_files.append(dst_entry) > + > + install_files = [] > + for deploy_entry in deploy_files: > + src, dst = deploy_entry > + if '*' in src: > + # by default install files under their basename > + entry_name_fn = os.path.basename > + if dst != src: > + # unless a target name was given, then treat name > + # as a directory and append a basename > + entry_name_fn = lambda name: \ > + os.path.join(dst, > + os.path.basename(name)) > + > + srcs = glob(os.path.join(deploy_dir, src)) > + .... otherwise this won't work (it'll I believe but only if the python module that calls it imports glob itself). > + for entry in srcs: > + src = os.path.relpath(entry, deploy_dir) > + entry_dst_name = entry_name_fn(entry) > + install_files.append((src, entry_dst_name)) > + else: > + install_files.append((src, dst)) > + > + return install_files > diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py > index 1071d1af3f..b22a448b65 100644 > --- a/scripts/lib/wic/plugins/source/bootimg-partition.py > +++ b/scripts/lib/wic/plugins/source/bootimg-partition.py > @@ -18,6 +18,8 @@ import re > > from glob import glob > It's this glob we don't need anymore, because it would then be imported by the python lib added in this very patch. Cheers, Quentin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] bootimg-partition: break out code to a common library. 2024-05-28 11:01 ` Quentin Schulz @ 2024-05-28 11:48 ` Marcus Folkesson 0 siblings, 0 replies; 7+ messages in thread From: Marcus Folkesson @ 2024-05-28 11:48 UTC (permalink / raw) To: Quentin Schulz; +Cc: openembedded-core [-- Attachment #1: Type: text/plain, Size: 4121 bytes --] Hi Quentin, On Tue, May 28, 2024 at 01:01:29PM +0200, Quentin Schulz wrote: > Hi Marcus, > > On 5/28/24 11:08 AM, Marcus Folkesson wrote: > > Break out the code that parse IMAGE_BOOT_FILES to a common library. > > > > Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> > > Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de> > > --- > > > > Notes: > > v3: > > - Removed unnecessary "import glob" > > Ah, there was a misunderstanding here, the "wrong" import glob got removed > :) Ah, of course. > > > - Explicitely tell that bootfiles_populate() returns a tuple > > > > meta/lib/oe/bootfiles.py | 56 +++++++++++++++++++ > > .../wic/plugins/source/bootimg-partition.py | 39 +------------ > > 2 files changed, 59 insertions(+), 36 deletions(-) > > create mode 100644 meta/lib/oe/bootfiles.py > > > > diff --git a/meta/lib/oe/bootfiles.py b/meta/lib/oe/bootfiles.py > > new file mode 100644 > > index 0000000000..666141df4e > > --- /dev/null > > +++ b/meta/lib/oe/bootfiles.py > > @@ -0,0 +1,56 @@ > > +# > > +# SPDX-License-Identifier: MIT > > +# > > +# Copyright (C) 2024 Marcus Folkesson > > +# Author: Marcus Folkesson <marcus.folkesson@gmail.com> > > +# > > +# Utility functions handling boot files > > +# > > +# Look into deploy_dir and search for boot_files. > > +# Returns a list of tuples with (original filepath relative to > > +# deploy_dir, desired filepath renaming) > > +# > > +# Heavily inspired of bootimg-partition.py > > +# > > +def get_boot_files(deploy_dir, boot_files): > > + import re > > + import os > > + > > We need from glob import glob here........ > > > + if boot_files is None: > > + return None > > + > > + # list of tuples (src_name, dst_name) > > + deploy_files = [] > > + for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files): > > + if ';' in src_entry: > > + dst_entry = tuple(src_entry.split(';')) > > + if not dst_entry[0] or not dst_entry[1]: > > + raise ValueError('Malformed boot file entry: %s' % src_entry) > > + else: > > + dst_entry = (src_entry, src_entry) > > + > > + deploy_files.append(dst_entry) > > + > > + install_files = [] > > + for deploy_entry in deploy_files: > > + src, dst = deploy_entry > > + if '*' in src: > > + # by default install files under their basename > > + entry_name_fn = os.path.basename > > + if dst != src: > > + # unless a target name was given, then treat name > > + # as a directory and append a basename > > + entry_name_fn = lambda name: \ > > + os.path.join(dst, > > + os.path.basename(name)) > > + > > + srcs = glob(os.path.join(deploy_dir, src)) > > + > > .... otherwise this won't work (it'll I believe but only if the python > module that calls it imports glob itself). Yep, it did, that was why my testing did not catch it. > > > + for entry in srcs: > > + src = os.path.relpath(entry, deploy_dir) > > + entry_dst_name = entry_name_fn(entry) > > + install_files.append((src, entry_dst_name)) > > + else: > > + install_files.append((src, dst)) > > + > > + return install_files > > diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py > > index 1071d1af3f..b22a448b65 100644 > > --- a/scripts/lib/wic/plugins/source/bootimg-partition.py > > +++ b/scripts/lib/wic/plugins/source/bootimg-partition.py > > @@ -18,6 +18,8 @@ import re > > from glob import glob > > It's this glob we don't need anymore, because it would then be imported by > the python lib added in this very patch. > > Cheers, > Quentin Thanks again Quentin. I will delay v4 a day or two to catch more comments. Best regards, Marcus Folkesson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem 2024-05-28 9:08 [PATCH v3 0/2] image-bootfiles: new class Marcus Folkesson 2024-05-28 9:08 ` [PATCH v3 1/2] bootimg-partition: break out code to a common library Marcus Folkesson @ 2024-05-28 9:08 ` Marcus Folkesson 2024-05-28 11:23 ` Quentin Schulz 1 sibling, 1 reply; 7+ messages in thread From: Marcus Folkesson @ 2024-05-28 9:08 UTC (permalink / raw) To: openembedded-core, Quentin Schulz; +Cc: Marcus Folkesson image-bootfiles class copy files listed in IMAGE_BOOT_FILES to the IMAGE_BOOT_FILES_DIR directory of the root filesystem. This is useful when there is no explicit boot partition but all boot files should instead reside inside the root filesystem. Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> --- Notes: v3: - Skip the intermediate bootfiles() function - Rename variable names to be consistent - Various python optimizations meta/classes/image-bootfiles.bbclass | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 meta/classes/image-bootfiles.bbclass diff --git a/meta/classes/image-bootfiles.bbclass b/meta/classes/image-bootfiles.bbclass new file mode 100644 index 0000000000..79c58f414a --- /dev/null +++ b/meta/classes/image-bootfiles.bbclass @@ -0,0 +1,38 @@ +# +# SPDX-License-Identifier: MIT +# +# Copyright (C) 2024 Marcus Folkesson +# Author: Marcus Folkesson <marcus.folkesson@gmail.com> +# +# Writes IMAGE_BOOT_FILES to the IMAGE_BOOT_FILES_DIR directory +# +# +# Usage: add inherit += "image-bootfiles" to your image +# + +IMAGE_BOOT_FILES_DIR ?= "boot" + +python bootfiles_populate() { + import shutil + from oe.bootfiles import get_boot_files + + deploy_image_dir = d.getVar("DEPLOY_DIR_IMAGE") + boot_dir = os.path.join(d.getVar("IMAGE_ROOTFS"), d.getVar("IMAGE_BOOT_FILES_DIR")) + + boot_files = d.getVar("IMAGE_BOOT_FILES") + if boot_files is None: + return + + install_files = get_boot_files(deploy_image_dir, boot_files) + if install_files is None: + bb.warn("Could not find any boot files to install even though IMAGE_BOOT_FILES is not empty") + return + + os.makedirs(boot_dir, exist_ok=True) + for src, dst in install_files: + image_src = os.path.join(deploy_image_dir, src) + image_dst = os.path.join(boot_dir, dst) + shutil.copyfile(image_src, image_dst) +} + +IMAGE_PREPROCESS_COMMAND += "bootfiles_populate;" -- 2.45.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem 2024-05-28 9:08 ` [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem Marcus Folkesson @ 2024-05-28 11:23 ` Quentin Schulz 2024-05-28 11:40 ` Marcus Folkesson 0 siblings, 1 reply; 7+ messages in thread From: Quentin Schulz @ 2024-05-28 11:23 UTC (permalink / raw) To: Marcus Folkesson, openembedded-core Hi Marcus, On 5/28/24 11:08 AM, Marcus Folkesson wrote: > image-bootfiles class copy files listed in IMAGE_BOOT_FILES > to the IMAGE_BOOT_FILES_DIR directory of the root filesystem. > > This is useful when there is no explicit boot partition but all boot > files should instead reside inside the root filesystem. > > Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> > --- > > Notes: > v3: > - Skip the intermediate bootfiles() function > - Rename variable names to be consistent > - Various python optimizations > > meta/classes/image-bootfiles.bbclass | 38 ++++++++++++++++++++++++++++ > 1 file changed, 38 insertions(+) > create mode 100644 meta/classes/image-bootfiles.bbclass > > diff --git a/meta/classes/image-bootfiles.bbclass b/meta/classes/image-bootfiles.bbclass > new file mode 100644 > index 0000000000..79c58f414a > --- /dev/null > +++ b/meta/classes/image-bootfiles.bbclass > @@ -0,0 +1,38 @@ > +# > +# SPDX-License-Identifier: MIT > +# > +# Copyright (C) 2024 Marcus Folkesson > +# Author: Marcus Folkesson <marcus.folkesson@gmail.com> > +# > +# Writes IMAGE_BOOT_FILES to the IMAGE_BOOT_FILES_DIR directory > +# > +# > +# Usage: add inherit += "image-bootfiles" to your image > +# Simply inherit image-bootfiles c.f. https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-metadata.html#inherit-directive since you put this class into meta/classes/ and not meta/classes-recipes/, it could be included both with INHERIT += "image-bootfiles" and inherit image-bootfiles The former is to be included from configuration files (e.g. a distro, local.conf, machine conf file, etc.). The latter inside the image recipe directly. I am wondering if we shouldn't make this a recipes-only bbclass? so moving it to meta/classes-recipes/? This means that we won't be able to use the INHERIT += "image-bootfiles" anymore but.... should we? On one side, we have something that only applies to images, on the other hand, it's probably something close to a policy, so rather part of a distro. So just wondering, not asking for a change :) Cheers, Quentin > + > +IMAGE_BOOT_FILES_DIR ?= "boot" > + > +python bootfiles_populate() { > + import shutil > + from oe.bootfiles import get_boot_files > + > + deploy_image_dir = d.getVar("DEPLOY_DIR_IMAGE") > + boot_dir = os.path.join(d.getVar("IMAGE_ROOTFS"), d.getVar("IMAGE_BOOT_FILES_DIR")) > + > + boot_files = d.getVar("IMAGE_BOOT_FILES") > + if boot_files is None: > + return > + > + install_files = get_boot_files(deploy_image_dir, boot_files) > + if install_files is None: > + bb.warn("Could not find any boot files to install even though IMAGE_BOOT_FILES is not empty") > + return > + > + os.makedirs(boot_dir, exist_ok=True) > + for src, dst in install_files: > + image_src = os.path.join(deploy_image_dir, src) > + image_dst = os.path.join(boot_dir, dst) > + shutil.copyfile(image_src, image_dst) This won't work if the parent directory of image_dst doesn't exist yet. """ >>> import shutil >>> shutil.copyfile('plep', 'thisisatest/alsothis/test') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python3.12/shutil.py", line 262, in copyfile with open(dst, 'wb') as fdst: ^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: 'thisisatest/alsothis/test' """ So I think we need to run: os.makedirs(os.path.dirname(image_dst), exist_ok=True) before calling shutil.copyfile? In the bootimg-partition wic plugin, the following is done to install files: install -m 0644 -D <src> <dst> which creates all directories leading to <dst>. Additionally it makes it rw for owner, r for group and others. It seems that shutil.copyfile does this automatically (doesn't seem documented but it did this on a test in the python interpreter). Cheers, Quentin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem 2024-05-28 11:23 ` Quentin Schulz @ 2024-05-28 11:40 ` Marcus Folkesson 0 siblings, 0 replies; 7+ messages in thread From: Marcus Folkesson @ 2024-05-28 11:40 UTC (permalink / raw) To: Quentin Schulz; +Cc: openembedded-core [-- Attachment #1: Type: text/plain, Size: 2459 bytes --] Hi Quentin, On Tue, May 28, 2024 at 01:23:20PM +0200, Quentin Schulz wrote: > Hi Marcus, > [...] > > +# > > +# > > +# Usage: add inherit += "image-bootfiles" to your image > > +# > > Simply > > inherit image-bootfiles Noted > > c.f. https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-metadata.html#inherit-directive > > since you put this class into meta/classes/ and not meta/classes-recipes/, > it could be included both with > > INHERIT += "image-bootfiles" > > and > > inherit image-bootfiles > > The former is to be included from configuration files (e.g. a distro, > local.conf, machine conf file, etc.). The latter inside the image recipe > directly. > > I am wondering if we shouldn't make this a recipes-only bbclass? so moving > it to meta/classes-recipes/? This means that we won't be able to use the > INHERIT += "image-bootfiles" anymore but.... should we? On one side, we have > something that only applies to images, on the other hand, it's probably > something close to a policy, so rather part of a distro. So just wondering, > not asking for a change :) I don't have a strong opinion, I let this be to what people think is the best. If I must choose, I think it is more of a distro thing. > > Cheers, > Quentin > > > + > > +IMAGE_BOOT_FILES_DIR ?= "boot" > > + > > +python bootfiles_populate() { > > + import shutil > > + from oe.bootfiles import get_boot_files > > + > > + deploy_image_dir = d.getVar("DEPLOY_DIR_IMAGE") > > + boot_dir = os.path.join(d.getVar("IMAGE_ROOTFS"), d.getVar("IMAGE_BOOT_FILES_DIR")) > > + > > + boot_files = d.getVar("IMAGE_BOOT_FILES") > > + if boot_files is None: > > + return > > + > > + install_files = get_boot_files(deploy_image_dir, boot_files) > > + if install_files is None: > > + bb.warn("Could not find any boot files to install even though IMAGE_BOOT_FILES is not empty") > > + return > > + > > + os.makedirs(boot_dir, exist_ok=True) > > + for src, dst in install_files: > > + image_src = os.path.join(deploy_image_dir, src) > > + image_dst = os.path.join(boot_dir, dst) > > + shutil.copyfile(image_src, image_dst) > > This won't work if the parent directory of image_dst doesn't exist yet. Good catch, I will do as you suggest. [...] > > Cheers, > Quentin Best regards, Marcus Folkesson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-05-28 11:42 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-05-28 9:08 [PATCH v3 0/2] image-bootfiles: new class Marcus Folkesson 2024-05-28 9:08 ` [PATCH v3 1/2] bootimg-partition: break out code to a common library Marcus Folkesson 2024-05-28 11:01 ` Quentin Schulz 2024-05-28 11:48 ` Marcus Folkesson 2024-05-28 9:08 ` [PATCH v3 2/2] image-bootfiles.bbclass: new class, copy boot files to root filesystem Marcus Folkesson 2024-05-28 11:23 ` Quentin Schulz 2024-05-28 11:40 ` Marcus Folkesson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox