From: Andrew Evans Date: Thu, 17 Feb 2011 06:40:46 +0000 (-0800) Subject: xenserver: Split kernel/userspace into separate RPMs for supplemental packs. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a2bfbad73c06d457ce61fd6cf09c58c15d200a43;p=openvswitch xenserver: Split kernel/userspace into separate RPMs for supplemental packs. 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. --- diff --git a/INSTALL.XenServer b/INSTALL.XenServer index e7be494c..48f81785 100644 --- a/INSTALL.XenServer +++ b/INSTALL.XenServer @@ -41,27 +41,30 @@ where: 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 ------------------------------------- -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@: -(At this point you will have to enter 's root password.) + scp openvswitch-$VERSION-1.i386.rpm \ + openvswitch-modules-xen-$XEN_KERNEL_VERSION-$VERSION-1.i386.rpm \ + root@: +(At this point you will have to enter 's root password.) ssh root@ -(At this point you will have to enter 's root password again.) - rpm -U openvswitch-$VERSION-1.i386.rpm +(At this point you will have to enter '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: ssh root@ -(At this point you will have to enter 's root password again.) - rpm -e openvswitch +(At this point you will have to enter '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. diff --git a/xenserver/openvswitch-xen.spec b/xenserver/openvswitch-xen.spec index a5df6d6e..05229de5 100644 --- a/xenserver/openvswitch-xen.spec +++ b/xenserver/openvswitch-xen.spec @@ -12,28 +12,48 @@ # 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} +# 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} + 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$//') +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. +%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} @@ -135,9 +155,6 @@ if runlevel >/dev/null 2>&1; then fi fi -# 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 <