]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Introduce find_binary()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 25 Sep 2023 11:00:07 +0000 (13:00 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 25 Sep 2023 12:01:15 +0000 (14:01 +0200)
Let's introduce a more generic version of find_grub_binary() and
implement find_grub_binary() using it.

mkosi/__init__.py
mkosi/run.py

index 757974d543ba924dd3ca17006f5075ce6824cc6a..7b2a888556f2f4e9d7d1be9c2f7e5b51054edc2e 100644 (file)
@@ -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]:
index dd67c2d8e0fd882b9def07ecea6fb10989fc108b..d4b5595fc7ebcdfd7cafb70dc322d91b8147e23e 100644 (file)
@@ -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],
     *,