from typing import TYPE_CHECKING, Optional, cast
from mkosi.architecture import Architecture
-from mkosi.log import die
from mkosi.util import StrEnum, read_os_release
if TYPE_CHECKING:
return self.installer().tools_tree_packages()
def installer(self) -> type[DistributionInstaller]:
- try:
- mod = importlib.import_module(f"mkosi.distributions.{self}")
- installer = getattr(mod, f"{str(self).title().replace('_','')}Installer")
- if not issubclass(installer, DistributionInstaller):
- die(f"Distribution installer for {self} is not a subclass of DistributionInstaller")
- return cast(type[DistributionInstaller], installer)
- except (ImportError, AttributeError):
- die("No installer for this distribution.")
+ modname = str(self).replace('-', '_')
+ mod = importlib.import_module(f"mkosi.distributions.{modname}")
+ installer = getattr(mod, "Installer")
+ assert issubclass(installer, DistributionInstaller)
+ return cast(type[DistributionInstaller], installer)
def detect_distribution() -> tuple[Optional[Distribution], Optional[str]]:
# SPDX-License-Identifier: LGPL-2.1+
from mkosi.config import MkosiConfig
-from mkosi.distributions.centos import CentosInstaller
+from mkosi.distributions import centos
from mkosi.installer.dnf import Repo
-class AlmaInstaller(CentosInstaller):
+class Installer(centos.Installer):
@staticmethod
def gpgurls() -> tuple[str, ...]:
return ("https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-$releasever",)
from mkosi.state import MkosiState
-class ArchInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "ext4"
return urllib.parse.urljoin(config.mirror, link)
-class CentosInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "xfs"
from mkosi.util import umask
-class DebianInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "ext4"
from mkosi.state import MkosiState
-class FedoraInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "btrfs"
)
-class GentooInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "btrfs"
from mkosi.state import MkosiState
-class MageiaInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "ext4"
from mkosi.state import MkosiState
-class OpenmandrivaInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "ext4"
from mkosi.state import MkosiState
-class OpensuseInstaller(DistributionInstaller):
+class Installer(DistributionInstaller):
@classmethod
def filesystem(cls) -> str:
return "btrfs"
# SPDX-License-Identifier: LGPL-2.1+
from mkosi.config import MkosiConfig
-from mkosi.distributions.centos import CentosInstaller
+from mkosi.distributions import centos
from mkosi.installer.dnf import Repo
-class RockyInstaller(CentosInstaller):
+class Installer(centos.Installer):
@staticmethod
def gpgurls() -> tuple[str, ...]:
return ("https://download.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-$releasever",)
# SPDX-License-Identifier: LGPL-2.1+
from mkosi.architecture import Architecture
-from mkosi.distributions.debian import DebianInstaller
+from mkosi.distributions import debian
from mkosi.state import MkosiState
-class UbuntuInstaller(DebianInstaller):
+class Installer(debian.Installer):
@classmethod
def default_release(cls) -> str:
return "lunar"