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_monitor-external-ids \
77 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/monitor-external-ids
78 install -m 755 xenserver/usr_share_openvswitch_scripts_refresh-xs-network-uuids \
79 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/refresh-xs-network-uuids
80 install -m 755 xenserver/usr_sbin_xen-bugtool \
81 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/xen-bugtool
82 install -m 755 xenserver/usr_sbin_brctl \
83 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/brctl
84 install -m 755 xenserver/usr_share_openvswitch_scripts_sysconfig.template \
85 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/sysconfig.template
86 install -d -m 755 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base
88 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
89 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
91 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch
92 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch \;
93 install xenserver/uuid.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
95 # Get rid of stuff we don't want to make RPM happy.
97 $RPM_BUILD_ROOT/usr/bin/ovs-controller \
98 $RPM_BUILD_ROOT/usr/bin/ovs-discover \
99 $RPM_BUILD_ROOT/usr/bin/ovs-kill \
100 $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
101 $RPM_BUILD_ROOT/usr/bin/ovs-pki \
102 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
103 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
104 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
105 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
106 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
108 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
111 rm -rf $RPM_BUILD_ROOT
114 if [ ! -f /etc/xensource-inventory ]; then
115 printf "XenSource inventory not present in /etc/xensource-inventory"
118 . /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
128 printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
129 elif md5sum -c --status <<EOF
130 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
131 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
132 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
133 f6519085c2fc5f7bc4eccc294ed62000 /usr/sbin/xen-bugtool
136 printf "\nVerified host scripts from XenServer 5.5.0-24648p (Update 1)\n"
137 printf "or 5.5.0-25727p (Update 2).\n\n"
138 elif md5sum -c --status <<EOF
139 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
140 02cf136237ed85fcbcc1efc15ce0591c /opt/xensource/libexec/interface-reconfigure
141 3a192ee70ebf2153c90051b3af95f331 /opt/xensource/libexec/InterfaceReconfigureBridge.py
142 f71cadf1464caefa7943de0ab47fdd8a /opt/xensource/libexec/InterfaceReconfigure.py
143 d70f08f235fb1bfd49a0580e440f15a0 /opt/xensource/libexec/InterfaceReconfigureVswitch.py
144 f5c85ca825b1e6f5a0845530981cd836 /etc/xensource/scripts/vif
145 facb851606f82ca2bcc760a4d91bbe33 /usr/sbin/xen-bugtool
148 printf "\nVerified host scripts from XenServer 5.5.900-29381p.\n\n"
152 The original XenServer scripts replaced by this package are not those
153 of any supported version of XenServer. This could lead to unexpected
154 behavior of your server. Unless you are sure you know what you are
155 doing, it is highly recommended that you remove this package
156 immediately after the install completes, which will restore the
157 XenServer scripts that you were previously using.
163 # On XenServer 5.5.0, we need refresh-xs-network-uuids to run whenever
164 # XAPI starts or restarts. (On XenServer 5.6.0, XAPI calls the
165 # "update" method of the vswitch-cfg-update plugin whenever it starts
166 # or restarts, so this is no longer necessary.)
167 if test "$PRODUCT_VERSION" = "5.5.0"; then
168 RNU=/usr/share/openvswitch/scripts/refresh-xs-network-uuids
169 XSS=/opt/xensource/libexec/xapi-startup-script
170 if test -e $XSS && (test ! -L $XSS || test "`readlink $XSS`" != $RNU); then
171 echo "$XSS is already in use, refusing to overwrite"
177 # If /etc/xensource/network.conf doesn't exist (it was added in 5.6.0),
178 # then interface-reconfigure will be unhappy when we run it below.
179 if test ! -e /etc/xensource/network.conf; then
180 echo bridge > /etc/xensource/network.conf
185 if test ! -e /var/xapi/network.dbcache; then
186 if test "$1" = 1; then
187 printf "Creating xapi database cache... "
189 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
190 printf " but the xapi database cache is missing.\n"
191 printf "Re-creating xapi database cache... "
194 if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
198 printf "Open vSwitch can only be installed on a XenServer that\n"
199 printf "has connectivity to xapi on the pool master. Please\n"
200 printf "fix connectivity to the pool master, then try again.\n"
205 # Ensure that modprobe will find our modules.
206 depmod %{xen_version}
208 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
209 cat >>/etc/sysctl.conf <<EOF
210 # This works around an issue in xhad, which binds to a particular
211 # Ethernet device, which in turn causes ICMP port unreachable messages
212 # if packets are received are on the wrong interface, which in turn
213 # can happen if we send out ARP replies on every interface (as Linux
214 # does by default) instead of just on the interface that has the IP
215 # address being ARPed for, which this sysctl setting in turn works
219 net.ipv4.conf.all.arp_filter = 1
223 if test ! -e /etc/openvswitch/conf.db; then
224 install -d -m 755 -o root -g root /etc/openvswitch
226 # Create ovs-vswitchd config database
227 ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
228 /usr/share/openvswitch/vswitch.ovsschema
230 # Create initial table in config database
231 ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
232 '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
236 # Create default or update existing /etc/sysconfig/openvswitch.
237 SYSCONFIG=/etc/sysconfig/openvswitch
238 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
239 if [ ! -e $SYSCONFIG ]; then
240 cp $TEMPLATE $SYSCONFIG
242 for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
244 if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
246 sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
251 # Replace XenServer files by our versions.
252 mkdir -p /usr/lib/openvswitch/xs-original \
253 || printf "Could not create script backup directory.\n"
255 /opt/xensource/libexec/interface-reconfigure \
256 /opt/xensource/libexec/InterfaceReconfigure.py \
257 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
258 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
259 /etc/xensource/scripts/vif \
260 /usr/sbin/xen-bugtool \
265 if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
266 mv "$f" /usr/lib/openvswitch/xs-original/ \
267 || printf "Could not save original XenServer $s script\n"
268 ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
269 || printf "Could not link to Open vSwitch $s script\n"
273 # Ensure all required services are set to run
274 for s in openvswitch openvswitch-xapi-update; do
275 if chkconfig --list $s >/dev/null 2>&1; then
276 chkconfig --del $s || printf "Could not remove $s init script."
278 chkconfig --add $s || printf "Could not add $s init script."
279 chkconfig $s on || printf "Could not enable $s init script."
282 # Configure system to use Open vSwitch
283 echo vswitch > /etc/xensource/network.conf
285 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
286 printf "\nYou MUST reboot the server NOW to complete the change to\n"
287 printf "Open vSwitch. Attempts to modify networking on the server\n"
288 printf "or any hosted VM will fail until after the reboot and could\n"
289 printf "leave the server in an state requiring manual recovery.\n\n"
291 printf "\nTo use the new Open vSwitch install, you should reboot the\n"
292 printf "server now. Failure to do so may result in incorrect operation."
297 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
298 for s in openvswitch openvswitch-xapi-update; do
299 chkconfig --del $s || printf "Could not remove $s init script."
305 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
306 . /etc/xensource-inventory
307 if test "$PRODUCT_VERSION" = "5.5.0"; then
308 XSS=/opt/xensource/libexec/xapi-startup-script
312 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
313 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
315 rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
316 /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
317 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
318 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
319 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
320 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
322 # Restore original XenServer scripts
324 /opt/xensource/libexec/interface-reconfigure \
325 /opt/xensource/libexec/InterfaceReconfigure.py \
326 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
327 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
328 /etc/xensource/scripts/vif \
329 /usr/sbin/xen-bugtool \
333 if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
334 printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
335 printf "Could not restore original XenServer script.\n"
338 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
339 || printf "Could not restore original XenServer $s script.\n"
343 # Remove all configuration files
344 rm -f /etc/openvswitch/conf.db
345 rm -f /etc/sysconfig/openvswitch
346 rm -f /etc/openvswitch/vswitchd.cacert
347 rm -f /var/xapi/network.dbcache
349 if test "$PRODUCT_VERSION" != "5.5.0"; then
350 # Configure system to use bridge
351 echo bridge > /etc/xensource/network.conf
353 # Get rid of network.conf entirely, to make the system pristine.
354 rm -f /etc/xensource/network.conf
357 printf "\nYou MUST reboot the server now to complete the change to\n"
358 printf "standard Xen networking. Attempts to modify networking on the\n"
359 printf "server or any hosted VM will fail until after the reboot and\n"
360 printf "could leave the server in a state requiring manual recovery.\n\n"
365 %defattr(-,root,root)
366 /etc/init.d/openvswitch
367 /etc/init.d/openvswitch-xapi-update
368 /etc/xapi.d/plugins/openvswitch-cfg-update
369 /etc/logrotate.d/openvswitch
370 /etc/profile.d/openvswitch.sh
371 /lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
372 /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko
373 /usr/share/openvswitch/python/ovs/__init__.py
374 /usr/share/openvswitch/python/ovs/daemon.py
375 /usr/share/openvswitch/python/ovs/db/__init__.py
376 /usr/share/openvswitch/python/ovs/db/data.py
377 /usr/share/openvswitch/python/ovs/db/error.py
378 /usr/share/openvswitch/python/ovs/db/idl.py
379 /usr/share/openvswitch/python/ovs/db/parser.py
380 /usr/share/openvswitch/python/ovs/db/schema.py
381 /usr/share/openvswitch/python/ovs/db/types.py
382 /usr/share/openvswitch/python/ovs/dirs.py
383 /usr/share/openvswitch/python/ovs/fatal_signal.py
384 /usr/share/openvswitch/python/ovs/json.py
385 /usr/share/openvswitch/python/ovs/jsonrpc.py
386 /usr/share/openvswitch/python/ovs/ovsuuid.py
387 /usr/share/openvswitch/python/ovs/poller.py
388 /usr/share/openvswitch/python/ovs/process.py
389 /usr/share/openvswitch/python/ovs/reconnect.py
390 /usr/share/openvswitch/python/ovs/socket_util.py
391 /usr/share/openvswitch/python/ovs/stream.py
392 /usr/share/openvswitch/python/ovs/timeval.py
393 /usr/share/openvswitch/python/ovs/util.py
394 /usr/share/openvswitch/python/uuid.py
395 /usr/share/openvswitch/scripts/monitor-external-ids
396 /usr/share/openvswitch/scripts/refresh-xs-network-uuids
397 /usr/share/openvswitch/scripts/interface-reconfigure
398 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
399 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
400 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
401 /usr/share/openvswitch/scripts/vif
402 /usr/share/openvswitch/scripts/xen-bugtool
403 /usr/share/openvswitch/scripts/brctl
404 /usr/share/openvswitch/scripts/sysconfig.template
405 /usr/share/openvswitch/vswitch.ovsschema
406 /usr/sbin/ovs-brcompatd
407 /usr/sbin/ovs-vswitchd
408 /usr/sbin/ovsdb-server
413 /usr/bin/ovsdb-client
415 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
416 /usr/share/man/man1/ovsdb-client.1.gz
417 /usr/share/man/man1/ovsdb-server.1.gz
418 /usr/share/man/man1/ovsdb-tool.1.gz
419 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
420 /usr/share/man/man8/ovs-appctl.8.gz
421 /usr/share/man/man8/ovs-brcompatd.8.gz
422 /usr/share/man/man8/ovs-dpctl.8.gz
423 /usr/share/man/man8/ovs-ofctl.8.gz
424 /usr/share/man/man8/ovs-parse-leaks.8.gz
425 /usr/share/man/man8/ovs-vsctl.8.gz
426 /usr/share/man/man8/ovs-vswitchd.8.gz
428 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
429 %exclude /usr/share/openvswitch/scripts/*.py[co]
430 %exclude /usr/share/openvswitch/python/*.py[co]
431 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
432 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]