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
85 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
86 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/XSFeatureVSwitch.py
88 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/openvswitch
89 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/openvswitch \;
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/openvswitch/veth_mod.ko
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"
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 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
139 ce451d3c985fd1db6497a363f0d9dedb /opt/xensource/libexec/interface-reconfigure
140 2b53f500431fcba5276c896e9e4281b9 /usr/sbin/xen-bugtool
143 printf "\nVerified host scripts from XenServer 5.5.900.\n\n"
147 The original XenServer scripts replaced by this package are not those
148 of any supported version of XenServer. This could lead to unexpected
149 behavior of your server. Unless you are sure you know what you are
150 doing, it is highly recommended that you remove this package
151 immediately after the install completes, which will restore the
152 XenServer scripts that you were previously using.
158 if test ! -e /var/xapi/network.dbcache; then
159 if test "$1" = 1; then
160 printf "Creating xapi database cache... "
162 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
163 printf " but the xapi database cache is missing.\n"
164 printf "Re-creating xapi database cache... "
167 if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
171 printf "Open vSwitch can only be installed on a XenServer that\n"
172 printf "has connectivity to xapi on the pool master. Please\n"
173 printf "fix connectivity to the pool master, then try again.\n"
178 # Ensure that modprobe will find our modules.
179 depmod %{xen_version}
181 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
182 cat >>/etc/sysctl.conf <<EOF
183 # This works around an issue in xhad, which binds to a particular
184 # Ethernet device, which in turn causes ICMP port unreachable messages
185 # if packets are received are on the wrong interface, which in turn
186 # can happen if we send out ARP replies on every interface (as Linux
187 # does by default) instead of just on the interface that has the IP
188 # address being ARPed for, which this sysctl setting in turn works
192 net.ipv4.conf.all.arp_filter = 1
196 if test ! -e /etc/openvswitch/conf.db; then
197 install -d -m 755 -o root -g root /etc/openvswitch
199 # Create ovs-vswitchd config database
200 ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
201 /usr/share/openvswitch/vswitch.ovsschema \
203 # Create initial table in config database
204 ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
205 '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
209 # Create default or update existing /etc/sysconfig/openvswitch.
210 SYSCONFIG=/etc/sysconfig/openvswitch
211 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
212 if [ ! -e $SYSCONFIG ]; then
213 cp $TEMPLATE $SYSCONFIG
215 for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
217 if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
219 sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
224 # Replace XenServer files by our versions.
225 mkdir -p /usr/lib/openvswitch/xs-original \
226 || printf "Could not create script backup directory.\n"
228 /opt/xensource/libexec/interface-reconfigure \
229 /opt/xensource/libexec/InterfaceReconfigure.py \
230 /opt/xensource/libexec/InterfaceReconfigureBridge.py \
231 /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
232 /etc/xensource/scripts/vif \
233 /usr/sbin/xen-bugtool \
238 if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
239 mv "$f" /usr/lib/openvswitch/xs-original/ \
240 || printf "Could not save original XenServer $s script\n"
241 ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
242 || printf "Could not link to Open vSwitch $s script\n"
246 # Install xsconsole plugin
247 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
248 if [ "$plugin" != "/usr/share/openvswitch/scripts/XSFeatureVSwitch.py" ]; then
249 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
250 ln -s /usr/share/openvswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
253 # Ensure all required services are set to run
254 for s in openvswitch openvswitch-xapi-update; do
255 if chkconfig --list $s >/dev/null 2>&1; then
256 chkconfig --del $s || printf "Could not remove $s init script."
258 chkconfig --add $s || printf "Could not add $s init script."
259 chkconfig $s on || printf "Could not enable $s init script."
262 # Configure system to use Open vSwitch
263 echo vswitch > /etc/xensource/network.conf
265 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
266 printf "\nYou MUST reboot the server NOW to complete the change to\n"
267 printf "Open vSwitch. Attempts to modify networking on the server\n"
268 printf "or any hosted VM will fail until after the reboot and could\n"
269 printf "leave the server in an state requiring manual recovery.\n\n"
271 printf "\nTo use the new Open vSwitch install, you should reboot the\n"
272 printf "server now. Failure to do so may result in incorrect operation."
277 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
278 for s in openvswitch openvswitch-xapi-update; do
279 chkconfig --del $s || printf "Could not remove $s init script."
285 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
287 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
288 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
289 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
290 || printf "Could not remove Open vSwitch xsconsole plugin.\n"
292 # Restore original XenServer scripts
294 /opt/xensource/libexec/interface-reconfigure \
295 /etc/xensource/scripts/vif \
296 /usr/sbin/xen-bugtool \
300 if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
301 printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
302 printf "Could not restore original XenServer script.\n"
305 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
306 || printf "Could not restore original XenServer $s script.\n"
310 # Remove all configuration files
311 rm -f /etc/openvswitch/conf.db
312 rm -f /etc/sysconfig/openvswitch
313 rm -f /etc/openvswitch/vswitchd.cacert
314 rm -f /var/xapi/network.dbcache
316 # Configure system to use bridge
317 echo bridge > /etc/xensource/network.conf
319 printf "\nYou MUST reboot the server now to complete the change to\n"
320 printf "standard Xen networking. Attempts to modify networking on the\n"
321 printf "server or any hosted VM will fail until after the reboot and\n"
322 printf "could leave the server in a state requiring manual recovery.\n\n"
327 %defattr(-,root,root)
328 /etc/init.d/openvswitch
329 /etc/init.d/openvswitch-xapi-update
330 /etc/xapi.d/plugins/openvswitch-cfg-update
331 /etc/logrotate.d/openvswitch
332 /etc/profile.d/openvswitch.sh
333 /lib/modules/%{xen_version}/kernel/net/openvswitch/openvswitch_mod.ko
334 /lib/modules/%{xen_version}/kernel/net/openvswitch/brcompat_mod.ko
335 %if %(echo '%{xen_version}'|awk -F"." '{if ($3>=18) print 1; else print 0;}')
336 /lib/modules/%{xen_version}/kernel/net/openvswitch/ip_gre_mod.ko
338 /usr/share/openvswitch/scripts/refresh-network-uuids
339 /usr/share/openvswitch/scripts/interface-reconfigure
340 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
341 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
342 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
343 /usr/share/openvswitch/scripts/vif
344 /usr/share/openvswitch/scripts/xen-bugtool
345 /usr/share/openvswitch/scripts/XSFeatureVSwitch.py
346 /usr/share/openvswitch/scripts/brctl
347 /usr/share/openvswitch/scripts/sysconfig.template
348 /usr/share/openvswitch/vswitch.ovsschema
349 /usr/sbin/ovs-brcompatd
350 /usr/sbin/ovs-vswitchd
351 /usr/sbin/ovsdb-server
356 /usr/bin/ovsdb-client
358 /usr/share/man/man1/ovsdb-client.1.gz
359 /usr/share/man/man1/ovsdb-server.1.gz
360 /usr/share/man/man1/ovsdb-tool.1.gz
361 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
362 /usr/share/man/man8/ovs-appctl.8.gz
363 /usr/share/man/man8/ovs-brcompatd.8.gz
364 /usr/share/man/man8/ovs-dpctl.8.gz
365 /usr/share/man/man8/ovs-ofctl.8.gz
366 /usr/share/man/man8/ovs-vsctl.8.gz
367 /usr/share/man/man8/ovs-vswitchd.8.gz
369 %exclude /usr/share/openvswitch/scripts/*.pyc
370 %exclude /usr/share/openvswitch/scripts/*.pyo