From 8fed34849e6686f79d06c5ceb0c99d92126cef06 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Fri, 19 Jul 2024 10:51:57 +0200 Subject: [PATCH] Choose default tools tree distribution based on host distribution 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 | 11 ++++++++++- mkosi/distributions/__init__.py | 4 ++-- mkosi/distributions/arch.py | 6 +----- mkosi/distributions/debian.py | 6 +----- mkosi/distributions/fedora.py | 5 ----- mkosi/distributions/mageia.py | 6 +----- mkosi/distributions/openmandriva.py | 6 +----- mkosi/distributions/opensuse.py | 6 +----- mkosi/distributions/ubuntu.py | 6 +----- 9 files changed, 18 insertions(+), 38 deletions(-) diff --git a/mkosi/config.py b/mkosi/config.py index 48c8013a6..3343a2cea 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -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( diff --git a/mkosi/distributions/__init__.py b/mkosi/distributions/__init__.py index 3ed1389a3..a5309ab09 100644 --- a/mkosi/distributions/__init__.py +++ b/mkosi/distributions/__init__.py @@ -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() diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index a33564755..221e32ca7 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -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 diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index 0bfca9967..c7718e62d 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -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 diff --git a/mkosi/distributions/fedora.py b/mkosi/distributions/fedora.py index 7a5f3de49..551d31905 100644 --- a/mkosi/distributions/fedora.py +++ b/mkosi/distributions/fedora.py @@ -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" diff --git a/mkosi/distributions/mageia.py b/mkosi/distributions/mageia.py index 8ffb869af..c0e3eb2b7 100644 --- a/mkosi/distributions/mageia.py +++ b/mkosi/distributions/mageia.py @@ -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) diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py index 35224e187..15a76c8c4 100644 --- a/mkosi/distributions/openmandriva.py +++ b/mkosi/distributions/openmandriva.py @@ -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) diff --git a/mkosi/distributions/opensuse.py b/mkosi/distributions/opensuse.py index bf1d33adf..438450e5f 100644 --- a/mkosi/distributions/opensuse.py +++ b/mkosi/distributions/opensuse.py @@ -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" diff --git a/mkosi/distributions/ubuntu.py b/mkosi/distributions/ubuntu.py index 06d40cad2..a4aa73403 100644 --- a/mkosi/distributions/ubuntu.py +++ b/mkosi/distributions/ubuntu.py @@ -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]: -- 2.47.2