From: Daan De Meyer Date: Fri, 1 Dec 2023 13:29:50 +0000 (+0100) Subject: test: Test directory image boot in qemu if virtiofsd is available X-Git-Tag: v20~115^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7eb3c99b187d524b2c09dab62bc9851c4fffca06;p=thirdparty%2Fmkosi.git test: Test directory image boot in qemu if virtiofsd is available --- diff --git a/mkosi/qemu.py b/mkosi/qemu.py index a928cb19c..16001fd9f 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -16,6 +16,7 @@ import tempfile import uuid from collections.abc import Iterator, Mapping from pathlib import Path +from typing import Optional from mkosi.architecture import Architecture from mkosi.config import ( @@ -28,7 +29,7 @@ from mkosi.config import ( ) from mkosi.log import die from mkosi.partition import finalize_root, find_partitions -from mkosi.run import MkosiAsyncioThread, run, spawn +from mkosi.run import MkosiAsyncioThread, find_binary, run, spawn from mkosi.tree import copy_tree, rmtree from mkosi.types import PathString from mkosi.util import INVOKING_USER, StrEnum @@ -240,16 +241,24 @@ def start_swtpm() -> Iterator[Path]: proc.wait() +def find_virtiofsd() -> Optional[Path]: + if p := find_binary("virtiofsd"): + return p + + if (p := Path("/usr/libexec/virtiofsd")).exists(): + return p + + if (p := Path("/usr/lib/virtiofsd")).exists(): + return p + + return None + + @contextlib.contextmanager def start_virtiofsd(directory: Path, *, uidmap: bool) -> Iterator[Path]: - virtiofsd = shutil.which("virtiofsd") + virtiofsd = find_virtiofsd() if virtiofsd is None: - if Path("/usr/libexec/virtiofsd").exists(): - virtiofsd = "/usr/libexec/virtiofsd" - elif Path("/usr/lib/virtiofsd").exists(): - virtiofsd = "/usr/lib/virtiofsd" - else: - die("virtiofsd must be installed to use RuntimeMounts= with mkosi qemu") + die("virtiofsd must be installed to boot directory images or use RuntimeMounts= with mkosi qemu") cmdline: list[PathString] = [ virtiofsd, diff --git a/tests/__init__.py b/tests/__init__.py index a51ceae0b..598d793be 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -3,8 +3,8 @@ import os import tempfile from collections.abc import Sequence -from typing import Optional from types import TracebackType +from typing import Optional from mkosi.distributions import Distribution, detect_distribution from mkosi.log import die diff --git a/tests/test_boot.py b/tests/test_boot.py index 2c7bd769c..d300b92f6 100644 --- a/tests/test_boot.py +++ b/tests/test_boot.py @@ -1,10 +1,12 @@ # SPDX-License-Identifier: LGPL-2.1+ import os + import pytest from mkosi.config import OutputFormat from mkosi.distributions import Distribution +from mkosi.qemu import find_virtiofsd from . import Image @@ -44,7 +46,10 @@ def test_boot(format: OutputFormat) -> None: if image.distribution == Distribution.rhel_ubi: return - if format in (OutputFormat.directory, OutputFormat.tar): + if format == OutputFormat.tar: + return + + if format == OutputFormat.directory and not find_virtiofsd(): return image.qemu(options=options)