ofproto: Remove controller discovery support.
[sliver-openvswitch.git] / xenserver / openvswitch-xen.spec
1 # Spec file for Open vSwitch.
2
3 # Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc.
4 #
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.
9
10 # When building, the rpmbuild command line should define
11 # openvswitch_version, xen_version, and build_number using -D arguments.
12 # for example:
13 #
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
15
16 %define version %{openvswitch_version}-%{xen_version}
17
18 # bump this when breaking compatibility with userspace
19 %define module_abi_version 0
20
21 # extract kernel type (xen or kdump)
22 %define binsuffix -%(echo '%{xen_version}' | sed -r 's/^.*[0-9]+//')
23 # kernel version string w/o kernel type
24 %define kernel_version %(echo '%{xen_version}' | sed -r 's/[a-z]+$//')
25 # build-supplemental-pack.sh requires this naming for kernel module packages
26 %define module_package modules%{binsuffix}-%{kernel_version}
27
28 Name: openvswitch
29 Summary: Open vSwitch daemon/database/utilities
30 Group: System Environment/Daemons
31 URL: http://www.openvswitch.org/
32 Vendor: Nicira Networks, Inc.
33 Version: %{openvswitch_version}
34
35 License: ASL 2.0
36 Release: 1
37 Source: openvswitch-%{openvswitch_version}.tar.gz
38 Buildroot: /tmp/openvswitch-xen-rpm
39 Requires: openvswitch_mod.ko.%{module_abi_version}
40
41 %description
42 Open vSwitch provides standard network bridging functions augmented with
43 support for the OpenFlow protocol for remote per-flow control of
44 traffic.
45
46 %package %{module_package}
47 Summary: Open vSwitch kernel module
48 Group: System Environment/Kernel
49 License: GPLv2
50 Provides: %{name}-modules = %{kernel_version}, openvswitch_mod.ko.%{module_abi_version}
51 Requires: kernel%{binsuffix} = %{kernel_version}
52
53 %description %{module_package}
54 Open vSwitch Linux kernel module compiled against kernel version
55 %{xen_version}.
56
57 %prep
58 %setup -q -n openvswitch-%{openvswitch_version}
59
60 %build
61 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
62 make %{_smp_mflags}
63
64 %install
65 rm -rf $RPM_BUILD_ROOT
66 make install DESTDIR=$RPM_BUILD_ROOT
67 install -d -m 755 $RPM_BUILD_ROOT/etc
68 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
69 install -m 755 xenserver/etc_init.d_openvswitch \
70          $RPM_BUILD_ROOT/etc/init.d/openvswitch
71 install -m 755 xenserver/etc_init.d_openvswitch-xapi-update \
72          $RPM_BUILD_ROOT/etc/init.d/openvswitch-xapi-update
73 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
74 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
75 install -m 755 xenserver/etc_logrotate.d_openvswitch \
76          $RPM_BUILD_ROOT/etc/logrotate.d/openvswitch
77 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
78 install -m 755 xenserver/etc_profile.d_openvswitch.sh \
79          $RPM_BUILD_ROOT/etc/profile.d/openvswitch.sh
80 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
81 install -m 755 xenserver/etc_xapi.d_plugins_openvswitch-cfg-update \
82          $RPM_BUILD_ROOT/etc/xapi.d/plugins/openvswitch-cfg-update
83 install -d -m 755 $RPM_BUILD_ROOT/etc/xensource/bugtool/network-status
84 install -m 644 xenserver/etc_xensource_bugtool_network-status_openvswitch.xml \
85          $RPM_BUILD_ROOT/etc/xensource/bugtool/network-status/openvswitch.xml
86 install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
87 install -m 644 vswitchd/vswitch.ovsschema \
88          $RPM_BUILD_ROOT/usr/share/openvswitch/vswitch.ovsschema
89 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
90              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/interface-reconfigure
91 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigure.py \
92              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigure.py
93 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py \
94              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
95 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py \
96              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
97 install -m 755 xenserver/etc_xensource_scripts_vif \
98              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/vif
99 install -m 755 xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync \
100                $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-xapi-sync
101 install -m 755 xenserver/usr_share_openvswitch_scripts_sysconfig.template \
102          $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/sysconfig.template
103 install -m 755 xenserver/usr_share_openvswitch_scripts_xen-bugtool-tc-class-show \
104          $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/xen-bugtool-tc-class-show
105 install -m 755 utilities/ovs-save \
106          $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-save
107 install -d -m 755 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base
108 install -m 644 \
109         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
110                $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
111
112 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch
113 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch \;
114 install xenserver/uuid.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
115
116 # Get rid of stuff we don't want to make RPM happy.
117 rm \
118     $RPM_BUILD_ROOT/usr/bin/ovs-controller \
119     $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
120     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
121     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
122     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
123     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
124
125 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
126
127 %clean
128 rm -rf $RPM_BUILD_ROOT
129
130 %post
131 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
132     cat >>/etc/sysctl.conf <<EOF
133 # This works around an issue in xhad, which binds to a particular
134 # Ethernet device, which in turn causes ICMP port unreachable messages
135 # if packets are received are on the wrong interface, which in turn
136 # can happen if we send out ARP replies on every interface (as Linux
137 # does by default) instead of just on the interface that has the IP
138 # address being ARPed for, which this sysctl setting in turn works
139 # around.
140 #
141 # Bug #1378.
142 net.ipv4.conf.all.arp_filter = 1
143 EOF
144 fi
145
146 if test ! -e /etc/openvswitch/conf.db; then
147     install -d -m 755 -o root -g root /etc/openvswitch
148
149     # Create ovs-vswitchd config database
150     ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
151             /usr/share/openvswitch/vswitch.ovsschema
152
153     # Create initial table in config database
154     ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
155             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
156             > /dev/null
157 fi
158
159 # Create default or update existing /etc/sysconfig/openvswitch.
160 SYSCONFIG=/etc/sysconfig/openvswitch
161 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
162 if [ ! -e $SYSCONFIG ]; then
163     cp $TEMPLATE $SYSCONFIG
164 else
165     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
166     do
167         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
168             echo >> $SYSCONFIG
169             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
170         fi
171     done
172 fi
173
174 # Deliberately break %postun in broken OVS builds that revert original
175 # XenServer scripts during rpm -U by moving the directory where it thinks
176 # they are saved.
177 if [ -d /usr/lib/openvswitch/xs-original ]; then
178     mkdir -p /usr/lib/openvswitch/xs-saved
179     mv /usr/lib/openvswitch/xs-original/* /usr/lib/openvswitch/xs-saved/ &&
180         rmdir /usr/lib/openvswitch/xs-original
181 fi
182
183 # Replace XenServer files by our versions.
184 mkdir -p /usr/lib/openvswitch/xs-saved \
185     || printf "Could not create script backup directory.\n"
186 for f in \
187     /opt/xensource/libexec/interface-reconfigure \
188     /opt/xensource/libexec/InterfaceReconfigure.py \
189     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
190     /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
191     /etc/xensource/scripts/vif
192 do
193     s=$(basename "$f")
194     t=$(readlink "$f")
195     if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
196         mv "$f" /usr/lib/openvswitch/xs-saved/ \
197             || printf "Could not save original XenServer $s script\n"
198         ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
199             || printf "Could not link to Open vSwitch $s script\n"
200     fi
201 done
202
203 # Clean up dangling symlinks to removed OVS replacement scripts no longer
204 # provided by OVS. Any time a replacement script is removed from OVS,
205 # it should be added here to ensure correct reversion from old versions of
206 # OVS that don't clean up dangling symlinks during the uninstall phase.
207 for orig in \
208     /usr/sbin/brctl \
209     /usr/sbin/xen-bugtool
210 do
211     saved=/usr/lib/openvswitch/xs-saved/$(basename "$orig")
212     [ -e "$saved" ] && mv -f "$saved" "$orig"
213 done
214
215 # Ensure all required services are set to run
216 for s in openvswitch openvswitch-xapi-update; do
217     if chkconfig --list $s >/dev/null 2>&1; then
218         chkconfig --del $s || printf "Could not remove $s init script."
219     fi
220     chkconfig --add $s || printf "Could not add $s init script."
221     chkconfig $s on || printf "Could not enable $s init script."
222 done
223
224 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
225     # Configure system to use Open vSwitch
226     echo vswitch > /etc/xensource/network.conf
227
228     printf "\nYou MUST reboot the server NOW to complete the change to\n"
229     printf "Open vSwitch.  Attempts to modify networking on the server\n"
230     printf "or any hosted VM will fail until after the reboot and could\n"
231     printf "leave the server in an state requiring manual recovery.\n\n"
232 else
233     printf "\nTo use the new Open vSwitch install, you should reboot the\n" 
234     printf "server now.  Failure to do so may result in incorrect operation."
235     printf "\n\n"
236 fi
237
238 %post %{module_package}
239 # Ensure that modprobe will find our modules.
240 depmod %{xen_version}
241
242 %preun
243 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
244     for s in openvswitch openvswitch-xapi-update; do
245         chkconfig --del $s || printf "Could not remove $s init script."
246     done
247 fi
248
249 %postun
250 # Restore original XenServer scripts if the OVS equivalent no longer exists.
251 # This works both in the upgrade and erase cases.
252 # This lists every file that every version of OVS has ever replaced. Never
253 # remove old files that OVS no longer replaces, or upgrades from old versions
254 # will fail to restore the XS originals, leaving the system in a broken state.
255 # Also be sure to add removed script paths to the %post scriptlet above to
256 # prevent the same problem when upgrading from old versions of OVS that lack
257 # this restore-on-upgrade logic.
258 for f in \
259     /etc/xensource/scripts/vif \
260     /usr/sbin/brctl \
261     /usr/sbin/xen-bugtool \
262     /opt/xensource/libexec/interface-reconfigure \
263     /opt/xensource/libexec/InterfaceReconfigure.py \
264     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
265     /opt/xensource/libexec/InterfaceReconfigureVswitch.py
266 do
267     # Only revert dangling symlinks.
268     if [ -h "$f" ] && [ ! -e "$f" ]; then
269         s=$(basename "$f")
270         if [ ! -f "/usr/lib/openvswitch/xs-saved/$s" ]; then
271             printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-saved\n" >&2
272             printf "Could not restore original XenServer script.\n" >&2
273         else
274             (rm -f "$f" \
275                 && mv "/usr/lib/openvswitch/xs-saved/$s" "$f") \
276                 || printf "Could not restore original XenServer $s script.\n" >&2
277         fi
278     fi
279 done
280
281 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
282     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
283         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
284
285     rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
286         /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
287         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
288         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
289         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
290         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
291
292     # Remove all configuration files
293     rm -f /etc/openvswitch/conf.db
294     rm -f /etc/sysconfig/openvswitch
295     rm -f /etc/openvswitch/vswitchd.cacert
296     rm -f /var/xapi/network.dbcache
297
298     # Remove saved XenServer scripts directory, but only if it's empty
299     rmdir -p /usr/lib/openvswitch/xs-saved 2>/dev/null
300
301     # Configure system to use bridge
302     echo bridge > /etc/xensource/network.conf
303
304     printf "\nYou MUST reboot the server now to complete the change to\n"
305     printf "standard Xen networking.  Attempts to modify networking on the\n"
306     printf "server or any hosted VM will fail until after the reboot and\n"
307     printf "could leave the server in a state requiring manual recovery.\n\n"
308 fi
309
310 %files
311 %defattr(-,root,root)
312 /etc/init.d/openvswitch
313 /etc/init.d/openvswitch-xapi-update
314 /etc/xapi.d/plugins/openvswitch-cfg-update
315 /etc/xensource/bugtool/network-status/openvswitch.xml
316 /etc/logrotate.d/openvswitch
317 /etc/profile.d/openvswitch.sh
318 /usr/share/openvswitch/python/ovs/__init__.py
319 /usr/share/openvswitch/python/ovs/daemon.py
320 /usr/share/openvswitch/python/ovs/db/__init__.py
321 /usr/share/openvswitch/python/ovs/db/data.py
322 /usr/share/openvswitch/python/ovs/db/error.py
323 /usr/share/openvswitch/python/ovs/db/idl.py
324 /usr/share/openvswitch/python/ovs/db/parser.py
325 /usr/share/openvswitch/python/ovs/db/schema.py
326 /usr/share/openvswitch/python/ovs/db/types.py
327 /usr/share/openvswitch/python/ovs/dirs.py
328 /usr/share/openvswitch/python/ovs/fatal_signal.py
329 /usr/share/openvswitch/python/ovs/json.py
330 /usr/share/openvswitch/python/ovs/jsonrpc.py
331 /usr/share/openvswitch/python/ovs/ovsuuid.py
332 /usr/share/openvswitch/python/ovs/poller.py
333 /usr/share/openvswitch/python/ovs/process.py
334 /usr/share/openvswitch/python/ovs/reconnect.py
335 /usr/share/openvswitch/python/ovs/socket_util.py
336 /usr/share/openvswitch/python/ovs/stream.py
337 /usr/share/openvswitch/python/ovs/timeval.py
338 /usr/share/openvswitch/python/ovs/util.py
339 /usr/share/openvswitch/python/uuid.py
340 /usr/share/openvswitch/scripts/ovs-xapi-sync
341 /usr/share/openvswitch/scripts/interface-reconfigure
342 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
343 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
344 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
345 /usr/share/openvswitch/scripts/vif
346 /usr/share/openvswitch/scripts/sysconfig.template
347 /usr/share/openvswitch/scripts/xen-bugtool-tc-class-show
348 /usr/share/openvswitch/scripts/ovs-save
349 /usr/share/openvswitch/vswitch.ovsschema
350 /usr/sbin/ovs-vlan-bug-workaround
351 /usr/sbin/ovs-vswitchd
352 /usr/sbin/ovsdb-server
353 /usr/bin/ovs-appctl
354 /usr/bin/ovs-dpctl
355 /usr/bin/ovs-ofctl
356 /usr/bin/ovs-pcap
357 /usr/bin/ovs-tcpundump
358 /usr/bin/ovs-vlan-test
359 /usr/bin/ovs-vsctl
360 /usr/bin/ovsdb-client
361 /usr/bin/ovsdb-tool
362 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
363 /usr/share/man/man1/ovsdb-client.1.gz
364 /usr/share/man/man1/ovsdb-server.1.gz
365 /usr/share/man/man1/ovsdb-tool.1.gz
366 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
367 /usr/share/man/man8/ovs-appctl.8.gz
368 /usr/share/man/man8/ovs-dpctl.8.gz
369 /usr/share/man/man8/ovs-ofctl.8.gz
370 /usr/share/man/man8/ovs-parse-leaks.8.gz
371 /usr/share/man/man1/ovs-pcap.1.gz
372 /usr/share/man/man1/ovs-tcpundump.1.gz
373 /usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
374 /usr/share/man/man8/ovs-vlan-test.8.gz
375 /usr/share/man/man8/ovs-vsctl.8.gz
376 /usr/share/man/man8/ovs-vswitchd.8.gz
377 /var/lib/openvswitch
378 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
379 %exclude /usr/sbin/ovs-brcompatd
380 %exclude /usr/share/man/man8/ovs-brcompatd.8.gz
381 %exclude /usr/share/openvswitch/scripts/*.py[co]
382 %exclude /usr/share/openvswitch/python/*.py[co]
383 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
384 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]
385
386 %files %{module_package}
387 /lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
388 %exclude /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko