diff options
Diffstat (limited to 'scripts/lib')
| -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 | ||
