diff options
author | Ricardo Ribalda Delgado <ricardo@ribalda.com> | 2020-03-04 15:49:36 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-04-06 14:25:55 +0100 |
commit | efdcf94801f6abe8e4099e324d9a3deccd8d4384 (patch) | |
tree | 498ee7ab9bf768dfdb95ea12ac6ab9d81e5928b9 /scripts/lib/wic/plugins/source/rootfs.py | |
parent | 36993eea89d1c011397b7692b9b8d61b499d0171 (diff) | |
download | openembedded-core-contrib-efdcf94801f6abe8e4099e324d9a3deccd8d4384.tar.gz |
wic: Add --embed-rootfs argument
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
on the .wks file.
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/wic/plugins/source/rootfs.py')
-rw-r--r-- | scripts/lib/wic/plugins/source/rootfs.py | 22 |
1 files changed, 21 insertions, 1 deletions
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): |