Message ID | 20230711153457.29497-1-msuchanek@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | depmod: Handle installing modules under a prefix | expand |
On 11. 07. 23, 17:34, Michal Suchanek wrote: > Some distributions aim at not shipping any files in / ustside of usr. > > The path under which kernel modules are instaleld is hardcoded to /lib > which conflicts with this goal. > > When kmod provides the config command use it to determine the correct > module installation prefix. > > On kmod that does not provide the command / is used as before. > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > Makefile | 4 +++- > scripts/depmod.sh | 8 ++++---- > 2 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/Makefile b/Makefile > index 47690c28456a..b05d696f06bd 100644 > --- a/Makefile > +++ b/Makefile > @@ -1165,7 +1165,9 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE) > # makefile but the argument can be passed to make if needed. > # > > -MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) > +export KERNEL_MODULE_PREFIX := $(shell kmod config | jq -r .module_prefix) echo -e 'KERNEL_MODULE_PREFIX := $(shell kmod config | jq -r .module_prefix)\nall:'|make -f - invalid command 'config' parse error: Invalid numeric literal at line 1, column 5 I think you should pipe kmod's 2> /dev/null to support older kmod. Ah, but you'd need 2> /dev/null for jq too. That would not be good as jq might not be installed and a user wouldn't see the error. So instead, I would do: $(shell kmod config &> /dev/null && kmod config | jq -r .module_prefix) thanks,
On Wed, Jul 12, 2023 at 07:47:13AM +0200, Jiri Slaby wrote: > On 11. 07. 23, 17:34, Michal Suchanek wrote: > > Some distributions aim at not shipping any files in / ustside of usr. > > > > The path under which kernel modules are instaleld is hardcoded to /lib > > which conflicts with this goal. > > > > When kmod provides the config command use it to determine the correct > > module installation prefix. > > > > On kmod that does not provide the command / is used as before. > > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > --- > > Makefile | 4 +++- > > scripts/depmod.sh | 8 ++++---- > > 2 files changed, 7 insertions(+), 5 deletions(-) > > > > diff --git a/Makefile b/Makefile > > index 47690c28456a..b05d696f06bd 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -1165,7 +1165,9 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE) > > # makefile but the argument can be passed to make if needed. > > # > > -MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) > > +export KERNEL_MODULE_PREFIX := $(shell kmod config | jq -r .module_prefix) > > echo -e 'KERNEL_MODULE_PREFIX := $(shell kmod config | jq -r > .module_prefix)\nall:'|make -f - > invalid command 'config' > parse error: Invalid numeric literal at line 1, column 5 > > I think you should pipe kmod's 2> /dev/null to support older kmod. Ah, but > you'd need 2> /dev/null for jq too. That would not be good as jq might not > be installed and a user wouldn't see the error. So instead, I would do: > > $(shell kmod config &> /dev/null && kmod config | jq -r .module_prefix) Yes, that sounds reasonable. Also would cover the potential problem of kmod changing the error output into something that is a valid JSON in the future. Thanks Michal
diff --git a/Makefile b/Makefile index 47690c28456a..b05d696f06bd 100644 --- a/Makefile +++ b/Makefile @@ -1165,7 +1165,9 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE) # makefile but the argument can be passed to make if needed. # -MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) +export KERNEL_MODULE_PREFIX := $(shell kmod config | jq -r .module_prefix) + +MODLIB = $(INSTALL_MOD_PATH)$(KERNEL_MODULE_PREFIX)/lib/modules/$(KERNELRELEASE) export MODLIB PHONY += prepare0 diff --git a/scripts/depmod.sh b/scripts/depmod.sh index 3643b4f896ed..88ac79056153 100755 --- a/scripts/depmod.sh +++ b/scripts/depmod.sh @@ -27,16 +27,16 @@ fi # numbers, so we cheat with a symlink here depmod_hack_needed=true tmp_dir=$(mktemp -d ${TMPDIR:-/tmp}/depmod.XXXXXX) -mkdir -p "$tmp_dir/lib/modules/$KERNELRELEASE" +mkdir -p "$tmp_dir$KERNEL_MODULE_PREFIX/lib/modules/$KERNELRELEASE" if "$DEPMOD" -b "$tmp_dir" $KERNELRELEASE 2>/dev/null; then - if test -e "$tmp_dir/lib/modules/$KERNELRELEASE/modules.dep" -o \ - -e "$tmp_dir/lib/modules/$KERNELRELEASE/modules.dep.bin"; then + if test -e "$tmp_dir$KERNEL_MODULE_PREFIX/lib/modules/$KERNELRELEASE/modules.dep" -o \ + -e "$tmp_dir$KERNEL_MODULE_PREFIX/lib/modules/$KERNELRELEASE/modules.dep.bin"; then depmod_hack_needed=false fi fi rm -rf "$tmp_dir" if $depmod_hack_needed; then - symlink="$INSTALL_MOD_PATH/lib/modules/99.98.$KERNELRELEASE" + symlink="$INSTALL_MOD_PATH$KERNEL_MODULE_PREFIX/lib/modules/99.98.$KERNELRELEASE" ln -s "$KERNELRELEASE" "$symlink" KERNELRELEASE=99.98.$KERNELRELEASE fi
Some distributions aim at not shipping any files in / ustside of usr. The path under which kernel modules are instaleld is hardcoded to /lib which conflicts with this goal. When kmod provides the config command use it to determine the correct module installation prefix. On kmod that does not provide the command / is used as before. Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- Makefile | 4 +++- scripts/depmod.sh | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-)