On Fri Feb 20, 2026 at 10:19 AM CET, Daniel via lists.openembedded.org Dragomir 
wrote:
>
>
> On 1/23/26 00:48, Daniel Dragomir wrote:
>> 
>> 
>> On 10/3/25 19:43, Steve Sakoman wrote:
>>> CAUTION: This email comes from a non Wind River email account!
>>> Do not click links or open attachments unless you recognize the sender 
>>> and know the content is safe.
>>>
>>> On Fri, Oct 3, 2025 at 12:13 AM Dragomir, Daniel
>>> <[email protected]> wrote:
>>>>
>>>> Yes, this is an issue on master/master-next too.
>>>> I tested and the same patch can be applied fine on both master and 
>>>> scarthgap branches.
>>>
>>> Thanks for checking.
>>>
>>> Please submit the patch for the master branch.  It would be helpful if
>>> you would then ping me when you see that it has been accepted.  I'll
>>> try to remember to watch for it, but a ping would ensure I don't miss
>>> it :-)
>> 
>> Hi Steve,
>> 
>> Those changes were accepted in master branch. I created also a selftest 
>> for this scenario.
>> Could you please back-port the commits to scarthgap branch? I tried 
>> locally and there is a minor merge conflict on one of the commits. If 
>> you want me to send again a scarthgap version of the commits on the 
>> mailing list, let me know.
>> 
>> Commits from master branch are:
>> 6de3d2602f oeqa/selftest/wic: test recursive dir copy on ext partitions
>> 1ed38aff5f wic/engine: fix copying directories into wic image with ext* 
>> partition
>> 
>
> Hi Steve and Yoann,

Hello,

> Can you please help with a back-port on scarthgap for the commits bellow 
> which were accepted in master?
>
> 6de3d2602f oeqa/selftest/wic: test recursive dir copy on ext partitions
> 1ed38aff5f wic/engine: fix copying directories into wic image with ext* 
> partition
I reviewed those 2 and they will be in my next series.

> cb536737be wic/engine: error on old host debugfs for standalone directory copy
For this one, can you send backport patches to scarthgap and whinlatter?


>
> Thank you!
> Daniel
>
>> Regards,
>> Daniel
>> 
>>>
>>> Steve
>>>
>>>>
>>>> Regards,
>>>> Daniel
>>>>
>>>> ________________________________
>>>> From: Steve Sakoman <[email protected]>
>>>> Sent: Thursday, October 2, 2025 5:55 PM
>>>> To: Dragomir, Daniel <[email protected]>
>>>> Cc: [email protected] 
>>>> <[email protected]>
>>>> Subject: Re: [OE-core][scarthgap][PATCH] wic/engine: fix copying 
>>>> directories into wic image with ext* partition
>>>>
>>>> Is this also an issue on master?  If so, you will need to submit this
>>>> patch for master before I can take it for scarthgap.  If not, can you
>>>> explain why it isn't needed there?
>>>>
>>>> Thanks,
>>>>
>>>> Steve
>>>>
>>>> On Wed, Oct 1, 2025 at 2:25 PM Dragomir, Daniel via
>>>> lists.openembedded.org
>>>> <[email protected]> wrote:
>>>>>
>>>>> wic uses debugfs to write on ext* partitions, but debugfs can only
>>>>> write to the current working directory and it cannot copy complete
>>>>> directory trees. Running 'wic ls' on a copied directory show this:
>>>>>      -l: Ext2 inode is not a directory
>>>>>
>>>>> Fix this by creating a command list for debugfs (-f parameter) when
>>>>> recursive parsing the host directory in order to create a similar
>>>>> directory structure (mkdir) and copy files (write) on each level
>>>>> into the destination directory from the wic's ext* partition.
>>>>>
>>>>> Signed-off-by: Daniel Dragomir <[email protected]>
>>>>> ---
>>>>>   scripts/lib/wic/engine.py | 63 
>>>>> ++++++++++++++++++++++++++++++---------
>>>>>   1 file changed, 49 insertions(+), 14 deletions(-)
>>>>>
>>>>> diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
>>>>> index b9e60cbe4e..9d596be3a7 100644
>>>>> --- a/scripts/lib/wic/engine.py
>>>>> +++ b/scripts/lib/wic/engine.py
>>>>> @@ -345,29 +345,64 @@ class Disk:
>>>>>                                                      path))
>>>>>
>>>>>       def copy(self, src, dest):
>>>>> -        """Copy partition image into wic image."""
>>>>> -        pnum =  dest.part if isinstance(src, str) else src.part
>>>>> +        """Copy files or directories to/from the vfat or ext* 
>>>>> partition."""
>>>>> +        pnum = dest.part if isinstance(src, str) else src.part
>>>>> +        partimg = self._get_part_image(pnum)
>>>>>
>>>>>           if self.partitions[pnum].fstype.startswith('ext'):
>>>>> -            if isinstance(src, str):
>>>>> -                cmd = "printf 'cd {}\nwrite {} {}\n' | {} -w {}".\
>>>>> -                      format(os.path.dirname(dest.path), src, 
>>>>> os.path.basename(src),
>>>>> -                             self.debugfs, self._get_part_image(pnum))
>>>>> -            else: # copy from wic
>>>>> -                # run both dump and rdump to support both files and 
>>>>> directory
>>>>> +            if isinstance(src, str): # host to image case
>>>>> +                if os.path.isdir(src):
>>>>> +                    base = os.path.abspath(src)
>>>>> +                    base_parent = os.path.dirname(base)
>>>>> +                    cmds = []
>>>>> +                    made = set()
>>>>> +
>>>>> +                    for root, dirs, files in os.walk(base):
>>>>> +                        for fname in files:
>>>>> +                            host_file = os.path.join(root, fname)
>>>>> +                            rel = os.path.relpath(host_file, 
>>>>> base_parent)
>>>>> +                            dest_file = os.path.join(dest.path, rel)
>>>>> +                            dest_dir = os.path.dirname(dest_file)
>>>>> +
>>>>> +                            # create dir structure (mkdir -p)
>>>>> +                            parts = dest_dir.strip('/').split('/')
>>>>> +                            cur = ''
>>>>> +                            for p in parts:
>>>>> +                                cur = cur + '/' + p
>>>>> +                                if cur not in made:
>>>>> +                                    cmds.append(f'mkdir "{cur}"')
>>>>> +                                    made.add(cur)
>>>>> +
>>>>> +                            cmds.append(f'write "{host_file}" 
>>>>> "{dest_file}"')
>>>>> +
>>>>> +                    # write script to a temp file
>>>>> +                    with tempfile.NamedTemporaryFile(mode='w', 
>>>>> delete=False,
>>>>> +                                                     
>>>>> prefix='wic-debugfs-') as tf:
>>>>> +                        for line in cmds:
>>>>> +                            tf.write(line + '\n')
>>>>> +                        scriptname = tf.name
>>>>> +
>>>>> +                    cmd = f"{self.debugfs} -w -f {scriptname} 
>>>>> {partimg}"
>>>>> +
>>>>> +                else: # single file
>>>>> +                    cmd = "printf 'cd {}\nwrite {} {}\n' | {} -w {}".\
>>>>> +                          format(os.path.dirname(dest.path), src,
>>>>> +                                 os.path.basename(src), 
>>>>> self.debugfs, partimg)
>>>>> +
>>>>> +            else: # image to host case
>>>>>                   cmd = "printf 'cd {}\ndump /{} {}\nrdump /{} {}\n' 
>>>>> | {} {}".\
>>>>>                         format(os.path.dirname(src.path), src.path,
>>>>> -                             dest, src.path, dest, self.debugfs,
>>>>> -                             self._get_part_image(pnum))
>>>>> +                             dest, src.path, dest, self.debugfs, 
>>>>> partimg)
>>>>> +
>>>>>           else: # fat
>>>>>               if isinstance(src, str):
>>>>>                   cmd = "{} -i {} -snop {} ::{}".format(self.mcopy,
>>>>> -                                                  
>>>>> self._get_part_image(pnum),
>>>>> -                                                  src, dest.path)
>>>>> +                                                      partimg,
>>>>> +                                                      src, dest.path)
>>>>>               else:
>>>>>                   cmd = "{} -i {} -snop ::{} {}".format(self.mcopy,
>>>>> -                                                  
>>>>> self._get_part_image(pnum),
>>>>> -                                                  src.path, dest)
>>>>> +                                                      partimg,
>>>>> +                                                      src.path, dest)
>>>>>
>>>>>           exec_cmd(cmd, as_shell=True)
>>>>>           self._put_part_image(pnum)
>>>>> -- 
>>>>> 2.39.5
>>>>>
>>>>>
>>>>> 
>>>>>


-- 
Yoann Congal
Smile ECS

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#231500): 
https://lists.openembedded.org/g/openembedded-core/message/231500
Mute This Topic: https://lists.openembedded.org/mt/115542019/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to