dcavalca / rpms / mkosi

Forked from rpms/mkosi 2 years ago
Clone
Blob Blame History Raw
From 80a7043f12ffe6985ef3ce5bd9aac6c1c2ae2219 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 10 Feb 2018 18:24:52 +0100
Subject: [PATCH] Check architecture lazily

Before this patch, mkosi wouldn't even run --help on a platform that
wasn't amd64 or arm64. That's unnecessarily harsh, a lot of functionality
is platform-independent and will work anywhere.
---
 mkosi | 33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/mkosi b/mkosi
index 4ef608bc68..3ecc1a7dd0 100755
--- a/mkosi
+++ b/mkosi
@@ -5,6 +5,7 @@
 import argparse
 import configparser
 import contextlib
+import collections
 import crypt
 import ctypes, ctypes.util
 import errno
@@ -84,15 +85,6 @@ GPT_ROOT_ARM_VERITY    = uuid.UUID("7386cdf2203c47a9a498f2ecce45a2d6")
 GPT_ROOT_ARM_64_VERITY = uuid.UUID("df3300ced69f4c92978c9bfb0f38d820")
 GPT_ROOT_IA64_VERITY   = uuid.UUID("86ed10d5b60745bb8957d350f23d0571")
 
-if platform.machine() == "x86_64":
-    GPT_ROOT_NATIVE = GPT_ROOT_X86_64
-    GPT_ROOT_NATIVE_VERITY = GPT_ROOT_X86_64_VERITY
-elif platform.machine() == "aarch64":
-    GPT_ROOT_NATIVE = GPT_ROOT_ARM_64
-    GPT_ROOT_NATIVE_VERITY = GPT_ROOT_ARM_64_VERITY
-else:
-    die("Don't know the %s architecture." % platform.machine())
-
 CLONE_NEWNS = 0x00020000
 
 FEDORA_KEYS_MAP = {
@@ -109,6 +101,21 @@ FEDORA_KEYS_MAP = {
 GPT_HEADER_SIZE = 1024*1024
 GPT_FOOTER_SIZE = 1024*1024
 
+GPTRootTypePair = collections.namedtuple('GPTRootTypePair', 'root verity')
+
+def gpt_root_native():
+    """The tag for the native GPT root partition
+
+    Returns a tuple of two tags: for the root partition and for the
+    matching verity partition.
+    """
+    if platform.machine() == "x86_64":
+        return GPTRootTypePair(GPT_ROOT_X86_64, GPT_ROOT_X86_64_VERITY)
+    elif platform.machine() == "aarch64":
+        return GPTRootTypePair(GPT_ROOT_ARM_64, GPT_ROOT_ARM_64_VERITY)
+    else:
+        die("Unknown architecture {}.".format(platform.machine()))
+
 def unshare(flags):
     libc = ctypes.CDLL(ctypes.util.find_library("c"), use_errno=True)
 
@@ -367,7 +374,9 @@ def determine_partition_table(args):
             run_sfdisk = True
 
     if args.output_format != OutputFormat.raw_squashfs:
-        table += 'type={}, attrs={}, name="Root Partition"\n'.format(GPT_ROOT_NATIVE, "GUID:60" if args.read_only and args.output_format != OutputFormat.raw_btrfs else "")
+        table += 'type={}, attrs={}, name="Root Partition"\n'.format(
+            gpt_root_native().root,
+            "GUID:60" if args.read_only and args.output_format != OutputFormat.raw_btrfs else "")
         run_sfdisk = True
 
     args.root_partno = pn
@@ -1930,7 +1939,7 @@ def insert_squashfs(args, workspace, raw, loopdev, squashfs, for_cache):
 
     with complete_step('Inserting squashfs root partition'):
         args.root_size = insert_partition(args, workspace, raw, loopdev, args.root_partno, squashfs,
-                                          "Root Partition", GPT_ROOT_NATIVE)
+                                          "Root Partition", gpt_root_native().root)
 
 def make_verity(args, workspace, dev, run_build_script, for_cache):
 
@@ -1962,7 +1971,7 @@ def insert_verity(args, workspace, raw, loopdev, verity, root_hash, for_cache):
 
     with complete_step('Inserting verity partition'):
         insert_partition(args, workspace, raw, loopdev, args.verity_partno, verity,
-                         "Verity Partition", GPT_ROOT_NATIVE_VERITY, u)
+                         "Verity Partition", gpt_root_native().verity, u)
 
 def patch_root_uuid(args, loopdev, root_hash, for_cache):
 
-- 
2.14.3