Merge branch 'stable-0.1'
authorNikos Skalkotos <skalkoto@grnet.gr>
Thu, 3 Jan 2013 17:53:15 +0000 (19:53 +0200)
committerNikos Skalkotos <skalkoto@grnet.gr>
Thu, 3 Jan 2013 17:53:15 +0000 (19:53 +0200)
docs/overview.rst
image_creator/disk.py

index e375086..14c2180 100644 (file)
@@ -2,10 +2,8 @@ Overview
 ^^^^^^^^
 
 snf-image-creator is a simple command-line tool for creating OS images. The
-original media from which the image is created, can be a block device or a
-regular file that represents a hard disk. Given a media file, snf-image-creator
-will create a snapshot for it and will run a number of system preparation
-operations on the snapshot, before the image is created.
+original media, the image is created from, can be a block device or a regular
+file that represents a hard disk.
 
 Snapshotting
 ============
@@ -13,12 +11,13 @@ Snapshotting
 snf-image-creator works on snapshots of the original media. Any changes made by
 the program do not affect the original media.
 
-Preparation
-===========
+Image Preparation
+=================
 
-Some of the system preparation operations are OS specific. snf-image-creator
-will use heuristics to detect the OS of the media and determine which
-operations should perform on it. The main purpose of running them is to:
+During the image creation, a number of system preparation operations are
+applied on the media snapshot. Some of those are OS specific. snf-image-creator
+will use heuristics to detect the OS and determine which operations to apply.
+Those operations will:
 
  * Shrink the image
  * Clear out sensitive user data (passwords, ssh keys, history files, etc.)
@@ -28,12 +27,14 @@ operations should perform on it. The main purpose of running them is to:
 Creation
 ========
 
-The program can either dump the image file locally or directly upload it to
-pithos and register it with `okeanos <http://www.okeanos.grnet.gr>`_.
+The program can either dump the image file locally or use
+`./kamaki <https://code.grnet.gr/projects/kamaki>`_ to directly upload and
+register it on a `Synnefo <https://code.grnet.gr/projects/synnefo>`_
+deployment.
 
 Image Format
 ============
 
-The images the program creates are in diskdump format. This is the recommended
-format for `snf-image <https://code.grnet.gr/projects/snf-image>`_, the Ganeti
-OS Definition used by `Synnefo <https://code.grnet.gr/projects/synnefo>`_.
+The extracted images are in diskdump format. This is the recommended format for
+`snf-image <https://code.grnet.gr/projects/snf-image>`_, the Ganeti OS
+Definition used by `Synnefo <https://code.grnet.gr/projects/synnefo>`_.
index d165053..dc7cbd8 100644 (file)
@@ -292,16 +292,17 @@ class DiskDevice(object):
             raise FatalError(msg)
 
         is_extended = lambda p: \
-            self.g.part_get_mbr_id(self.guestfs_device, p['part_num']) == 5
+            self.g.part_get_mbr_id(self.guestfs_device, p['part_num']) \
+            in (0x5, 0xf)
         is_logical = lambda p: \
-            self.meta['PARTITION_TABLE'] != 'msdos' and p['part_num'] > 4
+            self.meta['PARTITION_TABLE'] == 'msdos' and p['part_num'] > 4
 
         partitions = self.g.part_list(self.guestfs_device)
         last_partition = partitions[-1]
 
         if is_logical(last_partition):
             # The disk contains extended and logical partitions....
-            extended = [p for p in partitions if is_extended(p)][0]
+            extended = filter(is_extended, partitions)[0]
             last_primary = [p for p in partitions if p['part_num'] <= 4][-1]
 
             # check if extended is the last primary partition
@@ -325,7 +326,8 @@ class DiskDevice(object):
             self.meta['PARTITION_TABLE'] == 'msdos' and p['part_num'] > 4
         is_extended = lambda p: \
             self.meta['PARTITION_TABLE'] == 'msdos' and \
-            self.g.part_get_mbr_id(self.guestfs_device, p['part_num']) == 5
+            self.g.part_get_mbr_id(self.guestfs_device, p['part_num']) \
+            in (0x5, 0xf)
 
         part_add = lambda ptype, start, stop: \
             self.g.part_add(self.guestfs_device, ptype, start, stop)
@@ -375,10 +377,8 @@ class DiskDevice(object):
         self.g.resize2fs_M(part_dev)
 
         out = self.g.tune2fs_l(part_dev)
-        block_size = int(
-            filter(lambda x: x[0] == 'Block size', out)[0][1])
-        block_cnt = int(
-            filter(lambda x: x[0] == 'Block count', out)[0][1])
+        block_size = int(filter(lambda x: x[0] == 'Block size', out)[0][1])
+        block_cnt = int(filter(lambda x: x[0] == 'Block count', out)[0][1])
 
         start = last_part['part_start'] / sector_size
         end = start + (block_size * block_cnt) / sector_size - 1
@@ -394,16 +394,16 @@ class DiskDevice(object):
                     'num': partition['part_num'],
                     'start': partition['part_start'] / sector_size,
                     'end': partition['part_end'] / sector_size,
-                    'id': part_get_(partition['part_num']),
+                    'id': part_get_id(partition['part_num']),
                     'bootable': part_get_bootable(partition['part_num'])
                 })
 
             logical[-1]['end'] = end  # new end after resize
 
             # Recreate the extended partition
-            extended = [p for p in partitions if self._is_extended(p)][0]
+            extended = filter(is_extended, partitions)[0]
             part_del(extended['part_num'])
-            part_add('e', extended['part_start'], end)
+            part_add('e', extended['part_start'] / sector_size, end)
 
             # Create all the logical partitions back
             for l in logical: