1
0
mirror of https://git.yoctoproject.org/poky synced 2026-04-20 11:28:58 +00:00

wic: Add --change-directory argument

This option allows to specify which part of a rootfs is going to be
included, the same way the -C argument on tar.

Thanks to this option we can make sure the permissions and usernames
on the target partition are respected, and also simplify the creation of
splitted partitons, not neeting to invoke external vars or using .wks.in
files. Eg:

part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/   
part /etc --source rootfs --fstype=ext4 --change-directory=etc

Cc: Paul Barker <pbarker@konsulko.com>
(From OE-Core rev: 2265d089a58e1f78f26d623ee667c420cb1c3bd4)

Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ricardo Ribalda Delgado
2020-04-19 08:35:31 +02:00
committed by Richard Purdie
parent c58711f0ea
commit d19004da2f
4 changed files with 26 additions and 3 deletions

View File

@@ -86,14 +86,29 @@ class RootfsPlugin(SourcePlugin):
new_rootfs = None
new_pseudo = None
# Handle excluded paths.
if part.exclude_path or part.include_path:
if part.exclude_path or part.include_path or part.change_directory:
# 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))
if os.path.lexists(new_rootfs):
shutil.rmtree(os.path.join(new_rootfs))
copyhardlinktree(part.rootfs_dir, new_rootfs)
if part.change_directory:
cd = part.change_directory
if cd[-1] == '/':
cd = cd[:-1]
if os.path.isabs(cd):
logger.error("Must be relative: --change-directory=%s" % cd)
sys.exit(1)
orig_dir = os.path.realpath(os.path.join(part.rootfs_dir, cd))
if not orig_dir.startswith(part.rootfs_dir):
logger.error("'%s' points to a path outside the rootfs" % orig_dir)
sys.exit(1)
else:
orig_dir = part.rootfs_dir
copyhardlinktree(orig_dir, new_rootfs)
# Convert the pseudo directory to its new location
if (pseudo_dir):
@@ -108,7 +123,7 @@ class RootfsPlugin(SourcePlugin):
pseudo_cmd = "%s -B -m %s -M %s" % (cls.__get_pseudo(native_sysroot,
new_rootfs,
new_pseudo),
part.rootfs_dir, new_rootfs)
orig_dir, new_rootfs)
exec_native_cmd(pseudo_cmd, native_sysroot)
for path in part.include_path or []: