From fa7a1ba13a16fe4253aa321fc237bb92ee35546e Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Mon, 25 Sep 2023 13:00:07 +0200 Subject: [PATCH] Introduce find_binary() Let's introduce a more generic version of find_grub_binary() and implement find_grub_binary() using it. --- mkosi/__init__.py | 18 +++++++++--------- mkosi/run.py | 6 ++++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 757974d54..7b2a88855 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -46,7 +46,14 @@ from mkosi.mounts import mount, mount_overlay, mount_passwd, mount_usr from mkosi.pager import page from mkosi.partition import Partition, finalize_root, finalize_roothash from mkosi.qemu import copy_ephemeral, run_qemu, run_ssh -from mkosi.run import become_root, bwrap, chroot_cmd, init_mount_namespace, run +from mkosi.run import ( + become_root, + bwrap, + chroot_cmd, + find_binary, + init_mount_namespace, + run, +) from mkosi.state import MkosiState from mkosi.tree import copy_tree, install_tree, move_tree, rmtree from mkosi.types import _FILE, CompletedProcess, PathString @@ -604,15 +611,8 @@ def find_grub_bios_directory(state: MkosiState) -> Optional[Path]: def find_grub_binary(state: MkosiState, binary: str) -> Optional[Path]: - path = ":".join(os.fspath(p) for p in [state.root / "usr/bin", state.root / "usr/sbin"]) - assert "grub" in binary and "grub2" not in binary - - path = shutil.which(binary, path=path) or shutil.which(binary.replace("grub", "grub2"), path=path) - if not path: - return None - - return Path("/") / Path(path).relative_to(state.root) + return find_binary(binary, state.root) or find_binary(binary.replace("grub", "grub2"), state.root) def find_grub_prefix(state: MkosiState) -> Optional[str]: diff --git a/mkosi/run.py b/mkosi/run.py index dd67c2d8e..d4b5595fc 100644 --- a/mkosi/run.py +++ b/mkosi/run.py @@ -11,6 +11,7 @@ import os import pwd import queue import shlex +import shutil import signal import subprocess import sys @@ -273,6 +274,11 @@ def have_effective_cap(capability: Capability) -> bool: return (int(hexcap, 16) & (1 << capability.value)) != 0 +def find_binary(name: str, root: Optional[Path] = None) -> Optional[Path]: + path = ":".join(os.fspath(p) for p in [root / "usr/bin", root / "usr/sbin"]) if root else os.environ["PATH"] + return Path("/") / Path(binary).relative_to(root or "/") if (binary := shutil.which(name, path=path)) else None + + def bwrap( cmd: Sequence[PathString], *, -- 2.47.3