Also move is_xxx_distribution() functions into Distribution enum.
from mkosi.btrfs import btrfs_maybe_snapshot_subvolume
from mkosi.config import (
+ Compression,
ConfigFeature,
GenericVersion,
+ ManifestFormat,
MkosiArgs,
MkosiConfig,
MkosiConfigParser,
+ OutputFormat,
SecureBootSignTool,
Verb,
)
from mkosi.state import MkosiState
from mkosi.types import PathString
from mkosi.util import (
- Compression,
InvokingUser,
- ManifestFormat,
- OutputFormat,
flatten,
flock,
format_bytes,
format_rlimit,
- is_apt_distribution,
- is_portage_distribution,
scopedenv,
try_import,
)
# Debian/Ubuntu do not compress their kernel modules, so we compress the initramfs instead. Note that
# this is not ideal since the compressed kernel modules will all be decompressed on boot which
# requires significant memory.
- if is_apt_distribution(state.config.distribution):
+ if state.config.distribution.is_apt_distribution():
maybe_compress(state, Compression.zst, kmods, kmods)
return kmods
"--format", "cpio",
"--package", "systemd",
"--package", "util-linux",
- *(["--package", "udev"] if not is_portage_distribution(state.config.distribution) else []),
+ *(["--package", "udev"] if not state.config.distribution.is_portage_distribution() else []),
"--package", "kmod",
- *(["--package", "dmsetup"] if is_apt_distribution(state.config.distribution) else []),
+ *(["--package", "dmsetup"] if state.config.distribution.is_apt_distribution() else []),
"--output", f"{state.config.output}-initrd",
*(["--image-version", state.config.image_version] if state.config.image_version else []),
"--make-initrd", "yes",
from mkosi.pager import page
from mkosi.run import run
from mkosi.util import (
- Compression,
Distribution,
InvokingUser,
- ManifestFormat,
- OutputFormat,
chdir,
detect_distribution,
flatten,
- is_apt_distribution,
- is_dnf_distribution,
qemu_check_kvm_support,
qemu_check_vsock_support,
)
return str(self.value).lower()
+class OutputFormat(str, enum.Enum):
+ directory = "directory"
+ tar = "tar"
+ cpio = "cpio"
+ disk = "disk"
+ none = "none"
+
+
+class ManifestFormat(str, enum.Enum):
+ json = "json" # the standard manifest in json format
+ changelog = "changelog" # human-readable text file with package changelogs
+
+
+class Compression(enum.Enum):
+ none = None
+ zst = "zst"
+ xz = "xz"
+ bz2 = "bz2"
+ gz = "gz"
+ lz4 = "lz4"
+ lzma = "lzma"
+
+ def __str__(self) -> str:
+ return str(self.value).lower()
+
+ def __bool__(self) -> bool:
+ return bool(self.value)
+
+
def parse_boolean(s: str) -> bool:
"Parse 1/true/yes/y/t/on as true and 0/false/no/n/f/off/None as false"
s_l = s.lower()
die("Sorry, the host machine does not support vsock")
if args.repositories and not (
- is_dnf_distribution(args.distribution) or
- is_apt_distribution(args.distribution) or
+ args.distribution.is_dnf_distribution() or
+ args.distribution.is_apt_distribution() or
args.distribution == Distribution.arch
):
die("Sorry, the --repositories option is only supported on pacman, dnf and apt based distributions")
from textwrap import dedent
from typing import IO, Any, Optional
-from mkosi.config import MkosiConfig
+from mkosi.config import ManifestFormat, MkosiConfig
from mkosi.run import run
-from mkosi.util import Distribution, ManifestFormat, PackageType
+from mkosi.util import Distribution, PackageType
@dataclasses.dataclass
from mkosi.architecture import Architecture
from mkosi.btrfs import btrfs_maybe_snapshot_subvolume
-from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig
+from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig, OutputFormat
from mkosi.log import die
from mkosi.remove import unlink_try_hard
from mkosi.run import MkosiAsyncioThread, run, spawn
from mkosi.types import PathString
from mkosi.util import (
Distribution,
- OutputFormat,
format_bytes,
qemu_check_kvm_support,
qemu_check_vsock_support,
def is_centos_variant(self) -> bool:
return self in (Distribution.centos, Distribution.alma, Distribution.rocky)
+ def is_dnf_distribution(self) -> bool:
+ return self in (
+ Distribution.fedora,
+ Distribution.mageia,
+ Distribution.centos,
+ Distribution.openmandriva,
+ Distribution.rocky,
+ Distribution.alma,
+ )
-class Compression(enum.Enum):
- none = None
- zst = "zst"
- xz = "xz"
- bz2 = "bz2"
- gz = "gz"
- lz4 = "lz4"
- lzma = "lzma"
+ def is_apt_distribution(self) -> bool:
+ return self in (Distribution.debian, Distribution.ubuntu)
- def __str__(self) -> str:
- return str(self.value).lower()
- def __bool__(self) -> bool:
- return bool(self.value)
+ def is_portage_distribution(self) -> bool:
+ return self in (Distribution.gentoo,)
def dictify(f: Callable[..., Iterator[tuple[T, V]]]) -> Callable[..., dict[T, V]]:
return d, version_id
-def is_dnf_distribution(d: Distribution) -> bool:
- return d in (
- Distribution.fedora,
- Distribution.mageia,
- Distribution.centos,
- Distribution.openmandriva,
- Distribution.rocky,
- Distribution.alma,
- )
-
-
-def is_apt_distribution(d: Distribution) -> bool:
- return d in (Distribution.debian, Distribution.ubuntu)
-
-
-def is_portage_distribution(d: Distribution) -> bool:
- return d in (Distribution.gentoo,)
-
-
-class OutputFormat(str, enum.Enum):
- directory = "directory"
- tar = "tar"
- cpio = "cpio"
- disk = "disk"
- none = "none"
-
-
-class ManifestFormat(str, enum.Enum):
- json = "json" # the standard manifest in json format
- changelog = "changelog" # human-readable text file with package changelogs
-
-
-
def format_rlimit(rlimit: int) -> str:
limits = resource.getrlimit(rlimit)
soft = "infinity" if limits[0] == resource.RLIM_INFINITY else str(limits[0])
import pytest
-from mkosi.config import GenericVersion
+from mkosi.config import Compression, GenericVersion
+
+
+def test_compression_enum_creation() -> None:
+ assert Compression(None) == Compression.none
+ assert Compression("zst") == Compression.zst
+ assert Compression("xz") == Compression.xz
+ assert Compression("bz2") == Compression.bz2
+ assert Compression("gz") == Compression.gz
+ assert Compression("lz4") == Compression.lz4
+ assert Compression("lzma") == Compression.lzma
+
+
+def test_compression_enum_bool() -> None:
+ assert bool(Compression.none) == False
+ assert bool(Compression.zst) == True
+ assert bool(Compression.xz) == True
+ assert bool(Compression.bz2) == True
+ assert bool(Compression.gz) == True
+ assert bool(Compression.lz4) == True
+ assert bool(Compression.lzma) == True
+
+
+def test_compression_enum_str() -> None:
+ assert str(Compression.none) == "none"
+ assert str(Compression.zst) == "zst"
+ assert str(Compression.xz) == "xz"
+ assert str(Compression.bz2) == "bz2"
+ assert str(Compression.gz) == "gz"
+ assert str(Compression.lz4) == "lz4"
+ assert str(Compression.lzma) == "lzma"
def test_generic_version_systemd() -> None:
import pytest
-from mkosi.config import MkosiArgs, MkosiConfig, MkosiConfigParser, Verb
-from mkosi.util import Compression, Distribution
+from mkosi.config import Compression, MkosiArgs, MkosiConfig, MkosiConfigParser, Verb
+from mkosi.util import Distribution
@contextmanager
# SPDX-License-Identifier: LGPL-2.1+
-from mkosi.util import Compression, Distribution, PackageType
+from mkosi.util import Distribution, PackageType
def test_distribution() -> None:
assert str(Distribution.fedora) == "fedora"
-def test_compression_enum_creation() -> None:
- assert Compression(None) == Compression.none
- assert Compression("zst") == Compression.zst
- assert Compression("xz") == Compression.xz
- assert Compression("bz2") == Compression.bz2
- assert Compression("gz") == Compression.gz
- assert Compression("lz4") == Compression.lz4
- assert Compression("lzma") == Compression.lzma
-
-
-def test_compression_enum_bool() -> None:
- assert bool(Compression.none) == False
- assert bool(Compression.zst) == True
- assert bool(Compression.xz) == True
- assert bool(Compression.bz2) == True
- assert bool(Compression.gz) == True
- assert bool(Compression.lz4) == True
- assert bool(Compression.lzma) == True
-
-
-def test_compression_enum_str() -> None:
- assert str(Compression.none) == "none"
- assert str(Compression.zst) == "zst"
- assert str(Compression.xz) == "xz"
- assert str(Compression.bz2) == "bz2"
- assert str(Compression.gz) == "gz"
- assert str(Compression.lz4) == "lz4"
- assert str(Compression.lzma) == "lzma"