Skip to main content

bootc_internal_blockdev/
dps.rs

1//! Partition type GUIDs from the Discoverable Partitions Specification (DPS)
2//!
3//! This module contains constants for partition type GUIDs as defined by the
4//! UAPI Group's Discoverable Partitions Specification.
5//!
6//! Reference: <https://uapi-group.org/specifications/specs/discoverable_partitions_specification/>
7//!
8//! # Overview
9//!
10//! The Discoverable Partitions Specification (DPS) defines standardized partition
11//! type GUIDs that enable automatic discovery and mounting of partitions without
12//! explicit configuration. This is a key enabler for bootc's installation process
13//! and for modern systemd-based initramfs implementations.
14//!
15//! # How bootc uses DPS
16//!
17//! When `bootc install to-disk` creates partitions, it sets the appropriate DPS
18//! partition type GUID based on the target CPU architecture. This enables several
19//! important capabilities:
20//!
21//! ## Automatic root discovery
22//!
23//! With a DPS-aware bootloader and initramfs (containing `systemd-gpt-auto-generator`),
24//! the root filesystem can be discovered and mounted automatically without requiring
25//! a `root=` kernel argument. The initramfs:
26//!
27//! 1. Reads the EFI `LoaderDevicePartUUID` variable to identify the boot disk
28//! 2. Scans the GPT for a partition with the architecture-specific root type GUID
29//! 3. Mounts that partition as the root filesystem
30//!
31//! ## Architecture-specific partition types
32//!
33//! Each CPU architecture has its own root partition type GUID. This prevents
34//! accidentally booting a system on incompatible hardware. bootc uses
35//! [`this_arch_root`] to select the correct GUID at compile time.
36//!
37//! ## Composefs and sealed boot
38//!
39//! When using the composefs backend with UKIs (Unified Kernel Images), bootc can
40//! omit the `root=` kernel argument entirely. This enables:
41//!
42//! - Measured boot: The kernel command line is part of the UKI signature
43//! - Simplified image building: No machine-specific kernel arguments needed
44//! - systemd-repart integration: Future support for declarative partition management
45//!
46//! # Partition types included
47//!
48//! This module defines constants for:
49//!
50//! - **Root partitions**: Architecture-specific root filesystem partitions
51//! - **USR partitions**: Separate `/usr` partitions (included for spec completeness; not currently used by bootc)
52//! - **Verity partitions**: dm-verity hash partitions for integrity verification
53//! - **Verity signature partitions**: Signed verity root hashes
54//! - **Special partitions**: ESP, XBOOTLDR, swap, home, var, etc.
55//!
56//! # Usage
57//!
58//! ```ignore
59//! use bootc_blockdev::dps::{this_arch_root, ESP};
60//!
61//! // Get the root partition type GUID for the current architecture
62//! let root_type: &str = this_arch_root();
63//!
64//! // ESP GUID is architecture-independent
65//! let esp_type: &str = ESP;
66//! ```
67
68// ============================================================================
69// ROOT PARTITIONS
70// ============================================================================
71
72/// Root partition for Alpha architecture
73pub const ROOT_ALPHA: &str = "6523f8ae-3eb1-4e2a-a05a-18b695ae656f";
74
75/// Root partition for ARC architecture
76pub const ROOT_ARC: &str = "d27f46ed-2919-4cb8-bd25-9531f3c16534";
77
78/// Root partition for 32-bit ARM architecture
79pub const ROOT_ARM: &str = "69dad710-2ce4-4e3c-b16c-21a1d49abed3";
80
81/// Root partition for 64-bit ARM/AArch64 architecture
82pub const ROOT_ARM64: &str = "b921b045-1df0-41c3-af44-4c6f280d3fae";
83
84/// Root partition for Itanium/IA-64 architecture
85pub const ROOT_IA64: &str = "993d8d3d-f80e-4225-855a-9daf8ed7ea97";
86
87/// Root partition for 64-bit LoongArch architecture
88pub const ROOT_LOONGARCH64: &str = "77055800-792c-4f94-b39a-98c91b762bb6";
89
90/// Root partition for 32-bit MIPS Little Endian
91pub const ROOT_MIPS_LE: &str = "37c58c8a-d913-4156-a25f-48b1b64e07f0";
92
93/// Root partition for 64-bit MIPS Little Endian
94pub const ROOT_MIPS64_LE: &str = "700bda43-7a34-4507-b179-eeb93d7a7ca3";
95
96/// Root partition for 32-bit MIPS Big Endian
97pub const ROOT_MIPS: &str = "e9434544-6e2c-47cc-bae2-12d6deafb44c";
98
99/// Root partition for 64-bit MIPS Big Endian
100pub const ROOT_MIPS64: &str = "d113af76-80ef-41b4-bdb6-0cff4d3d4a25";
101
102/// Root partition for PA-RISC/HPPA architecture
103pub const ROOT_PARISC: &str = "1aacdb3b-5444-4138-bd9e-e5c2239b2346";
104
105/// Root partition for 32-bit PowerPC
106pub const ROOT_PPC: &str = "1de3f1ef-fa98-47b5-8dcd-4a860a654d78";
107
108/// Root partition for 64-bit PowerPC Big Endian
109pub const ROOT_PPC64: &str = "912ade1d-a839-4913-8964-a10eee08fbd2";
110
111/// Root partition for 64-bit PowerPC Little Endian
112pub const ROOT_PPC64_LE: &str = "c31c45e6-3f39-412e-80fb-4809c4980599";
113
114/// Root partition for 32-bit RISC-V
115pub const ROOT_RISCV32: &str = "60d5a7fe-8e7d-435c-b714-3dd8162144e1";
116
117/// Root partition for 64-bit RISC-V
118pub const ROOT_RISCV64: &str = "72ec70a6-cf74-40e6-bd49-4bda08e8f224";
119
120/// Root partition for s390 architecture
121pub const ROOT_S390: &str = "08a7acea-624c-4a20-91e8-6e0fa67d23f9";
122
123/// Root partition for s390x architecture
124pub const ROOT_S390X: &str = "5eead9a9-fe09-4a1e-a1d7-520d00531306";
125
126/// Root partition for TILE-Gx architecture
127pub const ROOT_TILEGX: &str = "c50cdd70-3862-4cc3-90e1-809a8c93ee2c";
128
129/// Root partition for 32-bit x86
130pub const ROOT_X86: &str = "44479540-f297-41b2-9af7-d131d5f0458a";
131
132/// Root partition for 64-bit x86/AMD64
133pub const ROOT_X86_64: &str = "4f68bce3-e8cd-4db1-96e7-fbcaf984b709";
134
135// ============================================================================
136// USR PARTITIONS
137// ============================================================================
138
139/// /usr partition for Alpha architecture
140pub const USR_ALPHA: &str = "e18cf08c-33ec-4c0d-8246-c6c6fb3da024";
141
142/// /usr partition for ARC architecture
143pub const USR_ARC: &str = "7978a683-6316-4922-bbee-38bff5a2fecc";
144
145/// /usr partition for 32-bit ARM
146pub const USR_ARM: &str = "7d0359a3-02b3-4f0a-865c-654403e70625";
147
148/// /usr partition for 64-bit ARM/AArch64
149pub const USR_ARM64: &str = "b0e01050-ee5f-4390-949a-9101b17104e9";
150
151/// /usr partition for Itanium/IA-64
152pub const USR_IA64: &str = "4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea";
153
154/// /usr partition for 64-bit LoongArch
155pub const USR_LOONGARCH64: &str = "e611c702-575c-4cbe-9a46-434fa0bf7e3f";
156
157/// /usr partition for 32-bit MIPS Big Endian
158pub const USR_MIPS: &str = "773b2abc-2a99-4398-8bf5-03baac40d02b";
159
160/// /usr partition for 64-bit MIPS Big Endian
161pub const USR_MIPS64: &str = "57e13958-7331-4365-8e6e-35eeee17c61b";
162
163/// /usr partition for 32-bit MIPS Little Endian
164pub const USR_MIPS_LE: &str = "0f4868e9-9952-4706-979f-3ed3a473e947";
165
166/// /usr partition for 64-bit MIPS Little Endian
167pub const USR_MIPS64_LE: &str = "c97c1f32-ba06-40b4-9f22-236061b08aa8";
168
169/// /usr partition for PA-RISC
170pub const USR_PARISC: &str = "dc4a4480-6917-4262-a4ec-db9384949f25";
171
172/// /usr partition for 32-bit PowerPC
173pub const USR_PPC: &str = "7d14fec5-cc71-415d-9d6c-06bf0b3c3eaf";
174
175/// /usr partition for 64-bit PowerPC Big Endian
176pub const USR_PPC64: &str = "2c9739e2-f068-46b3-9fd0-01c5a9afbcca";
177
178/// /usr partition for 64-bit PowerPC Little Endian
179pub const USR_PPC64_LE: &str = "15bb03af-77e7-4d4a-b12b-c0d084f7491c";
180
181/// /usr partition for 32-bit RISC-V
182pub const USR_RISCV32: &str = "b933fb22-5c3f-4f91-af90-e2bb0fa50702";
183
184/// /usr partition for 64-bit RISC-V
185pub const USR_RISCV64: &str = "beaec34b-8442-439b-a40b-984381ed097d";
186
187/// /usr partition for s390
188pub const USR_S390: &str = "cd0f869b-d0fb-4ca0-b141-9ea87cc78d66";
189
190/// /usr partition for s390x
191pub const USR_S390X: &str = "8a4f5770-50aa-4ed3-874a-99b710db6fea";
192
193/// /usr partition for TILE-Gx
194pub const USR_TILEGX: &str = "55497029-c7c1-44cc-aa39-815ed1558630";
195
196/// /usr partition for 32-bit x86
197pub const USR_X86: &str = "75250d76-8cc6-458e-bd66-bd47cc81a812";
198
199/// /usr partition for 64-bit x86/AMD64
200pub const USR_X86_64: &str = "8484680c-9521-48c6-9c11-b0720656f69e";
201
202// ============================================================================
203// ROOT VERITY PARTITIONS
204// ============================================================================
205
206/// Root verity partition for Alpha
207pub const ROOT_VERITY_ALPHA: &str = "fc56d9e9-e6e5-4c06-be32-e74407ce09a5";
208
209/// Root verity partition for ARC
210pub const ROOT_VERITY_ARC: &str = "24b2d975-0f97-4521-afa1-cd531e421b8d";
211
212/// Root verity partition for 32-bit ARM
213pub const ROOT_VERITY_ARM: &str = "7386cdf2-203c-47a9-a498-f2ecce45a2d6";
214
215/// Root verity partition for 64-bit ARM/AArch64
216pub const ROOT_VERITY_ARM64: &str = "df3300ce-d69f-4c92-978c-9bfb0f38d820";
217
218/// Root verity partition for Itanium/IA-64
219pub const ROOT_VERITY_IA64: &str = "86ed10d5-b607-45bb-8957-d350f23d0571";
220
221/// Root verity partition for 64-bit LoongArch
222pub const ROOT_VERITY_LOONGARCH64: &str = "f3393b22-e9af-4613-a948-9d3bfbd0c535";
223
224/// Root verity partition for 32-bit MIPS Big Endian
225pub const ROOT_VERITY_MIPS: &str = "7a430799-f711-4c7e-8e5b-1d685bd48607";
226
227/// Root verity partition for 64-bit MIPS Big Endian
228pub const ROOT_VERITY_MIPS64: &str = "579536f8-6a33-4055-a95a-df2d5e2c42a8";
229
230/// Root verity partition for 32-bit MIPS Little Endian
231pub const ROOT_VERITY_MIPS_LE: &str = "d7d150d2-2a04-4a33-8f12-16651205ff7b";
232
233/// Root verity partition for 64-bit MIPS Little Endian
234pub const ROOT_VERITY_MIPS64_LE: &str = "16b417f8-3e06-4f57-8dd2-9b5232f41aa6";
235
236/// Root verity partition for PA-RISC
237pub const ROOT_VERITY_PARISC: &str = "d212a430-fbc5-49f9-a983-a7feef2b8d0e";
238
239/// Root verity partition for 32-bit PowerPC
240pub const ROOT_VERITY_PPC: &str = "98cfe649-1588-46dc-b2f0-add147424925";
241
242/// Root verity partition for 64-bit PowerPC Big Endian
243pub const ROOT_VERITY_PPC64: &str = "9225a9a3-3c19-4d89-b4f6-eeff88f17631";
244
245/// Root verity partition for 64-bit PowerPC Little Endian
246pub const ROOT_VERITY_PPC64_LE: &str = "906bd944-4589-4aae-a4e4-dd983917446a";
247
248/// Root verity partition for 32-bit RISC-V
249pub const ROOT_VERITY_RISCV32: &str = "ae0253be-1167-4007-ac68-43926c14c5de";
250
251/// Root verity partition for 64-bit RISC-V
252pub const ROOT_VERITY_RISCV64: &str = "b6ed5582-440b-4209-b8da-5ff7c419ea3d";
253
254/// Root verity partition for s390
255pub const ROOT_VERITY_S390: &str = "7ac63b47-b25c-463b-8df8-b4a94e6c90e1";
256
257/// Root verity partition for s390x
258pub const ROOT_VERITY_S390X: &str = "b325bfbe-c7be-4ab8-8357-139e652d2f6b";
259
260/// Root verity partition for TILE-Gx
261pub const ROOT_VERITY_TILEGX: &str = "966061ec-28e4-4b2e-b4a5-1f0a825a1d84";
262
263/// Root verity partition for 32-bit x86
264pub const ROOT_VERITY_X86: &str = "d13c5d3b-b5d1-422a-b29f-9454fdc89d76";
265
266/// Root verity partition for 64-bit x86/AMD64
267pub const ROOT_VERITY_X86_64: &str = "2c7357ed-ebd2-46d9-aec1-23d437ec2bf5";
268
269// ============================================================================
270// USR VERITY PARTITIONS
271// ============================================================================
272
273/// /usr verity partition for Alpha
274pub const USR_VERITY_ALPHA: &str = "8cce0d25-c0d0-4a44-bd87-46331bf1df67";
275
276/// /usr verity partition for ARC
277pub const USR_VERITY_ARC: &str = "fca0598c-d880-4591-8c16-4eda05c7347c";
278
279/// /usr verity partition for 32-bit ARM
280pub const USR_VERITY_ARM: &str = "c215d751-7bcd-4649-be90-6627490a4c05";
281
282/// /usr verity partition for 64-bit ARM/AArch64
283pub const USR_VERITY_ARM64: &str = "6e11a4e7-fbca-4ded-b9e9-e1a512bb664e";
284
285/// /usr verity partition for Itanium/IA-64
286pub const USR_VERITY_IA64: &str = "6a491e03-3be7-4545-8e38-83320e0ea880";
287
288/// /usr verity partition for 64-bit LoongArch
289pub const USR_VERITY_LOONGARCH64: &str = "f46b2c26-59ae-48f0-9106-c50ed47f673d";
290
291/// /usr verity partition for 32-bit MIPS Big Endian
292pub const USR_VERITY_MIPS: &str = "6e5a1bc8-d223-49b7-bca8-37a5fcceb996";
293
294/// /usr verity partition for 64-bit MIPS Big Endian
295pub const USR_VERITY_MIPS64: &str = "81cf9d90-7458-4df4-8dcf-c8a3a404f09b";
296
297/// /usr verity partition for 32-bit MIPS Little Endian
298pub const USR_VERITY_MIPS_LE: &str = "46b98d8d-b55c-4e8f-aab3-37fca7f80752";
299
300/// /usr verity partition for 64-bit MIPS Little Endian
301pub const USR_VERITY_MIPS64_LE: &str = "3c3d61fe-b5f3-414d-bb71-8739a694a4ef";
302
303/// /usr verity partition for PA-RISC
304pub const USR_VERITY_PARISC: &str = "5843d618-ec37-48d7-9f12-cea8e08768b2";
305
306/// /usr verity partition for 32-bit PowerPC
307pub const USR_VERITY_PPC: &str = "df765d00-270e-49e5-bc75-f47bb2118b09";
308
309/// /usr verity partition for 64-bit PowerPC Big Endian
310pub const USR_VERITY_PPC64: &str = "bdb528a5-a259-475f-a87d-da53fa736a07";
311
312/// /usr verity partition for 64-bit PowerPC Little Endian
313pub const USR_VERITY_PPC64_LE: &str = "ee2b9983-21e8-4153-86d9-b6901a54d1ce";
314
315/// /usr verity partition for 32-bit RISC-V
316pub const USR_VERITY_RISCV32: &str = "cb1ee4e3-8cd0-4136-a0a4-aa61a32e8730";
317
318/// /usr verity partition for 64-bit RISC-V
319pub const USR_VERITY_RISCV64: &str = "8f1056be-9b05-47c4-81d6-be53128e5b54";
320
321/// /usr verity partition for s390
322pub const USR_VERITY_S390: &str = "b663c618-e7bc-4d6d-90aa-11b756bb1797";
323
324/// /usr verity partition for s390x
325pub const USR_VERITY_S390X: &str = "31741cc4-1a2a-4111-a581-e00b447d2d06";
326
327/// /usr verity partition for TILE-Gx
328pub const USR_VERITY_TILEGX: &str = "2fb4bf56-07fa-42da-8132-6b139f2026ae";
329
330/// /usr verity partition for 32-bit x86
331pub const USR_VERITY_X86: &str = "8f461b0d-14ee-4e81-9aa9-049b6fb97abd";
332
333/// /usr verity partition for 64-bit x86/AMD64
334pub const USR_VERITY_X86_64: &str = "77ff5f63-e7b6-4633-acf4-1565b864c0e6";
335
336// ============================================================================
337// ROOT VERITY SIGNATURE PARTITIONS
338// ============================================================================
339
340/// Root verity signature partition for Alpha
341pub const ROOT_VERITY_SIG_ALPHA: &str = "d46495b7-a053-414f-80f7-700c99921ef8";
342
343/// Root verity signature partition for ARC
344pub const ROOT_VERITY_SIG_ARC: &str = "143a70ba-cbd3-4f06-919f-6c05683a78bc";
345
346/// Root verity signature partition for 32-bit ARM
347pub const ROOT_VERITY_SIG_ARM: &str = "42b0455f-eb11-491d-98d3-56145ba9d037";
348
349/// Root verity signature partition for 64-bit ARM/AArch64
350pub const ROOT_VERITY_SIG_ARM64: &str = "6db69de6-29f4-4758-a7a5-962190f00ce3";
351
352/// Root verity signature partition for Itanium/IA-64
353pub const ROOT_VERITY_SIG_IA64: &str = "e98b36ee-32ba-4882-9b12-0ce14655f46a";
354
355/// Root verity signature partition for 64-bit LoongArch
356pub const ROOT_VERITY_SIG_LOONGARCH64: &str = "5afb67eb-ecc8-4f85-ae8e-ac1e7c50e7d0";
357
358/// Root verity signature partition for 32-bit MIPS Big Endian
359pub const ROOT_VERITY_SIG_MIPS: &str = "bba210a2-9c5d-45ee-9e87-ff2ccbd002d0";
360
361/// Root verity signature partition for 64-bit MIPS Big Endian
362pub const ROOT_VERITY_SIG_MIPS64: &str = "43ce94d4-0f3d-4999-8250-b9deafd98e6e";
363
364/// Root verity signature partition for 32-bit MIPS Little Endian
365pub const ROOT_VERITY_SIG_MIPS_LE: &str = "c919cc1f-4456-4eff-918c-f75e94525ca5";
366
367/// Root verity signature partition for 64-bit MIPS Little Endian
368pub const ROOT_VERITY_SIG_MIPS64_LE: &str = "904e58ef-5c65-4a31-9c57-6af5fc7c5de7";
369
370/// Root verity signature partition for PA-RISC
371pub const ROOT_VERITY_SIG_PARISC: &str = "15de6170-65d3-431c-916e-b0dcd8393f25";
372
373/// Root verity signature partition for 32-bit PowerPC
374pub const ROOT_VERITY_SIG_PPC: &str = "1b31b5aa-add9-463a-b2ed-bd467fc857e7";
375
376/// Root verity signature partition for 64-bit PowerPC Big Endian
377pub const ROOT_VERITY_SIG_PPC64: &str = "f5e2c20c-45b2-4ffa-bce9-2a60737e1aaf";
378
379/// Root verity signature partition for 64-bit PowerPC Little Endian
380pub const ROOT_VERITY_SIG_PPC64_LE: &str = "d4a236e7-e873-4c07-bf1d-bf6cf7f1c3c6";
381
382/// Root verity signature partition for 32-bit RISC-V
383pub const ROOT_VERITY_SIG_RISCV32: &str = "3a112a75-8729-4380-b4cf-764d79934448";
384
385/// Root verity signature partition for 64-bit RISC-V
386pub const ROOT_VERITY_SIG_RISCV64: &str = "efe0f087-ea8d-4469-821a-4c2a96a8386a";
387
388/// Root verity signature partition for s390
389pub const ROOT_VERITY_SIG_S390: &str = "3482388e-4254-435a-a241-766a065f9960";
390
391/// Root verity signature partition for s390x
392pub const ROOT_VERITY_SIG_S390X: &str = "c80187a5-73a3-491a-901a-017c3fa953e9";
393
394/// Root verity signature partition for TILE-Gx
395pub const ROOT_VERITY_SIG_TILEGX: &str = "b3671439-97b0-4a53-90f7-2d5a8f3ad47b";
396
397/// Root verity signature partition for 32-bit x86
398pub const ROOT_VERITY_SIG_X86: &str = "5996fc05-109c-48de-808b-23fa0830b676";
399
400/// Root verity signature partition for 64-bit x86/AMD64
401pub const ROOT_VERITY_SIG_X86_64: &str = "41092b05-9fc8-4523-994f-2def0408b176";
402
403// ============================================================================
404// USR VERITY SIGNATURE PARTITIONS
405// ============================================================================
406
407/// /usr verity signature partition for Alpha
408pub const USR_VERITY_SIG_ALPHA: &str = "5c6e1c76-076a-457a-a0fe-f3b4cd21ce6e";
409
410/// /usr verity signature partition for ARC
411pub const USR_VERITY_SIG_ARC: &str = "94f9a9a1-9971-427a-a400-50cb297f0f35";
412
413/// /usr verity signature partition for 32-bit ARM
414pub const USR_VERITY_SIG_ARM: &str = "d7ff812f-37d1-4902-a810-d76ba57b975a";
415
416/// /usr verity signature partition for 64-bit ARM/AArch64
417pub const USR_VERITY_SIG_ARM64: &str = "c23ce4ff-44bd-4b00-b2d4-b41b3419e02a";
418
419/// /usr verity signature partition for Itanium/IA-64
420pub const USR_VERITY_SIG_IA64: &str = "8de58bc2-2a43-460d-b14e-a76e4a17b47f";
421
422/// /usr verity signature partition for 64-bit LoongArch
423pub const USR_VERITY_SIG_LOONGARCH64: &str = "b024f315-d330-444c-8461-44bbde524e99";
424
425/// /usr verity signature partition for 32-bit MIPS Big Endian
426pub const USR_VERITY_SIG_MIPS: &str = "97ae158d-f216-497b-8057-f7f905770f54";
427
428/// /usr verity signature partition for 64-bit MIPS Big Endian
429pub const USR_VERITY_SIG_MIPS64: &str = "05816ce2-dd40-4ac6-a61d-37d32dc1ba7d";
430
431/// /usr verity signature partition for 32-bit MIPS Little Endian
432pub const USR_VERITY_SIG_MIPS_LE: &str = "3e23ca0b-a4bc-4b4e-8087-5ab6a26aa8a9";
433
434/// /usr verity signature partition for 64-bit MIPS Little Endian
435pub const USR_VERITY_SIG_MIPS64_LE: &str = "f2c2c7ee-adcc-4351-b5c6-ee9816b66e16";
436
437/// /usr verity signature partition for PA-RISC
438pub const USR_VERITY_SIG_PARISC: &str = "450dd7d1-3224-45ec-9cf2-a43a346d71ee";
439
440/// /usr verity signature partition for 32-bit PowerPC
441pub const USR_VERITY_SIG_PPC: &str = "7007891d-d371-4a80-86a4-5cb875b9302e";
442
443/// /usr verity signature partition for 64-bit PowerPC Big Endian
444pub const USR_VERITY_SIG_PPC64: &str = "0b888863-d7f8-4d9e-9766-239fce4d58af";
445
446/// /usr verity signature partition for 64-bit PowerPC Little Endian
447pub const USR_VERITY_SIG_PPC64_LE: &str = "c8bfbd1e-268e-4521-8bba-bf314c399557";
448
449/// /usr verity signature partition for 32-bit RISC-V
450pub const USR_VERITY_SIG_RISCV32: &str = "c3836a13-3137-45ba-b583-b16c50fe5eb4";
451
452/// /usr verity signature partition for 64-bit RISC-V
453pub const USR_VERITY_SIG_RISCV64: &str = "d2f9000a-7a18-453f-b5cd-4d32f77a7b32";
454
455/// /usr verity signature partition for s390
456pub const USR_VERITY_SIG_S390: &str = "17440e4f-a8d0-467f-a46e-3912ae6ef2c5";
457
458/// /usr verity signature partition for s390x
459pub const USR_VERITY_SIG_S390X: &str = "3f324816-667b-46ae-86ee-9b0c0c6c11b4";
460
461/// /usr verity signature partition for TILE-Gx
462pub const USR_VERITY_SIG_TILEGX: &str = "4ede75e2-6ccc-4cc8-b9c7-70334b087510";
463
464/// /usr verity signature partition for 32-bit x86
465pub const USR_VERITY_SIG_X86: &str = "974a71c0-de41-43c3-be5d-5c5ccd1ad2c0";
466
467/// /usr verity signature partition for 64-bit x86/AMD64
468pub const USR_VERITY_SIG_X86_64: &str = "e7bb33fb-06cf-4e81-8273-e543b413e2e2";
469
470// ============================================================================
471// OTHER SPECIAL PARTITION TYPES
472// ============================================================================
473
474/// EFI System Partition (ESP) for UEFI boot
475pub const ESP: &str = "c12a7328-f81f-11d2-ba4b-00a0c93ec93b";
476
477/// Extended Boot Loader Partition
478pub const XBOOTLDR: &str = "bc13c2ff-59e6-4262-a352-b275fd6f7172";
479
480/// Swap partition
481pub const SWAP: &str = "0657fd6d-a4ab-43c4-84e5-0933c84b4f4f";
482
483/// Home partition (/home)
484pub const HOME: &str = "933ac7e1-2eb4-4f13-b844-0e14e2aef915";
485
486/// Server data partition (/srv)
487pub const SRV: &str = "3b8f8425-20e0-4f3b-907f-1a25a76f98e8";
488
489/// Variable data partition (/var)
490pub const VAR: &str = "4d21b016-b534-45c2-a9fb-5c16e091fd2d";
491
492/// Temporary data partition (/var/tmp)
493pub const TMP: &str = "7ec6f557-3bc5-4aca-b293-16ef5df639d1";
494
495/// Generic Linux filesystem data partition
496pub const LINUX_DATA: &str = "0fc63daf-8483-4772-8e79-3d69d8477de4";
497
498/// BIOS boot partition
499pub const BIOS_BOOT: &str = "21686148-6449-6e6f-744e-656564454649";
500
501// ============================================================================
502// ARCHITECTURE-SPECIFIC HELPERS
503// ============================================================================
504
505/// Returns the root partition GUID for the current architecture.
506///
507/// This is a compile-time constant function that selects the appropriate
508/// root partition type GUID based on the target architecture and endianness.
509pub const fn this_arch_root() -> &'static str {
510    cfg_if::cfg_if! {
511        if #[cfg(target_arch = "x86_64")] {
512            ROOT_X86_64
513        } else if #[cfg(target_arch = "arm")] {
514            ROOT_ARM
515        } else if #[cfg(target_arch = "aarch64")] {
516            ROOT_ARM64
517        } else if #[cfg(target_arch = "s390x")] {
518            ROOT_S390X
519        } else if #[cfg(all(target_arch = "powerpc64", target_endian = "big"))] {
520            ROOT_PPC64
521        } else if #[cfg(all(target_arch = "powerpc64", target_endian = "little"))] {
522            ROOT_PPC64_LE
523        } else if #[cfg(target_arch = "riscv64")] {
524            ROOT_RISCV64
525        } else {
526            compile_error!("Unsupported architecture")
527        }
528    }
529}
530
531#[cfg(test)]
532mod test {
533    use super::*;
534
535    #[test]
536    #[ignore = "Only run manually to validate against upstream spec"]
537    fn test_uuids_against_spec() {
538        // This test validates our partition type UUIDs against the upstream
539        // Discoverable Partitions Specification. The spec is committed to the
540        // repo at fixtures/discoverable_partitions_specification.md
541        //
542        // Spec source: https://github.com/uapi-group/specifications/blob/6f3a5dd31009456561eaa9f6fcfe7769ab97eb50/specs/discoverable_partitions_specification.md
543
544        let spec_content = include_str!("fixtures/discoverable_partitions_specification.md");
545
546        // Parse the markdown tables and extract partition name -> UUID mappings
547        let mut spec_uuids: std::collections::HashMap<&str, &str> =
548            std::collections::HashMap::new();
549
550        // Regex to match table rows with partition type UUIDs
551        // Format: | _Name_ | `uuid` ... | ... | ... |
552        let re = regex::Regex::new(
553            r"(?m)^\|\s*_(.+?)_\s*\|\s*`([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})`"
554        )
555        .unwrap();
556
557        for cap in re.captures_iter(&spec_content) {
558            let name = cap.get(1).unwrap().as_str();
559            let uuid = cap.get(2).unwrap().as_str();
560            spec_uuids.insert(name, uuid);
561        }
562
563        // Verify we parsed a reasonable number of entries
564        assert!(
565            spec_uuids.len() > 100,
566            "Expected to parse over 100 UUIDs, got {}",
567            spec_uuids.len()
568        );
569
570        // Now cross-reference our constants against the spec
571        macro_rules! check_uuid {
572            ($name:expr, $const_val:expr) => {
573                if let Some(&spec_uuid) = spec_uuids.get($name) {
574                    assert_eq!(
575                        $const_val, spec_uuid,
576                        "UUID mismatch for {}: our value '{}' != spec value '{}'",
577                        $name, $const_val, spec_uuid
578                    );
579                } else {
580                    panic!("No spec entry found for {}", $name);
581                }
582            };
583        }
584
585        // Root Partitions
586        check_uuid!("Root Partition (Alpha)", ROOT_ALPHA);
587        check_uuid!("Root Partition (ARC)", ROOT_ARC);
588        check_uuid!("Root Partition (32-bit ARM)", ROOT_ARM);
589        check_uuid!("Root Partition (64-bit ARM/AArch64)", ROOT_ARM64);
590        check_uuid!("Root Partition (Itanium/IA-64)", ROOT_IA64);
591        check_uuid!("Root Partition (LoongArch 64-bit)", ROOT_LOONGARCH64);
592        check_uuid!(
593            "Root Partition (32-bit MIPS LittleEndian (mipsel))",
594            ROOT_MIPS_LE
595        );
596        check_uuid!(
597            "Root Partition (64-bit MIPS LittleEndian (mips64el))",
598            ROOT_MIPS64_LE
599        );
600        check_uuid!("Root Partition (32-bit MIPS BigEndian (mips))", ROOT_MIPS);
601        check_uuid!(
602            "Root Partition (64-bit MIPS BigEndian (mips64))",
603            ROOT_MIPS64
604        );
605        check_uuid!("Root Partition (HPPA/PARISC)", ROOT_PARISC);
606        check_uuid!("Root Partition (32-bit PowerPC)", ROOT_PPC);
607        check_uuid!("Root Partition (64-bit PowerPC BigEndian)", ROOT_PPC64);
608        check_uuid!(
609            "Root Partition (64-bit PowerPC LittleEndian)",
610            ROOT_PPC64_LE
611        );
612        check_uuid!("Root Partition (RISC-V 32-bit)", ROOT_RISCV32);
613        check_uuid!("Root Partition (RISC-V 64-bit)", ROOT_RISCV64);
614        check_uuid!("Root Partition (s390)", ROOT_S390);
615        check_uuid!("Root Partition (s390x)", ROOT_S390X);
616        check_uuid!("Root Partition (TILE-Gx)", ROOT_TILEGX);
617        check_uuid!("Root Partition (x86)", ROOT_X86);
618        check_uuid!("Root Partition (amd64/x86_64)", ROOT_X86_64);
619
620        // USR Partitions
621        check_uuid!("`/usr/` Partition (Alpha)", USR_ALPHA);
622        check_uuid!("`/usr/` Partition (ARC)", USR_ARC);
623        check_uuid!("`/usr/` Partition (32-bit ARM)", USR_ARM);
624        check_uuid!("`/usr/` Partition (64-bit ARM/AArch64)", USR_ARM64);
625        check_uuid!("`/usr/` Partition (Itanium/IA-64)", USR_IA64);
626        check_uuid!("`/usr/` Partition (LoongArch 64-bit)", USR_LOONGARCH64);
627        check_uuid!("`/usr/` Partition (32-bit MIPS BigEndian (mips))", USR_MIPS);
628        check_uuid!(
629            "`/usr/` Partition (64-bit MIPS BigEndian (mips64))",
630            USR_MIPS64
631        );
632        check_uuid!(
633            "`/usr/` Partition (32-bit MIPS LittleEndian (mipsel))",
634            USR_MIPS_LE
635        );
636        check_uuid!(
637            "`/usr/` Partition (64-bit MIPS LittleEndian (mips64el))",
638            USR_MIPS64_LE
639        );
640        check_uuid!("`/usr/` Partition (HPPA/PARISC)", USR_PARISC);
641        check_uuid!("`/usr/` Partition (32-bit PowerPC)", USR_PPC);
642        check_uuid!("`/usr/` Partition (64-bit PowerPC BigEndian)", USR_PPC64);
643        check_uuid!(
644            "`/usr/` Partition (64-bit PowerPC LittleEndian)",
645            USR_PPC64_LE
646        );
647        check_uuid!("`/usr/` Partition (RISC-V 32-bit)", USR_RISCV32);
648        check_uuid!("`/usr/` Partition (RISC-V 64-bit)", USR_RISCV64);
649        check_uuid!("`/usr/` Partition (s390)", USR_S390);
650        check_uuid!("`/usr/` Partition (s390x)", USR_S390X);
651        check_uuid!("`/usr/` Partition (TILE-Gx)", USR_TILEGX);
652        check_uuid!("`/usr/` Partition (x86)", USR_X86);
653        check_uuid!("`/usr/` Partition (amd64/x86_64)", USR_X86_64);
654
655        // Root Verity Partitions
656        check_uuid!("Root Verity Partition (Alpha)", ROOT_VERITY_ALPHA);
657        check_uuid!("Root Verity Partition (ARC)", ROOT_VERITY_ARC);
658        check_uuid!("Root Verity Partition (32-bit ARM)", ROOT_VERITY_ARM);
659        check_uuid!(
660            "Root Verity Partition (64-bit ARM/AArch64)",
661            ROOT_VERITY_ARM64
662        );
663        check_uuid!("Root Verity Partition (Itanium/IA-64)", ROOT_VERITY_IA64);
664        check_uuid!(
665            "Root Verity Partition (LoongArch 64-bit)",
666            ROOT_VERITY_LOONGARCH64
667        );
668        check_uuid!(
669            "Root Verity Partition (32-bit MIPS BigEndian (mips))",
670            ROOT_VERITY_MIPS
671        );
672        check_uuid!(
673            "Root Verity Partition (64-bit MIPS BigEndian (mips64))",
674            ROOT_VERITY_MIPS64
675        );
676        check_uuid!(
677            "Root Verity Partition (32-bit MIPS LittleEndian (mipsel))",
678            ROOT_VERITY_MIPS_LE
679        );
680        check_uuid!(
681            "Root Verity Partition (64-bit MIPS LittleEndian (mips64el))",
682            ROOT_VERITY_MIPS64_LE
683        );
684        check_uuid!("Root Verity Partition (HPPA/PARISC)", ROOT_VERITY_PARISC);
685        check_uuid!("Root Verity Partition (32-bit PowerPC)", ROOT_VERITY_PPC);
686        check_uuid!(
687            "Root Verity Partition (64-bit PowerPC BigEndian)",
688            ROOT_VERITY_PPC64
689        );
690        check_uuid!(
691            "Root Verity Partition (64-bit PowerPC LittleEndian)",
692            ROOT_VERITY_PPC64_LE
693        );
694        check_uuid!("Root Verity Partition (RISC-V 32-bit)", ROOT_VERITY_RISCV32);
695        check_uuid!("Root Verity Partition (RISC-V 64-bit)", ROOT_VERITY_RISCV64);
696        check_uuid!("Root Verity Partition (s390)", ROOT_VERITY_S390);
697        check_uuid!("Root Verity Partition (s390x)", ROOT_VERITY_S390X);
698        check_uuid!("Root Verity Partition (TILE-Gx)", ROOT_VERITY_TILEGX);
699        check_uuid!("Root Verity Partition (x86)", ROOT_VERITY_X86);
700        check_uuid!("Root Verity Partition (amd64/x86_64)", ROOT_VERITY_X86_64);
701
702        // USR Verity Partitions
703        check_uuid!("`/usr/` Verity Partition (Alpha)", USR_VERITY_ALPHA);
704        check_uuid!("`/usr/` Verity Partition (ARC)", USR_VERITY_ARC);
705        check_uuid!("`/usr/` Verity Partition (32-bit ARM)", USR_VERITY_ARM);
706        check_uuid!(
707            "`/usr/` Verity Partition (64-bit ARM/AArch64)",
708            USR_VERITY_ARM64
709        );
710        check_uuid!("`/usr/` Verity Partition (Itanium/IA-64)", USR_VERITY_IA64);
711        check_uuid!(
712            "`/usr/` Verity Partition (LoongArch 64-bit)",
713            USR_VERITY_LOONGARCH64
714        );
715        check_uuid!(
716            "`/usr/` Verity Partition (32-bit MIPS BigEndian (mips))",
717            USR_VERITY_MIPS
718        );
719        check_uuid!(
720            "`/usr/` Verity Partition (64-bit MIPS BigEndian (mips64))",
721            USR_VERITY_MIPS64
722        );
723        check_uuid!(
724            "`/usr/` Verity Partition (32-bit MIPS LittleEndian (mipsel))",
725            USR_VERITY_MIPS_LE
726        );
727        check_uuid!(
728            "`/usr/` Verity Partition (64-bit MIPS LittleEndian (mips64el))",
729            USR_VERITY_MIPS64_LE
730        );
731        check_uuid!("`/usr/` Verity Partition (HPPA/PARISC)", USR_VERITY_PARISC);
732        check_uuid!("`/usr/` Verity Partition (32-bit PowerPC)", USR_VERITY_PPC);
733        check_uuid!(
734            "`/usr/` Verity Partition (64-bit PowerPC BigEndian)",
735            USR_VERITY_PPC64
736        );
737        check_uuid!(
738            "`/usr/` Verity Partition (64-bit PowerPC LittleEndian)",
739            USR_VERITY_PPC64_LE
740        );
741        check_uuid!(
742            "`/usr/` Verity Partition (RISC-V 32-bit)",
743            USR_VERITY_RISCV32
744        );
745        check_uuid!(
746            "`/usr/` Verity Partition (RISC-V 64-bit)",
747            USR_VERITY_RISCV64
748        );
749        check_uuid!("`/usr/` Verity Partition (s390)", USR_VERITY_S390);
750        check_uuid!("`/usr/` Verity Partition (s390x)", USR_VERITY_S390X);
751        check_uuid!("`/usr/` Verity Partition (TILE-Gx)", USR_VERITY_TILEGX);
752        check_uuid!("`/usr/` Verity Partition (x86)", USR_VERITY_X86);
753        check_uuid!("`/usr/` Verity Partition (amd64/x86_64)", USR_VERITY_X86_64);
754
755        // Root Verity Signature Partitions
756        check_uuid!(
757            "Root Verity Signature Partition (Alpha)",
758            ROOT_VERITY_SIG_ALPHA
759        );
760        check_uuid!("Root Verity Signature Partition (ARC)", ROOT_VERITY_SIG_ARC);
761        check_uuid!(
762            "Root Verity Signature Partition (32-bit ARM)",
763            ROOT_VERITY_SIG_ARM
764        );
765        check_uuid!(
766            "Root Verity Signature Partition (64-bit ARM/AArch64)",
767            ROOT_VERITY_SIG_ARM64
768        );
769        check_uuid!(
770            "Root Verity Signature Partition (Itanium/IA-64)",
771            ROOT_VERITY_SIG_IA64
772        );
773        check_uuid!(
774            "Root Verity Signature Partition (LoongArch 64-bit)",
775            ROOT_VERITY_SIG_LOONGARCH64
776        );
777        check_uuid!(
778            "Root Verity Signature Partition (32-bit MIPS BigEndian (mips))",
779            ROOT_VERITY_SIG_MIPS
780        );
781        check_uuid!(
782            "Root Verity Signature Partition (64-bit MIPS BigEndian (mips64))",
783            ROOT_VERITY_SIG_MIPS64
784        );
785        check_uuid!(
786            "Root Verity Signature Partition (32-bit MIPS LittleEndian (mipsel))",
787            ROOT_VERITY_SIG_MIPS_LE
788        );
789        check_uuid!(
790            "Root Verity Signature Partition (64-bit MIPS LittleEndian (mips64el))",
791            ROOT_VERITY_SIG_MIPS64_LE
792        );
793        check_uuid!(
794            "Root Verity Signature Partition (HPPA/PARISC)",
795            ROOT_VERITY_SIG_PARISC
796        );
797        check_uuid!(
798            "Root Verity Signature Partition (32-bit PowerPC)",
799            ROOT_VERITY_SIG_PPC
800        );
801        check_uuid!(
802            "Root Verity Signature Partition (64-bit PowerPC BigEndian)",
803            ROOT_VERITY_SIG_PPC64
804        );
805        check_uuid!(
806            "Root Verity Signature Partition (64-bit PowerPC LittleEndian)",
807            ROOT_VERITY_SIG_PPC64_LE
808        );
809        check_uuid!(
810            "Root Verity Signature Partition (RISC-V 32-bit)",
811            ROOT_VERITY_SIG_RISCV32
812        );
813        check_uuid!(
814            "Root Verity Signature Partition (RISC-V 64-bit)",
815            ROOT_VERITY_SIG_RISCV64
816        );
817        check_uuid!(
818            "Root Verity Signature Partition (s390)",
819            ROOT_VERITY_SIG_S390
820        );
821        check_uuid!(
822            "Root Verity Signature Partition (s390x)",
823            ROOT_VERITY_SIG_S390X
824        );
825        check_uuid!(
826            "Root Verity Signature Partition (TILE-Gx)",
827            ROOT_VERITY_SIG_TILEGX
828        );
829        check_uuid!("Root Verity Signature Partition (x86)", ROOT_VERITY_SIG_X86);
830        check_uuid!(
831            "Root Verity Signature Partition (amd64/x86_64)",
832            ROOT_VERITY_SIG_X86_64
833        );
834
835        // USR Verity Signature Partitions
836        check_uuid!(
837            "`/usr/` Verity Signature Partition (Alpha)",
838            USR_VERITY_SIG_ALPHA
839        );
840        check_uuid!(
841            "`/usr/` Verity Signature Partition (ARC)",
842            USR_VERITY_SIG_ARC
843        );
844        check_uuid!(
845            "`/usr/` Verity Signature Partition (32-bit ARM)",
846            USR_VERITY_SIG_ARM
847        );
848        check_uuid!(
849            "`/usr/` Verity Signature Partition (64-bit ARM/AArch64)",
850            USR_VERITY_SIG_ARM64
851        );
852        check_uuid!(
853            "`/usr/` Verity Signature Partition (Itanium/IA-64)",
854            USR_VERITY_SIG_IA64
855        );
856        check_uuid!(
857            "`/usr/` Verity Signature Partition (LoongArch 64-bit)",
858            USR_VERITY_SIG_LOONGARCH64
859        );
860        check_uuid!(
861            "`/usr/` Verity Signature Partition (32-bit MIPS BigEndian (mips))",
862            USR_VERITY_SIG_MIPS
863        );
864        check_uuid!(
865            "`/usr/` Verity Signature Partition (64-bit MIPS BigEndian (mips64))",
866            USR_VERITY_SIG_MIPS64
867        );
868        check_uuid!(
869            "`/usr/` Verity Signature Partition (32-bit MIPS LittleEndian (mipsel))",
870            USR_VERITY_SIG_MIPS_LE
871        );
872        check_uuid!(
873            "`/usr/` Verity Signature Partition (64-bit MIPS LittleEndian (mips64el))",
874            USR_VERITY_SIG_MIPS64_LE
875        );
876        check_uuid!(
877            "`/usr/` Verity Signature Partition (HPPA/PARISC)",
878            USR_VERITY_SIG_PARISC
879        );
880        check_uuid!(
881            "`/usr/` Verity Signature Partition (32-bit PowerPC)",
882            USR_VERITY_SIG_PPC
883        );
884        check_uuid!(
885            "`/usr/` Verity Signature Partition (64-bit PowerPC BigEndian)",
886            USR_VERITY_SIG_PPC64
887        );
888        check_uuid!(
889            "`/usr/` Verity Signature Partition (64-bit PowerPC LittleEndian)",
890            USR_VERITY_SIG_PPC64_LE
891        );
892        check_uuid!(
893            "`/usr/` Verity Signature Partition (RISC-V 32-bit)",
894            USR_VERITY_SIG_RISCV32
895        );
896        check_uuid!(
897            "`/usr/` Verity Signature Partition (RISC-V 64-bit)",
898            USR_VERITY_SIG_RISCV64
899        );
900        check_uuid!(
901            "`/usr/` Verity Signature Partition (s390)",
902            USR_VERITY_SIG_S390
903        );
904        check_uuid!(
905            "`/usr/` Verity Signature Partition (s390x)",
906            USR_VERITY_SIG_S390X
907        );
908        check_uuid!(
909            "`/usr/` Verity Signature Partition (TILE-Gx)",
910            USR_VERITY_SIG_TILEGX
911        );
912        check_uuid!(
913            "`/usr/` Verity Signature Partition (x86)",
914            USR_VERITY_SIG_X86
915        );
916        check_uuid!(
917            "`/usr/` Verity Signature Partition (amd64/x86_64)",
918            USR_VERITY_SIG_X86_64
919        );
920
921        // Other special partition types
922        check_uuid!("EFI System Partition", ESP);
923        check_uuid!("Extended Boot Loader Partition", XBOOTLDR);
924        check_uuid!("Swap", SWAP);
925        check_uuid!("Home Partition", HOME);
926        check_uuid!("Server Data Partition", SRV);
927        check_uuid!("Variable Data Partition", VAR);
928        check_uuid!("Temporary Data Partition", TMP);
929        check_uuid!("Generic Linux Data Partition", LINUX_DATA);
930    }
931}