summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/lib/wic/imager/direct.py83
1 files changed, 30 insertions, 53 deletions
diff --git a/scripts/lib/wic/imager/direct.py b/scripts/lib/wic/imager/direct.py
index 58a9e9d906..561c396c28 100644
--- a/scripts/lib/wic/imager/direct.py
+++ b/scripts/lib/wic/imager/direct.py
@@ -90,74 +90,50 @@ class DirectImageCreator(BaseImageCreator):
90 return realnum + 1 90 return realnum + 1
91 return realnum 91 return realnum
92 92
93 def __write_fstab(self, image_rootfs): 93 def _write_fstab(self, image_rootfs):
94 """overriden to generate fstab (temporarily) in rootfs. This is called 94 """overriden to generate fstab (temporarily) in rootfs. This is called
95 from _create, make sure it doesn't get called from 95 from _create, make sure it doesn't get called from
96 BaseImage.create() 96 BaseImage.create()
97 """ 97 """
98 if image_rootfs is None: 98 if not image_rootfs:
99 return None 99 return
100
101 fstab_path = image_rootfs + "/etc/fstab"
102 if not os.path.isfile(fstab_path):
103 return
100 104
101 fstab = image_rootfs + "/etc/fstab" 105 with open(fstab_path) as fstab:
102 if not os.path.isfile(fstab): 106 fstab_lines = fstab.readlines()
103 return None
104 107
105 parts = self._get_parts() 108 if self._update_fstab(fstab_lines, self._get_parts()):
109 shutil.copyfile(fstab_path, fstab_path + ".orig")
106 110
107 self._save_fstab(fstab) 111 with open(fstab_path, "w") as fstab:
108 fstab_lines = self._get_fstab(fstab, parts) 112 fstab.writelines(fstab_lines)
109 self._update_fstab(fstab_lines, parts)
110 self._write_fstab(fstab, fstab_lines)
111 113
112 return fstab 114 return fstab_path
113 115
114 def _update_fstab(self, fstab_lines, parts): 116 def _update_fstab(self, fstab_lines, parts):
115 """Assume partition order same as in wks""" 117 """Assume partition order same as in wks"""
116 for num, p in enumerate(parts, 1): 118 updated = False
119 for num, part in enumerate(parts, 1):
117 pnum = self.__get_part_num(num, parts) 120 pnum = self.__get_part_num(num, parts)
118 if not p.mountpoint or p.mountpoint == "/" or p.mountpoint == "/boot" or pnum == 0: 121 if not pnum or not part.mountpoint \
122 or part.mountpoint in ("/", "/boot"):
119 continue 123 continue
120 124
121 part = ''
122 # mmc device partitions are named mmcblk0p1, mmcblk0p2.. 125 # mmc device partitions are named mmcblk0p1, mmcblk0p2..
123 if p.disk.startswith('mmcblk'): 126 prefix = 'p' if part.disk.startswith('mmcblk') else ''
124 part = 'p' 127 device_name = "/dev/%s%s%d" % (part.disk, prefix, pnum)
125 128
126 device_name = "/dev/" + p.disk + part + str(pnum) 129 opts = part.fsopts if part.fsopts else "defaults"
127 130 line = "\t".join([device_name, part.mountpoint, part.fstype,
128 opts = "defaults" 131 opts, "0", "0"]) + "\n"
129 if p.fsopts:
130 opts = p.fsopts
131
132 fstab_entry = device_name + "\t" + \
133 p.mountpoint + "\t" + \
134 p.fstype + "\t" + \
135 opts + "\t0\t0\n"
136 fstab_lines.append(fstab_entry)
137
138 def _write_fstab(self, fstab, fstab_lines):
139 fstab = open(fstab, "w")
140 for line in fstab_lines:
141 fstab.write(line)
142 fstab.close()
143
144 def _save_fstab(self, fstab):
145 """Save the current fstab in rootfs"""
146 shutil.copyfile(fstab, fstab + ".orig")
147
148 def _restore_fstab(self, fstab):
149 """Restore the saved fstab in rootfs"""
150 if fstab is None:
151 return
152 shutil.move(fstab + ".orig", fstab)
153 132
154 def _get_fstab(self, fstab, parts): 133 fstab_lines.append(line)
155 """Return the desired contents of /etc/fstab.""" 134 updated = True
156 f = open(fstab, "r")
157 fstab_contents = f.readlines()
158 f.close()
159 135
160 return fstab_contents 136 return updated
161 137
162 def set_bootimg_dir(self, bootimg_dir): 138 def set_bootimg_dir(self, bootimg_dir):
163 """ 139 """
@@ -250,7 +226,7 @@ class DirectImageCreator(BaseImageCreator):
250 if not self.ks.handler.bootloader.source and p.mountpoint == "/boot": 226 if not self.ks.handler.bootloader.source and p.mountpoint == "/boot":
251 self.ks.handler.bootloader.source = p.source 227 self.ks.handler.bootloader.source = p.source
252 228
253 fstab = self.__write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) 229 fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR"))
254 230
255 for p in parts: 231 for p in parts:
256 # need to create the filesystems in order to get their 232 # need to create the filesystems in order to get their
@@ -277,7 +253,8 @@ class DirectImageCreator(BaseImageCreator):
277 part_type=p.part_type, 253 part_type=p.part_type,
278 uuid=p.uuid) 254 uuid=p.uuid)
279 255
280 self._restore_fstab(fstab) 256 if fstab_path:
257 shutil.move(fstab_path + ".orig", fstab_path)
281 258
282 self.__image.layout_partitions(self.ptable_format) 259 self.__image.layout_partitions(self.ptable_format)
283 260