From: Joerg Behrmann Date: Thu, 24 Nov 2022 13:17:09 +0000 (+0100) Subject: Move OpenMandriva to DistributionInstaller X-Git-Tag: v15~384^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8eb1df0e013126ef8fba52d47ce1621eaf36d74f;p=thirdparty%2Fmkosi.git Move OpenMandriva to DistributionInstaller --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index dcb97c9e4..150c615dd 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1290,8 +1290,6 @@ def configure_hostname(state: MkosiState, cached: bool) -> None: def mount_cache(state: MkosiState) -> Iterator[None]: if state.installer is not None: cache_paths = state.installer.cache_path() - elif state.config.distribution in (Distribution.openmandriva,): - cache_paths = ["var/cache/dnf"] elif is_centos_variant(state.config.distribution): # We mount both the YUM and the DNF cache in this case, as YUM might # just be redirected to DNF even if we invoke the former @@ -1707,49 +1705,6 @@ def setup_dnf(state: MkosiState, repos: Sequence[Repo] = ()) -> None: ) -@complete_step("Installing OpenMandriva…") -def install_openmandriva(state: MkosiState) -> None: - release = state.config.release.strip("'") - - if release[0].isdigit(): - release_model = "rock" - elif release == "cooker": - release_model = "cooker" - else: - release_model = release - - if state.config.local_mirror: - release_url = f"baseurl={state.config.local_mirror}" - updates_url = None - elif state.config.mirror: - baseurl = f"{state.config.mirror}/{release_model}/repository/{state.config.architecture}/main" - release_url = f"baseurl={baseurl}/release/" - updates_url = f"baseurl={baseurl}/updates/" - else: - baseurl = f"http://mirrors.openmandriva.org/mirrors.php?platform={release_model}&arch={state.config.architecture}&repo=main" - release_url = f"mirrorlist={baseurl}&release=release" - updates_url = f"mirrorlist={baseurl}&release=updates" - - gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-OpenMandriva") - - repos = [Repo("openmandriva", release_url, gpgpath)] - if updates_url is not None: - repos += [Repo("updates", updates_url, gpgpath)] - - setup_dnf(state, repos) - - packages = {*state.config.packages} - # well we may use basesystem here, but that pulls lot of stuff - add_packages(state.config, packages, "basesystem-minimal", "systemd", "dnf") - if not state.do_run_build_script and state.config.bootable: - add_packages(state.config, packages, "systemd-boot", "systemd-cryptsetup", conditional="systemd") - add_packages(state.config, packages, "kernel-release-server", "dracut", "timezone") - if state.config.netdev: - add_packages(state.config, packages, "systemd-networkd", conditional="systemd") - - if state.do_run_build_script: - packages.update(state.config.build_packages) - install_packages_dnf(state, packages) def centos_variant_gpg_locations(distribution: Distribution, epel_release: int) -> Tuple[Path, str]: @@ -1942,9 +1897,7 @@ def install_distribution(state: MkosiState, cached: bool) -> None: elif is_centos_variant(state.config.distribution): install = install_centos_variant else: - install = { - Distribution.openmandriva: install_openmandriva, - }[state.config.distribution] + die("No Installer") with mount_cache(state): install(state) diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py new file mode 100644 index 000000000..74de4eb15 --- /dev/null +++ b/mkosi/distributions/openmandriva.py @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: LGPL-2.1+ + +from pathlib import Path +from typing import List + +from mkosi.backend import MkosiState, add_packages, complete_step +from mkosi.distributions import DistributionInstaller +from mkosi.distributions.fedora import Repo, install_packages_dnf, invoke_dnf, setup_dnf + + +class OpenmandrivaInstaller(DistributionInstaller): + @classmethod + def cache_path(cls) -> List[str]: + return ["var/cache/dnf"] + + @classmethod + def install(cls, state: "MkosiState") -> None: + return install_openmandriva(state) + + @classmethod + def remove_packages(cls, state: MkosiState, remove: List[str]) -> None: + invoke_dnf(state, 'remove', remove) + + +@complete_step("Installing OpenMandriva…") +def install_openmandriva(state: MkosiState) -> None: + release = state.config.release.strip("'") + + if release[0].isdigit(): + release_model = "rock" + elif release == "cooker": + release_model = "cooker" + else: + release_model = release + + if state.config.local_mirror: + release_url = f"baseurl={state.config.local_mirror}" + updates_url = None + elif state.config.mirror: + baseurl = f"{state.config.mirror}/{release_model}/repository/{state.config.architecture}/main" + release_url = f"baseurl={baseurl}/release/" + updates_url = f"baseurl={baseurl}/updates/" + else: + baseurl = f"http://mirrors.openmandriva.org/mirrors.php?platform={release_model}&arch={state.config.architecture}&repo=main" + release_url = f"mirrorlist={baseurl}&release=release" + updates_url = f"mirrorlist={baseurl}&release=updates" + + gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-OpenMandriva") + + repos = [Repo("openmandriva", release_url, gpgpath)] + if updates_url is not None: + repos += [Repo("updates", updates_url, gpgpath)] + + setup_dnf(state, repos) + + packages = {*state.config.packages} + # well we may use basesystem here, but that pulls lot of stuff + add_packages(state.config, packages, "basesystem-minimal", "systemd", "dnf") + if not state.do_run_build_script and state.config.bootable: + add_packages(state.config, packages, "systemd-boot", "systemd-cryptsetup", conditional="systemd") + add_packages(state.config, packages, "kernel-release-server", "dracut", "timezone") + if state.config.netdev: + add_packages(state.config, packages, "systemd-networkd", conditional="systemd") + + if state.do_run_build_script: + packages.update(state.config.build_packages) + install_packages_dnf(state, packages)