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.
In an attempt to ensure that the userspace and kernel module packages are both
present and compatible, the kernel package provides a fictitious capability,
openvswitch_mod.ko.0, and the userspace package requires that capability. If a
future change breaks backward compatibility between userspace and kernel, we'll
increment the numeric suffix, preventing mismatched installs.
Reviewed by Ben Pfaff.
appears as the name of a directory in /lib/modules inside the VM.
It always ends in "xen".
appears as the name of a directory in /lib/modules inside the VM.
It always ends in "xen".
-Two RPMs will be output into /usr/src/redhat/RPMS/i386, whose names
-begin with "openvswitch" and "openvswitch-debuginfo".
+Three RPMs will be output into /usr/src/redhat/RPMS/i386, whose names begin
+with "openvswitch", "openvswitch-modules-xen", and "openvswitch-debuginfo".
Installing Open vSwitch for XenServer
-------------------------------------
Installing Open vSwitch for XenServer
-------------------------------------
-To install Open vSwitch on a XenServer host, or to upgrade to a newer
-version, copy the "openvswitch" RPM to that host with "scp", then install
-it with "rpm -U", e.g.:
+To install Open vSwitch on a XenServer host, or to upgrade to a newer version,
+copy the "openvswitch" and "openvswitch-modules-xen" RPMs to that host with
+"scp", then install them with "rpm -U", e.g.:
- scp openvswitch-$VERSION-1.i386.rpm root@<host>:
-(At this point you will have to enter <host>'s root password.)
+ scp openvswitch-$VERSION-1.i386.rpm \
+ openvswitch-modules-xen-$XEN_KERNEL_VERSION-$VERSION-1.i386.rpm \
+ root@<host>:
+(At this point you will have to enter <host>'s root password.)
-(At this point you will have to enter <host>'s root password again.)
- rpm -U openvswitch-$VERSION-1.i386.rpm
+(At this point you will have to enter <host>'s root password again.)
+ rpm -U openvswitch-$VERSION-1.i386.rpm \
+ openvswitch-modules-xen-$XEN_KERNEL_VERSION-$VERSION-1.i386.rpm
-To uninstall Open vSwitch from a XenServer host, remove the package:
+To uninstall Open vSwitch from a XenServer host, remove the packages:
-(At this point you will have to enter <host>'s root password again.)
- rpm -e openvswitch
+(At this point you will have to enter <host>'s root password again.)
+ rpm -e openvswitch openvswitch-modules-xen-$XEN_KERNEL_VERSION
After installing or uninstalling Open vSwitch, the XenServer should be
rebooted as soon as possible.
After installing or uninstalling Open vSwitch, the XenServer should be
rebooted as soon as possible.
# for example:
#
# rpmbuild -D "openvswitch_version 0.8.9~1+build123" -D "xen_version 2.6.18-128.1.1.el5.xs5.1.0.483.1000xen" -D "build_number --with-build-number=123" -bb /usr/src/redhat/SPECS/openvswitch-xen.spec
# for example:
#
# rpmbuild -D "openvswitch_version 0.8.9~1+build123" -D "xen_version 2.6.18-128.1.1.el5.xs5.1.0.483.1000xen" -D "build_number --with-build-number=123" -bb /usr/src/redhat/SPECS/openvswitch-xen.spec
%define version %{openvswitch_version}-%{xen_version}
%define version %{openvswitch_version}-%{xen_version}
+# bump this when breaking compatibility with userspace
+%define module_abi_version 0
+
+# 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}
+
+Summary: Open vSwitch daemon/database/utilities
Group: System Environment/Daemons
URL: http://www.openvswitch.org/
Vendor: Nicira Networks, Inc.
Version: %{openvswitch_version}
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
Release: 1
Source: openvswitch-%{openvswitch_version}.tar.gz
Buildroot: /tmp/openvswitch-xen-rpm
Release: 1
Source: openvswitch-%{openvswitch_version}.tar.gz
Buildroot: /tmp/openvswitch-xen-rpm
-Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
+Requires: openvswitch_mod.ko.%{module_abi_version}
%description
Open vSwitch provides standard network bridging functions augmented with
support for the OpenFlow protocol for remote per-flow control of
traffic.
%description
Open vSwitch provides standard network bridging functions augmented with
support for the OpenFlow protocol for remote per-flow control of
traffic.
+%package %{module_package}
+Summary: Open vSwitch kernel module
+Group: System Environment/Kernel
+License: GPLv2
+Provides: %{name}-modules = %{kernel_version}, openvswitch_mod.ko.%{module_abi_version}
+Requires: kernel%{binsuffix} = %{kernel_version}
+
+%description %{module_package}
+Open vSwitch Linux kernel module compiled against kernel version
+%{xen_version}.
+
%prep
%setup -q -n openvswitch-%{openvswitch_version}
%prep
%setup -q -n openvswitch-%{openvswitch_version}
-# Ensure that modprobe will find our modules.
-depmod %{xen_version}
-
if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
cat >>/etc/sysctl.conf <<EOF
# This works around an issue in xhad, which binds to a particular
if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
cat >>/etc/sysctl.conf <<EOF
# This works around an issue in xhad, which binds to a particular
+%post %{module_package}
+# Ensure that modprobe will find our modules.
+depmod %{xen_version}
+
%preun
if [ "$1" = "0" ]; then # $1 = 1 for upgrade
for s in openvswitch openvswitch-xapi-update; do
%preun
if [ "$1" = "0" ]; then # $1 = 1 for upgrade
for s in openvswitch openvswitch-xapi-update; do
%postun
# Restore original XenServer scripts if the OVS equivalent no longer exists.
# This works both in the upgrade and erase cases.
%postun
# Restore original XenServer scripts if the OVS equivalent no longer exists.
# This works both in the upgrade and erase cases.
/etc/xensource/bugtool/network-status/openvswitch.xml
/etc/logrotate.d/openvswitch
/etc/profile.d/openvswitch.sh
/etc/xensource/bugtool/network-status/openvswitch.xml
/etc/logrotate.d/openvswitch
/etc/profile.d/openvswitch.sh
-/lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
/usr/share/openvswitch/python/ovs/__init__.py
/usr/share/openvswitch/python/ovs/daemon.py
/usr/share/openvswitch/python/ovs/db/__init__.py
/usr/share/openvswitch/python/ovs/__init__.py
/usr/share/openvswitch/python/ovs/daemon.py
/usr/share/openvswitch/python/ovs/db/__init__.py
/usr/share/man/man8/ovs-vsctl.8.gz
/usr/share/man/man8/ovs-vswitchd.8.gz
/var/lib/openvswitch
/usr/share/man/man8/ovs-vsctl.8.gz
/usr/share/man/man8/ovs-vswitchd.8.gz
/var/lib/openvswitch
-%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
%exclude /usr/lib/xsconsole/plugins-base/*.py[co]
%exclude /usr/sbin/ovs-brcompatd
%exclude /usr/share/man/man8/ovs-brcompatd.8.gz
%exclude /usr/share/openvswitch/python/*.py[co]
%exclude /usr/share/openvswitch/python/ovs/*.py[co]
%exclude /usr/share/openvswitch/python/ovs/db/*.py[co]
%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}
+/lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
+%exclude /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko