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 \;
92 # Get rid of stuff we don't want to make RPM happy.
94 $RPM_BUILD_ROOT/usr/bin/ovs-controller \
95 $RPM_BUILD_ROOT/usr/bin/ovs-discover \
96 $RPM_BUILD_ROOT/usr/bin/ovs-kill \
97 $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
98 $RPM_BUILD_ROOT/usr/bin/ovs-pki \
99 $RPM_BUILD_ROOT/usr/bin/ovs-wdt \
100 $RPM_BUILD_ROOT/usr/sbin/ovs-monitor \
101 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
102 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
103 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
104 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
105 $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
107 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
110 rm -rf $RPM_BUILD_ROOT
113 if [ ! -f /etc/xensource-inventory ]; then
114 printf "XenSource inventory not present in /etc/xensource-inventory"
117 . /etc/xensource-inventory
119 if [ "$1" = "1" ]; then
120 if md5sum -c --status <<EOF
121 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
122 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
123 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
124 5654c8c36699fcc8744ca9cd5b855414 /usr/sbin/xen-bugtool
127 printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
128 elif md5sum -c --status <<EOF
129 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
130 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
131 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
132 f6519085c2fc5f7bc4eccc294ed62000 /usr/sbin/xen-bugtool
135 printf "\nVerified host scripts from XenServer 5.5.0-24648p (Update 1)\n"
136 printf "or 5.5.0-25727p (Update 2).\n\n"
137 elif md5sum -c --status <<EOF
138 ca141d60061dcfdade73e75abc6529b5 /usr/sbin/brctl
139 02cf136237ed85fcbcc1efc15ce0591c /opt/xensource/libexec/interface-reconfigure
140 3a192ee70ebf2153c90051b3af95f331 /opt/xensource/libexec/InterfaceReconfigureBridge.py
141 f71cadf1464caefa7943de0ab47fdd8a /opt/xensource/libexec/InterfaceReconfigure.py
142 d70f08f235fb1bfd49a0580e440f15a0 /opt/xensource/libexec/InterfaceReconfigureVswitch.py
143 f5c85ca825b1e6f5a0845530981cd836 /etc/xensource/scripts/vif
144 facb851606f82ca2bcc760a4d91bbe33 /usr/sbin/xen-bugtool
147 printf "\nVerified host scripts from XenServer 5.5.900-29381p.\n\n"
151 The original XenServer scripts replaced by this package are not those
152 of any supported version of XenServer. This could lead to unexpected
153 behavior of your server. Unless you are sure you know what you are
154 doing, it is highly recommended that you remove this package
155 immediately after the install completes, which will restore the
156 XenServer scripts that you were previously using.
162 # On XenServer 5.5.0, we need refresh-network-uuids to run whenever
163 # XAPI starts or restarts. (On XenServer 5.6.0, XAPI calls the
164 # "update" method of the vswitch-cfg-update plugin whenever it starts
165 # or restarts, so this is no longer necessary.)
166 if test "$PRODUCT_VERSION" = "5.5.0"; then
167 RNU=/usr/share/openvswitch/scripts/refresh-network-uuids
168 XSS=/opt/xensource/libexec/xapi-startup-script
169 if test -e $XSS && (test ! -L $XSS || test "`readlink $XSS`" != $RNU); then
170 echo "$XSS is already in use, refusing to overwrite"
177 if test ! -e /var/xapi/network.dbcache; then
178 if test "$1" = 1; then
179 printf "Creating xapi database cache... "
181 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
182 printf " but the xapi database cache is missing.\n"
183 printf "Re-creating xapi database cache... "
186 if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
190 printf "Open vSwitch can only be installed on a XenServer that\n"
191 printf "has connectivity to xapi on the pool master. Please\n"
192 printf "fix connectivity to the pool master, then try again.\n"
197 # Ensure that modprobe will find our modules.
198 depmod %{xen_version}
200 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
201 cat >>/etc/sysctl.conf <<EOF
202 # This works around an issue in xhad, which binds to a particular
203 # Ethernet device, which in turn causes ICMP port unreachable messages
204 # if packets are received are on the wrong interface, which in turn
205 # can happen if we send out ARP replies on every interface (as Linux
206 # does by default) instead of just on the interface that has the IP
207 # address being ARPed for, which this sysctl setting in turn works
211 net.ipv4.conf.all.arp_filter = 1
215 if test ! -e /etc/openvswitch/conf.db; then
216 install -d -m 755 -o root -g root /etc/openvswitch
218 # Create ovs-vswitchd config database
219 ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
220 /usr/share/openvswitch/vswitch.ovsschema
222 # Create initial table in config database
223 ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
224 '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
228 # Create default or update existing /etc/sysconfig/openvswitch.
229 SYSCONFIG=/etc/sysconfig/openvswitch
230 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
231 if [ ! -e $SYSCONFIG ]; then
232 cp $TEMPLATE $SYSCONFIG
234 for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
236 if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
238 sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
243 # Replace XenServer files by our versions.
244 mkdir -p /usr/lib/openvswitch/xs-original \
245 || printf "Could not create script backup directory.\n"
247 /opt/xensource/libexec/interface-reconfigure \
248 /opt/xensource/libexec/InterfaceReconfigure.py \
249 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
250 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
251 /etc/xensource/scripts/vif \
252 /usr/sbin/xen-bugtool \
257 if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
258 mv "$f" /usr/lib/openvswitch/xs-original/ \
259 || printf "Could not save original XenServer $s script\n"
260 ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
261 || printf "Could not link to Open vSwitch $s script\n"
265 # Ensure all required services are set to run
266 for s in openvswitch openvswitch-xapi-update; do
267 if chkconfig --list $s >/dev/null 2>&1; then
268 chkconfig --del $s || printf "Could not remove $s init script."
270 chkconfig --add $s || printf "Could not add $s init script."
271 chkconfig $s on || printf "Could not enable $s init script."
274 # Configure system to use Open vSwitch
275 echo vswitch > /etc/xensource/network.conf
277 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
278 printf "\nYou MUST reboot the server NOW to complete the change to\n"
279 printf "Open vSwitch. Attempts to modify networking on the server\n"
280 printf "or any hosted VM will fail until after the reboot and could\n"
281 printf "leave the server in an state requiring manual recovery.\n\n"
283 printf "\nTo use the new Open vSwitch install, you should reboot the\n"
284 printf "server now. Failure to do so may result in incorrect operation."
289 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
290 for s in openvswitch openvswitch-xapi-update; do
291 chkconfig --del $s || printf "Could not remove $s init script."
297 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
298 . /etc/xensource-inventory
299 if test "$PRODUCT_VERSION" = "5.5.0"; then
300 XSS=/opt/xensource/libexec/xapi-startup-script
304 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
305 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
307 rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
308 /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
309 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
310 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
311 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
312 /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
314 # Restore original XenServer scripts
316 /opt/xensource/libexec/interface-reconfigure \
317 /opt/xensource/libexec/InterfaceReconfigure.py \
318 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
319 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
320 /etc/xensource/scripts/vif \
321 /usr/sbin/xen-bugtool \
325 if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
326 printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
327 printf "Could not restore original XenServer script.\n"
330 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
331 || printf "Could not restore original XenServer $s script.\n"
335 # Remove all configuration files
336 rm -f /etc/openvswitch/conf.db
337 rm -f /etc/sysconfig/openvswitch
338 rm -f /etc/openvswitch/vswitchd.cacert
339 rm -f /var/xapi/network.dbcache
341 # Configure system to use bridge
342 echo bridge > /etc/xensource/network.conf
344 printf "\nYou MUST reboot the server now to complete the change to\n"
345 printf "standard Xen networking. Attempts to modify networking on the\n"
346 printf "server or any hosted VM will fail until after the reboot and\n"
347 printf "could leave the server in a state requiring manual recovery.\n\n"
352 %defattr(-,root,root)
353 /etc/init.d/openvswitch
354 /etc/init.d/openvswitch-xapi-update
355 /etc/xapi.d/plugins/openvswitch-cfg-update
356 /etc/logrotate.d/openvswitch
357 /etc/profile.d/openvswitch.sh
358 /lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
359 /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko
360 /usr/share/openvswitch/scripts/refresh-network-uuids
361 /usr/share/openvswitch/scripts/interface-reconfigure
362 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
363 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
364 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
365 /usr/share/openvswitch/scripts/vif
366 /usr/share/openvswitch/scripts/xen-bugtool
367 /usr/share/openvswitch/scripts/brctl
368 /usr/share/openvswitch/scripts/sysconfig.template
369 /usr/share/openvswitch/vswitch.ovsschema
370 /usr/sbin/ovs-brcompatd
371 /usr/sbin/ovs-vswitchd
372 /usr/sbin/ovsdb-server
377 /usr/bin/ovsdb-client
379 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
380 /usr/share/man/man1/ovsdb-client.1.gz
381 /usr/share/man/man1/ovsdb-server.1.gz
382 /usr/share/man/man1/ovsdb-tool.1.gz
383 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
384 /usr/share/man/man8/ovs-appctl.8.gz
385 /usr/share/man/man8/ovs-brcompatd.8.gz
386 /usr/share/man/man8/ovs-dpctl.8.gz
387 /usr/share/man/man8/ovs-ofctl.8.gz
388 /usr/share/man/man8/ovs-vsctl.8.gz
389 /usr/share/man/man8/ovs-vswitchd.8.gz
391 %exclude /usr/lib/xsconsole/plugins-base/*.pyc
392 %exclude /usr/lib/xsconsole/plugins-base/*.pyo
393 %exclude /usr/share/openvswitch/scripts/*.pyc
394 %exclude /usr/share/openvswitch/scripts/*.pyo