[ovs-dev] [PATCH] rhel: Change depmod configuration
Gregory Rose
gvrose8192 at gmail.com
Fri Jan 26 18:03:53 UTC 2018
On 1/26/2018 5:30 AM, Flavio Leitner wrote:
> On Wed, Jan 24, 2018 at 07:23:06PM -0800, Greg Rose wrote:
>> A previous patch added post install and post uninstall scripts which
>> use the weak-modules utility to make sure that openvswitch kernel
>> modules are copied to the correct kernel directory. While this
>> patch did fix some issues there are two remaining issues we have
>> found.
>>
>> 1) In the case where the OS is running kernel X and the openvswitch
>> kernel modules have been previously installed correctly and are
>> working without a problem and then updating to Kernel X.1 we find
>> that the correct openvswitch kernel module no longer loads.
>> 2) In the case where a kernel module rpm has been built against an
>> older kernel but installed on a newer kernel then the correct
>> openvswitch kernel module will not load.
>>
>> This patch changes the weak-modules parameter to --add-kernel instead
>> of --add-modules. This fixes the problem in case 1. In addition
>> we modify the openvswitch depmod configuration file installed to the
>> /etc/depmod.d directory and prepend a "01" to the name of the file.
>> We then insert the first line of the file with a search path that
>> will find weak-updates first. This change along with the change
>> to the weak-modules utility parameters fixes the problem in case 2.
>>
>> I also modified the kernel module configuration file for both the
>> rhel6 and rhel7/fedora specs to use a common "01openvswitch.conf"
>> file name format.
> Well, we used kmods in the past to provide modules that were not
> shipped with the kernel, so that might be the reason I didn't see
> the depmod config tweaking before. Although it seems we need to take
> care of that in this case, messing with the default search order
> doesn't sound like a good idea to me.
>
> What about this instead? I found that in a couple kmod specs.
>
> override openvswitch * weak-updates/openvswitch
Yes, we are uncomfortable with messing with the default search order as
well but
nothing else seemed to be working. I'll try your suggestion.
>
> This is documented in depmod.d(5)
> [...]
> override modulename kernelversion modulesubdirectory
> This command allows you to override which version of a
> specific module will be used when more than one module sharing the
> same name is processed by the depmod command. It is possible
> to specify one kernel or all kernels using the * wildcard.
> modulesubdirectory is the name of the subdirectory under /lib/modules
> (or other module location) where the target module is
> installed.
>
> For example, it is possible to override the priority of an
> updated test module called kmod by specifying the following command:
> "override kmod * extra". This will ensure that any
> matching module name installed under the extra subdirectory
> within /lib/modules (or other module location) will take priority over
> any likenamed module already provided by the kernel.
>
>
> That seems better because it doesn't depend on the depmod config
> filename (no config processing order issue), it doesn't change
> system's default, or impact possible other kmod or even custom
> configurations other than the specific for this kmod.
We've tried variations of this but no luck so far. But I understand
your concern.
>
> Regarding to change --add-modules to --add-kernel, well, I don't see
> how that is helping. Maybe I am missing something, but every time a
> kernel is installed, it will run weak-modules --add-kernel which
> should create the weak-updates links accordingly, unless the kernel
> is not compatible.
>
> You can verify what the kernel's post install scripts does with this
> command:
> # rpm -q kernel --scripts
>
> You should find this snippet:
> if [ -x /sbin/weak-modules ]
> then
> /sbin/weak-modules --add-kernel 2.6.32-696.18.7.el6.x86_64 || exit $?
> fi
OK, let me check that again as well but we were definitely seeing
situations in which the
--add-modules was not working. The kernel modules were simply not
installed. At all.
But using --add-kernel seemed to fix it. I only found out about the
add-kernel option
while looking at the weak-modules script and it seemed to fix the
situation I was looking at.
I'll re-verify using the rpm -q kernel --scripts command. After some
further investigation I'll
get back with my findings. Maybe not until mid next week though because
I have some other
duties to attend to as well.
I really appreciate your feed back Flavio! Thanks!!!
- Greg
>
> fbl
>
>> Cc: Flavio Leitner <fbl at sysclose.org>
>> Co-authored-by: Gurucharan Shetty <guru at ovn.org>
>> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>
>> ---
>> rhel/openvswitch-kmod-fedora.spec.in | 12 +++++++-----
>> rhel/openvswitch-kmod-rhel6.spec.in | 14 ++++++++------
>> rhel/openvswitch-kmod.files | 2 +-
>> 3 files changed, 16 insertions(+), 12 deletions(-)
>>
>> diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/openvswitch-kmod-fedora.spec.in
>> index c0cd298..ae3a4d8 100644
>> --- a/rhel/openvswitch-kmod-fedora.spec.in
>> +++ b/rhel/openvswitch-kmod-fedora.spec.in
>> @@ -43,13 +43,15 @@ make %{_smp_mflags} -C datapath/linux
>> rm -rf $RPM_BUILD_ROOT
>> make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install
>> mkdir -p $RPM_BUILD_ROOT/etc/depmod.d
>> +
>> +echo "search weak-updates updates extra built-in" >> $RPM_BUILD_ROOT/etc/depmod.d/01openvswitch.conf
>> for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko
>> do
>> modname="$(basename ${module})"
>> echo "override ${modname%.ko} * extra" >> \
>> - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
>> + $RPM_BUILD_ROOT/etc/depmod.d/01openvswitch.conf
>> echo "override ${modname%.ko} * weak-updates" >> \
>> - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
>> + $RPM_BUILD_ROOT/etc/depmod.d/01openvswitch.conf
>> done
>>
>> %clean
>> @@ -64,7 +66,7 @@ if [ -x "/sbin/weak-modules" ]; then
>> for m in openvswitch vport-gre vport-stt vport-geneve \
>> vport-lisp vport-vxlan; do
>> echo "/lib/modules/%{kernel}/extra/$m.ko"
>> - done | /sbin/weak-modules --add-modules
>> + done | /sbin/weak-modules --add-kernel
>> fi
>>
>> %postun
>> @@ -76,14 +78,14 @@ if [ "$1" = 0 ]; then # Erase, not upgrade
>> for m in openvswitch vport-gre vport-stt vport-geneve \
>> vport-lisp vport-vxlan; do
>> echo "/lib/modules/%{kernel}/extra/$m.ko"
>> - done | /sbin/weak-modules --remove-modules
>> + done | /sbin/weak-modules --remove-kernel
>> fi
>> fi
>>
>> %files
>> %defattr(0644,root,root)
>> /lib/modules/%{kernel}/extra/*.ko
>> -/etc/depmod.d/kmod-openvswitch.conf
>> +/etc/depmod.d/01openvswitch.conf
>> %exclude /lib/modules/%{kernel}/modules.*
>>
>> %changelog
>> diff --git a/rhel/openvswitch-kmod-rhel6.spec.in b/rhel/openvswitch-kmod-rhel6.spec.in
>> index c6e6db5..28c7ce1 100644
>> --- a/rhel/openvswitch-kmod-rhel6.spec.in
>> +++ b/rhel/openvswitch-kmod-rhel6.spec.in
>> @@ -62,13 +62,15 @@ for flavor in %flavors_to_build ; do
>> find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \;
>> done
>> install -d %{buildroot}%{_sysconfdir}/depmod.d/
>> +
>> +echo "search extra/openvswitch weak-updates/openvswitch updates extra built-in weak-updates" >> 01%{oname}.conf
>> for module in %{buildroot}/lib/modules/%{kernel_version}/$INSTALL_MOD_DIR/*.ko;
>> do
>> modname="$(basename ${module})"
>> - echo "override ${modname%.ko} * extra/%{oname}" >> %{oname}.conf
>> - echo "override ${modname%.ko} * weak-updates/%{oname}" >> %{oname}.conf
>> + echo "override ${modname%.ko} * extra/%{oname}" >> 01%{oname}.conf
>> + echo "override ${modname%.ko} * weak-updates/%{oname}" >> 01%{oname}.conf
>> done
>> -install -m 644 %{oname}.conf %{buildroot}%{_sysconfdir}/depmod.d/
>> +install -m 644 01%{oname}.conf %{buildroot}%{_sysconfdir}/depmod.d/
>>
>> %post
>> # Ensure that modprobe will find our modules.
>> @@ -79,7 +81,7 @@ if [ -x "/sbin/weak-modules" ]; then
>> for m in openvswitch vport-gre vport-stt vport-geneve \
>> vport-lisp vport-vxlan; do
>> echo "/lib/modules/%{kernel}/extra/$m.ko"
>> - done | /sbin/weak-modules --add-modules
>> + done | /sbin/weak-modules --add-kernel
>> fi
>>
>> %postun
>> @@ -91,13 +93,13 @@ if [ "$1" = 0 ]; then # Erase, not upgrade
>> for m in openvswitch vport-gre vport-stt vport-geneve \
>> vport-lisp vport-vxlan; do
>> echo "/lib/modules/%{kernel}/extra/$m.ko"
>> - done | /sbin/weak-modules --remove-modules
>> + done | /sbin/weak-modules --remove-kernel
>> fi
>> fi
>>
>> %files
>> %defattr(644,root,root)
>> -/etc/depmod.d/%{oname}.conf
>> +/etc/depmod.d/01%{oname}.conf
>>
>> %clean
>> rm -rf $RPM_BUILD_ROOT
>> diff --git a/rhel/openvswitch-kmod.files b/rhel/openvswitch-kmod.files
>> index 357c2e8..49262f3 100644
>> --- a/rhel/openvswitch-kmod.files
>> +++ b/rhel/openvswitch-kmod.files
>> @@ -1,3 +1,3 @@
>> %defattr(644,root,root,755)
>> /lib/modules/%2-%1
>> -/etc/depmod.d/openvswitch.conf
>> +/etc/depmod.d/01openvswitch.conf
>> --
>> 1.8.3.1
>>
>> _______________________________________________
>> dev mailing list
>> dev at openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
More information about the dev
mailing list