]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Introduce is_x86_variant() and is_arm_variant()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 16 Feb 2024 08:43:02 +0000 (09:43 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 16 Feb 2024 08:44:00 +0000 (09:44 +0100)
Let's make sure we always check for both the 64-bit and the 32-bit
variant where it makes sense to do so. Also make sure the Debian
default image can be built for x86.

mkosi/__init__.py
mkosi/config.py
mkosi/distributions/arch.py
mkosi/distributions/ubuntu.py
mkosi/qemu.py

index 8614fc407987a7778a270a5e7bf833ebba832c70..b285c2ce8be153b600a3b226d5645e0c016c5c05 100644 (file)
@@ -24,7 +24,6 @@ from typing import Optional, TextIO, Union, cast
 from mkosi.archive import extract_tar, make_cpio, make_tar
 from mkosi.burn import run_burn
 from mkosi.config import (
-    Architecture,
     Args,
     BiosBootloader,
     Bootloader,
@@ -1617,7 +1616,7 @@ def identify_cpu(root: Path) -> tuple[Optional[Path], Optional[Path]]:
 
 
 def build_microcode_initrd(context: Context) -> Optional[Path]:
-    if context.config.architecture not in (Architecture.x86, Architecture.x86_64):
+    if not context.config.architecture.is_x86_variant():
         return None
 
     microcode = context.workspace / "initrd-microcode.img"
index 91e0ab92d4e5df726c7dc900b564675e7eb7baf5..a2c6d25a5c60f67d9bd6d666b3e494c005a7a50e 100644 (file)
@@ -360,16 +360,16 @@ class Architecture(StrEnum):
         }.get(self, "ttyS0")
 
     def supports_smbios(self, firmware: QemuFirmware) -> bool:
-        if self in (Architecture.x86, Architecture.x86_64):
+        if self.is_x86_variant():
             return True
 
-        return self in (Architecture.arm, Architecture.arm64) and firmware == QemuFirmware.uefi
+        return self.is_arm_variant() and firmware == QemuFirmware.uefi
 
     def supports_fw_cfg(self) -> bool:
-        return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64)
+        return self.is_x86_variant() or self.is_arm_variant()
 
     def supports_smm(self) -> bool:
-        return self in (Architecture.x86, Architecture.x86_64)
+        return self.is_x86_variant()
 
     def default_qemu_machine(self) -> str:
         m = {
@@ -398,6 +398,12 @@ class Architecture(StrEnum):
     def is_native(self) -> bool:
         return self == self.native()
 
+    def is_x86_variant(self) -> bool:
+        return self in (Architecture.x86, Architecture.x86_64)
+
+    def is_arm_variant(self) -> bool:
+        return self in (Architecture.arm, Architecture.arm64)
+
     @classmethod
     def native(cls) -> "Architecture":
         return cls.from_uname(platform.machine())
index edae80c3f58bc7d62431fcd75c79b3cbdf0d0845..cc696adddb432719b5eab882906254265ae2f3cd 100644 (file)
@@ -71,7 +71,7 @@ class Installer(DistributionInstaller):
         if context.config.local_mirror:
             yield Pacman.Repository("core", context.config.local_mirror)
         else:
-            if context.config.architecture == Architecture.arm64:
+            if context.config.architecture.is_arm_variant():
                 url = f"{context.config.mirror or 'http://mirror.archlinuxarm.org'}/$arch/$repo"
             else:
                 url = f"{context.config.mirror or 'https://geo.mirror.pkgbuild.com'}/$repo/os/$arch"
@@ -96,6 +96,7 @@ class Installer(DistributionInstaller):
         a = {
             Architecture.x86_64 : "x86_64",
             Architecture.arm64  : "aarch64",
+            Architecture.arm    : "armv7h",
         }.get(arch)
 
         if not a:
index 16d0859b2a80b8403b2c9b9a75e6aff76723cc9c..58651e48aa0fe7b872e777721941f01c6fbea524 100644 (file)
@@ -3,7 +3,6 @@
 from collections.abc import Iterable
 from pathlib import Path
 
-from mkosi.config import Architecture
 from mkosi.context import Context
 from mkosi.distributions import debian
 from mkosi.installer.apt import Apt
@@ -39,7 +38,7 @@ class Installer(debian.Installer):
             )
             return
 
-        if context.config.architecture in (Architecture.x86, Architecture.x86_64):
+        if context.config.architecture.is_x86_variant():
             mirror = context.config.mirror or "http://archive.ubuntu.com/ubuntu"
         else:
             mirror = context.config.mirror or "http://ports.ubuntu.com"
@@ -63,7 +62,7 @@ class Installer(debian.Installer):
         )
 
         # Security updates repos are never mirrored. But !x86 are on the ports server.
-        if context.config.architecture in [Architecture.x86, Architecture.x86_64]:
+        if context.config.architecture.is_x86_variant():
             mirror = "http://security.ubuntu.com/ubuntu/"
         else:
             mirror = "http://ports.ubuntu.com/"
index 40c99c3091583bb462286530b5507a8b32c25051..3ff905956ab2cf4d917c54b6e13c437cc5190561 100644 (file)
@@ -802,9 +802,9 @@ def run_qemu(args: Args, config: Config) -> None:
             cmdline += ["-chardev", f"socket,id=chrtpm,path={sock}",
                         "-tpmdev", "emulator,id=tpm0,chardev=chrtpm"]
 
-            if config.architecture == Architecture.x86_64:
+            if config.architecture.is_x86_variant():
                 cmdline += ["-device", "tpm-tis,tpmdev=tpm0"]
-            elif config.architecture == Architecture.arm64:
+            elif config.architecture.is_arm_variant():
                 cmdline += ["-device", "tpm-tis-device,tpmdev=tpm0"]
 
         if QemuDeviceNode.vhost_vsock in qemu_device_fds and config.architecture.supports_smbios(firmware):