diff options
-rw-r--r-- | scripts/lib/wic/plugins/imager/direct.py | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py index 67addeff3e..91fc5e70f6 100644 --- a/scripts/lib/wic/plugins/imager/direct.py +++ b/scripts/lib/wic/plugins/imager/direct.py | |||
@@ -49,7 +49,6 @@ class DirectPlugin(ImagerPlugin): | |||
49 | 49 | ||
50 | # parse possible 'rootfs=name' items | 50 | # parse possible 'rootfs=name' items |
51 | self.rootfs_dir = dict(rdir.split('=') for rdir in rootfs_dir.split(' ')) | 51 | self.rootfs_dir = dict(rdir.split('=') for rdir in rootfs_dir.split(' ')) |
52 | self.replaced_rootfs_paths = {} | ||
53 | self.bootimg_dir = bootimg_dir | 52 | self.bootimg_dir = bootimg_dir |
54 | self.kernel_dir = kernel_dir | 53 | self.kernel_dir = kernel_dir |
55 | self.native_sysroot = native_sysroot | 54 | self.native_sysroot = native_sysroot |
@@ -59,6 +58,7 @@ class DirectPlugin(ImagerPlugin): | |||
59 | self.compressor = options.compressor | 58 | self.compressor = options.compressor |
60 | self.bmap = options.bmap | 59 | self.bmap = options.bmap |
61 | self.no_fstab_update = options.no_fstab_update | 60 | self.no_fstab_update = options.no_fstab_update |
61 | self.original_fstab = None | ||
62 | 62 | ||
63 | self.name = "%s-%s" % (os.path.splitext(os.path.basename(wks_file))[0], | 63 | self.name = "%s-%s" % (os.path.splitext(os.path.basename(wks_file))[0], |
64 | strftime("%Y%m%d%H%M")) | 64 | strftime("%Y%m%d%H%M")) |
@@ -104,24 +104,13 @@ class DirectPlugin(ImagerPlugin): | |||
104 | 104 | ||
105 | with open(fstab_path) as fstab: | 105 | with open(fstab_path) as fstab: |
106 | fstab_lines = fstab.readlines() | 106 | fstab_lines = fstab.readlines() |
107 | self.original_fstab = fstab_lines.copy() | ||
107 | 108 | ||
108 | if self._update_fstab(fstab_lines, self.parts): | 109 | if self._update_fstab(fstab_lines, self.parts): |
109 | # copy rootfs dir to workdir to update fstab | ||
110 | # as rootfs can be used by other tasks and can't be modified | ||
111 | new_pseudo = os.path.realpath(os.path.join(self.workdir, "pseudo")) | ||
112 | from_dir = os.path.join(os.path.join(image_rootfs, ".."), "pseudo") | ||
113 | from_dir = os.path.realpath(from_dir) | ||
114 | copyhardlinktree(from_dir, new_pseudo) | ||
115 | new_rootfs = os.path.realpath(os.path.join(self.workdir, "rootfs_copy")) | ||
116 | copyhardlinktree(image_rootfs, new_rootfs) | ||
117 | fstab_path = os.path.join(new_rootfs, 'etc/fstab') | ||
118 | |||
119 | os.unlink(fstab_path) | ||
120 | |||
121 | with open(fstab_path, "w") as fstab: | 110 | with open(fstab_path, "w") as fstab: |
122 | fstab.writelines(fstab_lines) | 111 | fstab.writelines(fstab_lines) |
123 | 112 | else: | |
124 | return new_rootfs | 113 | self.original_fstab = None |
125 | 114 | ||
126 | def _update_fstab(self, fstab_lines, parts): | 115 | def _update_fstab(self, fstab_lines, parts): |
127 | """Assume partition order same as in wks""" | 116 | """Assume partition order same as in wks""" |
@@ -170,14 +159,8 @@ class DirectPlugin(ImagerPlugin): | |||
170 | filesystems from the artifacts directly and combine them into | 159 | filesystems from the artifacts directly and combine them into |
171 | a partitioned image. | 160 | a partitioned image. |
172 | """ | 161 | """ |
173 | if self.no_fstab_update: | 162 | if not self.no_fstab_update: |
174 | new_rootfs = None | 163 | self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) |
175 | else: | ||
176 | new_rootfs = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) | ||
177 | if new_rootfs: | ||
178 | # rootfs was copied to update fstab | ||
179 | self.replaced_rootfs_paths[new_rootfs] = self.rootfs_dir['ROOTFS_DIR'] | ||
180 | self.rootfs_dir['ROOTFS_DIR'] = new_rootfs | ||
181 | 164 | ||
182 | for part in self.parts: | 165 | for part in self.parts: |
183 | # get rootfs size from bitbake variable if it's not set in .ks file | 166 | # get rootfs size from bitbake variable if it's not set in .ks file |
@@ -253,8 +236,6 @@ class DirectPlugin(ImagerPlugin): | |||
253 | else: | 236 | else: |
254 | suffix = '["%s"]:' % (part.mountpoint or part.label) | 237 | suffix = '["%s"]:' % (part.mountpoint or part.label) |
255 | rootdir = part.rootfs_dir | 238 | rootdir = part.rootfs_dir |
256 | if rootdir in self.replaced_rootfs_paths: | ||
257 | rootdir = self.replaced_rootfs_paths[rootdir] | ||
258 | msg += ' ROOTFS_DIR%s%s\n' % (suffix.ljust(20), rootdir) | 239 | msg += ' ROOTFS_DIR%s%s\n' % (suffix.ljust(20), rootdir) |
259 | 240 | ||
260 | msg += ' BOOTIMG_DIR: %s\n' % self.bootimg_dir | 241 | msg += ' BOOTIMG_DIR: %s\n' % self.bootimg_dir |
@@ -292,6 +273,12 @@ class DirectPlugin(ImagerPlugin): | |||
292 | if os.path.isfile(path): | 273 | if os.path.isfile(path): |
293 | shutil.move(path, os.path.join(self.outdir, fname)) | 274 | shutil.move(path, os.path.join(self.outdir, fname)) |
294 | 275 | ||
276 | #Restore original fstab | ||
277 | if self.original_fstab: | ||
278 | fstab_path = self.rootfs_dir.get("ROOTFS_DIR") + "/etc/fstab" | ||
279 | with open(fstab_path, "w") as fstab: | ||
280 | fstab.writelines(self.original_fstab) | ||
281 | |||
295 | # remove work directory | 282 | # remove work directory |
296 | shutil.rmtree(self.workdir, ignore_errors=True) | 283 | shutil.rmtree(self.workdir, ignore_errors=True) |
297 | 284 | ||