From 353b0572f67fa49d315dc540b4f6008ea868d628 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Fri, 10 May 2024 12:55:23 +0200 Subject: [PATCH] Chroot for depmod and modinfo modinfo cannot always work with output from newer or different depmod. Specifically, this fixes the case where modinfo sch_fq_codel fails with "module not found" on CentOS Stream 9 images built from Fedora 40. When depmod from Fedora 40 is used, modinfo in the image fails with "module not found". When depmod from inside the image is used, modinfo succeeds as expected. We'd rather not do this but in this case there's no other option. --- mkosi/__init__.py | 10 ++++++++-- mkosi/kmod.py | 6 +++--- mkosi/sandbox.py | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 32fcf2321..724158d92 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -2890,8 +2890,14 @@ def run_depmod(context: Context, *, cache: bool = False) -> None: ) with complete_step(f"Running depmod for {kver}"): - run(["depmod", "--all", "--basedir", "/buildroot", kver], - sandbox=context.sandbox(binary="depmod", mounts=[Mount(context.root, "/buildroot")])) + run( + ["depmod", "--all", kver], + sandbox=context.sandbox( + binary=None, + mounts=[Mount(context.root, "/buildroot")], + extra=chroot_cmd(), + ) + ) def run_sysusers(context: Context) -> None: diff --git a/mkosi/kmod.py b/mkosi/kmod.py index dae94e0c3..fa623367e 100644 --- a/mkosi/kmod.py +++ b/mkosi/kmod.py @@ -10,7 +10,7 @@ from pathlib import Path from mkosi.log import complete_step, log_step from mkosi.run import run -from mkosi.sandbox import Mount, SandboxProtocol, nosandbox +from mkosi.sandbox import Mount, SandboxProtocol, chroot_cmd, nosandbox from mkosi.util import parents_below @@ -94,9 +94,9 @@ def resolve_module_dependencies( for i in range(0, len(nametofile.keys()), 8500): chunk = list(nametofile.keys())[i:i+8500] info += run( - ["modinfo", "--basedir", "/buildroot", "--set-version", kver, "--null", *chunk], + ["modinfo", "--set-version", kver, "--null", *chunk], stdout=subprocess.PIPE, - sandbox=sandbox(binary="modinfo", mounts=[Mount(root, "/buildroot", ro=True)]), + sandbox=sandbox(binary="modinfo", mounts=[Mount(root, "/buildroot", ro=True)], extra=chroot_cmd()), ).stdout.strip() log_step("Calculating required kernel modules and firmware") diff --git a/mkosi/sandbox.py b/mkosi/sandbox.py index b8deabd15..8b7241c22 100644 --- a/mkosi/sandbox.py +++ b/mkosi/sandbox.py @@ -275,7 +275,7 @@ def apivfs_cmd() -> list[PathString]: def chroot_cmd(*, resolve: bool = False, work: bool = False) -> list[PathString]: - workdir = '/buildroot/work' if work else '' + workdir = "/buildroot/work" if work else "" return apivfs_cmd() + [ "sh", "-c", -- 2.47.2