]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Choose default tools tree distribution based on host distribution 2885/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 19 Jul 2024 08:51:57 +0000 (10:51 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 20 Jul 2024 14:10:21 +0000 (16:10 +0200)
Let's choose the default tools tree distribution based on the host
distribution instead of the target distribution. Why? When building
a Fedora image from Ubuntu, It's much more likely that apt-get will
be installed to build a Debian tools tree rather than requiring dnf
to be installed to build a Fedora tools tree.

mkosi/config.py
mkosi/distributions/__init__.py
mkosi/distributions/arch.py
mkosi/distributions/debian.py
mkosi/distributions/fedora.py
mkosi/distributions/mageia.py
mkosi/distributions/openmandriva.py
mkosi/distributions/opensuse.py
mkosi/distributions/ubuntu.py

index 48c8013a69f1986883802f7dd1d96a970448148c..3343a2cea20913f2360b68acbb83407236ad82f3 100644 (file)
@@ -707,6 +707,15 @@ def config_default_release(namespace: argparse.Namespace) -> str:
     return cast(str, namespace.distribution.default_release())
 
 
+def config_default_tools_tree_distribution(namespace: argparse.Namespace) -> Distribution:
+    detected = detect_distribution()[0]
+
+    if not detected:
+        return Distribution.custom
+
+    return detected.default_tools_tree_distribution()
+
+
 def config_default_source_date_epoch(namespace: argparse.Namespace) -> Optional[int]:
     for env in namespace.environment:
         if s := startswith(env, "SOURCE_DATE_EPOCH="):
@@ -2871,7 +2880,7 @@ SETTINGS = (
         match=config_make_enum_matcher(Distribution),
         choices=Distribution.choices(),
         default_factory_depends=("distribution",),
-        default_factory=lambda ns: ns.distribution.default_tools_tree_distribution(),
+        default_factory=config_default_tools_tree_distribution,
         help="Set the distribution to use for the default tools tree",
     ),
     ConfigSetting(
index 3ed1389a3b524f208a077d60f0945f81cf0ff172..a5309ab0965617b6d05ca9f4eb0cc3ecef0a815b 100644 (file)
@@ -131,8 +131,8 @@ class Distribution(StrEnum):
     def default_release(self) -> str:
         return self.installer().default_release()
 
-    def default_tools_tree_distribution(self) -> Optional["Distribution"]:
-        return self.installer().default_tools_tree_distribution()
+    def default_tools_tree_distribution(self) -> "Distribution":
+        return self.installer().default_tools_tree_distribution() or self
 
     def grub_prefix(self) -> str:
         return self.installer().grub_prefix()
index a33564755b7ff0b1423ba991fb5ac7e3bed0d0fb..221e32ca7c342bb4e4a1074ec7e3198e28c00fbc 100644 (file)
@@ -4,7 +4,7 @@ from collections.abc import Iterable, Sequence
 
 from mkosi.config import Architecture, Config
 from mkosi.context import Context
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import DistributionInstaller, PackageType
 from mkosi.installer import PackageManager
 from mkosi.installer.pacman import Pacman, PacmanRepository
 from mkosi.log import die
@@ -28,10 +28,6 @@ class Installer(DistributionInstaller):
     def default_release(cls) -> str:
         return "rolling"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.arch
-
     @classmethod
     def package_manager(cls, config: "Config") -> type[PackageManager]:
         return Pacman
index 0bfca9967a515a4c85704cc0a8c2d12210e4e5d1..c7718e62d1266bec09c0c5002177359d60f66e84 100644 (file)
@@ -7,7 +7,7 @@ from pathlib import Path
 from mkosi.archive import extract_tar
 from mkosi.config import Architecture, Config
 from mkosi.context import Context
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import DistributionInstaller, PackageType
 from mkosi.installer import PackageManager
 from mkosi.installer.apt import Apt, AptRepository
 from mkosi.log import die
@@ -33,10 +33,6 @@ class Installer(DistributionInstaller):
     def default_release(cls) -> str:
         return "testing"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.debian
-
     @classmethod
     def package_manager(cls, config: Config) -> type[PackageManager]:
         return Apt
index 7a5f3de498c5353f2e8a3ad092bbbf5daf60a8d5..551d3190519eff3e331538667f4127393dab00ab 100644 (file)
@@ -7,7 +7,6 @@ from pathlib import Path
 from mkosi.config import Architecture, Config
 from mkosi.context import Context
 from mkosi.distributions import (
-    Distribution,
     DistributionInstaller,
     PackageType,
     join_mirror,
@@ -62,10 +61,6 @@ class Installer(DistributionInstaller):
     def default_release(cls) -> str:
         return "40"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.fedora
-
     @classmethod
     def grub_prefix(cls) -> str:
         return "grub2"
index 8ffb869af80c876361a78891c43fb44b8adcb365..c0e3eb2b7d312dd197a0983278afaa03be64eb35 100644 (file)
@@ -4,7 +4,7 @@ from collections.abc import Iterable
 
 from mkosi.config import Architecture
 from mkosi.context import Context
-from mkosi.distributions import Distribution, fedora, join_mirror
+from mkosi.distributions import fedora, join_mirror
 from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
 from mkosi.log import die
 from mkosi.util import listify
@@ -23,10 +23,6 @@ class Installer(fedora.Installer):
     def default_release(cls) -> str:
         return "cauldron"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.mageia
-
     @classmethod
     def install(cls, context: Context) -> None:
         cls.install_packages(context, ["filesystem"], apivfs=False)
index 35224e1876e9d69084031c1aead01d2246dd81a4..15a76c8c41a89e0082222494bde56eab448c3e98 100644 (file)
@@ -4,7 +4,7 @@ from collections.abc import Iterable
 
 from mkosi.config import Architecture
 from mkosi.context import Context
-from mkosi.distributions import Distribution, fedora, join_mirror
+from mkosi.distributions import fedora, join_mirror
 from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
 from mkosi.log import die
 from mkosi.util import listify
@@ -23,10 +23,6 @@ class Installer(fedora.Installer):
     def default_release(cls) -> str:
         return "cooker"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.openmandriva
-
     @classmethod
     def install(cls, context: Context) -> None:
         cls.install_packages(context, ["filesystem"], apivfs=False)
index bf1d33adffc20c00c730352a0804305facf58c8f..438450e5f3866989c0c15ae67363246358cb7f7e 100644 (file)
@@ -7,7 +7,7 @@ from xml.etree import ElementTree
 
 from mkosi.config import Architecture, Config
 from mkosi.context import Context
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType, join_mirror
+from mkosi.distributions import DistributionInstaller, PackageType, join_mirror
 from mkosi.installer import PackageManager
 from mkosi.installer.dnf import Dnf
 from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, setup_rpm
@@ -36,10 +36,6 @@ class Installer(DistributionInstaller):
     def default_release(cls) -> str:
         return "tumbleweed"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.opensuse
-
     @classmethod
     def grub_prefix(cls) -> str:
         return "grub2"
index 06d40cad21cb4337195cdab79e900d10686adaab..a4aa734033d660d7cacaee94d64261898ffc35d3 100644 (file)
@@ -4,7 +4,7 @@ from collections.abc import Iterable
 from pathlib import Path
 
 from mkosi.context import Context
-from mkosi.distributions import Distribution, debian
+from mkosi.distributions import debian
 from mkosi.installer.apt import AptRepository
 from mkosi.util import listify
 
@@ -18,10 +18,6 @@ class Installer(debian.Installer):
     def default_release(cls) -> str:
         return "noble"
 
-    @classmethod
-    def default_tools_tree_distribution(cls) -> Distribution:
-        return Distribution.ubuntu
-
     @staticmethod
     @listify
     def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]: