diff options
author | Ricardo Ribalda Delgado <ricardo@ribalda.com> | 2020-03-04 15:49:36 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-04-06 16:45:11 +0100 |
commit | 242412656b8c7bd684ebca3da71a0d07cd69a830 (patch) | |
tree | e10056b9511ec1b845e639ee61b1d832b07ba2a0 | |
parent | 6bac089383d725793485ab559209a1bbcaf2719e (diff) | |
download | poky-242412656b8c7bd684ebca3da71a0d07cd69a830.tar.gz |
wic: Add --embed-rootfs argument
This option adds the content of a rootfs on a specific location on the
rootfs.
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 --embed-rootfs target-image /export --embed-rootfs target-image2 /export2
on the .wks file.
(From OE-Core rev: efdcf94801f6abe8e4099e324d9a3deccd8d4384)
Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | scripts/lib/wic/help.py | 8 | ||||
-rw-r--r-- | scripts/lib/wic/ksparser.py | 1 | ||||
-rw-r--r-- | scripts/lib/wic/partition.py | 1 | ||||
-rw-r--r-- | scripts/lib/wic/plugins/source/rootfs.py | 22 |
4 files changed, 31 insertions, 1 deletions
diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py index 1e3d06a87b..f1afd903ac 100644 --- a/scripts/lib/wic/help.py +++ b/scripts/lib/wic/help.py | |||
@@ -980,6 +980,14 @@ DESCRIPTION | |||
980 | copies. This option only has an effect with the rootfs | 980 | copies. This option only has an effect with the rootfs |
981 | source plugin. | 981 | source plugin. |
982 | 982 | ||
983 | --embed-rootfs: This option is specific to wic. It embeds a rootfs into | ||
984 | the given path to the resulting image. The option | ||
985 | contains two fields, the roofs and the path, separated | ||
986 | by a space. The rootfs follows the same logic as the | ||
987 | rootfs-dir argument. Multiple options can be provided | ||
988 | in order to embed multiple rootfs. This option only has | ||
989 | an effect with the rootfs source plugin. | ||
990 | |||
983 | --extra-space: This option is specific to wic. It adds extra | 991 | --extra-space: This option is specific to wic. It adds extra |
984 | space after the space filled by the content | 992 | space after the space filled by the content |
985 | of the partition. The final size can go | 993 | of the partition. The final size can go |
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py index 650b976223..64c8c1175e 100644 --- a/scripts/lib/wic/ksparser.py +++ b/scripts/lib/wic/ksparser.py | |||
@@ -138,6 +138,7 @@ class KickStart(): | |||
138 | part.add_argument('--align', type=int) | 138 | part.add_argument('--align', type=int) |
139 | part.add_argument('--exclude-path', nargs='+') | 139 | part.add_argument('--exclude-path', nargs='+') |
140 | part.add_argument('--include-path', nargs='+') | 140 | part.add_argument('--include-path', nargs='+') |
141 | part.add_argument('--embed-rootfs', nargs=2, action='append') | ||
141 | part.add_argument("--extra-space", type=sizetype) | 142 | part.add_argument("--extra-space", type=sizetype) |
142 | part.add_argument('--fsoptions', dest='fsopts') | 143 | part.add_argument('--fsoptions', dest='fsopts') |
143 | part.add_argument('--fstype', default='vfat', | 144 | part.add_argument('--fstype', default='vfat', |
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py index 2d95f78439..13857df82f 100644 --- a/scripts/lib/wic/partition.py +++ b/scripts/lib/wic/partition.py | |||
@@ -31,6 +31,7 @@ class Partition(): | |||
31 | self.extra_space = args.extra_space | 31 | self.extra_space = args.extra_space |
32 | self.exclude_path = args.exclude_path | 32 | self.exclude_path = args.exclude_path |
33 | self.include_path = args.include_path | 33 | self.include_path = args.include_path |
34 | self.embed_rootfs = args.embed_rootfs | ||
34 | self.fsopts = args.fsopts | 35 | self.fsopts = args.fsopts |
35 | self.fstype = args.fstype | 36 | self.fstype = args.fstype |
36 | self.label = args.label | 37 | self.label = args.label |
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): |