summaryrefslogtreecommitdiffstats
path: root/scripts/lib/wic/plugins/source/rootfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/wic/plugins/source/rootfs.py')
-rw-r--r--scripts/lib/wic/plugins/source/rootfs.py60
1 files changed, 58 insertions, 2 deletions
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 247f61ff7c..544e868b5e 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -17,6 +17,7 @@ import shutil
17import sys 17import sys
18 18
19from oe.path import copyhardlinktree 19from oe.path import copyhardlinktree
20from pathlib import Path
20 21
21from wic import WicError 22from wic import WicError
22from wic.pluginbase import SourcePlugin 23from wic.pluginbase import SourcePlugin
@@ -126,8 +127,63 @@ class RootfsPlugin(SourcePlugin):
126 orig_dir, new_rootfs) 127 orig_dir, new_rootfs)
127 exec_native_cmd(pseudo_cmd, native_sysroot) 128 exec_native_cmd(pseudo_cmd, native_sysroot)
128 129
129 for path in part.include_path or []: 130 for in_path in part.include_path or []:
130 copyhardlinktree(path, new_rootfs) 131 #parse arguments
132 include_path = in_path[0]
133 if len(in_path) > 2:
134 logger.error("'Invalid number of arguments for include-path")
135 sys.exit(1)
136 if len(in_path) == 2:
137 path = in_path[1]
138 else:
139 path = None
140
141 # Pack files to be included into a tar file.
142 # We need to create a tar file, because that way we can keep the
143 # permissions from the files even when they belong to different
144 # pseudo enviroments.
145 # If we simply copy files using copyhardlinktree/copytree... the
146 # copied files will belong to the user running wic.
147 tar_file = os.path.realpath(
148 os.path.join(cr_workdir, "include-path%d.tar" % part.lineno))
149 if os.path.isfile(include_path):
150 parent = os.path.dirname(os.path.realpath(include_path))
151 tar_cmd = "tar c --owner=root --group=root -f %s -C %s %s" % (
152 tar_file, parent, os.path.relpath(include_path, parent))
153 exec_native_cmd(tar_cmd, native_sysroot)
154 else:
155 if include_path in krootfs_dir:
156 include_path = krootfs_dir[include_path]
157 include_path = cls.__get_rootfs_dir(include_path)
158 include_pseudo = os.path.join(include_path, "../pseudo")
159 if os.path.lexists(include_pseudo):
160 pseudo = cls.__get_pseudo(native_sysroot, include_path,
161 include_pseudo)
162 tar_cmd = "tar cf %s -C %s ." % (tar_file, include_path)
163 else:
164 pseudo = None
165 tar_cmd = "tar c --owner=root --group=root -f %s -C %s ." % (
166 tar_file, include_path)
167 exec_native_cmd(tar_cmd, native_sysroot, pseudo)
168
169 #create destination
170 if path:
171 destination = os.path.realpath(os.path.join(new_rootfs, path))
172 if not destination.startswith(new_rootfs):
173 logger.error("%s %s" % (destination, new_rootfs))
174 sys.exit(1)
175 Path(destination).mkdir(parents=True, exist_ok=True)
176 else:
177 destination = new_rootfs
178
179 #extract destination
180 untar_cmd = "tar xf %s -C %s" % (tar_file, destination)
181 if new_pseudo:
182 pseudo = cls.__get_pseudo(native_sysroot, new_rootfs, new_pseudo)
183 else:
184 pseudo = None
185 exec_native_cmd(untar_cmd, native_sysroot, pseudo)
186 os.remove(tar_file)
131 187
132 for orig_path in part.exclude_path or []: 188 for orig_path in part.exclude_path or []:
133 path = orig_path 189 path = orig_path