diff options
author | Tom Zanussi <tom.zanussi@linux.intel.com> | 2014-08-08 10:09:12 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-08-11 10:53:11 +0100 |
commit | 4d1f5ee6d1ae1eb7f60d58c4e960dde879ae0e7f (patch) | |
tree | 087941c279fec075d2213303253451fac6ffc385 | |
parent | bd0dd4489e15700333185a6afc6ea53a397246fb (diff) | |
download | poky-4d1f5ee6d1ae1eb7f60d58c4e960dde879ae0e7f.tar.gz |
wic: Update/rename/delete mount-related code
The wic code inherited a basic image-creation flow based on mounting
loop devices, but wic doesn't actually mount anything, so rename parts
of the code dealing with mounting to something more appropriate, and
remove related unused code.
(From OE-Core rev: 94e15c18c011b0d7d71276cd4566be2417c2c6be)
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | scripts/lib/mic/imager/baseimager.py | 47 | ||||
-rw-r--r-- | scripts/lib/mic/imager/direct.py | 42 | ||||
-rw-r--r-- | scripts/lib/mic/plugins/imager/direct_plugin.py | 2 | ||||
-rw-r--r-- | scripts/lib/mic/utils/partitionedfs.py | 37 |
4 files changed, 22 insertions, 106 deletions
diff --git a/scripts/lib/mic/imager/baseimager.py b/scripts/lib/mic/imager/baseimager.py index 0d591eaf43..7f32dd559e 100644 --- a/scripts/lib/mic/imager/baseimager.py +++ b/scripts/lib/mic/imager/baseimager.py | |||
@@ -97,41 +97,15 @@ class BaseImageCreator(object): | |||
97 | 97 | ||
98 | 98 | ||
99 | # | 99 | # |
100 | # Properties | ||
101 | # | ||
102 | def __get_instroot(self): | ||
103 | if self.__builddir is None: | ||
104 | raise CreatorError("_instroot is not valid before calling mount()") | ||
105 | return self.__builddir + "/install_root" | ||
106 | _instroot = property(__get_instroot) | ||
107 | """The location of the install root directory. | ||
108 | |||
109 | This is the directory into which the system is installed. Subclasses may | ||
110 | mount a filesystem image here or copy files to/from here. | ||
111 | |||
112 | Note, this directory does not exist before ImageCreator.mount() is called. | ||
113 | |||
114 | Note also, this is a read-only attribute. | ||
115 | |||
116 | """ | ||
117 | |||
118 | |||
119 | # | ||
120 | # Hooks for subclasses | 100 | # Hooks for subclasses |
121 | # | 101 | # |
122 | def _mount_instroot(self, base_on = None): | 102 | def _create(self): |
123 | """Mount or prepare the install root directory. | 103 | """Create partitions for the disk image(s) |
124 | 104 | ||
125 | This is the hook where subclasses may prepare the install root by e.g. | 105 | This is the hook where subclasses may create the partitions |
126 | mounting creating and loopback mounting a filesystem image to | 106 | that will be assembled into disk image(s). |
127 | _instroot. | ||
128 | 107 | ||
129 | There is no default implementation. | 108 | There is no default implementation. |
130 | |||
131 | base_on -- this is the value passed to mount() and can be interpreted | ||
132 | as the subclass wishes; it might e.g. be the location of | ||
133 | a previously created ISO containing a system image. | ||
134 | |||
135 | """ | 109 | """ |
136 | pass | 110 | pass |
137 | 111 | ||
@@ -176,19 +150,16 @@ class BaseImageCreator(object): | |||
176 | 150 | ||
177 | runner.show('umount -l %s' % self.workdir) | 151 | runner.show('umount -l %s' % self.workdir) |
178 | 152 | ||
179 | def mount(self): | 153 | def create(self): |
180 | """Setup the target filesystem in preparation for an install. | 154 | """Create partitions for the disk image(s) |
181 | 155 | ||
182 | This function sets up the filesystem which the ImageCreator will | 156 | Create the partitions that will be assembled into disk |
183 | install into and configure. The ImageCreator class merely creates an | 157 | image(s). |
184 | install root directory, bind mounts some system directories (e.g. /dev) | ||
185 | and writes out /etc/fstab. Other subclasses may also e.g. create a | ||
186 | sparse file, format it and loopback mount it to the install root. | ||
187 | """ | 158 | """ |
188 | self.__setup_tmpdir() | 159 | self.__setup_tmpdir() |
189 | self.__ensure_builddir() | 160 | self.__ensure_builddir() |
190 | 161 | ||
191 | self._mount_instroot() | 162 | self._create() |
192 | 163 | ||
193 | def unmount(self): | 164 | def unmount(self): |
194 | """Unmounts the target filesystem. | 165 | """Unmounts the target filesystem. |
diff --git a/scripts/lib/mic/imager/direct.py b/scripts/lib/mic/imager/direct.py index 2e6914b86d..b96740d0f4 100644 --- a/scripts/lib/mic/imager/direct.py +++ b/scripts/lib/mic/imager/direct.py | |||
@@ -79,9 +79,10 @@ class DirectImageCreator(BaseImageCreator): | |||
79 | self.staging_data_dir = staging_data_dir | 79 | self.staging_data_dir = staging_data_dir |
80 | 80 | ||
81 | def __write_fstab(self, image_rootfs): | 81 | def __write_fstab(self, image_rootfs): |
82 | """overriden to generate fstab (temporarily) in rootfs. This | 82 | """overriden to generate fstab (temporarily) in rootfs. This is called |
83 | is called from mount_instroot, make sure it doesn't get called | 83 | from _create, make sure it doesn't get called from |
84 | from BaseImage.mount()""" | 84 | BaseImage.create() |
85 | """ | ||
85 | if image_rootfs is None: | 86 | if image_rootfs is None: |
86 | return None | 87 | return None |
87 | 88 | ||
@@ -217,29 +218,15 @@ class DirectImageCreator(BaseImageCreator): | |||
217 | # | 218 | # |
218 | # Actual implemention | 219 | # Actual implemention |
219 | # | 220 | # |
220 | def _mount_instroot(self): | 221 | def _create(self): |
221 | """ | 222 | """ |
222 | For 'wic', we already have our build artifacts and don't want | 223 | For 'wic', we already have our build artifacts - we just create |
223 | to loop mount anything to install into, we just create | ||
224 | filesystems from the artifacts directly and combine them into | 224 | filesystems from the artifacts directly and combine them into |
225 | a partitioned image. | 225 | a partitioned image. |
226 | |||
227 | We still want to reuse as much of the basic mic machinery | ||
228 | though; despite the fact that we don't actually do loop or any | ||
229 | other kind of mounting we still want to do many of the same | ||
230 | things to prepare images, so we basically just adapt to the | ||
231 | basic framework and reinterpret what 'mounting' means in our | ||
232 | context. | ||
233 | |||
234 | _instroot would normally be something like | ||
235 | /var/tmp/wic/build/imgcreate-s_9AKQ/install_root, for | ||
236 | installing packages, etc. We don't currently need to do that, | ||
237 | so we simplify life by just using /var/tmp/wic/build as our | ||
238 | workdir. | ||
239 | """ | 226 | """ |
240 | parts = self._get_parts() | 227 | parts = self._get_parts() |
241 | 228 | ||
242 | self.__instimage = PartitionedMount(self._instroot) | 229 | self.__instimage = PartitionedMount() |
243 | 230 | ||
244 | for p in parts: | 231 | for p in parts: |
245 | # as a convenience, set source to the boot partition source | 232 | # as a convenience, set source to the boot partition source |
@@ -250,20 +237,11 @@ class DirectImageCreator(BaseImageCreator): | |||
250 | for p in parts: | 237 | for p in parts: |
251 | # need to create the filesystems in order to get their | 238 | # need to create the filesystems in order to get their |
252 | # sizes before we can add them and do the layout. | 239 | # sizes before we can add them and do the layout. |
253 | # PartitionedMount.mount() actually calls __format_disks() | 240 | # PartitionedMount.create() actually calls __format_disks() |
254 | # to create the disk images and carve out the partitions, | 241 | # to create the disk images and carve out the partitions, |
255 | # then self.install() calls PartitionedMount.install() | 242 | # then self.install() calls PartitionedMount.install() |
256 | # which calls __install_partitition() for each partition | 243 | # which calls __install_partitition() for each partition |
257 | # to dd the fs into the partitions. It would be nice to | 244 | # to dd the fs into the partitions. |
258 | # be able to use e.g. ExtDiskMount etc to create the | ||
259 | # filesystems, since that's where existing e.g. mkfs code | ||
260 | # is, but those are only created after __format_disks() | ||
261 | # which needs the partition sizes so needs them created | ||
262 | # before its called. Well, the existing setup is geared | ||
263 | # to installing packages into mounted filesystems - maybe | ||
264 | # when/if we need to actually do package selection we | ||
265 | # should modify things to use those objects, but for now | ||
266 | # we can avoid that. | ||
267 | 245 | ||
268 | fstab = self.__write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) | 246 | fstab = self.__write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) |
269 | 247 | ||
@@ -294,7 +272,7 @@ class DirectImageCreator(BaseImageCreator): | |||
294 | self.__disks[disk_name] = disk_obj | 272 | self.__disks[disk_name] = disk_obj |
295 | self.__instimage.add_disk(disk_name, disk_obj) | 273 | self.__instimage.add_disk(disk_name, disk_obj) |
296 | 274 | ||
297 | self.__instimage.mount() | 275 | self.__instimage.create() |
298 | 276 | ||
299 | def install(self): | 277 | def install(self): |
300 | """ | 278 | """ |
diff --git a/scripts/lib/mic/plugins/imager/direct_plugin.py b/scripts/lib/mic/plugins/imager/direct_plugin.py index 793a736e95..da18b65f54 100644 --- a/scripts/lib/mic/plugins/imager/direct_plugin.py +++ b/scripts/lib/mic/plugins/imager/direct_plugin.py | |||
@@ -91,7 +91,7 @@ class DirectPlugin(ImagerPlugin): | |||
91 | creatoropts) | 91 | creatoropts) |
92 | 92 | ||
93 | try: | 93 | try: |
94 | creator.mount() | 94 | creator.create() |
95 | creator.install() | 95 | creator.install() |
96 | creator.configure() | 96 | creator.configure() |
97 | creator.print_outimage_info() | 97 | creator.print_outimage_info() |
diff --git a/scripts/lib/mic/utils/partitionedfs.py b/scripts/lib/mic/utils/partitionedfs.py index 50536b4fce..43a38a9b14 100644 --- a/scripts/lib/mic/utils/partitionedfs.py +++ b/scripts/lib/mic/utils/partitionedfs.py | |||
@@ -33,11 +33,9 @@ MBR_OVERHEAD = 1 | |||
33 | SECTOR_SIZE = 512 | 33 | SECTOR_SIZE = 512 |
34 | 34 | ||
35 | class PartitionedMount: | 35 | class PartitionedMount: |
36 | def __init__(self, mountdir): | 36 | def __init__(self): |
37 | self.disks = {} | 37 | self.disks = {} |
38 | self.partitions = [] | 38 | self.partitions = [] |
39 | self.mountOrder = [] | ||
40 | self.unmountOrder = [] | ||
41 | self.parted = find_binary_path("parted") | 39 | self.parted = find_binary_path("parted") |
42 | # Size of a sector used in calculations | 40 | # Size of a sector used in calculations |
43 | self.sector_size = SECTOR_SIZE | 41 | self.sector_size = SECTOR_SIZE |
@@ -102,7 +100,6 @@ class PartitionedMount: | |||
102 | 'label': label, # Partition label | 100 | 'label': label, # Partition label |
103 | 'disk_name': disk_name, # physical disk name holding partition | 101 | 'disk_name': disk_name, # physical disk name holding partition |
104 | 'device': None, # kpartx device node for partition | 102 | 'device': None, # kpartx device node for partition |
105 | 'mount': None, # Mount object | ||
106 | 'num': None, # Partition number | 103 | 'num': None, # Partition number |
107 | 'boot': boot, # Bootable flag | 104 | 'boot': boot, # Bootable flag |
108 | 'align': align, # Partition alignment | 105 | 'align': align, # Partition alignment |
@@ -303,17 +300,6 @@ class PartitionedMount: | |||
303 | self.__run_parted(["-s", d['disk'].device, "set", | 300 | self.__run_parted(["-s", d['disk'].device, "set", |
304 | "%d" % p['num'], "lba", "off"]) | 301 | "%d" % p['num'], "lba", "off"]) |
305 | 302 | ||
306 | def __calculate_mountorder(self): | ||
307 | msger.debug("Calculating mount order") | ||
308 | for p in self.partitions: | ||
309 | if p['mountpoint']: | ||
310 | self.mountOrder.append(p['mountpoint']) | ||
311 | self.unmountOrder.append(p['mountpoint']) | ||
312 | |||
313 | self.mountOrder.sort() | ||
314 | self.unmountOrder.sort() | ||
315 | self.unmountOrder.reverse() | ||
316 | |||
317 | def cleanup(self): | 303 | def cleanup(self): |
318 | if self.disks: | 304 | if self.disks: |
319 | for dev in self.disks.keys(): | 305 | for dev in self.disks.keys(): |
@@ -323,23 +309,6 @@ class PartitionedMount: | |||
323 | except: | 309 | except: |
324 | pass | 310 | pass |
325 | 311 | ||
326 | def unmount(self): | ||
327 | for mp in self.unmountOrder: | ||
328 | if mp == 'swap': | ||
329 | continue | ||
330 | p = None | ||
331 | for p1 in self.partitions: | ||
332 | if p1['mountpoint'] == mp: | ||
333 | p = p1 | ||
334 | break | ||
335 | |||
336 | if p['mount'] != None: | ||
337 | try: | ||
338 | p['mount'].cleanup() | ||
339 | except: | ||
340 | pass | ||
341 | p['mount'] = None | ||
342 | |||
343 | def __install_partition(self, num, source_file, start, size): | 312 | def __install_partition(self, num, source_file, start, size): |
344 | """ | 313 | """ |
345 | Install source_file contents into a partition. | 314 | Install source_file contents into a partition. |
@@ -375,13 +344,11 @@ class PartitionedMount: | |||
375 | self.__install_partition(p['num'], p['source_file'], | 344 | self.__install_partition(p['num'], p['source_file'], |
376 | p['start'], p['size']) | 345 | p['start'], p['size']) |
377 | 346 | ||
378 | def mount(self): | 347 | def create(self): |
379 | for dev in self.disks.keys(): | 348 | for dev in self.disks.keys(): |
380 | d = self.disks[dev] | 349 | d = self.disks[dev] |
381 | d['disk'].create() | 350 | d['disk'].create() |
382 | 351 | ||
383 | self.__format_disks() | 352 | self.__format_disks() |
384 | 353 | ||
385 | self.__calculate_mountorder() | ||
386 | |||
387 | return | 354 | return |