← Back to team overview

curtin-dev team mailing list archive

[Merge] ~mwhudson/curtin:v2-fixes into curtin:master

 

Michael Hudson-Doyle has proposed merging ~mwhudson/curtin:v2-fixes into curtin:master.

Requested reviews:
  curtin developers (curtin-dev)

For more details, see:
https://code.launchpad.net/~mwhudson/curtin/+git/curtin/+merge/415779

I don't expect to commit this as is, but I do want to see how it does in CI.
-- 
Your team curtin developers is requested to review the proposed merge of ~mwhudson/curtin:v2-fixes into curtin:master.
diff --git a/curtin/block/deps.py b/curtin/block/deps.py
index 38581a8..db449d8 100644
--- a/curtin/block/deps.py
+++ b/curtin/block/deps.py
@@ -96,8 +96,12 @@ def detect_required_packages_mapping(osfamily=DISTROS.debian):
     if osfamily not in distro_mapping:
         raise ValueError('No block package mapping for distro: %s' % osfamily)
 
-    return {1: {'handler': storage_config_required_packages,
-                'mapping': distro_mapping.get(osfamily)}}
+    cfg_map = {
+        'handler': storage_config_required_packages,
+        'mapping': distro_mapping.get(osfamily),
+        }
+
+    return {1: cfg_map, 2: cfg_map}
 
 
 # vi: ts=4 expandtab syntax=python
diff --git a/curtin/commands/block_meta_v2.py b/curtin/commands/block_meta_v2.py
index 772c347..5f797a4 100644
--- a/curtin/commands/block_meta_v2.py
+++ b/curtin/commands/block_meta_v2.py
@@ -53,6 +53,11 @@ def align_down(size, block_size):
 FLAG_TO_GUID = {
     flag: guid for (guid, (flag, typecode)) in GPT_GUID_TO_CURTIN_MAP.items()
     }
+FLAG_TO_MBR_TYPE = {
+    flag: typecode[:2].upper() for (guid, (flag, typecode))
+    in GPT_GUID_TO_CURTIN_MAP.items()
+    }
+FLAG_TO_MBR_TYPE['extended'] = '05'
 
 
 class SFDiskPartTable:
@@ -70,7 +75,7 @@ class SFDiskPartTable:
         sfdisk_script = self.render()
         LOG.debug("sfdisk input:\n---\n%s\n---\n", sfdisk_script)
         util.subp(
-            ['sfdisk', '--lock', '--no-tell', device],
+            ['sfdisk', device],
             data=sfdisk_script.encode('ascii'))
         util.subp(['partprobe', device])
 
@@ -144,20 +149,12 @@ class DOSPartTable(SFDiskPartTable):
                 for entry in self.entries:
                     if entry.number <= 4:
                         prev = entry
-                        break
                 if prev is None:
                     start = ONE_MIB_SECTORS
                 else:
                     start = align_up(prev.start + prev.size, ONE_MIB_SECTORS)
         size = int(util.human2bytes(action['size'])) // SECTOR_BYTES
-        FLAG_TO_TYPE = {
-            'extended': 'extended',
-            'boot': 'uefi',
-            'swap': 'swap',
-            'lvm': 'lvm',
-            'raid': 'raid',
-            }
-        type = FLAG_TO_TYPE.get(flag)
+        type = FLAG_TO_MBR_TYPE.get(flag)
         if flag == 'boot':
             bootable = True
         else:
diff --git a/examples/tests/basic.yaml b/examples/tests/basic.yaml
index 82f5ad1..a95e914 100644
--- a/examples/tests/basic.yaml
+++ b/examples/tests/basic.yaml
@@ -4,7 +4,7 @@ swap:
     size: 1GB
     maxsize: 1GB
 storage:
-    version: 1
+    version: 2
     config:
       - id: sda
         type: disk
diff --git a/tests/integration/test_block_meta.py b/tests/integration/test_block_meta.py
index fd119c5..a415c20 100644
--- a/tests/integration/test_block_meta.py
+++ b/tests/integration/test_block_meta.py
@@ -116,19 +116,22 @@ class TestBlockMeta(IntegrationTestCase):
         psize = 40 << 20
         img = self.tmp_path('image.img')
         config = StorageConfigBuilder(version=version)
-        config.add_image(path=img, size='100M', ptable=ptable)
+        config.add_image(path=img, size='200M', ptable=ptable)
         p1 = config.add_part(size=psize, number=1)
         p2 = config.add_part(size=psize, number=2)
+        p3 = config.add_part(size=psize, number=3)
         self.run_bm(config.render())
 
         with loop_dev(img) as dev:
             self.assertEqual(
                 summarize_partitions(dev), [
-                    PartData(number=1, offset=1 << 20,           size=psize),
-                    PartData(number=2, offset=(1 << 20) + psize, size=psize),
+                    PartData(number=1, offset=1 << 20,             size=psize),
+                    PartData(number=2, offset=(1 << 20) + psize,   size=psize),
+                    PartData(number=3, offset=(1 << 20) + 2*psize, size=psize),
                 ])
         p1['offset'] = 1 << 20
         p2['offset'] = (1 << 20) + psize
+        p3['offset'] = (1 << 20) + 2*psize
         config.set_preserve()
         self.run_bm(config.render())
 

Follow ups