1 # Spec file for Open vSwitch.
3 # Copyright (C) 2009, 2010 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 # openvswitch_version, xen_version, and build_number using -D arguments.
14 # 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
16 %define version %{openvswitch_version}-%{xen_version}
19 Summary: Virtual switch
20 Group: System Environment/Daemons
21 URL: http://www.openvswitch.org/
22 Vendor: Nicira Networks, Inc.
23 Version: %{openvswitch_version}
25 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
26 License: ASL 2.0 and GPLv2
28 Source: openvswitch-%{openvswitch_version}.tar.gz
29 Buildroot: /tmp/openvswitch-xen-rpm
30 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
33 Open vSwitch provides standard network bridging functions augmented with
34 support for the OpenFlow protocol for remote per-flow control of
38 %setup -q -n openvswitch-%{openvswitch_version}
41 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
45 rm -rf $RPM_BUILD_ROOT
46 make install DESTDIR=$RPM_BUILD_ROOT
47 install -d -m 755 $RPM_BUILD_ROOT/etc
48 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
49 install -m 755 xenserver/etc_init.d_openvswitch \
50 $RPM_BUILD_ROOT/etc/init.d/openvswitch
51 install -m 755 xenserver/etc_init.d_openvswitch-xapi-update \
52 $RPM_BUILD_ROOT/etc/init.d/openvswitch-xapi-update
53 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
54 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
55 install -m 755 xenserver/etc_logrotate.d_openvswitch \
56 $RPM_BUILD_ROOT/etc/logrotate.d/openvswitch
57 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
58 install -m 755 xenserver/etc_profile.d_openvswitch.sh \
59 $RPM_BUILD_ROOT/etc/profile.d/openvswitch.sh
60 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
61 install -m 755 xenserver/etc_xapi.d_plugins_openvswitch-cfg-update \
62 $RPM_BUILD_ROOT/etc/xapi.d/plugins/openvswitch-cfg-update
63 install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
64 install -m 644 vswitchd/vswitch.ovsschema \
65 $RPM_BUILD_ROOT/usr/share/openvswitch/vswitch.ovsschema
66 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
67 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/interface-reconfigure
68 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigure.py \
69 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigure.py
70 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py \
71 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
72 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py \
73 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
74 install -m 755 xenserver/etc_xensource_scripts_vif \
75 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/vif
76 install -m 755 xenserver/usr_share_openvswitch_scripts_refresh-network-uuids \
77 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/refresh-network-uuids
78 install -m 755 xenserver/usr_sbin_xen-bugtool \
79 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/xen-bugtool
80 install -m 755 xenserver/usr_sbin_brctl \
81 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/brctl
82 install -m 755 xenserver/usr_share_openvswitch_scripts_sysconfig.template \
83 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/sysconfig.template
84 install -d -m 755 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base
86 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
87 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
89 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch
90 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch \;
91 install xenserver/uuid.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
93 # Get rid of stuff we don't want to make RPM happy.
95 $RPM_BUILD_ROOT/usr/bin/ovs-controller \
96 $RPM_BUILD_ROOT/usr/bin/ovs-discover \
97 $RPM_BUILD_ROOT/usr/bin/ovs-kill \
98 $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
99 $RPM_BUILD_ROOT/usr/bin/ovs-pki \
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
106 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
109 rm -rf $RPM_BUILD_ROOT
112 if [ ! -f /etc/xensource-inventory ]; then
113 printf "XenSource inventory not present in /etc/xensource-inventory"
116 . /etc/xensource-inventory
118 if [ "$1" = "1" ]; then
119 if md5sum -c --status <<EOF
120 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
121 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
122 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
123 5654c8c36699fcc8744ca9cd5b855414 /usr/sbin/xen-bugtool
126 printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
127 elif md5sum -c --status <<EOF
128 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
129 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
130 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
131 f6519085c2fc5f7bc4eccc294ed62000 /usr/sbin/xen-bugtool
134 printf "\nVerified host scripts from XenServer 5.5.0-24648p (Update 1)\n"
135 printf "or 5.5.0-25727p (Update 2).\n\n"
136 elif md5sum -c --status <<EOF
137 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
138 02cf136237ed85fcbcc1efc15ce0591c /opt/xensource/libexec/interface-reconfigure
139 3a192ee70ebf2153c90051b3af95f331 /opt/xensource/libexec/InterfaceReconfigureBridge.py
140 f71cadf1464caefa7943de0ab47fdd8a /opt/xensource/libexec/InterfaceReconfigure.py
141 d70f08f235fb1bfd49a0580e440f15a0 /opt/xensource/libexec/InterfaceReconfigureVswitch.py
142 f5c85ca825b1e6f5a0845530981cd836 /etc/xensource/scripts/vif
143 facb851606f82ca2bcc760a4d91bbe33 /usr/sbin/xen-bugtool
146 printf "\nVerified host scripts from XenServer 5.5.900-29381p.\n\n"
150 The original XenServer scripts replaced by this package are not those
151 of any supported version of XenServer. This could lead to unexpected
152 behavior of your server. Unless you are sure you know what you are
153 doing, it is highly recommended that you remove this package
154 immediately after the install completes, which will restore the
155 XenServer scripts that you were previously using.
161 # On XenServer 5.5.0, we need refresh-network-uuids to run whenever
162 # XAPI starts or restarts. (On XenServer 5.6.0, XAPI calls the
163 # "update" method of the vswitch-cfg-update plugin whenever it starts
164 # or restarts, so this is no longer necessary.)
165 if test "$PRODUCT_VERSION" = "5.5.0"; then
166 RNU=/usr/share/openvswitch/scripts/refresh-network-uuids
167 XSS=/opt/xensource/libexec/xapi-startup-script
168 if test -e $XSS && (test ! -L $XSS || test "`readlink $XSS`" != $RNU); then
169 echo "$XSS is already in use, refusing to overwrite"
175 # If /etc/xensource/network.conf doesn't exist (it was added in 5.6.0),
176 # then interface-reconfigure will be unhappy when we run it below.
177 if test ! -e /etc/xensource/network.conf; then
178 echo bridge > /etc/xensource/network.conf
183 if test ! -e /var/xapi/network.dbcache; then
184 if test "$1" = 1; then
185 printf "Creating xapi database cache... "
187 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
188 printf " but the xapi database cache is missing.\n"
189 printf "Re-creating xapi database cache... "
192 if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
196 printf "Open vSwitch can only be installed on a XenServer that\n"
197 printf "has connectivity to xapi on the pool master. Please\n"
198 printf "fix connectivity to the pool master, then try again.\n"
203 # Ensure that modprobe will find our modules.
204 depmod %{xen_version}
206 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
207 cat >>/etc/sysctl.conf <<EOF
208 # This works around an issue in xhad, which binds to a particular
209 # Ethernet device, which in turn causes ICMP port unreachable messages
210 # if packets are received are on the wrong interface, which in turn
211 # can happen if we send out ARP replies on every interface (as Linux
212 # does by default) instead of just on the interface that has the IP
213 # address being ARPed for, which this sysctl setting in turn works
217 net.ipv4.conf.all.arp_filter = 1
221 if test ! -e /etc/openvswitch/conf.db; then
222 install -d -m 755 -o root -g root /etc/openvswitch
224 # Create ovs-vswitchd config database
225 ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
226 /usr/share/openvswitch/vswitch.ovsschema
228 # Create initial table in config database
229 ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
230 '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
234 # Create default or update existing /etc/sysconfig/openvswitch.
235 SYSCONFIG=/etc/sysconfig/openvswitch
236 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
237 if [ ! -e $SYSCONFIG ]; then
238 cp $TEMPLATE $SYSCONFIG
240 for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
242 if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
244 sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
249 # Replace XenServer files by our versions.
250 mkdir -p /usr/lib/openvswitch/xs-original \
251 || printf "Could not create script backup directory.\n"
253 /opt/xensource/libexec/interface-reconfigure \
254 /opt/xensource/libexec/InterfaceReconfigure.py \
255 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
256 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
257 /etc/xensource/scripts/vif \
258 /usr/sbin/xen-bugtool \
263 if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
264 mv "$f" /usr/lib/openvswitch/xs-original/ \
265 || printf "Could not save original XenServer $s script\n"
266 ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
267 || printf "Could not link to Open vSwitch $s script\n"
271 # Ensure all required services are set to run
272 for s in openvswitch openvswitch-xapi-update; do
273 if chkconfig --list $s >/dev/null 2>&1; then
274 chkconfig --del $s || printf "Could not remove $s init script."
276 chkconfig --add $s || printf "Could not add $s init script."
277 chkconfig $s on || printf "Could not enable $s init script."
280 # Configure system to use Open vSwitch
281 echo vswitch > /etc/xensource/network.conf
283 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
284 printf "\nYou MUST reboot the server NOW to complete the change to\n"
285 printf "Open vSwitch. Attempts to modify networking on the server\n"
286 printf "or any hosted VM will fail until after the reboot and could\n"
287 printf "leave the server in an state requiring manual recovery.\n\n"
289 printf "\nTo use the new Open vSwitch install, you should reboot the\n"
290 printf "server now. Failure to do so may result in incorrect operation."
295 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
296 for s in openvswitch openvswitch-xapi-update; do
297 chkconfig --del $s || printf "Could not remove $s init script."
303 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
304 . /etc/xensource-inventory
305 if test "$PRODUCT_VERSION" = "5.5.0"; then
306 XSS=/opt/xensource/libexec/xapi-startup-script
310 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
311 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
313 rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
314 /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
315 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
316 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
317 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
318 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
320 # Restore original XenServer scripts
322 /opt/xensource/libexec/interface-reconfigure \
323 /opt/xensource/libexec/InterfaceReconfigure.py \
324 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
325 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
326 /etc/xensource/scripts/vif \
327 /usr/sbin/xen-bugtool \
331 if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
332 printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
333 printf "Could not restore original XenServer script.\n"
336 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
337 || printf "Could not restore original XenServer $s script.\n"
341 # Remove all configuration files
342 rm -f /etc/openvswitch/conf.db
343 rm -f /etc/sysconfig/openvswitch
344 rm -f /etc/openvswitch/vswitchd.cacert
345 rm -f /var/xapi/network.dbcache
347 if test "$PRODUCT_VERSION" != "5.5.0"; then
348 # Configure system to use bridge
349 echo bridge > /etc/xensource/network.conf
351 # Get rid of network.conf entirely, to make the system pristine.
352 rm -f /etc/xensource/network.conf
355 printf "\nYou MUST reboot the server now to complete the change to\n"
356 printf "standard Xen networking. Attempts to modify networking on the\n"
357 printf "server or any hosted VM will fail until after the reboot and\n"
358 printf "could leave the server in a state requiring manual recovery.\n\n"
363 %defattr(-,root,root)
364 /etc/init.d/openvswitch
365 /etc/init.d/openvswitch-xapi-update
366 /etc/xapi.d/plugins/openvswitch-cfg-update
367 /etc/logrotate.d/openvswitch
368 /etc/profile.d/openvswitch.sh
369 /lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
370 /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko
371 /usr/share/openvswitch/python/ovs/__init__.py
372 /usr/share/openvswitch/python/ovs/daemon.py
373 /usr/share/openvswitch/python/ovs/db/__init__.py
374 /usr/share/openvswitch/python/ovs/db/data.py
375 /usr/share/openvswitch/python/ovs/db/error.py
376 /usr/share/openvswitch/python/ovs/db/idl.py
377 /usr/share/openvswitch/python/ovs/db/parser.py
378 /usr/share/openvswitch/python/ovs/db/schema.py
379 /usr/share/openvswitch/python/ovs/db/types.py
380 /usr/share/openvswitch/python/ovs/dirs.py
381 /usr/share/openvswitch/python/ovs/fatal_signal.py
382 /usr/share/openvswitch/python/ovs/json.py
383 /usr/share/openvswitch/python/ovs/jsonrpc.py
384 /usr/share/openvswitch/python/ovs/ovsuuid.py
385 /usr/share/openvswitch/python/ovs/poller.py
386 /usr/share/openvswitch/python/ovs/process.py
387 /usr/share/openvswitch/python/ovs/reconnect.py
388 /usr/share/openvswitch/python/ovs/socket_util.py
389 /usr/share/openvswitch/python/ovs/stream.py
390 /usr/share/openvswitch/python/ovs/timeval.py
391 /usr/share/openvswitch/python/ovs/util.py
392 /usr/share/openvswitch/python/uuid.py
393 /usr/share/openvswitch/scripts/refresh-network-uuids
394 /usr/share/openvswitch/scripts/interface-reconfigure
395 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
396 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
397 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
398 /usr/share/openvswitch/scripts/vif
399 /usr/share/openvswitch/scripts/xen-bugtool
400 /usr/share/openvswitch/scripts/brctl
401 /usr/share/openvswitch/scripts/sysconfig.template
402 /usr/share/openvswitch/vswitch.ovsschema
403 /usr/sbin/ovs-brcompatd
404 /usr/sbin/ovs-vswitchd
405 /usr/sbin/ovsdb-server
410 /usr/bin/ovsdb-client
412 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
413 /usr/share/man/man1/ovsdb-client.1.gz
414 /usr/share/man/man1/ovsdb-server.1.gz
415 /usr/share/man/man1/ovsdb-tool.1.gz
416 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
417 /usr/share/man/man8/ovs-appctl.8.gz
418 /usr/share/man/man8/ovs-brcompatd.8.gz
419 /usr/share/man/man8/ovs-dpctl.8.gz
420 /usr/share/man/man8/ovs-ofctl.8.gz
421 /usr/share/man/man8/ovs-parse-leaks.8.gz
422 /usr/share/man/man8/ovs-vsctl.8.gz
423 /usr/share/man/man8/ovs-vswitchd.8.gz
425 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
426 %exclude /usr/share/openvswitch/scripts/*.py[co]
427 %exclude /usr/share/openvswitch/python/*.py[co]
428 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
429 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]