[ovs-dev] [PATCH] xenserver: Split kernel/userspace into separate RPMs for supplemental packs.

Andrew Evans aevans at nicira.com
Thu Feb 17 06:57:46 UTC 2011

XenServer has the concept of a "supplemental pack", which is just a collection
of RPMs rolled into an ISO image for installation as a unit, either during
XenServer installation or later as an update.

The script used to build supplemental packs requires that a single RPM not mix
kernel and userspace components. It also enforces a particular naming scheme
for kernel module RPMs. This commit modifies the OVS RPM spec file to create
separate RPMs in accordance with these conventions.

We had intended to make the userspace RPM depend upon the kernel RPM to ensure
that a compatible kernel module is installed, but that turns out to be
impractical since the kernel module package name includes the full kernel
version string it was built against. That would require needless rebuilding and
upgrading of the userspace RPM when kernel updates are built and installed.
 xenserver/openvswitch-xen.spec |   33 +++++++++++++++++++++++++++------
 1 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/xenserver/openvswitch-xen.spec b/xenserver/openvswitch-xen.spec
index 25e8a96..5930ced 100644
--- a/xenserver/openvswitch-xen.spec
+++ b/xenserver/openvswitch-xen.spec
@@ -15,25 +15,44 @@
 %define version %{openvswitch_version}-%{xen_version}
+# extract kernel type (xen or kdump)
+%define binsuffix -%(echo '%{xen_version}' | sed -r 's/^.*[0-9]+//')
+# kernel version string w/o kernel type
+%define kernel_version %(echo '%{xen_version}' | sed -r 's/[a-z]+$//')
+# build-supplemental-pack.sh requires this naming for kernel module packages
+%define module_package modules%{binsuffix}-%{kernel_version}
 Name: openvswitch
-Summary: Virtual switch
+Summary: Open vSwitch daemon/database/utilities
 Group: System Environment/Daemons
 URL: http://www.openvswitch.org/
 Vendor: Nicira Networks, Inc.
 Version: %{openvswitch_version}
-# The entire source code is ASL 2.0 except datapath/ which is GPLv2
-License: ASL 2.0 and GPLv2
+License: ASL 2.0
 Release: 1
 Source: openvswitch-%{openvswitch_version}.tar.gz
 Buildroot: /tmp/openvswitch-xen-rpm
-Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
+# We should require kernel module package here, but supplemental-pack-enforced
+# naming scheme puts kernel version in module package name, and we don't want
+# to have to respin the userspace package every time a new kernel comes along.
 Open vSwitch provides standard network bridging functions augmented with
 support for the OpenFlow protocol for remote per-flow control of
+%package %{module_package}
+Summary: Open vSwitch kernel module
+Group: System Environment/Kernel
+License: GPLv2
+Provides: %{name}-modules = %{kernel_version}
+Requires: kernel%{binsuffix} = %{kernel_version}
+%description %{module_package}
+Open vSwitch Linux kernel module compiled against kernel version
 %setup -q -n openvswitch-%{openvswitch_version}
@@ -293,7 +312,6 @@ fi
@@ -352,7 +370,6 @@ fi
-%exclude /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko
 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
 %exclude /usr/sbin/ovs-brcompatd
 %exclude /usr/share/man/man8/ovs-brcompatd.8.gz
@@ -360,3 +377,7 @@ fi
 %exclude /usr/share/openvswitch/python/*.py[co]
 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]
+%files %{module_package}
+%exclude /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko

More information about the dev mailing list