Message ID | 1532125493-118514-1-git-send-email-martinxu9.ovs@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [ovs-dev,v1] rhel: support kmod build against mulitple kernel versions, fedora | expand |
On Fri, Jul 20, 2018 at 03:24:53PM -0700, Martin Xu wrote: > This patch ports changes from kmod rhel6 spec file to fedora spec file, > to support packaging kernel modules built against multiple versions of > kernel sources. > > 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. > > Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz). > This patch allows multiple kernel version numbers delimited by > whitespace to be passed as variable "kversion". The result RPM packages > the kernel module .ko files from all specified kernel versions. For > example, > > make rpm-fedora-kmod \ > RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \ > 3.10.0-693.17.1.el7.x86_64"' > > By default, make tries to build against the current running kernel. > > This patch also includes a script to update the weak-update symlinks > if the system kernel version is upgraded or downgraded after > openvswitch-kmod is installed. > > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> > CC: Greg Rose <gvrose8192@gmail.com> > CC: Flavio Leitner <fbl@redhat.com> > --- > rhel/openvswitch-kmod-fedora.spec.in | 86 +++++++++++++++++++++++------------- > 1 file changed, 55 insertions(+), 31 deletions(-) > > diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/openvswitch-kmod-fedora.spec.in > index c0cd298..24f8290 100644 > --- a/rhel/openvswitch-kmod-fedora.spec.in > +++ b/rhel/openvswitch-kmod-fedora.spec.in > @@ -1,6 +1,6 @@ > # Spec file for Open vSwitch. > > -# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. > +# Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc. > # > # Copying and distribution of this file, with or without modification, > # are permitted in any medium without royalty provided the copyright > @@ -26,6 +26,9 @@ Release: 1%{?dist} > Source: openvswitch-%{version}.tar.gz > #Source1: openvswitch-init > Buildroot: /tmp/openvswitch-xen-rpm > +Provides: kmod-openvswitch > +Conflicts: kmod-openvswitch > +Obsoletes: kmod-openvswitch Usually the above is versioned to avoid future issues. e.g.: Conflicts: kmod-openvswitch < %{version}-%{release} I didn't spot anything else other than the above, thanks! fbl > > %description > Open vSwitch provides standard network bridging functions augmented with > @@ -36,55 +39,76 @@ traffic. This package contains the kernel modules. > %setup -q -n openvswitch-%{version} > > %build > -%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl > -make %{_smp_mflags} -C datapath/linux > +for kv in %{kversion}; do > + mkdir -p _$kv > + (cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. \ > + --with-linux=/usr/src/kernels/${kv}/ --enable-ssl) > + make %{_smp_mflags} -C _$kv/datapath/linux > +done > > %install > +export INSTALL_MOD_DIR=extra/openvswitch > rm -rf $RPM_BUILD_ROOT > -make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install > +for kv in %{kversion}; do > + make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux modules_install > +done > mkdir -p $RPM_BUILD_ROOT/etc/depmod.d > -for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko > -do > - modname="$(basename ${module})" > - echo "override ${modname%.ko} * extra" >> \ > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > - echo "override ${modname%.ko} * weak-updates" >> \ > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > +for kv in %{kversion}; do > + for module in $RPM_BUILD_ROOT/lib/modules/${kv}/extra/openvswitch/*.ko > + do > + modname="$(basename ${module})" > + grep -qsPo "^\s*override ${modname%.ko} \* extra\/openvwitch" \ > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > + echo "override ${modname%.ko} * extra/openvswitch" >> \ > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > + grep -qsPo "^\s*override ${modname%.ko} \* weak-updates\/openvwitch" \ > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > + echo "override ${modname%.ko} * weak-updates/openvswitch" >> \ > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > + done > done > +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts > +install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \ > + $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > %clean > rm -rf $RPM_BUILD_ROOT > > %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 > +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/openvswitch/scripts/ovs-kmod-manage.sh" ]; then > + /usr/share/openvswitch/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/%{kernel}/extra/$m.ko" > - done | /sbin/weak-modules --remove-modules > + echo "/lib/modules/%{kernel}/extra/openvswitch/$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(0644,root,root) > -/lib/modules/%{kernel}/extra/*.ko > +/lib/modules/*/extra/openvswitch/*.ko > /etc/depmod.d/kmod-openvswitch.conf > -%exclude /lib/modules/%{kernel}/modules.* > +%exclude /lib/modules/*/modules.* > +%attr(755,root,root) /usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > %changelog > * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com> > -- > 1.8.3.1 >
Hi Flavio, Thanks for the review. I was thinking of using this to prevent a user to directly install openvswitch-kmod rpm built with the fedora spec file when the system already has the kmod-openvswitch built from rhel6 spec file. Packages are named differently. In that case, it's not a matter of versions. They could be built off the identical source tree, but shouldn't coexist. Perhaps there's other ways to implement what I intended to do here, if you have any suggestions? Best, Martin On Wed, Jul 25, 2018 at 9:10 AM, Flavio Leitner <fbl@redhat.com> wrote: > On Fri, Jul 20, 2018 at 03:24:53PM -0700, Martin Xu wrote: > > This patch ports changes from kmod rhel6 spec file to fedora spec file, > > to support packaging kernel modules built against multiple versions of > > kernel sources. > > > > 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. > > > > Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz). > > This patch allows multiple kernel version numbers delimited by > > whitespace to be passed as variable "kversion". The result RPM packages > > the kernel module .ko files from all specified kernel versions. For > > example, > > > > make rpm-fedora-kmod \ > > RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \ > > 3.10.0-693.17.1.el7.x86_64"' > > > > By default, make tries to build against the current running kernel. > > > > This patch also includes a script to update the weak-update symlinks > > if the system kernel version is upgraded or downgraded after > > openvswitch-kmod is installed. > > > > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> > > CC: Greg Rose <gvrose8192@gmail.com> > > CC: Flavio Leitner <fbl@redhat.com> > > --- > > rhel/openvswitch-kmod-fedora.spec.in | 86 > +++++++++++++++++++++++------------- > > 1 file changed, 55 insertions(+), 31 deletions(-) > > > > diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/ > openvswitch-kmod-fedora.spec.in > > index c0cd298..24f8290 100644 > > --- a/rhel/openvswitch-kmod-fedora.spec.in > > +++ b/rhel/openvswitch-kmod-fedora.spec.in > > @@ -1,6 +1,6 @@ > > # Spec file for Open vSwitch. > > > > -# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. > > +# Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc. > > # > > # Copying and distribution of this file, with or without modification, > > # are permitted in any medium without royalty provided the copyright > > @@ -26,6 +26,9 @@ Release: 1%{?dist} > > Source: openvswitch-%{version}.tar.gz > > #Source1: openvswitch-init > > Buildroot: /tmp/openvswitch-xen-rpm > > +Provides: kmod-openvswitch > > +Conflicts: kmod-openvswitch > > +Obsoletes: kmod-openvswitch > > Usually the above is versioned to avoid future issues. > e.g.: Conflicts: kmod-openvswitch < %{version}-%{release} > > I didn't spot anything else other than the above, thanks! > fbl > > > > > %description > > Open vSwitch provides standard network bridging functions augmented with > > @@ -36,55 +39,76 @@ traffic. This package contains the kernel modules. > > %setup -q -n openvswitch-%{version} > > > > %build > > -%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl > > -make %{_smp_mflags} -C datapath/linux > > +for kv in %{kversion}; do > > + mkdir -p _$kv > > + (cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. \ > > + --with-linux=/usr/src/kernels/${kv}/ --enable-ssl) > > + make %{_smp_mflags} -C _$kv/datapath/linux > > +done > > > > %install > > +export INSTALL_MOD_DIR=extra/openvswitch > > rm -rf $RPM_BUILD_ROOT > > -make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install > > +for kv in %{kversion}; do > > + make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux > modules_install > > +done > > mkdir -p $RPM_BUILD_ROOT/etc/depmod.d > > -for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko > > -do > > - modname="$(basename ${module})" > > - echo "override ${modname%.ko} * extra" >> \ > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > - echo "override ${modname%.ko} * weak-updates" >> \ > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > +for kv in %{kversion}; do > > + for module in $RPM_BUILD_ROOT/lib/modules/${ > kv}/extra/openvswitch/*.ko > > + do > > + modname="$(basename ${module})" > > + grep -qsPo "^\s*override ${modname%.ko} \* extra\/openvwitch" \ > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > + echo "override ${modname%.ko} * extra/openvswitch" >> \ > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > + grep -qsPo "^\s*override ${modname%.ko} \* > weak-updates\/openvwitch" \ > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > + echo "override ${modname%.ko} * weak-updates/openvswitch" > >> \ > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > + done > > done > > +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts > > +install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > \ > > + $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > %clean > > rm -rf $RPM_BUILD_ROOT > > > > %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 > > +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/openvswitch/scripts/ovs-kmod-manage.sh" ]; then > > + /usr/share/openvswitch/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/%{kernel}/extra/$m.ko" > > - done | /sbin/weak-modules --remove-modules > > + echo "/lib/modules/%{kernel}/extra/openvswitch/$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(0644,root,root) > > -/lib/modules/%{kernel}/extra/*.ko > > +/lib/modules/*/extra/openvswitch/*.ko > > /etc/depmod.d/kmod-openvswitch.conf > > -%exclude /lib/modules/%{kernel}/modules.* > > +%exclude /lib/modules/*/modules.* > > +%attr(755,root,root) /usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > %changelog > > * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com> > > -- > > 1.8.3.1 > > > > -- > Flavio >
On Fri, Jul 27, 2018 at 11:19:58AM -0700, Martin Xu wrote: > Hi Flavio, > > Thanks for the review. I was thinking of using this to prevent a user to > directly install openvswitch-kmod rpm built with the fedora spec file when > the system already has the kmod-openvswitch built from rhel6 spec file. > Packages are named differently. In that case, it's not a matter of > versions. They could be built off the identical source tree, but shouldn't > coexist. Perhaps there's other ways to implement what I intended to do > here, if you have any suggestions? If the files are the same, rpm will complain about the file conflicts when it tries to install. In that case we only need Conflicts and perhaps it's ok to not add a version. But for obsoletes, it essentially says that your package should replace the other one. If that is what you want, that's okay too. However, we will be unable to roll back that in the future if we need to revive kmod-openvswitch as this package once built cannot be changed and it will always replace the other one. When you add a 'provides', you will create a "virtual package" named after the provides, with the version and release you want, so RPM can compare versions and releases as usual. For example: Provides: kmod-openvswitch = %{version}-%{release} That means you package is also known to rpm as kmod-openvswitch-2.10.0-10.fc29.... fbl > > Best, > Martin > > On Wed, Jul 25, 2018 at 9:10 AM, Flavio Leitner <fbl@redhat.com> wrote: > > > On Fri, Jul 20, 2018 at 03:24:53PM -0700, Martin Xu wrote: > > > This patch ports changes from kmod rhel6 spec file to fedora spec file, > > > to support packaging kernel modules built against multiple versions of > > > kernel sources. > > > > > > 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. > > > > > > Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz). > > > This patch allows multiple kernel version numbers delimited by > > > whitespace to be passed as variable "kversion". The result RPM packages > > > the kernel module .ko files from all specified kernel versions. For > > > example, > > > > > > make rpm-fedora-kmod \ > > > RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \ > > > 3.10.0-693.17.1.el7.x86_64"' > > > > > > By default, make tries to build against the current running kernel. > > > > > > This patch also includes a script to update the weak-update symlinks > > > if the system kernel version is upgraded or downgraded after > > > openvswitch-kmod is installed. > > > > > > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> > > > CC: Greg Rose <gvrose8192@gmail.com> > > > CC: Flavio Leitner <fbl@redhat.com> > > > --- > > > rhel/openvswitch-kmod-fedora.spec.in | 86 > > +++++++++++++++++++++++------------- > > > 1 file changed, 55 insertions(+), 31 deletions(-) > > > > > > diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/ > > openvswitch-kmod-fedora.spec.in > > > index c0cd298..24f8290 100644 > > > --- a/rhel/openvswitch-kmod-fedora.spec.in > > > +++ b/rhel/openvswitch-kmod-fedora.spec.in > > > @@ -1,6 +1,6 @@ > > > # Spec file for Open vSwitch. > > > > > > -# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. > > > +# Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc. > > > # > > > # Copying and distribution of this file, with or without modification, > > > # are permitted in any medium without royalty provided the copyright > > > @@ -26,6 +26,9 @@ Release: 1%{?dist} > > > Source: openvswitch-%{version}.tar.gz > > > #Source1: openvswitch-init > > > Buildroot: /tmp/openvswitch-xen-rpm > > > +Provides: kmod-openvswitch > > > +Conflicts: kmod-openvswitch > > > +Obsoletes: kmod-openvswitch > > > > Usually the above is versioned to avoid future issues. > > e.g.: Conflicts: kmod-openvswitch < %{version}-%{release} > > > > I didn't spot anything else other than the above, thanks! > > fbl > > > > > > > > %description > > > Open vSwitch provides standard network bridging functions augmented with > > > @@ -36,55 +39,76 @@ traffic. This package contains the kernel modules. > > > %setup -q -n openvswitch-%{version} > > > > > > %build > > > -%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl > > > -make %{_smp_mflags} -C datapath/linux > > > +for kv in %{kversion}; do > > > + mkdir -p _$kv > > > + (cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. \ > > > + --with-linux=/usr/src/kernels/${kv}/ --enable-ssl) > > > + make %{_smp_mflags} -C _$kv/datapath/linux > > > +done > > > > > > %install > > > +export INSTALL_MOD_DIR=extra/openvswitch > > > rm -rf $RPM_BUILD_ROOT > > > -make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install > > > +for kv in %{kversion}; do > > > + make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux > > modules_install > > > +done > > > mkdir -p $RPM_BUILD_ROOT/etc/depmod.d > > > -for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko > > > -do > > > - modname="$(basename ${module})" > > > - echo "override ${modname%.ko} * extra" >> \ > > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > - echo "override ${modname%.ko} * weak-updates" >> \ > > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > +for kv in %{kversion}; do > > > + for module in $RPM_BUILD_ROOT/lib/modules/${ > > kv}/extra/openvswitch/*.ko > > > + do > > > + modname="$(basename ${module})" > > > + grep -qsPo "^\s*override ${modname%.ko} \* extra\/openvwitch" \ > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > > + echo "override ${modname%.ko} * extra/openvswitch" >> \ > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > + grep -qsPo "^\s*override ${modname%.ko} \* > > weak-updates\/openvwitch" \ > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > > + echo "override ${modname%.ko} * weak-updates/openvswitch" > > >> \ > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > + done > > > done > > > +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts > > > +install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > > \ > > > + $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > > > %clean > > > rm -rf $RPM_BUILD_ROOT > > > > > > %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 > > > +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/openvswitch/scripts/ovs-kmod-manage.sh" ]; then > > > + /usr/share/openvswitch/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/%{kernel}/extra/$m.ko" > > > - done | /sbin/weak-modules --remove-modules > > > + echo "/lib/modules/%{kernel}/extra/openvswitch/$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(0644,root,root) > > > -/lib/modules/%{kernel}/extra/*.ko > > > +/lib/modules/*/extra/openvswitch/*.ko > > > /etc/depmod.d/kmod-openvswitch.conf > > > -%exclude /lib/modules/%{kernel}/modules.* > > > +%exclude /lib/modules/*/modules.* > > > +%attr(755,root,root) /usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > > > %changelog > > > * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com> > > > -- > > > 1.8.3.1 > > > > > > > -- > > Flavio > >
Thanks for the suggestions. I removed the "obseletes" from the patch, so we can go either way for the kmod RPM naming. A new patch is sent out. Martin On Mon, Jul 30, 2018 at 12:18 PM Flavio Leitner <fbl@redhat.com> wrote: > On Fri, Jul 27, 2018 at 11:19:58AM -0700, Martin Xu wrote: > > Hi Flavio, > > > > Thanks for the review. I was thinking of using this to prevent a user to > > directly install openvswitch-kmod rpm built with the fedora spec file > when > > the system already has the kmod-openvswitch built from rhel6 spec file. > > Packages are named differently. In that case, it's not a matter of > > versions. They could be built off the identical source tree, but > shouldn't > > coexist. Perhaps there's other ways to implement what I intended to do > > here, if you have any suggestions? > > If the files are the same, rpm will complain about the file conflicts > when it tries to install. In that case we only need Conflicts and perhaps > it's ok to not add a version. > > But for obsoletes, it essentially says that your package should > replace the other one. If that is what you want, that's okay too. > However, we will be unable to roll back that in the future if we > need to revive kmod-openvswitch as this package once built cannot > be changed and it will always replace the other one. > > When you add a 'provides', you will create a "virtual package" named > after the provides, with the version and release you want, so RPM can > compare versions and releases as usual. For example: > > Provides: kmod-openvswitch = %{version}-%{release} > > That means you package is also known to rpm as > kmod-openvswitch-2.10.0-10.fc29.... > > fbl > > > > > > Best, > > Martin > > > > On Wed, Jul 25, 2018 at 9:10 AM, Flavio Leitner <fbl@redhat.com> wrote: > > > > > On Fri, Jul 20, 2018 at 03:24:53PM -0700, Martin Xu wrote: > > > > This patch ports changes from kmod rhel6 spec file to fedora spec > file, > > > > to support packaging kernel modules built against multiple versions > of > > > > kernel sources. > > > > > > > > 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. > > > > > > > > Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz). > > > > This patch allows multiple kernel version numbers delimited by > > > > whitespace to be passed as variable "kversion". The result RPM > packages > > > > the kernel module .ko files from all specified kernel versions. For > > > > example, > > > > > > > > make rpm-fedora-kmod \ > > > > RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \ > > > > 3.10.0-693.17.1.el7.x86_64"' > > > > > > > > By default, make tries to build against the current running kernel. > > > > > > > > This patch also includes a script to update the weak-update symlinks > > > > if the system kernel version is upgraded or downgraded after > > > > openvswitch-kmod is installed. > > > > > > > > Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> > > > > CC: Greg Rose <gvrose8192@gmail.com> > > > > CC: Flavio Leitner <fbl@redhat.com> > > > > --- > > > > rhel/openvswitch-kmod-fedora.spec.in | 86 > > > +++++++++++++++++++++++------------- > > > > 1 file changed, 55 insertions(+), 31 deletions(-) > > > > > > > > diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/ > > > openvswitch-kmod-fedora.spec.in > > > > index c0cd298..24f8290 100644 > > > > --- a/rhel/openvswitch-kmod-fedora.spec.in > > > > +++ b/rhel/openvswitch-kmod-fedora.spec.in > > > > @@ -1,6 +1,6 @@ > > > > # Spec file for Open vSwitch. > > > > > > > > -# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. > > > > +# Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc. > > > > # > > > > # Copying and distribution of this file, with or without > modification, > > > > # are permitted in any medium without royalty provided the copyright > > > > @@ -26,6 +26,9 @@ Release: 1%{?dist} > > > > Source: openvswitch-%{version}.tar.gz > > > > #Source1: openvswitch-init > > > > Buildroot: /tmp/openvswitch-xen-rpm > > > > +Provides: kmod-openvswitch > > > > +Conflicts: kmod-openvswitch > > > > +Obsoletes: kmod-openvswitch > > > > > > Usually the above is versioned to avoid future issues. > > > e.g.: Conflicts: kmod-openvswitch < %{version}-%{release} > > > > > > I didn't spot anything else other than the above, thanks! > > > fbl > > > > > > > > > > > %description > > > > Open vSwitch provides standard network bridging functions augmented > with > > > > @@ -36,55 +39,76 @@ traffic. This package contains the kernel > modules. > > > > %setup -q -n openvswitch-%{version} > > > > > > > > %build > > > > -%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl > > > > -make %{_smp_mflags} -C datapath/linux > > > > +for kv in %{kversion}; do > > > > + mkdir -p _$kv > > > > + (cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. > \ > > > > + --with-linux=/usr/src/kernels/${kv}/ --enable-ssl) > > > > + make %{_smp_mflags} -C _$kv/datapath/linux > > > > +done > > > > > > > > %install > > > > +export INSTALL_MOD_DIR=extra/openvswitch > > > > rm -rf $RPM_BUILD_ROOT > > > > -make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux > modules_install > > > > +for kv in %{kversion}; do > > > > + make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux > > > modules_install > > > > +done > > > > mkdir -p $RPM_BUILD_ROOT/etc/depmod.d > > > > -for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko > > > > -do > > > > - modname="$(basename ${module})" > > > > - echo "override ${modname%.ko} * extra" >> \ > > > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > > - echo "override ${modname%.ko} * weak-updates" >> \ > > > > - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > > +for kv in %{kversion}; do > > > > + for module in $RPM_BUILD_ROOT/lib/modules/${ > > > kv}/extra/openvswitch/*.ko > > > > + do > > > > + modname="$(basename ${module})" > > > > + grep -qsPo "^\s*override ${modname%.ko} \* > extra\/openvwitch" \ > > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > > > + echo "override ${modname%.ko} * extra/openvswitch" >> \ > > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > > + grep -qsPo "^\s*override ${modname%.ko} \* > > > weak-updates\/openvwitch" \ > > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ > > > > + echo "override ${modname%.ko} * > weak-updates/openvswitch" > > > >> \ > > > > + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf > > > > + done > > > > done > > > > +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts > > > > +install -p -m 0755 > rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh > > > \ > > > > + $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > > > > > %clean > > > > rm -rf $RPM_BUILD_ROOT > > > > > > > > %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 > > > > +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/openvswitch/scripts/ovs-kmod-manage.sh" ]; > then > > > > + /usr/share/openvswitch/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/%{kernel}/extra/$m.ko" > > > > - done | /sbin/weak-modules --remove-modules > > > > + echo "/lib/modules/%{kernel}/extra/openvswitch/$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(0644,root,root) > > > > -/lib/modules/%{kernel}/extra/*.ko > > > > +/lib/modules/*/extra/openvswitch/*.ko > > > > /etc/depmod.d/kmod-openvswitch.conf > > > > -%exclude /lib/modules/%{kernel}/modules.* > > > > +%exclude /lib/modules/*/modules.* > > > > +%attr(755,root,root) > /usr/share/openvswitch/scripts/ovs-kmod-manage.sh > > > > > > > > %changelog > > > > * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com> > > > > -- > > > > 1.8.3.1 > > > > > > > > > > -- > > > Flavio > > > > > -- > Flavio >
diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/openvswitch-kmod-fedora.spec.in index c0cd298..24f8290 100644 --- a/rhel/openvswitch-kmod-fedora.spec.in +++ b/rhel/openvswitch-kmod-fedora.spec.in @@ -1,6 +1,6 @@ # Spec file for Open vSwitch. -# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. +# Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright @@ -26,6 +26,9 @@ Release: 1%{?dist} Source: openvswitch-%{version}.tar.gz #Source1: openvswitch-init Buildroot: /tmp/openvswitch-xen-rpm +Provides: kmod-openvswitch +Conflicts: kmod-openvswitch +Obsoletes: kmod-openvswitch %description Open vSwitch provides standard network bridging functions augmented with @@ -36,55 +39,76 @@ traffic. This package contains the kernel modules. %setup -q -n openvswitch-%{version} %build -%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl -make %{_smp_mflags} -C datapath/linux +for kv in %{kversion}; do + mkdir -p _$kv + (cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. \ + --with-linux=/usr/src/kernels/${kv}/ --enable-ssl) + make %{_smp_mflags} -C _$kv/datapath/linux +done %install +export INSTALL_MOD_DIR=extra/openvswitch rm -rf $RPM_BUILD_ROOT -make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install +for kv in %{kversion}; do + make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux modules_install +done mkdir -p $RPM_BUILD_ROOT/etc/depmod.d -for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko -do - modname="$(basename ${module})" - echo "override ${modname%.ko} * extra" >> \ - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf - echo "override ${modname%.ko} * weak-updates" >> \ - $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf +for kv in %{kversion}; do + for module in $RPM_BUILD_ROOT/lib/modules/${kv}/extra/openvswitch/*.ko + do + modname="$(basename ${module})" + grep -qsPo "^\s*override ${modname%.ko} \* extra\/openvwitch" \ + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ + echo "override ${modname%.ko} * extra/openvswitch" >> \ + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf + grep -qsPo "^\s*override ${modname%.ko} \* weak-updates\/openvwitch" \ + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \ + echo "override ${modname%.ko} * weak-updates/openvswitch" >> \ + $RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf + done done +install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts +install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \ + $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh %clean rm -rf $RPM_BUILD_ROOT %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 +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/openvswitch/scripts/ovs-kmod-manage.sh" ]; then + /usr/share/openvswitch/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/%{kernel}/extra/$m.ko" - done | /sbin/weak-modules --remove-modules + echo "/lib/modules/%{kernel}/extra/openvswitch/$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(0644,root,root) -/lib/modules/%{kernel}/extra/*.ko +/lib/modules/*/extra/openvswitch/*.ko /etc/depmod.d/kmod-openvswitch.conf -%exclude /lib/modules/%{kernel}/modules.* +%exclude /lib/modules/*/modules.* +%attr(755,root,root) /usr/share/openvswitch/scripts/ovs-kmod-manage.sh %changelog * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com>
This patch ports changes from kmod rhel6 spec file to fedora spec file, to support packaging kernel modules built against multiple versions of kernel sources. 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. Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz). This patch allows multiple kernel version numbers delimited by whitespace to be passed as variable "kversion". The result RPM packages the kernel module .ko files from all specified kernel versions. For example, make rpm-fedora-kmod \ RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \ 3.10.0-693.17.1.el7.x86_64"' By default, make tries to build against the current running kernel. This patch also includes a script to update the weak-update symlinks if the system kernel version is upgraded or downgraded after openvswitch-kmod is installed. Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com> CC: Greg Rose <gvrose8192@gmail.com> CC: Flavio Leitner <fbl@redhat.com> --- rhel/openvswitch-kmod-fedora.spec.in | 86 +++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 31 deletions(-)