diff options
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 | |||
17 | import sys | 17 | import sys |
18 | 18 | ||
19 | from oe.path import copyhardlinktree, copytree | 19 | from oe.path import copyhardlinktree, copytree |
20 | from pathlib import Path | ||
20 | 21 | ||
21 | from wic import WicError | 22 | from wic import WicError |
22 | from wic.pluginbase import SourcePlugin | 23 | from wic.pluginbase import SourcePlugin |
@@ -80,7 +81,7 @@ class RootfsPlugin(SourcePlugin): | |||
80 | 81 | ||
81 | new_rootfs = None | 82 | new_rootfs = None |
82 | # Handle excluded paths. | 83 | # Handle excluded paths. |
83 | if part.exclude_path or part.include_path: | 84 | if part.exclude_path or part.include_path or part.embed_rootfs: |
84 | # We need a new rootfs directory we can delete files from. Copy to | 85 | # We need a new rootfs directory we can delete files from. Copy to |
85 | # workdir. | 86 | # workdir. |
86 | new_rootfs = os.path.realpath(os.path.join(cr_workdir, "rootfs%d" % part.lineno)) | 87 | new_rootfs = os.path.realpath(os.path.join(cr_workdir, "rootfs%d" % part.lineno)) |
@@ -100,6 +101,25 @@ class RootfsPlugin(SourcePlugin): | |||
100 | for path in part.include_path or []: | 101 | for path in part.include_path or []: |
101 | copyhardlinktree(path, new_rootfs) | 102 | copyhardlinktree(path, new_rootfs) |
102 | 103 | ||
104 | for embed in part.embed_rootfs or []: | ||
105 | [embed_rootfs, path] = embed | ||
106 | #we need to remove the initial / for os.path.join to work | ||
107 | if os.path.isabs(path): | ||
108 | path = path[1:] | ||
109 | if embed_rootfs in krootfs_dir: | ||
110 | embed_rootfs = krootfs_dir[embed_rootfs] | ||
111 | embed_rootfs = cls.__get_rootfs_dir(embed_rootfs) | ||
112 | tar_file = os.path.realpath(os.path.join(cr_workdir, "aux.tar")) | ||
113 | tar_cmd = "%s tar cpf %s -C %s ." % (cls.__get_pseudo(native_sysroot, | ||
114 | embed_rootfs), tar_file, embed_rootfs) | ||
115 | exec_native_cmd(tar_cmd, native_sysroot) | ||
116 | untar_cmd = "%s tar xf %s -C %s ." % (cls.__get_pseudo(native_sysroot, new_rootfs), | ||
117 | tar_file, os.path.join(new_rootfs, path)) | ||
118 | Path(os.path.join(new_rootfs, path)).mkdir(parents=True, exist_ok=True) | ||
119 | exec_native_cmd(untar_cmd, native_sysroot, | ||
120 | cls.__get_pseudo(native_sysroot, new_rootfs)) | ||
121 | os.remove(tar_file) | ||
122 | |||
103 | for orig_path in part.exclude_path or []: | 123 | for orig_path in part.exclude_path or []: |
104 | path = orig_path | 124 | path = orig_path |
105 | if os.path.isabs(path): | 125 | if os.path.isabs(path): |