summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/lib/wic/plugins/imager/direct.py37
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