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 (
)
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
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,
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
# 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
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)