mirror of
https://git.yoctoproject.org/poky
synced 2026-06-02 01:19:52 +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: d17b03e49b09f1a2db3642823522ac39e7c3c301) Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit 2265d089a58e1f78f26d623ee667c420cb1c3bd4) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
cbb3b9d6f4
commit
16a131cad9
@@ -980,6 +980,12 @@ DESCRIPTION
|
||||
copies. This option only has an effect with the rootfs
|
||||
source plugin.
|
||||
|
||||
--change-directory: This option is specific to wic. It changes to the
|
||||
given directory before copying the files. This
|
||||
option is useful when we want to split a rootfs in
|
||||
multiple partitions and we want to keep the right
|
||||
permissions and usernames in all the partitions.
|
||||
|
||||
--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
|
||||
|
||||
@@ -152,6 +152,7 @@ class KickStart():
|
||||
part.add_argument('--offset', type=sizetype("K", True))
|
||||
part.add_argument('--exclude-path', nargs='+')
|
||||
part.add_argument('--include-path', nargs='+')
|
||||
part.add_argument('--change-directory')
|
||||
part.add_argument("--extra-space", type=sizetype("M"))
|
||||
part.add_argument('--fsoptions', dest='fsopts')
|
||||
part.add_argument('--fstype', default='vfat',
|
||||
|
||||
@@ -31,6 +31,7 @@ class Partition():
|
||||
self.extra_space = args.extra_space
|
||||
self.exclude_path = args.exclude_path
|
||||
self.include_path = args.include_path
|
||||
self.change_directory = args.change_directory
|
||||
self.fsopts = args.fsopts
|
||||
self.fstype = args.fstype
|
||||
self.label = args.label
|
||||
|
||||
@@ -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 []:
|
||||
|
||||
Reference in New Issue
Block a user