diff mbox series

[ovs-dev,v5] rhel: support kmod build against multiple 7.2 kernels, rhel6

Message ID 1533158768-37290-1-git-send-email-martinxu9.ovs@gmail.com
State Superseded
Headers show
Series [ovs-dev,v5] rhel: support kmod build against multiple 7.2 kernels, rhel6 | expand

Commit Message

Martin Xu Aug. 1, 2018, 9:26 p.m. UTC
This patch extends commit 89dd5819cf18 (rhel: support kmod-openvswitch
build against multiple kernels, rhel6) to support building kmod RPMs
with multiple minor revisions within 3.10.0-327 kernels. It was
discovered for RHEL 7.2 that 41.3 minor revision introduced backward
incompatible changes.

Also fixes a scenario not working for RHEL7.3 in commit 89dd5819cf18.
When multiple versions passed into the kversion for the spec file, the
variable is used as is for the kernel module paths for command
weak-modules --add-modules. Then the modules cannot be found.

Fixes: 89dd5819cf18 (rhel: support kmod-openvswitch build against
multiple kernels, rhel6)

VMware-BZ: #2170334

Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
CC: Greg Rose <gvrose8192@gmail.com>
CC: Ben Pfaff <blp@ovn.org>
CC: Flavio Leitner <fbl@redhat.com>
CC: Yi-Hung Wei <yihung.wei@gmail.com>
---
v1->v2: added author sign-off signature
v2->v3: instead of using hard coded versions for openvswitch kernel modules,
        retrieve the information from kmod package
v3->v4: sent wrong v3 patch, some echo's for debugging not removed
v4->v5: fix one line that exceeded 79 chars

 rhel/kmod-openvswitch-rhel6.spec.in                | 13 ++---
 ...sr_share_openvswitch_scripts_ovs-kmod-manage.sh | 68 +++++++++++++++++++---
 2 files changed, 65 insertions(+), 16 deletions(-)

Comments

Yi-Hung Wei Aug. 1, 2018, 10:48 p.m. UTC | #1
On Wed, Aug 1, 2018 at 2:26 PM, Martin Xu <martinxu9.ovs@gmail.com> wrote:
> This patch extends commit 89dd5819cf18 (rhel: support kmod-openvswitch
> build against multiple kernels, rhel6) to support building kmod RPMs
> with multiple minor revisions within 3.10.0-327 kernels. It was
> discovered for RHEL 7.2 that 41.3 minor revision introduced backward
> incompatible changes.
>
> Also fixes a scenario not working for RHEL7.3 in commit 89dd5819cf18.
> When multiple versions passed into the kversion for the spec file, the
> variable is used as is for the kernel module paths for command
> weak-modules --add-modules. Then the modules cannot be found.
>
> Fixes: 89dd5819cf18 (rhel: support kmod-openvswitch build against
> multiple kernels, rhel6)
>
> VMware-BZ: #2170334
>
> Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
> CC: Greg Rose <gvrose8192@gmail.com>
> CC: Ben Pfaff <blp@ovn.org>
> CC: Flavio Leitner <fbl@redhat.com>
> CC: Yi-Hung Wei <yihung.wei@gmail.com>
> ---
> v1->v2: added author sign-off signature
> v2->v3: instead of using hard coded versions for openvswitch kernel modules,
>         retrieve the information from kmod package
> v3->v4: sent wrong v3 patch, some echo's for debugging not removed
> v4->v5: fix one line that exceeded 79 chars

Thanks for the patch. I think it is much robust than the previous
version.  I also did some tests on REHL 7.2 and it works great.

One minor comment is that we generally separate bug fix and new
feature into two patches. It usually makes the commit to be more
clear.

Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
Martin Xu Aug. 1, 2018, 11:02 p.m. UTC | #2
Thanks for the review. I've separated them into two patches in v6.

Martin

On Wed, Aug 1, 2018 at 3:48 PM, Yi-Hung Wei <yihung.wei@gmail.com> wrote:

> On Wed, Aug 1, 2018 at 2:26 PM, Martin Xu <martinxu9.ovs@gmail.com> wrote:
> > This patch extends commit 89dd5819cf18 (rhel: support kmod-openvswitch
> > build against multiple kernels, rhel6) to support building kmod RPMs
> > with multiple minor revisions within 3.10.0-327 kernels. It was
> > discovered for RHEL 7.2 that 41.3 minor revision introduced backward
> > incompatible changes.
> >
> > Also fixes a scenario not working for RHEL7.3 in commit 89dd5819cf18.
> > When multiple versions passed into the kversion for the spec file, the
> > variable is used as is for the kernel module paths for command
> > weak-modules --add-modules. Then the modules cannot be found.
> >
> > Fixes: 89dd5819cf18 (rhel: support kmod-openvswitch build against
> > multiple kernels, rhel6)
> >
> > VMware-BZ: #2170334
> >
> > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
> > CC: Greg Rose <gvrose8192@gmail.com>
> > CC: Ben Pfaff <blp@ovn.org>
> > CC: Flavio Leitner <fbl@redhat.com>
> > CC: Yi-Hung Wei <yihung.wei@gmail.com>
> > ---
> > v1->v2: added author sign-off signature
> > v2->v3: instead of using hard coded versions for openvswitch kernel
> modules,
> >         retrieve the information from kmod package
> > v3->v4: sent wrong v3 patch, some echo's for debugging not removed
> > v4->v5: fix one line that exceeded 79 chars
>
> Thanks for the patch. I think it is much robust than the previous
> version.  I also did some tests on REHL 7.2 and it works great.
>
> One minor comment is that we generally separate bug fix and new
> feature into two patches. It usually makes the commit to be more
> clear.
>
> Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
>
diff mbox series

Patch

diff --git a/rhel/kmod-openvswitch-rhel6.spec.in b/rhel/kmod-openvswitch-rhel6.spec.in
index f18802d..afbad96 100644
--- a/rhel/kmod-openvswitch-rhel6.spec.in
+++ b/rhel/kmod-openvswitch-rhel6.spec.in
@@ -31,7 +31,8 @@  BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 # for specified kernel version.
 # Use -D 'kversion 3.10.0-693.1.1.el7.x86_64 3.10.0-693.17.1.el7.x86_64'
 # to build package for mulitple kernel versions in the same package
-# This only works for kernel 3.10.0 major revision 693
+# This only works for kernel 3.10.0 major revision 693 (RHEL 7.4)
+# and major revision 327 (RHEL 7.2)
 # By default, build against the latest installed kernel-devel
 %{!?kversion:%global kversion %(rpm -qa | egrep "^kernel(-rt|-aarch64)?-devel" | /usr/lib/rpm/redhat/rpmsort -r | head -n 1| sed "s/^kernel.*-devel-//")}
 
@@ -86,8 +87,8 @@  install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \
 current_kernel=$(uname -r)
 IFS=. read installed_major installed_minor installed_micro installed_arch \
     installed_build <<<"${current_kernel##*-}"
-if [ "$installed_major" = "693" ]; then
-    # Workaround for RHEL 7.4
+if [ "$installed_major" = "327" ] || [ "$installed_major" = "693" ]; then
+    # Workaround for RHEL 7.2 and 7.4
     if [ -x "/usr/share/%{oname}/scripts/ovs-kmod-manage.sh" ]; then
         /usr/share/%{oname}/scripts/ovs-kmod-manage.sh
     fi
@@ -97,10 +98,8 @@  else
         [ -d "/lib/modules/$k/kernel/" ] && depmod -a "$k"
     done
     if [ -x "/sbin/weak-modules" ]; then
-        for m in openvswitch vport-gre vport-stt vport-geneve \
-                 vport-lisp vport-vxlan; do
-            echo "/lib/modules/%{kversion}/extra/%{oname}/$m.ko"
-        done | /sbin/weak-modules --add-modules
+        rpm -ql kmod-%{oname} | grep '\.ko$' | \
+            /sbin/weak-modules --add-modules
     fi
 fi
 
diff --git a/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh b/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh
index a6c738f..6beabeb 100644
--- a/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh
+++ b/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh
@@ -14,23 +14,39 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# This version of the script is intended to be used on kernel version
-# 3.10.0 major revision 693 only. It is packaged in the openvswitch kmod RPM
-# built using the rhel6 spec file, and run in the post-install for minor 
-# revision 693 kernels.
+# This version of the script is intended to be used on kernel version 3.10.0
+# major revision 327 and 693 only. It is packaged in the openvswitch kmod RPM
+# built using the rhel6 spec file, and run in the post-install for major
+# revision 327/693 kernels.
 #
-# Due to some backward incompatible changes introduced in minor revision 17.1,
+# For kernel 3.10.0-693,
+# due to some backward incompatible changes introduced in minor revision 17.1,
 # kernel modules built against kernels newer than 17.1 cannot be loaded on
 # system running kernels older than 17.1, vice versa.
 #
+# For kernel 3.10.0-327,
+# due to some backward incompatible changes introduced in minor revision 41.3,
+# kernel modules built against kernels newer than 41.3 cannot be loaded on
+# system running kernels older than 41.3, vice versa.
+#
 # This script checks the current running kernel version, and update symlinks
 # for the openvswitch kernel modules in the appropriate kernel directory,
 # provided the kmod RPM has installed kernel modules files built from both
-# 1.1 and 17.1 minor revisions.
+# minor revisions.
 # 
 # In case of a kernel minor revision change after the openvswitch kmod package
 # is installed, this script shall be run manually after system reboots and
 # switches to a different kernel
+if [ -n "$(rpm -qa kmod-openvswitch)" ]; then
+    rpmname="kmod-openvswitch"
+elif [ -n "$(rpm -qa openvswitch-kmod)" ]; then
+    rpmname="openvswitch-kmod"
+else
+    echo "openvswitch kmod package not installed, existing"
+    exit 1
+fi
+#echo $rpmname
+
 script_name=$(basename -- "$0")
 current_kernel=$(uname -r)
 echo current kernel is $current_kernel
@@ -42,7 +58,41 @@  IFS=. read installed_major installed_minor installed_micro \
 # installed_build=$installed_build
 
 expected_base_minor="el7"
-expected_minor=11
+if [ "$installed_major" = "327" ]; then
+    expected_minor=36
+elif [ "$installed_major" = "693" ]; then
+    expected_minor=11
+else
+    echo "This script is not intended to run on kernel $(uname -r)"
+    exit 1
+fi
+
+kmod_minor_versions=()
+kversion=$(rpm -ql ${rpmname} | grep '\.ko$' | \
+           sed -n -e 's/^\/lib\/modules\/\(.*\)\/extra\/.*$/\1/p' | \
+           sort | uniq)
+for kv in $kversion; do
+    IFS=. read kmod_major kmod_minor kmod_micro kmod_arch \
+        kmod_build <<<"${kv##*-}"
+#    echo kmod_major=$kmod_major kmod_minor=$kmod_minor \
+#        kmod_micro=$kmod_micro kmod_arch=$kmod_arch \
+#        kmod_build=$kmod_build
+    kmod_minor_versions+=($kmod_minor)
+done
+sorted_kmod_minor_versions=$(printf "%s\n" "${kmod_minor_versions[@]}" | \
+                             sort -n)
+#echo "$sorted_kmod_minor_versions"
+
+if [ ! -n "$sorted_kmod_minor_versions" ]; then
+    echo "No kernel modules found from package $rpmname, exiting"
+    exit 1
+else
+    # first line for kmod_minor_low_ver, last for kmod_minor_high_ver
+    kmod_minor_low_ver=$(echo "$sorted_kmod_minor_versions" | head -1)
+    kmod_minor_high_ver=$(echo "$sorted_kmod_minor_versions" | tail -1)
+fi
+#echo "Installing KMOD with minor revisions $kmod_minor_low_ver and \
+#     $kmod_minor_high_ver"
 
 found_match=false
 for kname in `ls -d /lib/modules/*`
@@ -51,14 +101,14 @@  do
 #   echo major=$major minor=$minor micro=$micro arch=$arch build=$build
     if [ "$installed_minor" = "$expected_base_minor" ] ||
        [ "$installed_minor" -le "$expected_minor" ]; then
-        if [ "$minor" = "1" ]; then
+        if [ "$minor" = "$kmod_minor_low_ver" ]; then
             requested_kernel=$kname
             found_match="true"
             echo "Installing Openvswitch KMOD from kernel $kname"
             break
         fi
     else
-        if [ "$minor" = "17" ]; then
+        if [ "$minor" = "$kmod_minor_high_ver" ]; then
             requested_kernel=$kname
             found_match="true"
             echo "Installing Openvswitch KMOD from kernel $kname"