1 # Spec file for vswitch and related programs.
3 # Copyright (C) 2009 Nicira Networks, Inc.
5 # Copying and distribution of this file, with or without modification,
6 # are permitted in any medium without royalty provided the copyright
7 # notice and this notice are preserved. This file is offered as-is,
8 # without warranty of any kind.
10 # When building, the rpmbuild command line should define
11 # vswitch_version, xen_version, and build_number using -D arguments.
14 # rpmbuild -D "vswitch_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/vswitch-xen.spec
16 %define version %{vswitch_version}-%{xen_version}
19 Summary: Virtual switch
20 Group: System Environment/Daemons
21 URL: http://www.openvswitch.org/
22 Version: %{vswitch_version}
24 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
25 License: ASL 2.0 and GPLv2
27 Source: openvswitch-%{vswitch_version}.tar.gz
28 Buildroot: /tmp/vswitch-xen-rpm
29 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
30 # The following Conflicts prevents the "vswitch" package generated by
31 # this spec file from installing at the same time as the "openvswitch"
32 # package shipped with XenServer 5.5.900. In fact, the packages
33 # contain some files with identical names anyhow, so they will not
34 # coexist, but adding an explicit Conflicts makes this conflict more
36 Conflicts: openvswitch
39 The vswitch provides standard network bridging functions augmented with
40 support for the OpenFlow protocol for remote per-flow control of
44 %setup -q -n openvswitch-%{vswitch_version}
47 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
51 rm -rf $RPM_BUILD_ROOT
52 make install DESTDIR=$RPM_BUILD_ROOT
53 install -d -m 755 $RPM_BUILD_ROOT/etc
54 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
55 install -m 755 xenserver/etc_init.d_vswitch \
56 $RPM_BUILD_ROOT/etc/init.d/vswitch
57 install -m 755 xenserver/etc_init.d_vswitch-xapi-update \
58 $RPM_BUILD_ROOT/etc/init.d/vswitch-xapi-update
59 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
60 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
61 install -m 755 xenserver/etc_logrotate.d_vswitch \
62 $RPM_BUILD_ROOT/etc/logrotate.d/vswitch
63 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
64 install -m 755 xenserver/etc_profile.d_vswitch.sh \
65 $RPM_BUILD_ROOT/etc/profile.d/vswitch.sh
66 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
67 install -m 755 xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
68 $RPM_BUILD_ROOT/etc/xapi.d/plugins/vswitch-cfg-update
69 install -d -m 755 $RPM_BUILD_ROOT/usr/share/vswitch/scripts
70 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
71 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/interface-reconfigure
72 install -m 755 xenserver/etc_xensource_scripts_vif \
73 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif
74 install -m 755 xenserver/usr_share_vswitch_scripts_vif-on-internal-bridge \
75 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif-on-internal-bridge
76 install -m 755 xenserver/usr_sbin_xen-bugtool \
77 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-bugtool
78 install -m 755 xenserver/usr_sbin_brctl \
79 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/brctl
80 install -m 755 xenserver/usr_share_vswitch_scripts_sysconfig.template \
81 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/sysconfig.template
82 install -m 644 xenserver/etc_udev_xen-backend.rules \
83 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-backend.rules
85 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
86 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/XSFeatureVSwitch.py
88 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch
89 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch \;
91 # Get rid of stuff we don't want to make RPM happy.
93 $RPM_BUILD_ROOT/usr/bin/ovs-controller \
94 $RPM_BUILD_ROOT/usr/bin/ovs-discover \
95 $RPM_BUILD_ROOT/usr/bin/ovs-kill \
96 $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
97 $RPM_BUILD_ROOT/usr/bin/ovs-pki \
98 $RPM_BUILD_ROOT/usr/bin/ovs-wdt \
99 $RPM_BUILD_ROOT/usr/sbin/ovs-monitor \
100 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
101 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
102 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
103 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
104 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
105 rm -f $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch/veth_mod.ko
107 $RPM_BUILD_ROOT/usr/share/openvswitch/commands
109 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
112 rm -rf $RPM_BUILD_ROOT
115 if [ ! -f /etc/xensource-inventory ]; then
116 printf "XenSource inventory not present in /etc/xensource-inventory"
120 if [ "$1" = "1" ]; then
121 if md5sum -c --status <<EOF
122 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
123 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
124 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
125 5654c8c36699fcc8744ca9cd5b855414 /usr/sbin/xen-bugtool
126 883820a78723ee21340f31099b18f18e /etc/udev/xen-backend.rules
129 printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
130 elif md5sum -c --status <<EOF
131 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
132 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
133 ce451d3c985fd1db6497a363f0d9dedb /opt/xensource/libexec/interface-reconfigure
134 2b53f500431fcba5276c896e9e4281b9 /usr/sbin/xen-bugtool
135 883820a78723ee21340f31099b18f18e /etc/udev/xen-backend.rules
138 printf "\nVerified host scripts from XenServer 5.5.900.\n\n"
142 The original XenServer scripts replaced by this package are not those
143 of any supported version of XenServer. This could lead to unexpected
144 behavior of your server. Unless you are sure you know what you are
145 doing, it is highly recommended that you remove this package
146 immediately after the install completes, which will restore the
147 XenServer scripts that you were previously using.
153 if test ! -e /var/lib/openvswitch/dbcache; then
154 if test "$1" = 1; then
155 printf "Creating xapi database cache... "
157 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
158 printf " but the xapi database cache is missing.\n"
159 printf "Re-creating xapi database cache... "
162 if /usr/share/vswitch/scripts/interface-reconfigure rewrite; then
166 printf "Open vSwitch can only be installed on a XenServer that\n"
167 printf "has connectivity to xapi on the pool master. Please\n"
168 printf "fix connectivity to the pool master, then try again.\n"
173 # Ensure that modprobe will find our modules.
174 depmod %{xen_version}
176 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
177 cat >>/etc/sysctl.conf <<EOF
178 # This works around an issue in xhad, which binds to a particular
179 # Ethernet device, which in turn causes ICMP port unreachable messages
180 # if packets are received are on the wrong interface, which in turn
181 # can happen if we send out ARP replies on every interface (as Linux
182 # does by default) instead of just on the interface that has the IP
183 # address being ARPed for, which this sysctl setting in turn works
187 net.ipv4.conf.all.arp_filter = 1
191 # Ensure ovs-vswitchd.conf exists
192 touch /etc/ovs-vswitchd.conf
194 # Create default or update existing /etc/sysconfig/vswitch.
195 SYSCONFIG=/etc/sysconfig/vswitch
196 TEMPLATE=/usr/share/vswitch/scripts/sysconfig.template
197 if [ ! -e $SYSCONFIG ]; then
198 cp $TEMPLATE $SYSCONFIG
200 for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
202 if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
204 sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
209 # Replace XenServer files by our versions.
210 mkdir -p /usr/lib/vswitch/xs-original \
211 || printf "Could not create script backup directory.\n"
213 /opt/xensource/libexec/interface-reconfigure \
214 /etc/xensource/scripts/vif \
215 /usr/sbin/xen-bugtool \
217 /etc/udev/xen-backend.rules
221 if [ "$t" != "/usr/share/vswitch/scripts/$s" ]; then
222 mv "$f" /usr/lib/vswitch/xs-original/ \
223 || printf "Could not save original XenServer $s script\n"
224 ln -s "/usr/share/vswitch/scripts/$s" "$f" \
225 || printf "Could not link to vSwitch $s script\n"
229 # Install xsconsole plugin
230 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
231 if [ "$plugin" != "/usr/share/vswitch/scripts/XSFeatureVSwitch.py" ]; then
232 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
233 ln -s /usr/share/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
236 # Ensure all required services are set to run
237 for s in vswitch vswitch-xapi-update; do
238 if chkconfig --list $s >/dev/null 2>&1; then
239 chkconfig --del $s || printf "Could not remove $s init script."
241 chkconfig --add $s || printf "Could not add $s init script."
242 chkconfig $s on || printf "Could not enable $s init script."
245 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
246 printf "\nYou MUST reboot the server NOW to complete the change to the\n"
247 printf "the vSwitch. Attempts to modify networking on the server\n"
248 printf "or any hosted VM will fail until after the reboot and could\n"
249 printf "leave the server in an state requiring manual recovery.\n\n"
251 printf "\nTo use the new vSwitch, you should reboot the server\n"
252 printf "now. Failure to do so may result in incorrect operation.\n\n"
256 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
257 for s in vswitch vswitch-xapi-update; do
258 chkconfig --del $s || printf "Could not remove $s init script."
264 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
266 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
267 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
268 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
269 || printf "Could not remove vSwitch xsconsole plugin.\n"
271 # Restore original XenServer scripts
273 /opt/xensource/libexec/interface-reconfigure \
274 /etc/xensource/scripts/vif \
275 /usr/sbin/xen-bugtool \
277 /etc/udev/xen-backend.rules
280 if [ ! -f "/usr/lib/vswitch/xs-original/$s" ]; then
281 printf "Original XenServer $s script not present in /usr/lib/vswitch/xs-original\n"
282 printf "Could not restore original XenServer script.\n"
285 && mv "/usr/lib/vswitch/xs-original/$s" "$f") \
286 || printf "Could not restore original XenServer $s script.\n"
290 # Remove all configuration files
291 rm -f /etc/ovs-vswitchd.conf
292 rm -f /etc/sysconfig/vswitch
293 rm -f /etc/ovs-vswitchd.cacert
294 rm -f /var/lib/openvswitch/dbcache
296 printf "\nYou MUST reboot the server now to complete the change to\n"
297 printf "standard Xen networking. Attempts to modify networking on the\n"
298 printf "server or any hosted VM will fail until after the reboot and\n"
299 printf "could leave the server in a state requiring manual recovery.\n\n"
304 %defattr(-,root,root)
306 /etc/init.d/vswitch-xapi-update
307 /etc/xapi.d/plugins/vswitch-cfg-update
308 /etc/logrotate.d/vswitch
309 /etc/profile.d/vswitch.sh
310 /lib/modules/%{xen_version}/kernel/net/vswitch/openvswitch_mod.ko
311 /lib/modules/%{xen_version}/kernel/net/vswitch/brcompat_mod.ko
312 /usr/share/vswitch/scripts/interface-reconfigure
313 /usr/share/vswitch/scripts/vif
314 /usr/share/vswitch/scripts/xen-bugtool
315 /usr/share/vswitch/scripts/XSFeatureVSwitch.py
316 /usr/share/vswitch/scripts/brctl
317 /usr/share/vswitch/scripts/sysconfig.template
318 /usr/share/vswitch/scripts/vif-on-internal-bridge
319 /usr/share/vswitch/scripts/xen-backend.rules
320 # Following two files are generated automatically by rpm. We don't
321 # really need them and they won't be used on the XenServer, but there
322 # isn't an obvious place to get rid of them since they are generated
323 # after the install script runs. Since they are small, we just
325 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyc
326 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyo
327 /usr/sbin/ovs-brcompatd
328 /usr/sbin/ovs-vswitchd
334 /usr/share/man/man5/ovs-vswitchd.conf.5.gz
335 /usr/share/man/man8/ovs-appctl.8.gz
336 /usr/share/man/man8/ovs-brcompatd.8.gz
337 /usr/share/man/man8/ovs-cfg-mod.8.gz
338 /usr/share/man/man8/ovs-dpctl.8.gz
339 /usr/share/man/man8/ovs-ofctl.8.gz
340 /usr/share/man/man8/ovs-vsctl.8.gz
341 /usr/share/man/man8/ovs-vswitchd.8.gz