]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
test: Test directory image boot in qemu if virtiofsd is available
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 1 Dec 2023 13:29:50 +0000 (14:29 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 1 Dec 2023 13:29:50 +0000 (14:29 +0100)
mkosi/qemu.py
tests/__init__.py
tests/test_boot.py

index a928cb19caba36b8a67a42a89d6d01c4b0d69ff3..16001fd9fc6d8ce5ed585f3085167a49d668ff03 100644 (file)
@@ -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,
index a51ceae0b60462da289f24299064e6c240e6e30a..598d793be48ba70f7482cb859003b055c7113bed 100644 (file)
@@ -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
index 2c7bd769c1b484136e66c63fa62f6bed8c8cd5a8..d300b92f6e2f737053c72f9f48433d4a0b6912f7 100644 (file)
@@ -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)