Adding Ben. On Tue, Jul 10, 2018 at 3:54 PM Gregory Rose <gvrose8...@gmail.com> wrote:
> On 7/10/2018 3:42 PM, 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. > > Oops, no signed off by line. > > I'm adding Aaron and Flavio so the Red Hat guys can give it a look. You > can wait for their review > comments and then spin up a Rev 2 with the fixed signed off by line. > > Thanks for the patch! > > - Greg > > > > > --- > > 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 f8b2606..6f062e8 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 71f1040..e902db7 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 e584a1e..9b0ce1d 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 137ff4a..7b6c78f 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 0000000..b0e50a4 > > --- /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)} > > +# 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 > > + 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 daa3dad..0000000 > > --- 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 357c2e8..0000000 > > --- 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 0000000..e89ad86 > > --- /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 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev