if state.config.bootable == ConfigFeature.disabled:
return
+ outputs = (
+ "modules.dep",
+ "modules.dep.bin",
+ "modules.symbols",
+ "modules.symbols.bin",
+ )
+
+ filters = state.config.kernel_modules_include or state.config.kernel_modules_exclude
+
for kver, _ in gen_kernel_images(state):
+ if not filters and all((state.root / "usr/lib/modules" / kver / o).exists() for o in outputs):
+ continue
+
process_kernel_modules(
state.root, kver,
state.config.kernel_modules_include,
)
with complete_step(f"Running depmod for {kver}"):
- run(["depmod", "--all", "--basedir", state.root, kver])
+ bwrap(chroot_cmd(state.root) + ["depmod", "--all", kver])
def run_sysusers(state: MkosiState) -> None:
from pathlib import Path
from mkosi.log import complete_step, log_step
-from mkosi.run import run
+from mkosi.run import bwrap, chroot_cmd
def filter_kernel_modules(root: Path, kver: str, include: Sequence[str], exclude: Sequence[str]) -> list[Path]:
# We could run modinfo once for each module but that's slow. Luckily we can pass multiple modules to
# modinfo and it'll process them all in a single go. We get the modinfo for all modules to build two maps
# that map the path of the module to its module dependencies and its firmware dependencies respectively.
- info = run(["modinfo", "--basedir", root, "--set-version", kver, "--null", *nametofile.keys(), *builtin],
- stdout=subprocess.PIPE).stdout
+ info = bwrap(chroot_cmd(root) + ["modinfo", "--set-version", kver, "--null", *nametofile.keys(), *builtin],
+ stdout=subprocess.PIPE).stdout
log_step("Calculating required kernel modules and firmware")
scripts: Mapping[str, Sequence[PathString]] = {},
env: Mapping[str, str] = {},
stdin: _FILE = None,
+ stdout: _FILE = None,
input: Optional[str] = None,
) -> CompletedProcess:
cmdline: list[PathString] = [
]
try:
- result = run([*cmdline, *cmd], env=env, log=False, stdin=stdin, input=input)
+ result = run([*cmdline, *cmd], env=env, log=False, stdin=stdin, stdout=stdout, input=input)
except subprocess.CalledProcessError as e:
if log:
logging.error(f"\"{shlex.join(os.fspath(s) for s in cmd)}\" returned non-zero exit code {e.returncode}.")