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