ovs-controller: Rename test-controller and do not install or package.
[sliver-openvswitch.git] / xenserver / openvswitch-xen.spec.in
1 # Spec file for Open vSwitch.
2
3 # Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicira, 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, kernel_name, kernel_version, and kernel_flavor
12 # using -D arguments.
13 # for example:
14 #
15 #    rpmbuild -D "openvswitch_version 1.1.0+build123"
16 #      -D "kernel_name  NAME-xen"
17 #      -D "kernel_version 2.6.32.12-0.7.1.xs5.6.100.323.170596"
18 #      -D "kernel_flavor xen"
19 #      -bb /usr/src/redhat/SPECS/openvswitch-xen.spec
20
21 %if %{?openvswitch_version:0}%{!?openvswitch_version:1}
22 %define openvswitch_version @VERSION@
23 %endif
24
25 %if %{?kernel_name:0}%{!?kernel_name:1}
26 %define kernel %(rpm -qa 'kernel*xen-devel' | head -1)
27 %define kernel_name %(rpm -q --queryformat "%%{Name}" %{kernel} | sed 's/-devel//' | sed 's/kernel-//')
28 %define kernel_version %(rpm -q --queryformat "%%{Version}-%%{Release}" %{kernel})
29 %define kernel_flavor xen
30 %endif
31
32 %define xen_version %{kernel_version}%{kernel_flavor}
33
34 # bump this when breaking compatibility with userspace
35 %define module_abi_version 0
36
37 # build-supplemental-pack.sh requires this naming for kernel module packages
38 %define module_package modules-%{kernel_flavor}-%{kernel_version}
39
40 Name: openvswitch
41 Summary: Open vSwitch daemon/database/utilities
42 Group: System Environment/Daemons
43 URL: http://www.openvswitch.org/
44 Vendor: Nicira, Inc.
45 Version: %{openvswitch_version}
46
47 License: ASL 2.0
48 Release: 1
49 Source: openvswitch-%{openvswitch_version}.tar.gz
50 Buildroot: /tmp/openvswitch-xen-rpm
51 Requires: openvswitch.ko.%{module_abi_version}
52
53 %description
54 Open vSwitch provides standard network bridging functions augmented with
55 support for the OpenFlow protocol for remote per-flow control of
56 traffic.
57
58 %package %{module_package}
59 Summary: Open vSwitch kernel module
60 Group: System Environment/Kernel
61 License: GPLv2
62 Provides: %{name}-modules-%{kernel_flavor} = %{kernel_version}, openvswitch.ko.%{module_abi_version}
63 Requires: kernel-%{kernel_name} = %{kernel_version}
64
65 %description %{module_package}
66 Open vSwitch Linux kernel module compiled against kernel version
67 %{xen_version}.
68
69 %prep
70 %setup -q -n openvswitch-%{openvswitch_version}
71
72 %build
73 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-linux=/lib/modules/%{xen_version}/build --enable-ssl
74 make %{_smp_mflags}
75
76 %install
77 rm -rf $RPM_BUILD_ROOT
78 make install DESTDIR=$RPM_BUILD_ROOT
79 install -d -m 755 $RPM_BUILD_ROOT/etc
80 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
81 install -m 755 xenserver/etc_init.d_openvswitch \
82          $RPM_BUILD_ROOT/etc/init.d/openvswitch
83 install -m 755 xenserver/etc_init.d_openvswitch-xapi-update \
84          $RPM_BUILD_ROOT/etc/init.d/openvswitch-xapi-update
85 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
86 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
87 install -m 755 xenserver/etc_logrotate.d_openvswitch \
88          $RPM_BUILD_ROOT/etc/logrotate.d/openvswitch
89 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
90 install -m 755 xenserver/etc_profile.d_openvswitch.sh \
91          $RPM_BUILD_ROOT/etc/profile.d/openvswitch.sh
92 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
93 install -m 755 xenserver/etc_xapi.d_plugins_openvswitch-cfg-update \
94          $RPM_BUILD_ROOT/etc/xapi.d/plugins/openvswitch-cfg-update
95 install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
96 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
97              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/interface-reconfigure
98 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigure.py \
99              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigure.py
100 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py \
101              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
102 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py \
103              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
104 install -m 755 xenserver/etc_xensource_scripts_vif \
105              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/vif
106 install -m 755 xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync \
107                $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-xapi-sync
108 install -m 755 xenserver/usr_share_openvswitch_scripts_sysconfig.template \
109          $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/sysconfig.template
110 install -d -m 755 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base
111 install -m 644 \
112         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
113                $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
114
115 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/extra/openvswitch
116 find datapath/linux -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/extra/openvswitch \;
117 install python/compat/uuid.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
118 install python/compat/argparse.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
119
120 install -d -m 755 $RPM_BUILD_ROOT/etc/xensource/bugtool
121 cp -rf $RPM_BUILD_ROOT/usr/share/openvswitch/bugtool-plugins/* $RPM_BUILD_ROOT/etc/xensource/bugtool
122
123 # Get rid of stuff we don't want to make RPM happy.
124 rm \
125     $RPM_BUILD_ROOT/usr/bin/ovs-benchmark \
126     $RPM_BUILD_ROOT/usr/bin/ovs-l3ping \
127     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
128     $RPM_BUILD_ROOT/usr/bin/ovs-test \
129     $RPM_BUILD_ROOT/usr/share/man/man1/ovs-benchmark.1 \
130     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
131     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8 \
132     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8
133
134 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
135
136 %clean
137 rm -rf $RPM_BUILD_ROOT
138
139 %post
140 # A list of Citrix XenServer scripts that we might need to replace
141 # with our own versions.
142 scripts="
143     /etc/xensource/scripts/vif
144     /opt/xensource/libexec/InterfaceReconfigure.py
145     /opt/xensource/libexec/InterfaceReconfigureBridge.py
146     /opt/xensource/libexec/InterfaceReconfigureVswitch.py
147     /opt/xensource/libexec/interface-reconfigure"
148
149 # Calculate into $md5sums a comma-separated set of md5sums of the
150 # Citrix XenServer scripts that we might need to replace.  We might be
151 # upgrading an older version of the package that moved the files out
152 # of the way, so we need to look for the files in those out-of-the-way
153 # locations first.
154 md5sums=
155 for script in $scripts; do
156     b=$(basename "$script")
157     if test -e /usr/lib/openvswitch/xs-saved/"$b"; then
158         f=/usr/lib/openvswitch/xs-saved/"$b"
159     elif test -e /usr/lib/openvswitch/xs-original/"$b"; then
160         f=/usr/lib/openvswitch/xs-original/"$b"
161     elif test -e "$script" && test ! -h "$script"; then
162         f=$script
163     else
164         printf "\n$script: not found\n"
165         f=/dev/null
166     fi
167     md5sums="$md5sums,$(md5sum $f | awk '{print $1}')"
168 done
169 md5sums=${md5sums#,}
170
171 # Now check the md5sums against the known sets of md5sums:
172 #
173 #   - If they are known to be a version of XenServer scripts that we should
174 #     replace, we replace them (by putting $scripts into $replace_files).
175 #
176 #   - Otherwise, we guess that it's better not to replace them, because the
177 #     improvements that our versions of the scripts provide are minimal, so
178 #     it's better to avoid possibly breaking any changes made upstream by
179 #     Citrix.
180 case $md5sums in
181     cf09a68d9f8b434e79a4c83b01a3bb4b,395866df1b0b20c12c4dd2f7de0ecdb4,9d493545ae81463239d3162cbc798852,862d0939b441de9264a900628e950fe9,21f85db25599d7f026cd489385d58aa6)
182         keep_files=
183         replace_files=$scripts
184         printf "\nVerified host scripts from XenServer 6.0.0.\n"
185         ;;
186
187     c5f48246577a17cf1b971fb5ce4e920b,2e2c912f86f9c536c89adc34ff3c2b2b,28d3ff72d72bdec4f37d70699f5edb76,67e1d0af16fc1ddf10009c5c063ad2ba,f3feff30aa3b3f8b514664a96a8dc0ab)
188         keep_files=
189         replace_files=$scripts
190         printf "\nVerified host scripts from XenServer 5.6-SP2.\n"
191         ;;
192         
193     c5f48246577a17cf1b971fb5ce4e920b,2e2c912f86f9c536c89adc34ff3c2b2b,28d3ff72d72bdec4f37d70699f5edb76,67e1d0af16fc1ddf10009c5c063ad2ba,24bae6906d182ba47668174f8e480cc6)
194         keep_files=
195         replace_files=$scripts
196         printf "\nVerified host scripts from XenServer 5.6-FP1.\n"
197         ;;
198
199     *)
200         keep_files=$scripts
201         replace_files=
202         cat <<EOF
203
204 The host scripts on this machine are not those of any supported
205 version of XenServer.  On XenServer earlier than 5.6-FP1, your Open
206 vSwitch installation will not work.  On XenServer 5.6-FP1 or later,
207 Open vSwitch is not verified to work, which could lead to unexpected
208 behavior.
209
210 EOF
211         ;;
212 esac
213
214 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
215     cat >>/etc/sysctl.conf <<EOF
216 # This works around an issue in xhad, which binds to a particular
217 # Ethernet device, which in turn causes ICMP port unreachable messages
218 # if packets are received are on the wrong interface, which in turn
219 # can happen if we send out ARP replies on every interface (as Linux
220 # does by default) instead of just on the interface that has the IP
221 # address being ARPed for, which this sysctl setting in turn works
222 # around.
223 #
224 # Bug #1378.
225 net.ipv4.conf.all.arp_filter = 1
226 EOF
227 fi
228
229 if test ! -e /etc/openvswitch/conf.db; then
230     install -d -m 755 -o root -g root /etc/openvswitch
231
232     # Create ovs-vswitchd config database
233     ovsdb-tool -vconsole:off create /etc/openvswitch/conf.db \
234             /usr/share/openvswitch/vswitch.ovsschema
235
236     # Create initial table in config database
237     ovsdb-tool -vconsole:off transact /etc/openvswitch/conf.db \
238             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
239             > /dev/null
240 fi
241
242 # Create default or update existing /etc/sysconfig/openvswitch.
243 SYSCONFIG=/etc/sysconfig/openvswitch
244 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
245 if [ ! -e $SYSCONFIG ]; then
246     cp $TEMPLATE $SYSCONFIG
247 else
248     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
249     do
250         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
251             echo >> $SYSCONFIG
252             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
253         fi
254     done
255 fi
256
257 # Deliberately break %postun in broken OVS builds that revert original
258 # XenServer scripts during rpm -U by moving the directory where it thinks
259 # they are saved.
260 if [ -d /usr/lib/openvswitch/xs-original ]; then
261     mkdir -p /usr/lib/openvswitch/xs-saved
262     mv /usr/lib/openvswitch/xs-original/* /usr/lib/openvswitch/xs-saved/ &&
263         rmdir /usr/lib/openvswitch/xs-original
264 fi
265
266 # Replace XenServer files by our versions.
267 mkdir -p /usr/lib/openvswitch/xs-saved \
268     || printf "Could not create script backup directory.\n"
269 for f in $replace_files; do
270     s=$(basename "$f")
271     t=$(readlink "$f")
272     if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
273         mv "$f" /usr/lib/openvswitch/xs-saved/ \
274             || printf "Could not save original XenServer $s script\n"
275         ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
276             || printf "Could not link to Open vSwitch $s script\n"
277     fi
278 done
279
280 # Clean up dangling symlinks to removed OVS replacement scripts no longer
281 # provided by OVS. Any time a replacement script is removed from OVS,
282 # it should be added here to ensure correct reversion from old versions of
283 # OVS that don't clean up dangling symlinks during the uninstall phase.
284 for orig in /usr/sbin/xen-bugtool $keep_files; do
285     saved=/usr/lib/openvswitch/xs-saved/$(basename "$orig")
286     [ -e "$saved" ] && mv -f "$saved" "$orig"
287 done
288
289 # Ensure all required services are set to run
290 for s in openvswitch openvswitch-xapi-update; do
291     if chkconfig --list $s >/dev/null 2>&1; then
292         chkconfig --del $s || printf "Could not remove $s init script.\n"
293     fi
294     chkconfig --add $s || printf "Could not add $s init script.\n"
295     chkconfig $s on || printf "Could not enable $s init script.\n"
296 done
297
298 if [ "$1" = "1" ]; then    # $1 = 1 for install
299     # Configure system to use Open vSwitch
300     /opt/xensource/bin/xe-switch-network-backend vswitch
301 else    # $1 = 2 for upgrade
302
303     mode=$(cat /etc/xensource/network.conf)
304     if [ "$mode" != "vswitch" ] && [ "$mode" != "openvswitch" ]; then
305         printf "\nThe server is not configured to run Open vSwitch.  To run in\n"
306         printf "vswitch mode, you must run the following command:\n\n"
307         printf "\txe-switch-network-backend vswitch"
308         printf "\n\n"
309     fi
310 fi
311
312 %posttrans %{module_package}
313 # Ensure that modprobe will find our modules.
314 #
315 # This has to be in %posttrans instead of %post because older versions
316 # installed modules into a different directory and "rpm -U" runs the
317 # new version's %post before removing the old version's files, so if
318 # we use %post then depmod may find the old versions that are about to
319 # be removed.
320 depmod %{xen_version}
321
322 mode=$(cat /etc/xensource/network.conf)
323 if [ "$mode" = "vswitch" ] || [ "$mode" = "openvswitch" ]; then
324     printf "\nTo use the newly installed Open vSwitch kernel module, you\n"
325     printf "will either have to reboot the hypervisor or follow any\n"
326     printf "workarounds provided by your administration guide. Failure to do\n"
327     printf "so may result in incorrect operation."
328     printf "\n\n"
329 fi
330
331 %preun
332 if [ "$1" = "0" ]; then     # $1 = 0 for uninstall
333     # Configure system to use bridge
334     /opt/xensource/bin/xe-switch-network-backend bridge
335
336     # The "openvswitch" service should have been removed from
337     # "xe-switch-network-backend bridge".
338     for s in openvswitch openvswitch-xapi-update; do
339         if chkconfig --list $s >/dev/null 2>&1; then
340             chkconfig --del $s || printf "Could not remove $s init script."
341         fi
342     done
343 fi
344
345 %postun
346 # Restore original XenServer scripts if the OVS equivalent no longer exists.
347 # This works both in the upgrade and erase cases.
348 # This lists every file that every version of OVS has ever replaced. Never
349 # remove old files that OVS no longer replaces, or upgrades from old versions
350 # will fail to restore the XS originals, leaving the system in a broken state.
351 # Also be sure to add removed script paths to the %post scriptlet above to
352 # prevent the same problem when upgrading from old versions of OVS that lack
353 # this restore-on-upgrade logic.
354 for f in \
355     /etc/xensource/scripts/vif \
356     /usr/sbin/xen-bugtool \
357     /opt/xensource/libexec/interface-reconfigure \
358     /opt/xensource/libexec/InterfaceReconfigure.py \
359     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
360     /opt/xensource/libexec/InterfaceReconfigureVswitch.py
361 do
362     # Only revert dangling symlinks.
363     if [ -h "$f" ] && [ ! -e "$f" ]; then
364         s=$(basename "$f")
365         if [ ! -f "/usr/lib/openvswitch/xs-saved/$s" ]; then
366             printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-saved\n" >&2
367             printf "Could not restore original XenServer script.\n" >&2
368         else
369             (rm -f "$f" \
370                 && mv "/usr/lib/openvswitch/xs-saved/$s" "$f") \
371                 || printf "Could not restore original XenServer $s script.\n" >&2
372         fi
373     fi
374 done
375
376 if [ "$1" = "0" ]; then     # $1 = 0 for uninstall
377     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
378         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
379
380     rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
381         /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
382         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
383         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
384         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
385         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
386
387     # Remove all configuration files
388     rm -f /etc/openvswitch/conf.db
389     rm -f /etc/sysconfig/openvswitch
390     rm -f /etc/openvswitch/vswitchd.cacert
391
392     # Remove saved XenServer scripts directory, but only if it's empty
393     rmdir -p /usr/lib/openvswitch/xs-saved 2>/dev/null
394 fi
395
396 exit 0
397
398 %files
399 %defattr(-,root,root)
400 /etc/init.d/openvswitch
401 /etc/init.d/openvswitch-xapi-update
402 /etc/xapi.d/plugins/openvswitch-cfg-update
403 /etc/xensource/bugtool/*
404 /etc/logrotate.d/openvswitch
405 /etc/profile.d/openvswitch.sh
406 /usr/share/openvswitch/python/
407 /usr/share/openvswitch/bugtool-plugins/*
408 /usr/share/openvswitch/scripts/ovs-check-dead-ifs
409 /usr/share/openvswitch/scripts/ovs-xapi-sync
410 /usr/share/openvswitch/scripts/interface-reconfigure
411 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
412 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
413 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
414 /usr/share/openvswitch/scripts/vif
415 /usr/share/openvswitch/scripts/sysconfig.template
416 /usr/share/openvswitch/scripts/ovs-bugtool-*
417 /usr/share/openvswitch/scripts/ovs-save
418 /usr/share/openvswitch/scripts/ovs-ctl
419 /usr/share/openvswitch/scripts/ovs-lib
420 /usr/share/openvswitch/scripts/ovs-vtep
421 /usr/share/openvswitch/vswitch.ovsschema
422 /usr/share/openvswitch/vtep.ovsschema
423 /usr/sbin/ovs-bugtool
424 /usr/sbin/ovs-vlan-bug-workaround
425 /usr/sbin/ovs-vswitchd
426 /usr/sbin/ovsdb-server
427 /usr/bin/ovs-appctl
428 /usr/bin/ovs-dpctl
429 /usr/bin/ovs-dpctl-top
430 /usr/bin/ovs-ofctl
431 /usr/bin/ovs-parse-backtrace
432 /usr/bin/ovs-pcap
433 /usr/bin/ovs-tcpundump
434 /usr/bin/ovs-vlan-test
435 /usr/bin/ovs-vsctl
436 /usr/bin/ovsdb-client
437 /usr/bin/ovsdb-tool
438 /usr/bin/vtep-ctl
439 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
440 /usr/share/man/man1/ovsdb-client.1.gz
441 /usr/share/man/man1/ovsdb-server.1.gz
442 /usr/share/man/man1/ovsdb-tool.1.gz
443 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
444 /usr/share/man/man5/vtep.5.gz
445 /usr/share/man/man8/ovs-appctl.8.gz
446 /usr/share/man/man8/ovs-bugtool.8.gz
447 /usr/share/man/man8/ovs-ctl.8.gz
448 /usr/share/man/man8/ovs-dpctl.8.gz
449 /usr/share/man/man8/ovs-dpctl-top.8.gz
450 /usr/share/man/man8/ovs-ofctl.8.gz
451 /usr/share/man/man8/ovs-parse-backtrace.8.gz
452 /usr/share/man/man1/ovs-pcap.1.gz
453 /usr/share/man/man1/ovs-tcpundump.1.gz
454 /usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
455 /usr/share/man/man8/ovs-vlan-test.8.gz
456 /usr/share/man/man8/ovs-vsctl.8.gz
457 /usr/share/man/man8/ovs-vswitchd.8.gz
458 /usr/share/man/man8/vtep-ctl.8.gz
459 /var/lib/openvswitch
460 /var/log/openvswitch
461 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
462 %exclude /usr/share/openvswitch/scripts/*.py[co]
463 %exclude /usr/share/openvswitch/python/*.py[co]
464 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
465 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]
466
467 %files %{module_package}
468 /lib/modules/%{xen_version}/extra/openvswitch/openvswitch.ko