On Wed, Jul 11, 2018 at 03:30:08PM -0700, Martin Xu wrote: > This patch only affects rhel6 spec file. > > RHEL 7.4 introduced backward incompatible changes in the kernel. As > a result, prebuilt PRM packages against kernels newer than 693.17.1 > will cannot be used on systems with older kernels, vice versa. > > This patch allows multiple kernel version numbers delimited by > whitespace to be passed as variable "kversion". kmod-openvswitch RPM > packages the kernel module .ko files from all specified kernel > versions. > > This patch also includes a script to update the weak-update symlinks > if the system kernel version is upgraded or downgraded after > kmod-openvswitch is installed. > > Previouly the kernel_module_package macro is used to generate spec file > template to build kmod-openvswitch RPM. This macro is now removed. > Everything is built in the main package. To maintain consistent naming, > the rhel6 kmod spec file is renamed to kmod-openvswitch-rhel6.spec to > match the built package name kmod-openvswitch. > > This patch also removes the openvswitch-kmod package.
This patch does few things at once. It renames the kmod, then do significant changes at the file and add a new script. I would suggest to have this split into at least two patches. The first one renames the file and fix automake/gitignore and related files as a preparation. The second one fixes the issue and adds the kmod script. > Signed-off-by: Martin Xu <[email protected]> > Signed-off-by: Greg Rose <[email protected]> > CC: Ben Pfaff <[email protected]> > CC: Flavio Leitner <[email protected]> > CC: Aaron Conole <[email protected]> > --- > Documentation/intro/install/rhel.rst | 7 +- > poc/playbook-centos-builder.yml | 8 +- > rhel/.gitignore | 1 + > rhel/automake.mk | 8 +- > rhel/kmod-openvswitch-rhel6.spec.in | 120 > +++++++++++++++++++++ > rhel/openvswitch-kmod-rhel6.spec.in | 103 ------------------ > rhel/openvswitch-kmod.files | 3 - > ...sr_share_openvswitch_scripts_ovs-kmod-manage.sh | 71 ++++++++++++ > 8 files changed, 203 insertions(+), 118 deletions(-) > create mode 100644 rhel/kmod-openvswitch-rhel6.spec.in > delete mode 100644 rhel/openvswitch-kmod-rhel6.spec.in > delete mode 100644 rhel/openvswitch-kmod.files > create mode 100644 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > > diff --git a/Documentation/intro/install/rhel.rst > b/Documentation/intro/install/rhel.rst > index f8b26069f..6f062e894 100644 > --- a/Documentation/intro/install/rhel.rst > +++ b/Documentation/intro/install/rhel.rst > @@ -197,17 +197,16 @@ the unit tests, run:: > Kernel Module > ~~~~~~~~~~~~~ > > -On RHEL 6, to build the Open vSwitch kernel module, copy > -rhel/openvswitch-kmod.files into the RPM sources directory and run:: > +On RHEL 6, to build the Open vSwitch kernel module run:: > > - $ rpmbuild -bb rhel/openvswitch-kmod-rhel6.spec > + $ rpmbuild -bb rhel/kmod-openvswitch-rhel6.spec > > You might have to specify a kernel version and/or variants, e.g.: > > $ rpmbuild -bb \ > -D "kversion 2.6.32-131.6.1.el6.x86_64" \ > -D "kflavors default debug kdump" \ > - rhel/openvswitch-kmod-rhel6.spec > + rhel/kmod-openvswitch-rhel6.spec > > This produces an "kmod-openvswitch" RPM for each kernel variant, in this > example: "kmod-openvswitch", "kmod-openvswitch-debug", and > diff --git a/poc/playbook-centos-builder.yml b/poc/playbook-centos-builder.yml > index 71f104010..e902db75d 100644 > --- a/poc/playbook-centos-builder.yml > +++ b/poc/playbook-centos-builder.yml > @@ -41,13 +41,13 @@ > chdir: /git/ovs/rhel > with_items: > - openvswitch.spec > - - openvswitch-kmod-rhel6.spec > + - kmod-openvswitch-rhel6.spec > > - name: Install build dependencies specified from spec files > shell: echo "y" | yum-builddep /tmp/{{item}} > with_items: > - openvswitch.spec > - - openvswitch-kmod-rhel6.spec > + - kmod-openvswitch-rhel6.spec > > - name: Create rpm dev tree > command: rpmdev-setuptree > @@ -81,7 +81,7 @@ > line: "Release: {{ ansible_local.builder.release }}" > with_items: > - openvswitch.spec > - - openvswitch-kmod-rhel6.spec > + - kmod-openvswitch-rhel6.spec > > - name: Build Open vSwitch user space rpms > command: rpmbuild -bb --without check rhel/openvswitch.spec > @@ -89,7 +89,7 @@ > chdir: "{{SOURCE}}/openvswitch-{{version.stdout}}" > > - name: Build Open vSwitch kmod rpms (only for currently loaded kernel) > - command: rpmbuild -bb --without check rhel/openvswitch-kmod-rhel6.spec > + command: rpmbuild -bb --without check rhel/kmod-openvswitch-rhel6.spec > args: > chdir: "{{SOURCE}}/openvswitch-{{version.stdout}}" > > diff --git a/rhel/.gitignore b/rhel/.gitignore > index e584a1ed0..9b0ce1d38 100644 > --- a/rhel/.gitignore > +++ b/rhel/.gitignore > @@ -1,6 +1,7 @@ > openvswitch-dkms.spec > openvswitch-kmod-rhel5.spec > openvswitch-kmod-rhel6.spec > +kmod-openvswitch-rhel6.spec > openvswitch-kmod-fedora.spec > openvswitch.spec > openvswitch-fedora.spec > diff --git a/rhel/automake.mk b/rhel/automake.mk > index 137ff4a39..7b6c78fd7 100644 > --- a/rhel/automake.mk > +++ b/rhel/automake.mk > @@ -15,9 +15,8 @@ EXTRA_DIST += \ > rhel/etc_sysconfig_network-scripts_ifup-ovs \ > rhel/openvswitch-dkms.spec \ > rhel/openvswitch-dkms.spec.in \ > - rhel/openvswitch-kmod-rhel6.spec \ > - rhel/openvswitch-kmod-rhel6.spec.in \ > - rhel/openvswitch-kmod.files \ > + rhel/kmod-openvswitch-rhel6.spec \ > + rhel/kmod-openvswitch-rhel6.spec.in \ > rhel/openvswitch-kmod-fedora.spec \ > rhel/openvswitch-kmod-fedora.spec.in \ > rhel/openvswitch.spec \ > @@ -27,6 +26,7 @@ EXTRA_DIST += \ > rhel/usr_share_openvswitch_scripts_ovs-systemd-reload \ > rhel/usr_share_openvswitch_scripts_sysconfig.template \ > rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \ > + rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \ > rhel/usr_lib_udev_rules.d_91-vfio.rules \ > rhel/usr_lib_systemd_system_openvswitch.service \ > rhel/usr_lib_systemd_system_ovsdb-server.service \ > @@ -48,7 +48,7 @@ update_rhel_spec = \ > $(srcdir)/rhel/openvswitch-dkms.spec: rhel/openvswitch-dkms.spec.in > $(top_builddir)/config.status > $(update_rhel_spec) > > -$(srcdir)/rhel/openvswitch-kmod-rhel6.spec: > rhel/openvswitch-kmod-rhel6.spec.in $(top_builddir)/config.status > +$(srcdir)/rhel/kmod-openvswitch-rhel6.spec: > rhel/kmod-openvswitch-rhel6.spec.in $(top_builddir)/config.status > $(update_rhel_spec) > > $(srcdir)/rhel/openvswitch-kmod-fedora.spec: > rhel/openvswitch-kmod-fedora.spec.in $(top_builddir)/config.status > diff --git a/rhel/kmod-openvswitch-rhel6.spec.in > b/rhel/kmod-openvswitch-rhel6.spec.in > new file mode 100644 > index 000000000..b0e50a4f8 > --- /dev/null > +++ b/rhel/kmod-openvswitch-rhel6.spec.in > @@ -0,0 +1,120 @@ > +# Spec file for Open vSwitch kernel modules on Red Hat Enterprise > +# Linux 6. > + > +# Copyright (C) 2011, 2012, 2018 Nicira, Inc. > +# > +# Copying and distribution of this file, with or without modification, > +# are permitted in any medium without royalty provided the copyright > +# notice and this notice are preserved. This file is offered as-is, > +# without warranty of any kind. > + > +%define oname openvswitch > + > +Name: kmod-%{oname} > +Version: @VERSION@ > +Release: 1%{?dist} > +Summary: Open vSwitch kernel module > + > +Group: System/Kernel > +License: GPLv2 > +URL: http://openvswitch.org/ > +Source0: %{oname}-%{version}.tar.gz > +Source1: %{oname}-kmod.files > +BuildRoot: %(mktemp -ud > %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) > + > +# Without this we get an empty openvswitch-debuginfo package (whose name > +# conflicts with the openvswitch-debuginfo package for OVS userspace). > +%undefine _enable_debug_packages > + > +%define kernel_source_extended() /usr/src/kernels/%{2}$([ %{1} = default ] > || echo ".%{1}") > + > +# By default, build against the latest installed kernel > +%{!?kversion:%global kversion %(rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}' > `rpm -qa | egrep "^kernel(-rt|-aarch64)?-devel" | /usr/lib/rpm/redhat/rpmsort > -r | head -n 1` | head -n 1)} Well, that assumption is very often wrong because the latest kernel installed might not be the running kernel nor the one that will run in the next boot, but I see that you just want to have a default. > +# Use -D 'kversion 2.6.32-131.6.1.el6.x86_64' to build package > +# for specified kernel version. > + > +# Use -D 'kflavors default debug kdump' to build packages for > +# specified kernel variants. > +%{!?kflavors:%global kflavors default} > + > +%description > +Open vSwitch Linux kernel module. > + > +%prep > + > +%setup -n %{oname}-%{version} > + > +%build > + > +for kv in %{kversion}; do Isn't that a single version only? I didn't spot anything else in this light review :-) fbl > + for flavor in %{kflavors}; do > + mkdir -p _$flavor/_$kv > + (cd _$flavor/_$kv && ../../configure > --with-linux="%{kernel_source_extended $flavor $kv}") > + %{__make} -C _$flavor/_$kv/datapath/linux %{?_smp_mflags} > + done > +done > + > +%install > +export INSTALL_MOD_PATH=$RPM_BUILD_ROOT > +export INSTALL_MOD_DIR=extra/%{oname} > +for kv in %{kversion}; do > + for flavor in %{kflavors} ; do > + make -C %{kernel_source_extended $flavor $kv} modules_install \ > + M="`pwd`"/_$flavor/_$kv/datapath/linux > + # Cleanup unnecessary kernel-generated module dependency files. > + find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \; > + done > +done > +install -d %{buildroot}%{_sysconfdir}/depmod.d/ > +for kv in %{kversion}; do > + for module in %{buildroot}/lib/modules/$kv/$INSTALL_MOD_DIR/*.ko; > + do > + modname="$(basename ${module})" > + grep -qsPo "^\s*override ${modname%.ko} \* extra\/%{oname}" > %{oname}.conf || \ > + echo "override ${modname%.ko} * extra/%{oname}" >> %{oname}.conf > + grep -qsPo "^\s*override ${modname%.ko} \* weak-updates\/%{oname}" > %{oname}.conf || \ > + echo "override ${modname%.ko} * weak-updates/%{oname}" >> > %{oname}.conf > + done > +done > +install -m 644 %{oname}.conf %{buildroot}%{_sysconfdir}/depmod.d/ > +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/%{oname}/scripts > +install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \ > + $RPM_BUILD_ROOT/usr/share/%{oname}/scripts/ovs-kmod-manage.sh > + > +%post > +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 [ -x "/usr/share/%{oname}/scripts/ovs-kmod-manage.sh" ]; then > + /usr/share/%{oname}/scripts/ovs-kmod-manage.sh > + fi > +else > + # Ensure that modprobe will find our modules. > + for k in $(cd /lib/modules && /bin/ls); do > + [ -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 > + fi > +fi > + > +%postun > +for kname in `ls -d /lib/modules/*` > +do > + rm -rf $kname/weak-updates/openvswitch > +done > +/sbin/depmod -a > + > +%files > +%defattr(644,root,root,755) > +/etc/depmod.d/%{oname}.conf > +/lib/modules/ > +%attr(755,root,root) /usr/share/%{oname}/scripts/ovs-kmod-manage.sh > + > +%clean > +rm -rf $RPM_BUILD_ROOT > diff --git a/rhel/openvswitch-kmod-rhel6.spec.in > b/rhel/openvswitch-kmod-rhel6.spec.in > deleted file mode 100644 > index daa3dade1..000000000 > --- a/rhel/openvswitch-kmod-rhel6.spec.in > +++ /dev/null > @@ -1,103 +0,0 @@ > -# Spec file for Open vSwitch kernel modules on Red Hat Enterprise > -# Linux 6. > - > -# Copyright (C) 2011, 2012 Nicira, Inc. > -# > -# Copying and distribution of this file, with or without modification, > -# are permitted in any medium without royalty provided the copyright > -# notice and this notice are preserved. This file is offered as-is, > -# without warranty of any kind. > - > -%define oname openvswitch > - > -Name: %{oname}-kmod > -Version: @VERSION@ > -Release: 1%{?dist} > -Summary: Open vSwitch kernel module > - > -Group: System/Kernel > -License: GPLv2 > -URL: http://openvswitch.org/ > -Source0: %{oname}-%{version}.tar.gz > -Source1: %{oname}-kmod.files > -BuildRoot: %(mktemp -ud > %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) > -BuildRequires: %kernel_module_package_buildreqs > - > -# Without this we get an empty openvswitch-debuginfo package (whose name > -# conflicts with the openvswitch-debuginfo package for OVS userspace). > -%undefine _enable_debug_packages > - > -# Use -D 'kversion 2.6.32-131.6.1.el6.x86_64' to build package > -# for specified kernel version. > -%{?kversion:%define kernel_version %kversion} > - > -# Use -D 'kflavors default debug kdump' to build packages for > -# specified kernel variants. > -%{!?kflavors:%define kflavors default} > - > -%kernel_module_package -n %{oname} -f %{SOURCE1} %kflavors > - > -%description > -Open vSwitch Linux kernel module. > - > -%prep > - > -%setup -n %{oname}-%{version} > - > -%build > -for flavor in %flavors_to_build; do > - mkdir _$flavor > - (cd _$flavor && ../configure --with-linux="%{kernel_source $flavor}") > - %{__make} -C _$flavor/datapath/linux %{?_smp_mflags} > -done > - > -%install > -export INSTALL_MOD_PATH=$RPM_BUILD_ROOT > -export INSTALL_MOD_DIR=extra/%{oname} > -for flavor in %flavors_to_build ; do > - make -C %{kernel_source $flavor} modules_install \ > - M="`pwd`"/_$flavor/datapath/linux > - > - # Cleanup unnecessary kernel-generated module dependency files. > - find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \; > -done > -install -d %{buildroot}%{_sysconfdir}/depmod.d/ > -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 > -done > -install -m 644 %{oname}.conf %{buildroot}%{_sysconfdir}/depmod.d/ > - > -%post > -# Ensure that modprobe will find our modules. > -for k in $(cd /lib/modules && /bin/ls); do > - [ -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/%{kernel}/extra/$m.ko" > - done | /sbin/weak-modules --add-modules > -fi > - > -%postun > -for k in $(cd /lib/modules && /bin/ls); do > - [ -d "/lib/modules/$k/kernel/" ] && depmod -a "$k" > -done > -if [ "$1" = 0 ]; then # Erase, not upgrade > - 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 --remove-modules > - fi > -fi > - > -%files > -%defattr(644,root,root) > -/etc/depmod.d/%{oname}.conf > - > -%clean > -rm -rf $RPM_BUILD_ROOT > diff --git a/rhel/openvswitch-kmod.files b/rhel/openvswitch-kmod.files > deleted file mode 100644 > index 357c2e8b7..000000000 > --- a/rhel/openvswitch-kmod.files > +++ /dev/null > @@ -1,3 +0,0 @@ > -%defattr(644,root,root,755) > -/lib/modules/%2-%1 > -/etc/depmod.d/openvswitch.conf > diff --git a/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > b/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > new file mode 100644 > index 000000000..e89ad86dd > --- /dev/null > +++ b/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > @@ -0,0 +1,71 @@ > +#!/bin/sh > + > +# Copyright (c) 2018 Nicira/VMware, Inc. > +# > +# Licensed under the Apache License, Version 2.0 (the "License"); > +# you may not use this file except in compliance with the License. > +# You may obtain a copy of the License at: > +# > +# http://www.apache.org/licenses/LICENSE-2.0 > +# > +# Unless required by applicable law or agreed to in writing, software > +# distributed under the License is distributed on an "AS IS" BASIS, > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > +# See the License for the specific language governing permissions and > +# limitations under the License. > + > +script_name=$(basename -- "$0") > +current_kernel=$(uname -r) > +echo current kernel is $current_kernel > + > +IFS=. read installed_major installed_minor installed_micro installed_arch > installed_build <<<"${current_kernel##*-}" > +# echo installed_major=$installed_major installed_minor=$installed_minor > installed_micro=$installed_micro installed_arch=$installed_arch > installed_build=$installed_build > + > +expected_base_minor="el7" > +expected_minor=11 > + > +found_match=false > +for kname in `ls -d /lib/modules/*` > +do > + IFS=. read major minor micro arch build <<<"${kname##*-}" > +# 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 > + requested_kernel=$kname > + found_match="true" > + echo "Installing Openvswitch KMOD from kernel $kname" > + break > + fi > + else > + if [ "$minor" = "17" ]; then > + requested_kernel=$kname > + found_match="true" > + echo "Installing Openvswitch KMOD from kernel $kname" > + break > + fi > + fi > +done > + > +if [ "$found_match" = "false" ]; then > + echo $script_name: Failed > + exit 1 > +fi > + > +if [ "$requested_kernel" != "/lib/modules/$current_kernel" ]; then > + if [ -x "/sbin/weak-modules" ]; then > + if [ ! -d /lib/modules/$current_kernel/weak-updates/openvswitch ]; > then > + mkdir -p /lib/modules/$current_kernel/weak-updates > + mkdir -p /lib/modules/$current_kernel/weak-updates/openvswitch > + fi > + for m in openvswitch vport-gre vport-stt vport-geneve \ > + vport-lisp vport-vxlan; do > + ln -f -s $requested_kernel/extra/openvswitch/$m.ko \ > + /lib/modules/$current_kernel/weak-updates/openvswitch/$m.ko > + done > + fi > +else > + echo Proper OVS kernel modules already configured > +fi > +# Always run depmod > +/sbin/depmod -a > -- > 2.15.2 (Apple Git-101.1) > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev -- Flavio _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
