curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #00391
[Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
Ryan Harper has proposed merging ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master.
Commit message:
verify_ptable_flag: dos primary partitions use ptable_uuid map for flag
Curtin currently special-cases verifying MSDOS 'boot', 'extended'
and 'logical' flags. This ignored primary DOS partitions. When
verifying partition flags on a MSDOS primary partition use
ptable_uuid_to_flag_entry map as we do for GPT partitions.
LP: #1878890
Requested reviews:
curtin developers (curtin-dev)
Related bugs:
Bug #1878890 in subiquity: "[Ubuntu Server 20.04 LTS]: Failed Install (subiquity...install_fail/add_info) during partitioning"
https://bugs.launchpad.net/subiquity/+bug/1878890
For more details, see:
https://code.launchpad.net/~raharper/curtin/+git/curtin/+merge/384133
--
Your team curtin developers is requested to review the proposed merge of ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master.
diff --git a/curtin/commands/block_meta.py b/curtin/commands/block_meta.py
index f2bb8da..ff0f2e9 100644
--- a/curtin/commands/block_meta.py
+++ b/curtin/commands/block_meta.py
@@ -760,7 +760,9 @@ def verify_ptable_flag(devpath, expected_flag, sfdisk_info=None):
elif expected_flag == 'logical':
(_parent, partnumber) = block.get_blockdev_for_partition(devpath)
found_flag = 'logical' if int(partnumber) > 4 else None
- else:
+
+ # gpt and msdos primary partitions look up flag by entry['type']
+ if found_flag is None:
(found_flag, _code) = ptable_uuid_to_flag_entry(entry['type'])
msg = (
'Verifying %s partition flag, expecting %s, found %s' % (
diff --git a/tests/unittests/test_commands_block_meta.py b/tests/unittests/test_commands_block_meta.py
index 4cc9299..0050723 100644
--- a/tests/unittests/test_commands_block_meta.py
+++ b/tests/unittests/test_commands_block_meta.py
@@ -2446,4 +2446,106 @@ class TestVerifySize(CiTestCase):
self.devpath = self.random_string()
+class TestVerifyPtableFlag(CiTestCase):
+
+ def setUp(self):
+ super(TestVerifyPtableFlag, self).setUp()
+ base = 'curtin.commands.block_meta.'
+ self.add_patch(base + 'block.sfdisk_info', 'm_block_sfdisk_info')
+ self.add_patch(base + 'block.get_blockdev_for_partition',
+ 'm_block_get_blockdev_for_partition')
+ self.sfdisk_info_dos = {
+ "label": "dos",
+ "id": "0xb0dbdde1",
+ "device": "/dev/vdb",
+ "unit": "sectors",
+ "partitions": [
+ {"node": "/dev/vdb1", "start": 2048, "size": 8388608,
+ "type": "83", "bootable": True},
+ {"node": "/dev/vdb2", "start": 8390656, "size": 8388608,
+ "type": "83"},
+ {"node": "/dev/vdb3", "start": 16779264, "size": 62914560,
+ "type": "85"},
+ {"node": "/dev/vdb5", "start": 16781312, "size": 31457280,
+ "type": "83"},
+ {"node": "/dev/vdb6", "start": 48240640, "size": 10485760,
+ "type": "83"},
+ {"node": "/dev/vdb7", "start": 58728448, "size": 20965376,
+ "type": "83"}]}
+ self.sfdisk_info_gpt = {
+ "label": "gpt",
+ "id": "AEA37E20-8E52-4B37-BDFD-9946A352A37B",
+ "device": "/dev/vda",
+ "unit": "sectors",
+ "firstlba": 34,
+ "lastlba": 41943006,
+ "partitions": [
+ {"node": "/dev/vda1", "start": 227328, "size": 41715679,
+ "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
+ "uuid": "42C72DE9-FF5E-4CD6-A4C8-283685DEB1D5"},
+ {"node": "/dev/vda14", "start": 2048, "size": 8192,
+ "type": "21686148-6449-6E6F-744E-656564454649",
+ "uuid": "762F070A-122A-4EB8-90BF-2CA6E9171B01"},
+ {"node": "/dev/vda15", "start": 10240, "size": 217088,
+ "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
+ "uuid": "789133C6-8579-4792-9D61-FC9A7BEC2A15"}]}
+
+ def test_verify_ptable_flag_finds_boot_on_gpt(self):
+ devpath = '/dev/vda15'
+ expected_flag = 'boot'
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_gpt)
+
+ def test_verify_ptable_flag_raises_exception_missing_flag(self):
+ devpath = '/dev/vda1'
+ expected_flag = 'boot'
+ with self.assertRaises(RuntimeError):
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_gpt)
+
+ def test_verify_ptable_flag_raises_exception_invalid_flag(self):
+ devpath = '/dev/vda1'
+ expected_flag = self.random_string()
+ self.assertNotIn(expected_flag, block_meta.SGDISK_FLAGS.keys())
+ self.assertNotIn(expected_flag, block_meta.MSDOS_FLAGS.keys())
+ with self.assertRaises(RuntimeError):
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_gpt)
+
+ def test_verify_ptable_flag_calls_block_sfdisk_if_info_none(self):
+ devpath = '/dev/vda15'
+ expected_flag = 'boot'
+ self.m_block_sfdisk_info.return_value = self.sfdisk_info_gpt
+ block_meta.verify_ptable_flag(devpath, expected_flag, sfdisk_info=None)
+ self.assertEqual(
+ [call(devpath)],
+ self.m_block_sfdisk_info.call_args_list)
+
+ def test_verify_ptable_flag_finds_boot_on_msdos(self):
+ devpath = '/dev/vdb1'
+ expected_flag = 'boot'
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_dos)
+
+ def test_verify_ptable_flag_finds_linux_on_dos_primary_partition(self):
+ devpath = '/dev/vdb2'
+ expected_flag = 'linux'
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_dos)
+
+ def test_verify_ptable_flag_finds_dos_extended_partition(self):
+ devpath = '/dev/vdb3'
+ expected_flag = 'extended'
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_dos)
+
+ def test_verify_ptable_flag_finds_dos_logical_partition(self):
+ devpath = '/dev/vdb5'
+ expected_flag = 'logical'
+ self.m_block_get_blockdev_for_partition.return_value = (
+ ('/dev/vdb', '5'))
+ block_meta.verify_ptable_flag(devpath, expected_flag,
+ sfdisk_info=self.sfdisk_info_dos)
+
+
# vi: ts=4 expandtab syntax=python
Follow ups
-
[Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Server Team CI bot, 2020-05-22
-
[Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Chad Smith, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Chad Smith, 2020-05-22
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Lucas Albuquerque Medeiros de Moura, 2020-05-21
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Server Team CI bot, 2020-05-20
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Server Team CI bot, 2020-05-20
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-19
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Ryan Harper, 2020-05-19
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Lucas Albuquerque Medeiros de Moura, 2020-05-19
-
Re: [Merge] ~raharper/curtin:fix/partition-verify-flags-msdos-primary-types into curtin:master
From: Server Team CI bot, 2020-05-18