whew. sorted out a lot of gi/BD and fallback inconsistencies...
This commit is contained in:
parent
46351329b8
commit
37124f066a
178
aif.xsd
178
aif.xsd
@ -25,79 +25,116 @@
|
||||
|
||||
<xs:simpleType name="t_disksize">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[-|+]?\s*([0-9]+)\s*(%|B|kB|MB|GB|TB|KiB|MiB|GiB|TiB|)\s*"/>
|
||||
<xs:pattern value="[-|+]?\s*([0-9]+)\s*(%|((k|Ki)|[MGTPEZY]i?)?B?|)\s*"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="t_fstype">
|
||||
<!-- ', '.join(sorted(list(dict(vars(parted.filesystem))['fileSystemType'].keys()))) -->
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="affs0"/>
|
||||
<xs:enumeration value="affs1"/>
|
||||
<xs:enumeration value="affs2"/>
|
||||
<xs:enumeration value="affs3"/>
|
||||
<xs:enumeration value="affs4"/>
|
||||
<xs:enumeration value="affs5"/>
|
||||
<xs:enumeration value="affs6"/>
|
||||
<xs:enumeration value="affs7"/>
|
||||
<xs:enumeration value="amufs"/>
|
||||
<xs:enumeration value="amufs0"/>
|
||||
<xs:enumeration value="amufs1"/>
|
||||
<xs:enumeration value="amufs2"/>
|
||||
<xs:enumeration value="amufs3"/>
|
||||
<xs:enumeration value="amufs4"/>
|
||||
<xs:enumeration value="amufs5"/>
|
||||
<xs:enumeration value="apfs1"/>
|
||||
<xs:enumeration value="apfs2"/>
|
||||
<xs:enumeration value="asfs"/>
|
||||
<xs:enumeration value="btrfs"/>
|
||||
<xs:enumeration value="ext2"/>
|
||||
<xs:enumeration value="ext3"/>
|
||||
<xs:enumeration value="ext4"/>
|
||||
<xs:enumeration value="fat16"/>
|
||||
<xs:enumeration value="fat32"/>
|
||||
<xs:enumeration value="hfs"/>
|
||||
<xs:enumeration value="hfs+"/>
|
||||
<xs:enumeration value="hfsx"/>
|
||||
<xs:enumeration value="hp-ufs"/>
|
||||
<xs:enumeration value="jfs"/>
|
||||
<xs:enumeration value="linux-swap(v0)"/>
|
||||
<xs:enumeration value="linux-swap(v1)"/>
|
||||
<xs:enumeration value="nilfs2"/>
|
||||
<xs:enumeration value="ntfs"/>
|
||||
<xs:enumeration value="reiserfs"/>
|
||||
<xs:enumeration value="sun-ufs"/>
|
||||
<xs:enumeration value="swsusp"/>
|
||||
<xs:enumeration value="udf"/>
|
||||
<xs:enumeration value="xfs"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
<xs:union>
|
||||
<xs:simpleType>
|
||||
<!-- parted names -->
|
||||
<!-- ', '.join(sorted(list(dict(vars(parted.filesystem))['fileSystemType'].keys()))) -->
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="affs0"/>
|
||||
<xs:enumeration value="affs1"/>
|
||||
<xs:enumeration value="affs2"/>
|
||||
<xs:enumeration value="affs3"/>
|
||||
<xs:enumeration value="affs4"/>
|
||||
<xs:enumeration value="affs5"/>
|
||||
<xs:enumeration value="affs6"/>
|
||||
<xs:enumeration value="affs7"/>
|
||||
<xs:enumeration value="amufs"/>
|
||||
<xs:enumeration value="amufs0"/>
|
||||
<xs:enumeration value="amufs1"/>
|
||||
<xs:enumeration value="amufs2"/>
|
||||
<xs:enumeration value="amufs3"/>
|
||||
<xs:enumeration value="amufs4"/>
|
||||
<xs:enumeration value="amufs5"/>
|
||||
<xs:enumeration value="apfs1"/>
|
||||
<xs:enumeration value="apfs2"/>
|
||||
<xs:enumeration value="asfs"/>
|
||||
<xs:enumeration value="btrfs"/>
|
||||
<xs:enumeration value="ext2"/>
|
||||
<xs:enumeration value="ext3"/>
|
||||
<xs:enumeration value="ext4"/>
|
||||
<xs:enumeration value="fat16"/>
|
||||
<xs:enumeration value="fat32"/>
|
||||
<xs:enumeration value="hfs"/>
|
||||
<xs:enumeration value="hfs+"/>
|
||||
<xs:enumeration value="hfsx"/>
|
||||
<xs:enumeration value="hp-ufs"/>
|
||||
<xs:enumeration value="jfs"/>
|
||||
<xs:enumeration value="linux-swap(v0)"/>
|
||||
<xs:enumeration value="linux-swap(v1)"/>
|
||||
<xs:enumeration value="nilfs2"/>
|
||||
<xs:enumeration value="ntfs"/>
|
||||
<xs:enumeration value="reiserfs"/>
|
||||
<xs:enumeration value="sun-ufs"/>
|
||||
<xs:enumeration value="swsusp"/>
|
||||
<xs:enumeration value="udf"/>
|
||||
<xs:enumeration value="xfs"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType>
|
||||
<!-- https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs -->
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:union>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="t_part_flags">
|
||||
<!-- parted.partition.partitionFlag -->
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="atvrecv"/>
|
||||
<xs:enumeration value="bios_grub"/>
|
||||
<xs:enumeration value="boot"/>
|
||||
<xs:enumeration value="diag"/>
|
||||
<xs:enumeration value="esp"/>
|
||||
<xs:enumeration value="hidden"/>
|
||||
<xs:enumeration value="hp-service"/>
|
||||
<xs:enumeration value="irst"/>
|
||||
<xs:enumeration value="lba"/>
|
||||
<xs:enumeration value="legacy_boot"/>
|
||||
<xs:enumeration value="lvm"/>
|
||||
<xs:enumeration value="msftdata"/>
|
||||
<xs:enumeration value="msftres"/>
|
||||
<xs:enumeration value="palo"/>
|
||||
<xs:enumeration value="prep"/>
|
||||
<xs:enumeration value="raid"/>
|
||||
<xs:enumeration value="root"/>
|
||||
<xs:enumeration value="swap"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
<xs:union>
|
||||
<xs:simpleType>
|
||||
<!-- parted.partition.partitionFlag -->
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="atvrecv"/>
|
||||
<xs:enumeration value="bios_grub"/>
|
||||
<xs:enumeration value="boot"/>
|
||||
<xs:enumeration value="diag"/>
|
||||
<xs:enumeration value="esp"/>
|
||||
<xs:enumeration value="hidden"/>
|
||||
<xs:enumeration value="hp-service"/>
|
||||
<xs:enumeration value="irst"/>
|
||||
<xs:enumeration value="lba"/>
|
||||
<xs:enumeration value="legacy_boot"/>
|
||||
<xs:enumeration value="lvm"/>
|
||||
<xs:enumeration value="msftdata"/>
|
||||
<xs:enumeration value="msftres"/>
|
||||
<xs:enumeration value="palo"/>
|
||||
<xs:enumeration value="prep"/>
|
||||
<xs:enumeration value="raid"/>
|
||||
<xs:enumeration value="root"/>
|
||||
<xs:enumeration value="swap"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType>
|
||||
<!-- These deviate from the parted flags (and in the case of the gpt_* ones, have no parted
|
||||
equivalent it seems).
|
||||
fdisk's "e(x)pert mode" has numerical GUID identifers for these ("Attrs").
|
||||
|
||||
BD_PART_FLAGS = BlockDev.PartFlag(-1)
|
||||
BD_PART_FLAGS_FRIENDLY = dict(zip(BD_PART_FLAGS.value_nicks, BD_PART_FLAGS.value_names))
|
||||
sorted(list(BD_PART_FLAGS_FRIENDLY.keys()))
|
||||
-->
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="apple_tv_recovery"/>
|
||||
<xs:enumeration value="cpalo"/>
|
||||
<xs:enumeration value="gpt_hidden"/>
|
||||
<xs:enumeration value="gpt_no_automount"/>
|
||||
<xs:enumeration value="gpt_read_only"/>
|
||||
<xs:enumeration value="hpservice"/>
|
||||
<xs:enumeration value="msft_data"/>
|
||||
<xs:enumeration value="msft_reserved"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:union>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="t_iface">
|
||||
@ -139,7 +176,9 @@
|
||||
|
||||
<xs:simpleType name="t_netproto">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="(both|ipv4|ipv6)"/>
|
||||
<xs:enumeration value="both"/>
|
||||
<xs:enumeration value="ipv4"/>
|
||||
<xs:enumeration value="ipv6"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
@ -149,6 +188,7 @@
|
||||
<xs:enumeration value="netctl"/>
|
||||
<xs:enumeration value="nm"/>
|
||||
<xs:enumeration value="systemd"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
@ -204,7 +244,9 @@
|
||||
|
||||
<xs:simpleType name="t_authselect">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="(basic|digest|none)"/>
|
||||
<xs:enumeration value="basic"/>
|
||||
<xs:enumeration value="digest"/>
|
||||
<xs:enumeration value="none"/>
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
@ -813,4 +855,4 @@
|
||||
<xs:attribute name="version" type="aif:t_nonempty" use="optional" default="master"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
</xs:schema>
|
||||
|
@ -16,15 +16,6 @@ _BlockDev.ensure_init(_BlockDev.plugin_specs_from_names(('part', )))
|
||||
# LIBBLOCKDEV FLAG INDEXING / PARTED <=> LIBBLOCKDEV FLAG CONVERSION
|
||||
BD_PART_FLAGS = _BlockDev.PartFlag(-1)
|
||||
BD_PART_FLAGS_FRIENDLY = dict(zip(BD_PART_FLAGS.value_nicks, BD_PART_FLAGS.value_names))
|
||||
BD_PARTED_MAP = {'apple_tv_recovery': 'atvrecv',
|
||||
'cpalo': 'palo',
|
||||
'gpt_hidden': None, # ???
|
||||
'gpt_no_automount': None, # ???
|
||||
'gpt_read_only': None, # ???
|
||||
'gpt_system_part': None, # ???
|
||||
'hpservice': 'hp-service',
|
||||
'msft_data': 'msftdata',
|
||||
'msft_reserved': 'msftres'}
|
||||
PARTED_BD_MAP = {v: k for k, v in BD_PARTED_MAP.items() if v is not None}
|
||||
BD_PART_FLAGS_IDX_FLAG = {k: v.value_nicks[0] for k, v in BD_PART_FLAGS.__flags_values__.items()}
|
||||
BD_PART_FLAGS_FLAG_IDX = {v: k for k, v in BD_PART_FLAGS_IDX_FLAG.items()}
|
||||
|
@ -1,8 +1,11 @@
|
||||
import uuid
|
||||
##
|
||||
import parted # https://www.gnu.org/software/parted/api/index.html
|
||||
|
||||
|
||||
# META
|
||||
ARCH_RELENG_KEY = '4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC'
|
||||
VERSION = '0.2.0'
|
||||
# blkinfo, mdstat, and pyparted are only needed for the non-gi fallbacks.
|
||||
EXTERNAL_DEPS = ['blkinfo',
|
||||
'gpg',
|
||||
'lxml',
|
||||
@ -19,3 +22,208 @@ PARTED_FSTYPES = sorted(list(dict(vars(parted.filesystem))['fileSystemType'].key
|
||||
PARTED_FLAGS = sorted(list(parted.partition.partitionFlag.values()))
|
||||
PARTED_IDX_FLAG = dict(parted.partition.partitionFlag)
|
||||
PARTED_FLAG_IDX = {v: k for k, v in PARTED_IDX_FLAG.items()}
|
||||
# LIBBLOCKDEV BOOTSTRAPPING (ALLOWED VALUES IN CONFIG)
|
||||
BD_PARTED_MAP = {'apple_tv_recovery': 'atvrecv',
|
||||
'cpalo': 'palo',
|
||||
'gpt_hidden': None, # No parted equivalent
|
||||
'gpt_no_automount': None, # No parted equivalent
|
||||
'gpt_read_only': None, # No parted equivalent
|
||||
'gpt_system_part': None, # No parted equivalent
|
||||
'hpservice': 'hp-service',
|
||||
'msft_data': 'msftdata',
|
||||
'msft_reserved': 'msftres'}
|
||||
# GPT FSTYPES GUIDS
|
||||
# I'm doing this now because if I didn't, I would probably need to do it later eventually.
|
||||
# https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs
|
||||
GPT_FSTYPE_GUIDS = ((1, 'EFI System', uuid.UUID(hex = 'C12A7328-F81F-11D2-BA4B-00A0C93EC93B')),
|
||||
(2, 'MBR partition scheme', uuid.UUID(hex = '024DEE41-33E7-11D3-9D69-0008C781F39F')),
|
||||
(3, 'Intel Fast Flash', uuid.UUID(hex = 'D3BFE2DE-3DAF-11DF-BA40-E3A556D89593')),
|
||||
(4, 'BIOS boot', uuid.UUID(hex = '21686148-6449-6E6F-744E-656564454649')),
|
||||
(5, 'Sony boot partition', uuid.UUID(hex = 'F4019732-066E-4E12-8273-346C5641494F')),
|
||||
(6, 'Lenovo boot partition', uuid.UUID(hex = 'BFBFAFE7-A34F-448A-9A5B-6213EB736C22')),
|
||||
(7, 'PowerPC PReP boot', uuid.UUID(hex = '9E1A2D38-C612-4316-AA26-8B49521E5A8B')),
|
||||
(8, 'ONIE boot', uuid.UUID(hex = '7412F7D5-A156-4B13-81DC-867174929325')),
|
||||
(9, 'ONIE config', uuid.UUID(hex = 'D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149')),
|
||||
(10, 'Microsoft reserved', uuid.UUID(hex = 'E3C9E316-0B5C-4DB8-817D-F92DF00215AE')),
|
||||
(11, 'Microsoft basic data', uuid.UUID(hex = 'EBD0A0A2-B9E5-4433-87C0-68B6B72699C7')),
|
||||
(12, 'Microsoft LDM metadata', uuid.UUID(hex = '5808C8AA-7E8F-42E0-85D2-E1E90434CFB3')),
|
||||
(13, 'Microsoft LDM data', uuid.UUID(hex = 'AF9B60A0-1431-4F62-BC68-3311714A69AD')),
|
||||
(14, 'Windows recovery environment', uuid.UUID(hex = 'DE94BBA4-06D1-4D40-A16A-BFD50179D6AC')),
|
||||
(15, 'IBM General Parallel Fs', uuid.UUID(hex = '37AFFC90-EF7D-4E96-91C3-2D7AE055B174')),
|
||||
(16, 'Microsoft Storage Spaces', uuid.UUID(hex = 'E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D')),
|
||||
(17, 'HP-UX data', uuid.UUID(hex = '75894C1E-3AEB-11D3-B7C1-7B03A0000000')),
|
||||
(18, 'HP-UX service', uuid.UUID(hex = 'E2A1E728-32E3-11D6-A682-7B03A0000000')),
|
||||
(19, 'Linux swap', uuid.UUID(hex = '0657FD6D-A4AB-43C4-84E5-0933C84B4F4F')),
|
||||
(20, 'Linux filesystem', uuid.UUID(hex = '0FC63DAF-8483-4772-8E79-3D69D8477DE4')),
|
||||
(21, 'Linux server data', uuid.UUID(hex = '3B8F8425-20E0-4F3B-907F-1A25A76F98E8')),
|
||||
(22, 'Linux root (x86)', uuid.UUID(hex = '44479540-F297-41B2-9AF7-D131D5F0458A')),
|
||||
(23, 'Linux root (ARM)', uuid.UUID(hex = '69DAD710-2CE4-4E3C-B16C-21A1D49ABED3')),
|
||||
(24, 'Linux root (x86-64)', uuid.UUID(hex = '4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709')),
|
||||
(25, 'Linux root (ARM-64)', uuid.UUID(hex = 'B921B045-1DF0-41C3-AF44-4C6F280D3FAE')),
|
||||
(26, 'Linux root (IA-64)', uuid.UUID(hex = '993D8D3D-F80E-4225-855A-9DAF8ED7EA97')),
|
||||
(27, 'Linux reserved', uuid.UUID(hex = '8DA63339-0007-60C0-C436-083AC8230908')),
|
||||
(28, 'Linux home', uuid.UUID(hex = '933AC7E1-2EB4-4F13-B844-0E14E2AEF915')),
|
||||
(29, 'Linux RAID', uuid.UUID(hex = 'A19D880F-05FC-4D3B-A006-743F0F84911E')),
|
||||
(30, 'Linux extended boot', uuid.UUID(hex = 'BC13C2FF-59E6-4262-A352-B275FD6F7172')),
|
||||
(31, 'Linux LVM', uuid.UUID(hex = 'E6D6D379-F507-44C2-A23C-238F2A3DF928')),
|
||||
(32, 'FreeBSD data', uuid.UUID(hex = '516E7CB4-6ECF-11D6-8FF8-00022D09712B')),
|
||||
(33, 'FreeBSD boot', uuid.UUID(hex = '83BD6B9D-7F41-11DC-BE0B-001560B84F0F')),
|
||||
(34, 'FreeBSD swap', uuid.UUID(hex = '516E7CB5-6ECF-11D6-8FF8-00022D09712B')),
|
||||
(35, 'FreeBSD UFS', uuid.UUID(hex = '516E7CB6-6ECF-11D6-8FF8-00022D09712B')),
|
||||
(36, 'FreeBSD ZFS', uuid.UUID(hex = '516E7CBA-6ECF-11D6-8FF8-00022D09712B')),
|
||||
(37, 'FreeBSD Vinum', uuid.UUID(hex = '516E7CB8-6ECF-11D6-8FF8-00022D09712B')),
|
||||
(38, 'Apple HFS/HFS+', uuid.UUID(hex = '48465300-0000-11AA-AA11-00306543ECAC')),
|
||||
(39, 'Apple UFS', uuid.UUID(hex = '55465300-0000-11AA-AA11-00306543ECAC')),
|
||||
(40, 'Apple RAID', uuid.UUID(hex = '52414944-0000-11AA-AA11-00306543ECAC')),
|
||||
(41, 'Apple RAID offline', uuid.UUID(hex = '52414944-5F4F-11AA-AA11-00306543ECAC')),
|
||||
(42, 'Apple boot', uuid.UUID(hex = '426F6F74-0000-11AA-AA11-00306543ECAC')),
|
||||
(43, 'Apple label', uuid.UUID(hex = '4C616265-6C00-11AA-AA11-00306543ECAC')),
|
||||
(44, 'Apple TV recovery', uuid.UUID(hex = '5265636F-7665-11AA-AA11-00306543ECAC')),
|
||||
(45, 'Apple Core storage', uuid.UUID(hex = '53746F72-6167-11AA-AA11-00306543ECAC')),
|
||||
(46, 'Solaris boot', uuid.UUID(hex = '6A82CB45-1DD2-11B2-99A6-080020736631')),
|
||||
(47, 'Solaris root', uuid.UUID(hex = '6A85CF4D-1DD2-11B2-99A6-080020736631')),
|
||||
(48, 'Solaris /usr & Apple ZFS', uuid.UUID(hex = '6A898CC3-1DD2-11B2-99A6-080020736631')),
|
||||
(49, 'Solaris swap', uuid.UUID(hex = '6A87C46F-1DD2-11B2-99A6-080020736631')),
|
||||
(50, 'Solaris backup', uuid.UUID(hex = '6A8B642B-1DD2-11B2-99A6-080020736631')),
|
||||
(51, 'Solaris /var', uuid.UUID(hex = '6A8EF2E9-1DD2-11B2-99A6-080020736631')),
|
||||
(52, 'Solaris /home', uuid.UUID(hex = '6A90BA39-1DD2-11B2-99A6-080020736631')),
|
||||
(53, 'Solaris alternate sector', uuid.UUID(hex = '6A9283A5-1DD2-11B2-99A6-080020736631')),
|
||||
(54, 'Solaris reserved 1', uuid.UUID(hex = '6A945A3B-1DD2-11B2-99A6-080020736631')),
|
||||
(55, 'Solaris reserved 2', uuid.UUID(hex = '6A9630D1-1DD2-11B2-99A6-080020736631')),
|
||||
(56, 'Solaris reserved 3', uuid.UUID(hex = '6A980767-1DD2-11B2-99A6-080020736631')),
|
||||
(57, 'Solaris reserved 4', uuid.UUID(hex = '6A96237F-1DD2-11B2-99A6-080020736631')),
|
||||
(58, 'Solaris reserved 5', uuid.UUID(hex = '6A8D2AC7-1DD2-11B2-99A6-080020736631')),
|
||||
(59, 'NetBSD swap', uuid.UUID(hex = '49F48D32-B10E-11DC-B99B-0019D1879648')),
|
||||
(60, 'NetBSD FFS', uuid.UUID(hex = '49F48D5A-B10E-11DC-B99B-0019D1879648')),
|
||||
(61, 'NetBSD LFS', uuid.UUID(hex = '49F48D82-B10E-11DC-B99B-0019D1879648')),
|
||||
(62, 'NetBSD concatenated', uuid.UUID(hex = '2DB519C4-B10E-11DC-B99B-0019D1879648')),
|
||||
(63, 'NetBSD encrypted', uuid.UUID(hex = '2DB519EC-B10E-11DC-B99B-0019D1879648')),
|
||||
(64, 'NetBSD RAID', uuid.UUID(hex = '49F48DAA-B10E-11DC-B99B-0019D1879648')),
|
||||
(65, 'ChromeOS kernel', uuid.UUID(hex = 'FE3A2A5D-4F32-41A7-B725-ACCC3285A309')),
|
||||
(66, 'ChromeOS root fs', uuid.UUID(hex = '3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC')),
|
||||
(67, 'ChromeOS reserved', uuid.UUID(hex = '2E0A753D-9E48-43B0-8337-B15192CB1B5E')),
|
||||
(68, 'MidnightBSD data', uuid.UUID(hex = '85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(69, 'MidnightBSD boot', uuid.UUID(hex = '85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(70, 'MidnightBSD swap', uuid.UUID(hex = '85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(71, 'MidnightBSD UFS', uuid.UUID(hex = '0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(72, 'MidnightBSD ZFS', uuid.UUID(hex = '85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(73, 'MidnightBSD Vinum', uuid.UUID(hex = '85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7')),
|
||||
(74, 'Ceph Journal', uuid.UUID(hex = '45B0969E-9B03-4F30-B4C6-B4B80CEFF106')),
|
||||
(75, 'Ceph Encrypted Journal', uuid.UUID(hex = '45B0969E-9B03-4F30-B4C6-5EC00CEFF106')),
|
||||
(76, 'Ceph OSD', uuid.UUID(hex = '4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D')),
|
||||
(77, 'Ceph crypt OSD', uuid.UUID(hex = '4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D')),
|
||||
(78, 'Ceph disk in creation', uuid.UUID(hex = '89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE')),
|
||||
(79, 'Ceph crypt disk in creation', uuid.UUID(hex = '89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE')),
|
||||
(80, 'VMware VMFS', uuid.UUID(hex = 'AA31E02A-400F-11DB-9590-000C2911D1B8')),
|
||||
(81, 'VMware Diagnostic', uuid.UUID(hex = '9D275380-40AD-11DB-BF97-000C2911D1B8')),
|
||||
(82, 'VMware Virtual SAN', uuid.UUID(hex = '381CFCCC-7288-11E0-92EE-000C2911D0B2')),
|
||||
(83, 'VMware Virsto', uuid.UUID(hex = '77719A0C-A4A0-11E3-A47E-000C29745A24')),
|
||||
(84, 'VMware Reserved', uuid.UUID(hex = '9198EFFC-31C0-11DB-8F78-000C2911D1B8')),
|
||||
(85, 'OpenBSD data', uuid.UUID(hex = '824CC7A0-36A8-11E3-890A-952519AD3F61')),
|
||||
(86, 'QNX6 file system', uuid.UUID(hex = 'CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1')),
|
||||
(87, 'Plan 9 partition', uuid.UUID(hex = 'C91818F9-8025-47AF-89D2-F030D7000C2C')),
|
||||
(88, 'HiFive Unleashed FSBL', uuid.UUID(hex = '5B193300-FC78-40CD-8002-E86C45580B47')),
|
||||
(89, 'HiFive Unleashed BBL', uuid.UUID(hex = '2E54B353-1271-4842-806F-E436D6AF6985')))
|
||||
# MSDOS FSTYPES IDENTIFIERS
|
||||
# Second verse, same as the first - kind of. The msdos type identifers just use a byte identifier rather than UUID.
|
||||
# https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/include/pt-mbr-partnames.h
|
||||
MSDOS_FSTYPE_IDS = ((1, 'Empty', b'\x00'),
|
||||
(2, 'FAT12', b'\x01'),
|
||||
(3, 'XENIX root', b'\x02'),
|
||||
(4, 'XENIX usr', b'\x03'),
|
||||
(5, 'FAT16 <32M', b'\x04'),
|
||||
(6, 'Extended', b'\x05'),
|
||||
(7, 'FAT16', b'\x06'),
|
||||
(8, 'HPFS/NTFS/exFAT', b'\x07'),
|
||||
(9, 'AIX', b'\x08'),
|
||||
(10, 'AIX bootable', b'\t'),
|
||||
(11, 'OS/2 Boot Manager', b'\n'),
|
||||
(12, 'W95 FAT32', b'\x0b'),
|
||||
(13, 'W95 FAT32 (LBA)', b'\x0c'),
|
||||
(14, 'W95 FAT16 (LBA)', b'\x0e'),
|
||||
(15, "W95 Ext'd (LBA)", b'\x0f'),
|
||||
(16, 'OPUS', b'\x10'),
|
||||
(17, 'Hidden FAT12', b'\x11'),
|
||||
(18, 'Compaq diagnostics', b'\x12'),
|
||||
(19, 'Hidden FAT16 <32M', b'\x14'),
|
||||
(20, 'Hidden FAT16', b'\x16'),
|
||||
(21, 'Hidden HPFS/NTFS', b'\x17'),
|
||||
(22, 'AST SmartSleep', b'\x18'),
|
||||
(23, 'Hidden W95 FAT32', b'\x1b'),
|
||||
(24, 'Hidden W95 FAT32 (LBA)', b'\x1c'),
|
||||
(25, 'Hidden W95 FAT16 (LBA)', b'\x1e'),
|
||||
(26, 'NEC DOS', b'$'),
|
||||
(27, 'Hidden NTFS WinRE', b"'"),
|
||||
(28, 'Plan 9', b'9'),
|
||||
(29, 'PartitionMagic recovery', b'<'),
|
||||
(30, 'Venix 80286', b'@'),
|
||||
(31, 'PPC PReP Boot', b'A'),
|
||||
(32, 'SFS', b'B'),
|
||||
(33, 'QNX4.x', b'M'),
|
||||
(34, 'QNX4.x 2nd part', b'N'),
|
||||
(35, 'QNX4.x 3rd part', b'O'),
|
||||
(36, 'OnTrack DM', b'P'),
|
||||
(37, 'OnTrack DM6 Aux1', b'Q'),
|
||||
(38, 'CP/M', b'R'),
|
||||
(39, 'OnTrack DM6 Aux3', b'S'),
|
||||
(40, 'OnTrackDM6', b'T'),
|
||||
(41, 'EZ-Drive', b'U'),
|
||||
(42, 'Golden Bow', b'V'),
|
||||
(43, 'Priam Edisk', b'\\'),
|
||||
(44, 'SpeedStor', b'a'),
|
||||
(45, 'GNU HURD or SysV', b'c'),
|
||||
(46, 'Novell Netware 286', b'd'),
|
||||
(47, 'Novell Netware 386', b'e'),
|
||||
(48, 'DiskSecure Multi-Boot', b'p'),
|
||||
(49, 'PC/IX', b'u'),
|
||||
(50, 'Old Minix', b'\x80'),
|
||||
(51, 'Minix / old Linux', b'\x81'),
|
||||
(52, 'Linux swap / Solaris', b'\x82'),
|
||||
(53, 'Linux', b'\x83'),
|
||||
(54, 'OS/2 hidden or Intel hibernation', b'\x84'),
|
||||
(55, 'Linux extended', b'\x85'),
|
||||
(56, 'NTFS volume set', b'\x86'),
|
||||
(57, 'NTFS volume set', b'\x87'),
|
||||
(58, 'Linux plaintext', b'\x88'),
|
||||
(59, 'Linux LVM', b'\x8e'),
|
||||
(60, 'Amoeba', b'\x93'),
|
||||
(61, 'Amoeba BBT', b'\x94'),
|
||||
(62, 'BSD/OS', b'\x9f'),
|
||||
(63, 'IBM Thinkpad hibernation', b'\xa0'),
|
||||
(64, 'FreeBSD', b'\xa5'),
|
||||
(65, 'OpenBSD', b'\xa6'),
|
||||
(66, 'NeXTSTEP', b'\xa7'),
|
||||
(67, 'Darwin UFS', b'\xa8'),
|
||||
(68, 'NetBSD', b'\xa9'),
|
||||
(69, 'Darwin boot', b'\xab'),
|
||||
(70, 'HFS / HFS+', b'\xaf'),
|
||||
(71, 'BSDI fs', b'\xb7'),
|
||||
(72, 'BSDI swap', b'\xb8'),
|
||||
(73, 'Boot Wizard hidden', b'\xbb'),
|
||||
(74, 'Acronis FAT32 LBA', b'\xbc'),
|
||||
(75, 'Solaris boot', b'\xbe'),
|
||||
(76, 'Solaris', b'\xbf'),
|
||||
(77, 'DRDOS/sec (FAT-12)', b'\xc1'),
|
||||
(78, 'DRDOS/sec (FAT-16 < 32M)', b'\xc4'),
|
||||
(79, 'DRDOS/sec (FAT-16)', b'\xc6'),
|
||||
(80, 'Syrinx', b'\xc7'),
|
||||
(81, 'Non-FS data', b'\xda'),
|
||||
(82, 'CP/M / CTOS / ...', b'\xdb'),
|
||||
(83, 'Dell Utility', b'\xde'),
|
||||
(84, 'BootIt', b'\xdf'),
|
||||
(85, 'DOS access', b'\xe1'),
|
||||
(86, 'DOS R/O', b'\xe3'),
|
||||
(87, 'SpeedStor', b'\xe4'),
|
||||
(88, 'Rufus alignment', b'\xea'),
|
||||
(89, 'BeOS fs', b'\xeb'),
|
||||
(90, 'GPT', b'\xee'),
|
||||
(91, 'EFI (FAT-12/16/32)', b'\xef'),
|
||||
(92, 'Linux/PA-RISC boot', b'\xf0'),
|
||||
(93, 'SpeedStor', b'\xf1'),
|
||||
(94, 'SpeedStor', b'\xf4'),
|
||||
(95, 'DOS secondary', b'\xf2'),
|
||||
(96, 'VMware VMFS', b'\xfb'),
|
||||
(97, 'VMware VMKCORE', b'\xfc'),
|
||||
(98, 'Linux raid autodetect', b'\xfd'),
|
||||
(99, 'LANstep', b'\xfe'),
|
||||
(100, 'BBT', b'\xff'))
|
||||
|
@ -1,7 +1,7 @@
|
||||
import re
|
||||
##
|
||||
import parted # Do I need this if I can have libblockdev's mounts API? Is there a way to get current mounts?
|
||||
import psutil
|
||||
import parted
|
||||
import psutil # Do I need this if I can have libblockdev's mounts API? Is there a way to get current mounts?
|
||||
##
|
||||
import aif.constants
|
||||
import aif.utils
|
||||
@ -24,8 +24,8 @@ class Partition(object):
|
||||
self.id = part_xml.attrib['id']
|
||||
self.table_type = getattr(_BlockDev.PartTableType, tbltype.upper())
|
||||
if tbltype == 'msdos':
|
||||
# Could technically be _BlockDev.PartTypeReq.NEXT buuuut that doesn't *quite* work
|
||||
# with our project's structure.
|
||||
# Could technically be _BlockDev.PartTypeReq.NEXT BUT that doesn't *quite* work
|
||||
# with this project's structure.
|
||||
if part_type == 'primary':
|
||||
self.part_type = _BlockDev.PartTypeReq.NORMAL
|
||||
elif part_type == 'extended':
|
||||
@ -50,7 +50,7 @@ class Partition(object):
|
||||
'must be one of: {1}').format(self.xml.attrib['fsType'],
|
||||
', '.join(sorted(aif.constants.PARTED_FSTYPES))))
|
||||
self.disk = diskobj
|
||||
self.device = self.disk.device # TODO: how to get this in libblockdev?
|
||||
self.device = self.disk.path
|
||||
self.devpath = '{0}{1}'.format(self.device.path, partnum)
|
||||
self.is_hiformatted = False
|
||||
sizes = {}
|
||||
|
@ -1,118 +0,0 @@
|
||||
msdos:
|
||||
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
|
||||
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
|
||||
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
|
||||
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
|
||||
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
|
||||
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
|
||||
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
|
||||
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
|
||||
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
|
||||
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
|
||||
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
|
||||
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
|
||||
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
|
||||
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
|
||||
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
|
||||
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
|
||||
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
|
||||
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
|
||||
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
|
||||
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
|
||||
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
|
||||
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
|
||||
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
|
||||
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
|
||||
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
|
||||
|
||||
gpt:
|
||||
1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B
|
||||
2 MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
|
||||
3 Intel Fast Flash D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
|
||||
4 BIOS boot 21686148-6449-6E6F-744E-656564454649
|
||||
5 Sony boot partition F4019732-066E-4E12-8273-346C5641494F
|
||||
6 Lenovo boot partition BFBFAFE7-A34F-448A-9A5B-6213EB736C22
|
||||
7 PowerPC PReP boot 9E1A2D38-C612-4316-AA26-8B49521E5A8B
|
||||
8 ONIE boot 7412F7D5-A156-4B13-81DC-867174929325
|
||||
9 ONIE config D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149
|
||||
10 Microsoft reserved E3C9E316-0B5C-4DB8-817D-F92DF00215AE
|
||||
11 Microsoft basic data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
|
||||
12 Microsoft LDM metadata 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
|
||||
13 Microsoft LDM data AF9B60A0-1431-4F62-BC68-3311714A69AD
|
||||
14 Windows recovery environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
|
||||
15 IBM General Parallel Fs 37AFFC90-EF7D-4E96-91C3-2D7AE055B174
|
||||
16 Microsoft Storage Spaces E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D
|
||||
17 HP-UX data 75894C1E-3AEB-11D3-B7C1-7B03A0000000
|
||||
18 HP-UX service E2A1E728-32E3-11D6-A682-7B03A0000000
|
||||
19 Linux swap 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
|
||||
20 Linux filesystem 0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
||||
21 Linux server data 3B8F8425-20E0-4F3B-907F-1A25A76F98E8
|
||||
22 Linux root (x86) 44479540-F297-41B2-9AF7-D131D5F0458A
|
||||
23 Linux root (ARM) 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3
|
||||
24 Linux root (x86-64) 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
|
||||
25 Linux root (ARM-64) B921B045-1DF0-41C3-AF44-4C6F280D3FAE
|
||||
26 Linux root (IA-64) 993D8D3D-F80E-4225-855A-9DAF8ED7EA97
|
||||
27 Linux reserved 8DA63339-0007-60C0-C436-083AC8230908
|
||||
28 Linux home 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
|
||||
29 Linux RAID A19D880F-05FC-4D3B-A006-743F0F84911E
|
||||
30 Linux extended boot BC13C2FF-59E6-4262-A352-B275FD6F7172
|
||||
31 Linux LVM E6D6D379-F507-44C2-A23C-238F2A3DF928
|
||||
32 FreeBSD data 516E7CB4-6ECF-11D6-8FF8-00022D09712B
|
||||
33 FreeBSD boot 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
|
||||
34 FreeBSD swap 516E7CB5-6ECF-11D6-8FF8-00022D09712B
|
||||
35 FreeBSD UFS 516E7CB6-6ECF-11D6-8FF8-00022D09712B
|
||||
36 FreeBSD ZFS 516E7CBA-6ECF-11D6-8FF8-00022D09712B
|
||||
37 FreeBSD Vinum 516E7CB8-6ECF-11D6-8FF8-00022D09712B
|
||||
38 Apple HFS/HFS+ 48465300-0000-11AA-AA11-00306543ECAC
|
||||
39 Apple UFS 55465300-0000-11AA-AA11-00306543ECAC
|
||||
40 Apple RAID 52414944-0000-11AA-AA11-00306543ECAC
|
||||
41 Apple RAID offline 52414944-5F4F-11AA-AA11-00306543ECAC
|
||||
42 Apple boot 426F6F74-0000-11AA-AA11-00306543ECAC
|
||||
43 Apple label 4C616265-6C00-11AA-AA11-00306543ECAC
|
||||
44 Apple TV recovery 5265636F-7665-11AA-AA11-00306543ECAC
|
||||
45 Apple Core storage 53746F72-6167-11AA-AA11-00306543ECAC
|
||||
46 Solaris boot 6A82CB45-1DD2-11B2-99A6-080020736631
|
||||
47 Solaris root 6A85CF4D-1DD2-11B2-99A6-080020736631
|
||||
48 Solaris /usr & Apple ZFS 6A898CC3-1DD2-11B2-99A6-080020736631
|
||||
49 Solaris swap 6A87C46F-1DD2-11B2-99A6-080020736631
|
||||
50 Solaris backup 6A8B642B-1DD2-11B2-99A6-080020736631
|
||||
51 Solaris /var 6A8EF2E9-1DD2-11B2-99A6-080020736631
|
||||
52 Solaris /home 6A90BA39-1DD2-11B2-99A6-080020736631
|
||||
53 Solaris alternate sector 6A9283A5-1DD2-11B2-99A6-080020736631
|
||||
54 Solaris reserved 1 6A945A3B-1DD2-11B2-99A6-080020736631
|
||||
55 Solaris reserved 2 6A9630D1-1DD2-11B2-99A6-080020736631
|
||||
56 Solaris reserved 3 6A980767-1DD2-11B2-99A6-080020736631
|
||||
57 Solaris reserved 4 6A96237F-1DD2-11B2-99A6-080020736631
|
||||
58 Solaris reserved 5 6A8D2AC7-1DD2-11B2-99A6-080020736631
|
||||
59 NetBSD swap 49F48D32-B10E-11DC-B99B-0019D1879648
|
||||
60 NetBSD FFS 49F48D5A-B10E-11DC-B99B-0019D1879648
|
||||
61 NetBSD LFS 49F48D82-B10E-11DC-B99B-0019D1879648
|
||||
62 NetBSD concatenated 2DB519C4-B10E-11DC-B99B-0019D1879648
|
||||
63 NetBSD encrypted 2DB519EC-B10E-11DC-B99B-0019D1879648
|
||||
64 NetBSD RAID 49F48DAA-B10E-11DC-B99B-0019D1879648
|
||||
65 ChromeOS kernel FE3A2A5D-4F32-41A7-B725-ACCC3285A309
|
||||
66 ChromeOS root fs 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
|
||||
67 ChromeOS reserved 2E0A753D-9E48-43B0-8337-B15192CB1B5E
|
||||
68 MidnightBSD data 85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7
|
||||
69 MidnightBSD boot 85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7
|
||||
70 MidnightBSD swap 85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7
|
||||
71 MidnightBSD UFS 0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7
|
||||
72 MidnightBSD ZFS 85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7
|
||||
73 MidnightBSD Vinum 85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7
|
||||
74 Ceph Journal 45B0969E-9B03-4F30-B4C6-B4B80CEFF106
|
||||
75 Ceph Encrypted Journal 45B0969E-9B03-4F30-B4C6-5EC00CEFF106
|
||||
76 Ceph OSD 4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D
|
||||
77 Ceph crypt OSD 4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D
|
||||
78 Ceph disk in creation 89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE
|
||||
79 Ceph crypt disk in creation 89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE
|
||||
80 VMware VMFS AA31E02A-400F-11DB-9590-000C2911D1B8
|
||||
81 VMware Diagnostic 9D275380-40AD-11DB-BF97-000C2911D1B8
|
||||
82 VMware Virtual SAN 381CFCCC-7288-11E0-92EE-000C2911D0B2
|
||||
83 VMware Virsto 77719A0C-A4A0-11E3-A47E-000C29745A24
|
||||
84 VMware Reserved 9198EFFC-31C0-11DB-8F78-000C2911D1B8
|
||||
85 OpenBSD data 824CC7A0-36A8-11E3-890A-952519AD3F61
|
||||
86 QNX6 file system CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1
|
||||
87 Plan 9 partition C91818F9-8025-47AF-89D2-F030D7000C2C
|
||||
88 HiFive Unleashed FSBL 5B193300-FC78-40CD-8002-E86C45580B47
|
||||
89 HiFive Unleashed BBL 2E54B353-1271-4842-806F-E436D6AF6985
|
||||
|
93
docs/reference/generate_gpt_guid.py
Executable file
93
docs/reference/generate_gpt_guid.py
Executable file
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import uuid
|
||||
##
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
# You, the average user, will probably have absolutely no use for this.
|
||||
|
||||
types = {'gpt': {'local': [],
|
||||
'wiki': {}},
|
||||
'msdos': {'local': [],
|
||||
'src': []}}
|
||||
|
||||
# GPT
|
||||
cmd = ['/usr/bin/sfdisk', '--list-types', '--label=gpt']
|
||||
url = 'https://en.wikipedia.org/wiki/GUID_Partition_Table'
|
||||
# First get the local list.
|
||||
with open(os.devnull, 'wb') as devnull:
|
||||
cmd_out = subprocess.run(cmd, stdout = subprocess.PIPE, stderr = devnull)
|
||||
stdout = [i for i in cmd_out.stdout.decode('utf-8').splitlines() if i not in ('Id Name', '')]
|
||||
for idx, line in enumerate(stdout):
|
||||
i = idx + 1
|
||||
l = line.split()
|
||||
u = l.pop(0)
|
||||
desc = ' '.join(l)
|
||||
types['gpt']['local'].append((i, desc, uuid.UUID(hex = u)))
|
||||
# Then wikipedia.
|
||||
req = requests.get(url)
|
||||
if not req.ok:
|
||||
raise RuntimeError('Could not access {0}'.format(url))
|
||||
soup = BeautifulSoup(req.content, 'lxml')
|
||||
tbl = soup.find('span', attrs = {'id': 'Partition_type_GUIDs', 'class': 'mw-headline'}).findNext('table').find('tbody')
|
||||
c = None
|
||||
t = None
|
||||
idx = 1
|
||||
strip_ref = re.compile(r'(?P<name>[A-Za-z\s()/0-9,.+-]+)\[?.*')
|
||||
for row in tbl.find_all('tr'):
|
||||
cols = [e.text.strip() for e in row.find_all('td')]
|
||||
if not cols:
|
||||
continue
|
||||
if len(cols) == 3:
|
||||
temp_c = strip_ref.search(cols[0].strip())
|
||||
if not temp_c:
|
||||
raise RuntimeError('Error when parsing/regexing: {0}'.format(cols[0].strip()))
|
||||
c = temp_c.group('name')
|
||||
cols.pop(0).strip()
|
||||
if c not in types['gpt']['wiki']:
|
||||
types['gpt']['wiki'][c] = []
|
||||
if len(cols) == 2:
|
||||
temp_t = strip_ref.search(cols[0].strip())
|
||||
if not temp_t:
|
||||
raise RuntimeError('Error when parsing/regexing: {0}'.format(cols[0].strip()))
|
||||
t = temp_t.group('name')
|
||||
cols.pop(0)
|
||||
u = cols[0]
|
||||
types['gpt']['wiki'][c].append((idx, t, uuid.UUID(hex = u)))
|
||||
idx += 1
|
||||
|
||||
# MSDOS
|
||||
cmd = ['/usr/bin/sfdisk', '--list-types', '--label=dos']
|
||||
url = 'https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/include/pt-mbr-partnames.h'
|
||||
with open(os.devnull, 'wb') as devnull:
|
||||
cmd_out = subprocess.run(cmd, stdout = subprocess.PIPE, stderr = devnull)
|
||||
stdout = [i for i in cmd_out.stdout.decode('utf-8').splitlines() if i not in ('Id Name', '')]
|
||||
for idx, line in enumerate(stdout):
|
||||
i = idx + 1
|
||||
l = line.split()
|
||||
b = '{0:0>2}'.format(l.pop(0).upper())
|
||||
desc = ' '.join(l)
|
||||
types['msdos']['local'].append((i, desc, bytes.fromhex(b)))
|
||||
# Then the source (master branch's HEAD). It gets messy but whatever. This is actually something unique to fdisk.
|
||||
req = requests.get(url)
|
||||
if not req.ok:
|
||||
raise RuntimeError('Could not access {0}'.format(url))
|
||||
line_re = re.compile(r'^\s+{0x')
|
||||
str_re = re.compile(r'^\s+{0x(?P<b>[A-Fa-f0-9]+),\s*N_\("(?P<desc>[^"]+)"\).*')
|
||||
idx = 1
|
||||
for line in req.content.decode('utf-8').splitlines():
|
||||
if not line_re.search(line):
|
||||
continue
|
||||
s = str_re.search(line)
|
||||
if not s:
|
||||
raise RuntimeError('Error when parsing/regexing: {0}'.format(line.strip()))
|
||||
b = s.group('b').upper()
|
||||
desc = s.group('desc')
|
||||
types['msdos']['src'].append((idx, desc, bytes.fromhex(b)))
|
||||
idx += 1
|
||||
|
||||
print(types)
|
Loading…
Reference in New Issue
Block a user