[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