Message ID | 20180711223008.97107-1-martinxu9.ovs@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [ovs-dev,v2] rhel: support kmod-openvswitch build against multiple kernels, rhel6 | expand |
Bleep bloop. Greetings Martin Xu, I am a robot and I have tried out your patch. Thanks for your contribution. I encountered some error that I wasn't expecting. See the details below. checkpatch: ERROR: Too many signoffs; are you missing Co-authored-by lines? WARNING: Line is 116 characters long (recommended limit is 79) #428 FILE: rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh:21: IFS=. read installed_major installed_minor installed_micro installed_arch installed_build <<<"${current_kernel##*-}" WARNING: Line is 169 characters long (recommended limit is 79) #429 FILE: rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh:22: # echo installed_major=$installed_major installed_minor=$installed_minor installed_micro=$installed_micro installed_arch=$installed_arch installed_build=$installed_build Lines checked: 482, Warnings: 2, Errors: 1 Please check this out. If you feel there has been an error, please email aconole@bytheb.org Thanks, 0-day Robot
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 <martinxu9.ovs@gmail.com> > Signed-off-by: Greg Rose <gvrose8192@gmail.com> > CC: Ben Pfaff <blp@ovn.org> > CC: Flavio Leitner <fbl@redhat.com> > CC: Aaron Conole <aconole@redhat.com> > --- > 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 > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
On Wed, Jul 11, 2018 at 4:35 PM, Flavio Leitner <fbl@sysclose.org> wrote: > 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 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. > Thanks for reviewing it. I'll split the patch up. I was troubled by the fact git would just consider it as a brand new file because of the significant changes. > > > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> > > Signed-off-by: Greg Rose <gvrose8192@gmail.com> > > CC: Ben Pfaff <blp@ovn.org> > > CC: Flavio Leitner <fbl@redhat.com> > > CC: Aaron Conole <aconole@redhat.com> > > --- > > 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. > > I shall fix the comment in the next version. I meant to write "build against the latest installed kernel-devel" which as you mentioned is not necessarily the same version as the running kernel. The current spec on master uses macro kernel_module_package, and it picks up the latest version of kernel-devel I want to keep it the same as before. I don't know if users are aware this is the default. I also checked the fedora spec file. We build with "make rpm-fedora-kmod" which passes "kversion $(shell uname -r)" by 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? > Sorry, didn't get what you meant. The multiple kernel versions come from what's defined as kversion If kversion is "2.6.32-131.6.1.el6.x86_64 2.6.32-131.6.2.el6.x86_64 2.6.32-131.6.3.el6.x86_64", it'll build for all of them, and put them in one RPM. Is that what you were asking? > 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 > > dev@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > -- > Flavio > >
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)} +# 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 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