Re: [PATCH kmod v4 4/4] libkmod, depmod, modprobe: Make directory for kernel modules configurable
From: Jan Engelhardt <hidden>
Date: 2023-07-18 09:41:47
Also in:
linux-kbuild, lkml
Subsystem:
the rest · Maintainer:
Linus Torvalds
On Tuesday 2023-07-18 10:43, Michal Suchánek wrote:
quoted
quoted
With this distributions that do not want to ship files in /lib can also move kernel modules to /usr while others can keep them in /lib.This patch breaks kernel builds/installation / bisecting [when the system has a kmod ./configure'd --with-module-directory=/usr/lib/modules]It might be nice to provide backwads compatibility with earlier configurations. However, if it comes at the cost of making the implementation more complex and future maintenance more difficult it might not be such a great idea. So far I have not seen a proposal how to do it nicely.
diff --git a/configure.ac b/configure.ac
index a195c8e..7fde927 100644
--- a/configure.ac
+++ b/configure.ac@@ -84,11 +84,7 @@ AC_ARG_WITH([rootlibdir], [], [with_rootlibdir=$libdir]) AC_SUBST([rootlibdir], [$with_rootlibdir]) -# Ideally this would be $prefix/lib/modules but default to /lib/modules for compatibility with earlier versions -AC_ARG_WITH([module_directory], - AS_HELP_STRING([--with-module-directory=DIR], [directory in which to look for kernel modules - typically '/lib/modules' or '${prefix}/lib/modules']), - [], [with_module_directory=/lib/modules]) -AC_SUBST([module_directory], [$with_module_directory]) +AC_SUBST([module_directory], [/lib/modules]) AC_ARG_WITH([zstd], AS_HELP_STRING([--with-zstd], [handle Zstandard-compressed modules @<:@default=disabled@:>@]),
diff --git a/libkmod/libkmod-internal.h b/libkmod/libkmod-internal.h
index 4a4af58..e2f9c95 100644
--- a/libkmod/libkmod-internal.h
+++ b/libkmod/libkmod-internal.h@@ -199,3 +199,5 @@ void kmod_module_signature_info_free(struct kmod_signature_info *sig_info) __att /* libkmod-builtin.c */ ssize_t kmod_builtin_get_modinfo(struct kmod_ctx *ctx, const char *modname, char ***modinfo) __attribute__((nonnull(1, 2, 3))); + +extern const char *dirname_default_prefix;
diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
index d2ed874..b426cde 100644
--- a/libkmod/libkmod.c
+++ b/libkmod/libkmod.c@@ -209,7 +209,7 @@ static int log_priority(const char *priority) return 0; } -static const char *dirname_default_prefix = MODULE_DIRECTORY; +const char *dirname_default_prefix = MODULE_DIRECTORY; static char *get_kernel_release(const char *dirname) {
diff --git a/tools/depmod.c b/tools/depmod.c
index 22bc1d8..929060f 100644
--- a/tools/depmod.c
+++ b/tools/depmod.c@@ -65,6 +65,7 @@ static const struct option cmdopts[] = { { "quick", no_argument, 0, 'A' }, { "basedir", required_argument, 0, 'b' }, { "outdir", required_argument, 0, 'o' }, + { "modulesdir", required_argument, 0, 'M' }, { "config", required_argument, 0, 'C' }, { "symvers", required_argument, 0, 'E' }, { "filesyms", required_argument, 0, 'F' },
@@ -2943,6 +2944,9 @@ static int do_depmod(int argc, char *argv[]) free(out_root); out_root = path_make_absolute_cwd(optarg); break; + case 'M': + dirname_default_prefix = optarg; + break; case 'C': { size_t bytes = sizeof(char *) * (n_config_paths + 2); void *tmp = realloc(config_paths, bytes);