Hi Again


On Tue, Apr 7, 2020 at 8:19 PM Ricardo Ribalda via
lists.openembedded.org
<[email protected]> wrote:
>
> Hi Paul
>
> Yes it got merged
> https://git.openembedded.org/openembedded-core/commit/?id=efdcf94801f6abe8e4099e324d9a3deccd8d4384
>
> Even though the functionality looks similar, the devil is on the
> details ;). One thing is adding a file, this is  just  file/directory
> that is referenced as a path, and the other is a complete rootfs,
> which takes care of permissions and can be invoked with a path, or a
> bitbake target...
>
> But if you come up with a interface that cover both usecases I can
> help implementing it.

Looking into merging the functionality of embed-rootfs into include-path

I guess the first step is to modify include-path so it can accept 1 or
2 arguments.

If 1 argument:
the functionality is the same as now

If 2 arguments:
The second argument is considered the destination:
eg: --include-path home  /home/


The second step is to accept not only file/folders but also images.
The challenge here is that we can name an image in multiple ways:
- path: tmp/work/machine/core-image-minimal/1.0-r0/rootfs/
- name: core-image-minimal
- keyword that it is provided by wic: -rootfs-dir target-image=/workir....

Which can lead to a name collision. What do we do in this case? We
prefer the directory among the image?


The third step is, as you mentioned on the irc,  to fix also the
permissions of the files/directories, not only for images.
- Maybe leave files owned by root if no pseudo database exists and
clear setuid/setgid bits for safety.

Am I in the right direction ? something I am missing?



>
> Best regards.
>
> On Tue, Apr 7, 2020 at 7:47 PM Paul Barker <[email protected]> wrote:
> >
> > On Fri, 3 Apr 2020 21:52:52 +0200
> > Ricardo Ribalda Delgado <[email protected]> wrote:
> >
> > > ping?
> >
> > I'm still concerned that `--embed-rootfs` and `--include-path` are too
> > similar and we should instead have one option that can handle both use 
> > cases.
> >
> > Has this already been merged?
> >
> > >
> > > On Thu, Mar 5, 2020 at 1:26 PM Ricardo Ribalda Delgado
> > > <[email protected]> wrote:
> > > >
> > > > Hi Paul,
> > > >
> > > > On Thu, Mar 5, 2020 at 10:37 AM Paul Barker <[email protected]> 
> > > > wrote:
> > > > >
> > > > > On Wed,  4 Mar 2020 15:49:36 +0100
> > > > > Ricardo Ribalda Delgado <[email protected]> wrote:
> > > > >
> > > > > > This option adds the content of a rootfs on a specific location on 
> > > > > > the
> > > > > > rootfs.
> > > > > >
> > > > > > It is very useful for making a partition that contains the rootfs 
> > > > > > for a
> > > > > > host and a target Eg:
> > > > > >
> > > > > > / -> Roofs for the host
> > > > > > /export/ -> Rootfs for the target (which will netboot)
> > > > > >
> > > > > > Although today we support making a partition for "/export" this 
> > > > > > might
> > > > > > not be compatible with some upgrade systems, or we might be limited 
> > > > > > by
> > > > > > the number of partitions.
> > > > > >
> > > > > > With this patch we can use something like:
> > > > > >
> > > > > > part / --source rootfs --embed-rootfs target-image /export 
> > > > > > --embed-rootfs target-image2 /export2
> > > > >
> > > > > I like this but it still leaves confusion between `--include-path` and
> > > > > --embed-rootfs` as they're similar but slightly different. Can we 
> > > > > just modify
> > > > > `--include-path` to have this syntax?
> > > >
> > > > I think they are different enough.
> > > >
> > > > - include-path ads a file/folder
> > > > - embed-rootfs adds a rootfs, which is either a folder or a image.bb 
> > > > file.
> > > >
> > > >
> > > > >
> > > > > >
> > > > > > on the .wks file.
> > > > > >
> > > > > > Signed-off-by: Ricardo Ribalda Delgado <[email protected]>
> > > > > > ---
> > > > > >  scripts/lib/wic/help.py                  |  8 ++++++++
> > > > > >  scripts/lib/wic/ksparser.py              |  1 +
> > > > > >  scripts/lib/wic/partition.py             |  1 +
> > > > > >  scripts/lib/wic/plugins/source/rootfs.py | 22 
> > > > > > +++++++++++++++++++++-
> > > > > >  4 files changed, 31 insertions(+), 1 deletion(-)
> > > > > >
> > > > > > diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
> > > > > > index 4d342fcf05..140dc504cd 100644
> > > > > > --- a/scripts/lib/wic/help.py
> > > > > > +++ b/scripts/lib/wic/help.py
> > > > > > @@ -979,6 +979,14 @@ DESCRIPTION
> > > > > >                           copies. This option only has an effect 
> > > > > > with the rootfs
> > > > > >                           source plugin.
> > > > > >
> > > > > > +         --embed-rootfs: This option is specific to wic. It embeds 
> > > > > > a rootfs into
> > > > > > +                         the given path to the resulting image. 
> > > > > > The option
> > > > > > +                         contains two fields, the roofs and the 
> > > > > > path, separated
> > > > > > +                         by a space. The rootfs follows the same 
> > > > > > logic as the
> > > > > > +                         rootfs-dir argument. Multiple options can 
> > > > > > be provided
> > > > > > +                         in order to embed multiple rootfs. This 
> > > > > > option only has
> > > > > > +                         an effect with the rootfs source plugin.
> > > > > > +
> > > > > >           --extra-space: This option is specific to wic. It adds 
> > > > > > extra
> > > > > >                          space after the space filled by the content
> > > > > >                          of the partition. The final size can go
> > > > > > diff --git a/scripts/lib/wic/ksparser.py 
> > > > > > b/scripts/lib/wic/ksparser.py
> > > > > > index 650b976223..64c8c1175e 100644
> > > > > > --- a/scripts/lib/wic/ksparser.py
> > > > > > +++ b/scripts/lib/wic/ksparser.py
> > > > > > @@ -138,6 +138,7 @@ class KickStart():
> > > > > >          part.add_argument('--align', type=int)
> > > > > >          part.add_argument('--exclude-path', nargs='+')
> > > > > >          part.add_argument('--include-path', nargs='+')
> > > > > > +        part.add_argument('--embed-rootfs', nargs=2, 
> > > > > > action='append')
> > > > > >          part.add_argument("--extra-space", type=sizetype)
> > > > > >          part.add_argument('--fsoptions', dest='fsopts')
> > > > > >          part.add_argument('--fstype', default='vfat',
> > > > > > diff --git a/scripts/lib/wic/partition.py 
> > > > > > b/scripts/lib/wic/partition.py
> > > > > > index 2d95f78439..13857df82f 100644
> > > > > > --- a/scripts/lib/wic/partition.py
> > > > > > +++ b/scripts/lib/wic/partition.py
> > > > > > diff --git a/scripts/lib/wic/plugins/source/rootfs.py 
> > > > > > b/scripts/lib/wic/plugins/source/rootfs.py
> > > > > > index 40419a64b3..089aaea477 100644
> > > > > > --- a/scripts/lib/wic/plugins/source/rootfs.py
> > > > > > +++ b/scripts/lib/wic/plugins/source/rootfs.py
> > > > > > @@ -17,6 +17,7 @@ import shutil
> > > > > >  import sys
> > > > > >
> > > > > >  from oe.path import copyhardlinktree, copytree
> > > > > > +from pathlib import Path
> > > > > >
> > > > > >  from wic import WicError
> > > > > >  from wic.pluginbase import SourcePlugin
> > > > > > @@ -80,7 +81,7 @@ class RootfsPlugin(SourcePlugin):
> > > > > >
> > > > > >          new_rootfs = None
> > > > > >          # Handle excluded paths.
> > > > > > -        if part.exclude_path or part.include_path:
> > > > > > +        if part.exclude_path or part.include_path or 
> > > > > > part.embed_rootfs:
> > > > > >              # We need a new rootfs directory we can delete files 
> > > > > > from. Copy to
> > > > > >              # workdir.
> > > > > >              new_rootfs = os.path.realpath(os.path.join(cr_workdir, 
> > > > > > "rootfs%d" % part.lineno))
> > > > > > @@ -100,6 +101,25 @@ class RootfsPlugin(SourcePlugin):
> > > > > >              for path in part.include_path or []:
> > > > > >                  copyhardlinktree(path, new_rootfs)
> > > > > >
> > > > > > +            for embed in part.embed_rootfs or []:
> > > > > > +                [embed_rootfs, path] = embed
> > > > > > +                #we need to remove the initial / for os.path.join 
> > > > > > to work
> > > > > > +                if os.path.isabs(path):
> > > > > > +                    path = path[1:]
> > > > > > +                if embed_rootfs in krootfs_dir:
> > > > > > +                    embed_rootfs = krootfs_dir[embed_rootfs]
> > > > > > +                embed_rootfs = cls.__get_rootfs_dir(embed_rootfs)
> > > > > > +                tar_file = 
> > > > > > os.path.realpath(os.path.join(cr_workdir, "aux.tar"))
> > > > > > +                tar_cmd = "%s tar cpf %s -C %s ." % 
> > > > > > (cls.__get_pseudo(native_sysroot,
> > > > > > +                                                     
> > > > > > embed_rootfs), tar_file, embed_rootfs)
> > > > > > +                exec_native_cmd(tar_cmd, native_sysroot)
> > > > > > +                untar_cmd = "%s tar xf %s -C %s ." % 
> > > > > > (cls.__get_pseudo(native_sysroot, new_rootfs),
> > > > > > +                                                      tar_file, 
> > > > > > os.path.join(new_rootfs, path))
> > > > > > +                Path(os.path.join(new_rootfs, 
> > > > > > path)).mkdir(parents=True, exist_ok=True)
> > > > > > +                exec_native_cmd(untar_cmd, native_sysroot,
> > > > > > +                                cls.__get_pseudo(native_sysroot, 
> > > > > > new_rootfs))
> > > > > > +                os.remove(tar_file)
> > > > > > +
> > > > > >              for orig_path in part.exclude_path or []:
> > > > > >                  path = orig_path
> > > > > >                  if os.path.isabs(path):
> > > > >
> > > > > As said in my other email, if you're running wic outside bitbake I'm 
> > > > > not sure
> > > > > you can guarantee pseudo is available. And now I think about it, if 
> > > > > you're
> > > > > running wic inside bitbake (as part of do_image_wic), you'd be 
> > > > > running pseudo
> > > > > under pseudo and I have no idea how that would work out.
> > > > >
> > > >
> > > > pseudo is warranted because wic launches "bitbake wic-tools", which
> > > > has as DEPENDS pseudo-native.
> > > >
> > > > scripts/wic:        subprocess.check_call(["bitbake", "wic-tools"])
> > > >
> > > >
> > > > I have tried to run it inside bitbake with --exclude-path and
> > > > everything seems to work fine.
> > > >
> > > >
> > > >
> > > > > --
> > > > > Paul Barker
> > > > > Konsulko Group
> > > >
> > > >
> > > >
> > > > --
> > > > Ricardo Ribalda
> > >
> > >
> > >
> >
> >
> >
> > --
> > Paul Barker
> > Konsulko Group
>
>
>
> --
> Ricardo Ribalda
> 



--
Ricardo Ribalda
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#137119): 
https://lists.openembedded.org/g/openembedded-core/message/137119
Mute This Topic: https://lists.openembedded.org/mt/72395322/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to