mirror of
https://git.yoctoproject.org/poky
synced 2026-04-18 12:32:12 +02:00
wic: root: Add an opt. destination on include-path
Allow specifying an optional destination to include-path and make the option aware of permissions and owners. 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 --fstype=ext4 --include-path core-image-minimal-mtdutils export/ --include-path hello on the .wks file. Cc: Paul Barker <pbarker@konsulko.com> (From OE-Core rev: e8c21c6ebaebde88151697381bdb2452f1171090) Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
fc2589384b
commit
a293c76c53
@@ -17,6 +17,7 @@ import shutil
|
||||
import sys
|
||||
|
||||
from oe.path import copyhardlinktree
|
||||
from pathlib import Path
|
||||
|
||||
from wic import WicError
|
||||
from wic.pluginbase import SourcePlugin
|
||||
@@ -126,8 +127,63 @@ class RootfsPlugin(SourcePlugin):
|
||||
orig_dir, new_rootfs)
|
||||
exec_native_cmd(pseudo_cmd, native_sysroot)
|
||||
|
||||
for path in part.include_path or []:
|
||||
copyhardlinktree(path, new_rootfs)
|
||||
for in_path in part.include_path or []:
|
||||
#parse arguments
|
||||
include_path = in_path[0]
|
||||
if len(in_path) > 2:
|
||||
logger.error("'Invalid number of arguments for include-path")
|
||||
sys.exit(1)
|
||||
if len(in_path) == 2:
|
||||
path = in_path[1]
|
||||
else:
|
||||
path = None
|
||||
|
||||
# Pack files to be included into a tar file.
|
||||
# We need to create a tar file, because that way we can keep the
|
||||
# permissions from the files even when they belong to different
|
||||
# pseudo enviroments.
|
||||
# If we simply copy files using copyhardlinktree/copytree... the
|
||||
# copied files will belong to the user running wic.
|
||||
tar_file = os.path.realpath(
|
||||
os.path.join(cr_workdir, "include-path%d.tar" % part.lineno))
|
||||
if os.path.isfile(include_path):
|
||||
parent = os.path.dirname(os.path.realpath(include_path))
|
||||
tar_cmd = "tar c --owner=root --group=root -f %s -C %s %s" % (
|
||||
tar_file, parent, os.path.relpath(include_path, parent))
|
||||
exec_native_cmd(tar_cmd, native_sysroot)
|
||||
else:
|
||||
if include_path in krootfs_dir:
|
||||
include_path = krootfs_dir[include_path]
|
||||
include_path = cls.__get_rootfs_dir(include_path)
|
||||
include_pseudo = os.path.join(include_path, "../pseudo")
|
||||
if os.path.lexists(include_pseudo):
|
||||
pseudo = cls.__get_pseudo(native_sysroot, include_path,
|
||||
include_pseudo)
|
||||
tar_cmd = "tar cf %s -C %s ." % (tar_file, include_path)
|
||||
else:
|
||||
pseudo = None
|
||||
tar_cmd = "tar c --owner=root --group=root -f %s -C %s ." % (
|
||||
tar_file, include_path)
|
||||
exec_native_cmd(tar_cmd, native_sysroot, pseudo)
|
||||
|
||||
#create destination
|
||||
if path:
|
||||
destination = os.path.realpath(os.path.join(new_rootfs, path))
|
||||
if not destination.startswith(new_rootfs):
|
||||
logger.error("%s %s" % (destination, new_rootfs))
|
||||
sys.exit(1)
|
||||
Path(destination).mkdir(parents=True, exist_ok=True)
|
||||
else:
|
||||
destination = new_rootfs
|
||||
|
||||
#extract destination
|
||||
untar_cmd = "tar xf %s -C %s" % (tar_file, destination)
|
||||
if new_pseudo:
|
||||
pseudo = cls.__get_pseudo(native_sysroot, new_rootfs, new_pseudo)
|
||||
else:
|
||||
pseudo = None
|
||||
exec_native_cmd(untar_cmd, native_sysroot, pseudo)
|
||||
os.remove(tar_file)
|
||||
|
||||
for orig_path in part.exclude_path or []:
|
||||
path = orig_path
|
||||
|
||||
Reference in New Issue
Block a user