from mkosi.installer import PackageManager
from mkosi.installer.pacman import Pacman, PacmanRepository
from mkosi.log import die
-from mkosi.util import listify, sort_packages
+from mkosi.util import sort_packages
class Installer(DistributionInstaller):
@classmethod
def setup(cls, context: Context) -> None:
- Pacman.setup(context, cls.repositories(context))
+ Pacman.setup(context, list(cls.repositories(context)))
@classmethod
def install(cls, context: Context) -> None:
Pacman.invoke(context, "--remove", ["--nosave", "--recursive", *packages], apivfs=True)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[PacmanRepository]:
if context.config.local_mirror:
yield PacmanRepository("core", context.config.local_mirror)
from mkosi.installer.dnf import Dnf
from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, setup_rpm
from mkosi.log import die
-from mkosi.util import listify
class Installer(fedora.Installer):
@classmethod
def setup(cls, context: Context) -> None:
- Dnf.setup(context, cls.repositories(context), filelists=False)
+ Dnf.setup(context, list(cls.repositories(context)), filelists=False)
setup_rpm(context, dbpath="/var/lib/rpm")
@classmethod
cls.install_packages(context, ["filesystem", "azurelinux-release"], apivfs=False)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
gpgurls = (
find_rpm_gpgkey(
from mkosi.installer.dnf import Dnf
from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, setup_rpm
from mkosi.log import die
-from mkosi.util import listify
from mkosi.versioncomp import GenericVersion
CENTOS_SIG_REPO_PRIORITY = 50
if GenericVersion(context.config.release) <= 8:
die(f"{cls.pretty_name()} Stream 8 or earlier variants are not supported")
- Dnf.setup(context, cls.repositories(context))
+ Dnf.setup(context, list(cls.repositories(context)))
(context.sandbox_tree / "etc/dnf/vars/stream").write_text(f"{context.config.release}-stream\n")
setup_rpm(context, dbpath=cls.dbpath(context))
)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
if context.config.local_mirror:
yield from cls.repository_variants(context, "AppStream")
from mkosi.log import die
from mkosi.run import run
from mkosi.sandbox import umask
-from mkosi.util import listify
class Installer(DistributionInstaller):
def package_manager(cls, config: Config) -> type[PackageManager]:
return Apt
- @staticmethod
- @listify
- def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]:
+ @classmethod
+ def repositories(cls, context: Context, local: bool = True) -> Iterable[AptRepository]:
types = ("deb", "deb-src")
components = ("main", *context.config.repositories)
@classmethod
def setup(cls, context: Context) -> None:
- Apt.setup(context, cls.repositories(context))
+ Apt.setup(context, list(cls.repositories(context)))
@classmethod
def install(cls, context: Context) -> None:
from mkosi.installer.dnf import Dnf
from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, setup_rpm
from mkosi.log import die
-from mkosi.util import listify, startswith, tuplify
+from mkosi.util import startswith, tuplify
@tuplify
@classmethod
def setup(cls, context: Context) -> None:
- Dnf.setup(context, cls.repositories(context), filelists=False)
+ Dnf.setup(context, list(cls.repositories(context)), filelists=False)
setup_rpm(context)
@classmethod
Dnf.invoke(context, "remove", packages, apivfs=True)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
gpgurls = find_fedora_rpm_gpgkeys(context)
from mkosi.distributions import Distribution, debian
from mkosi.installer.apt import AptRepository
from mkosi.log import die
-from mkosi.util import listify
class Installer(debian.Installer):
def default_tools_tree_distribution(cls) -> Distribution:
return Distribution.kali
- @staticmethod
- @listify
- def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]:
+ @classmethod
+ def repositories(cls, context: Context, local: bool = True) -> Iterable[AptRepository]:
if context.config.local_mirror and local:
yield AptRepository(
types=("deb",),
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
class Installer(fedora.Installer):
cls.install_packages(context, ["filesystem"], apivfs=False)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
gpgurls = (
find_rpm_gpgkey(
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
class Installer(fedora.Installer):
cls.install_packages(context, ["filesystem"], apivfs=False)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
mirror = context.config.mirror or "http://mirror.openmandriva.org"
from mkosi.log import die
from mkosi.mounts import finalize_crypto_mounts
from mkosi.run import run
-from mkosi.util import listify, sort_packages
+from mkosi.util import sort_packages
class Installer(DistributionInstaller):
def setup(cls, context: Context) -> None:
zypper = context.config.find_binary("zypper")
if zypper:
- Zypper.setup(context, cls.repositories(context))
+ Zypper.setup(context, list(cls.repositories(context)))
else:
- Dnf.setup(context, cls.repositories(context))
+ Dnf.setup(context, list(cls.repositories(context)))
setup_rpm(context)
Dnf.invoke(context, "remove", packages, apivfs=True)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
if context.config.local_mirror:
yield RpmRepository(id="local-mirror", url=f"baseurl={context.config.local_mirror}", gpgurls=())
from mkosi.distributions import centos, join_mirror
from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import die
-from mkosi.util import listify
class Installer(centos.Installer):
)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
yield from cls.repository_variants(context, "baseos")
yield from cls.repository_variants(context, "appstream")
from mkosi.context import Context
from mkosi.distributions import centos, join_mirror
from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
-from mkosi.util import listify
class Installer(centos.Installer):
)
@classmethod
- @listify
def repositories(cls, context: Context) -> Iterable[RpmRepository]:
yield from cls.repository_variants(context, "baseos")
yield from cls.repository_variants(context, "appstream")
from mkosi.context import Context
from mkosi.distributions import Distribution, debian
from mkosi.installer.apt import AptRepository
-from mkosi.util import listify
class Installer(debian.Installer):
def default_tools_tree_distribution(cls) -> Distribution:
return Distribution.debian
- @staticmethod
- @listify
- def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]:
+ @classmethod
+ def repositories(cls, context: Context, local: bool = True) -> Iterable[AptRepository]:
types = ("deb", "deb-src")
# From kinetic onwards, the usr-is-merged package is available in universe and is required by
import dataclasses
import textwrap
-from collections.abc import Iterable, Sequence
+from collections.abc import Sequence
from pathlib import Path
from typing import Optional
}
@classmethod
- def setup(cls, context: Context, repos: Iterable[AptRepository]) -> None:
+ def setup(cls, context: Context, repositories: Sequence[AptRepository]) -> None:
(context.sandbox_tree / "etc/apt").mkdir(exist_ok=True, parents=True)
(context.sandbox_tree / "etc/apt/apt.conf.d").mkdir(exist_ok=True, parents=True)
(context.sandbox_tree / "etc/apt/preferences.d").mkdir(exist_ok=True, parents=True)
sources = context.sandbox_tree / "etc/apt/sources.list.d/mkosi.sources"
if not sources.exists():
- for repo in repos:
+ for repo in repositories:
if repo.signedby and not repo.signedby.exists():
die(
f"Keyring for repo {repo.url} not found at {repo.signedby}",
)
with sources.open("w") as f:
- for repo in repos:
+ for repo in repositories:
f.write(str(repo))
@classmethod
# SPDX-License-Identifier: LGPL-2.1-or-later
import textwrap
-from collections.abc import Iterable, Sequence
+from collections.abc import Sequence
from pathlib import Path
from mkosi.config import Cacheonly, Config
}
@classmethod
- def setup(cls, context: Context, repositories: Iterable[RpmRepository], filelists: bool = True) -> None:
+ def setup(cls, context: Context, repositories: Sequence[RpmRepository], filelists: bool = True) -> None:
(context.sandbox_tree / "etc/dnf/vars").mkdir(parents=True, exist_ok=True)
(context.sandbox_tree / "etc/yum.repos.d").mkdir(parents=True, exist_ok=True)
import dataclasses
import shutil
import textwrap
-from collections.abc import Iterable, Sequence
+from collections.abc import Sequence
from pathlib import Path
from mkosi.config import Config
return mounts
@classmethod
- def setup(cls, context: Context, repositories: Iterable[PacmanRepository]) -> None:
+ def setup(cls, context: Context, repositories: Sequence[PacmanRepository]) -> None:
if context.config.repository_key_check:
sig_level = "Required DatabaseOptional"
else:
# SPDX-License-Identifier: LGPL-2.1-or-later
import hashlib
import textwrap
-from collections.abc import Iterable, Sequence
+from collections.abc import Sequence
from pathlib import Path
from mkosi.config import Config, yes_no
}
@classmethod
- def setup(cls, context: Context, repos: Iterable[RpmRepository]) -> None:
+ def setup(cls, context: Context, repositories: Sequence[RpmRepository]) -> None:
config = context.sandbox_tree / "etc/zypp/zypp.conf"
config.parent.mkdir(exist_ok=True, parents=True)
if not repofile.exists():
repofile.parent.mkdir(exist_ok=True, parents=True)
with repofile.open("w") as f:
- for repo in repos:
+ for repo in repositories:
# zypper uses the repo ID as its cache key which is unsafe so add a hash of the url used to it to
# make sure a unique cache is used for each repository. We use roughly the same algorithm here that
# dnf uses as well.
return functools.update_wrapper(wrapper, f)
-def listify(f: Callable[..., Iterable[T]]) -> Callable[..., list[T]]:
- def wrapper(*args: Any, **kwargs: Any) -> list[T]:
- return list(f(*args, **kwargs))
-
- return functools.update_wrapper(wrapper, f)
-
-
def tuplify(f: Callable[..., Iterable[T]]) -> Callable[..., tuple[T, ...]]:
def wrapper(*args: Any, **kwargs: Any) -> tuple[T, ...]:
return tuple(f(*args, **kwargs))