rhel, xenserver: Run unit tests while creating rpms.
[cascardo/ovs.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 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
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-l3ping \
133     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
134     $RPM_BUILD_ROOT/usr/bin/ovs-test \
135     $RPM_BUILD_ROOT/usr/share/man/man1/ovs-benchmark.1 \
136     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
137     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8 \
138     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8
139 (cd "$RPM_BUILD_ROOT" && rm -f usr/lib/lib*)
140
141 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
142
143 %check
144 %if %{with check}
145     if make check TESTSUITEFLAGS='%{_smp_mflags}' ||
146        make check TESTSUITEFLAGS='--recheck'; then :;
147     else
148         cat tests/testsuite.log
149         exit 1
150     fi
151 %endif
152
153 %clean
154 rm -rf $RPM_BUILD_ROOT
155
156 %post
157 # A list of Citrix XenServer scripts that we might need to replace
158 # with our own versions.
159 scripts="
160     /etc/xensource/scripts/vif
161     /opt/xensource/libexec/InterfaceReconfigure.py
162     /opt/xensource/libexec/InterfaceReconfigureBridge.py
163     /opt/xensource/libexec/InterfaceReconfigureVswitch.py
164     /opt/xensource/libexec/interface-reconfigure"
165
166 # Calculate into $md5sums a comma-separated set of md5sums of the
167 # Citrix XenServer scripts that we might need to replace.  We might be
168 # upgrading an older version of the package that moved the files out
169 # of the way, so we need to look for the files in those out-of-the-way
170 # locations first.
171 md5sums=
172 for script in $scripts; do
173     b=$(basename "$script")
174     if test -e /usr/lib/openvswitch/xs-saved/"$b"; then
175         f=/usr/lib/openvswitch/xs-saved/"$b"
176     elif test -e /usr/lib/openvswitch/xs-original/"$b"; then
177         f=/usr/lib/openvswitch/xs-original/"$b"
178     elif test -e "$script" && test ! -h "$script"; then
179         f=$script
180     else
181         printf "\n$script: not found\n"
182         f=/dev/null
183     fi
184     md5sums="$md5sums,$(md5sum $f | awk '{print $1}')"
185 done
186 md5sums=${md5sums#,}
187
188 # Now check the md5sums against the known sets of md5sums:
189 #
190 #   - If they are known to be a version of XenServer scripts that we should
191 #     replace, we replace them (by putting $scripts into $replace_files).
192 #
193 #   - Otherwise, we guess that it's better not to replace them, because the
194 #     improvements that our versions of the scripts provide are minimal, so
195 #     it's better to avoid possibly breaking any changes made upstream by
196 #     Citrix.
197 case $md5sums in
198     cf09a68d9f8b434e79a4c83b01a3bb4b,395866df1b0b20c12c4dd2f7de0ecdb4,9d493545ae81463239d3162cbc798852,862d0939b441de9264a900628e950fe9,21f85db25599d7f026cd489385d58aa6)
199         keep_files=
200         replace_files=$scripts
201         printf "\nVerified host scripts from XenServer 6.0.0.\n"
202         ;;
203
204     c5f48246577a17cf1b971fb5ce4e920b,2e2c912f86f9c536c89adc34ff3c2b2b,28d3ff72d72bdec4f37d70699f5edb76,67e1d0af16fc1ddf10009c5c063ad2ba,f3feff30aa3b3f8b514664a96a8dc0ab)
205         keep_files=
206         replace_files=$scripts
207         printf "\nVerified host scripts from XenServer 5.6-SP2.\n"
208         ;;
209         
210     c5f48246577a17cf1b971fb5ce4e920b,2e2c912f86f9c536c89adc34ff3c2b2b,28d3ff72d72bdec4f37d70699f5edb76,67e1d0af16fc1ddf10009c5c063ad2ba,24bae6906d182ba47668174f8e480cc6)
211         keep_files=
212         replace_files=$scripts
213         printf "\nVerified host scripts from XenServer 5.6-FP1.\n"
214         ;;
215
216     *)
217         keep_files=$scripts
218         replace_files=
219         cat <<EOF
220
221 The host scripts on this machine are not those of any supported
222 version of XenServer.  On XenServer earlier than 5.6-FP1, your Open
223 vSwitch installation will not work.  On XenServer 5.6-FP1 or later,
224 Open vSwitch is not verified to work, which could lead to unexpected
225 behavior.
226
227 EOF
228         ;;
229 esac
230
231 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
232     cat >>/etc/sysctl.conf <<EOF
233 # This works around an issue in xhad, which binds to a particular
234 # Ethernet device, which in turn causes ICMP port unreachable messages
235 # if packets are received are on the wrong interface, which in turn
236 # can happen if we send out ARP replies on every interface (as Linux
237 # does by default) instead of just on the interface that has the IP
238 # address being ARPed for, which this sysctl setting in turn works
239 # around.
240 #
241 # Bug #1378.
242 net.ipv4.conf.all.arp_filter = 1
243 EOF
244 fi
245
246 if test ! -e /etc/openvswitch/conf.db; then
247     install -d -m 755 -o root -g root /etc/openvswitch
248
249     # Create ovs-vswitchd config database
250     ovsdb-tool -vconsole:off create /etc/openvswitch/conf.db \
251             /usr/share/openvswitch/vswitch.ovsschema
252
253     # Create initial table in config database
254     ovsdb-tool -vconsole:off transact /etc/openvswitch/conf.db \
255             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
256             > /dev/null
257 fi
258
259 # Create default or update existing /etc/sysconfig/openvswitch.
260 SYSCONFIG=/etc/sysconfig/openvswitch
261 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
262 if [ ! -e $SYSCONFIG ]; then
263     cp $TEMPLATE $SYSCONFIG
264 else
265     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
266     do
267         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
268             echo >> $SYSCONFIG
269             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
270         fi
271     done
272 fi
273
274 # Deliberately break %postun in broken OVS builds that revert original
275 # XenServer scripts during rpm -U by moving the directory where it thinks
276 # they are saved.
277 if [ -d /usr/lib/openvswitch/xs-original ]; then
278     mkdir -p /usr/lib/openvswitch/xs-saved
279     mv /usr/lib/openvswitch/xs-original/* /usr/lib/openvswitch/xs-saved/ &&
280         rmdir /usr/lib/openvswitch/xs-original
281 fi
282
283 # Replace XenServer files by our versions.
284 mkdir -p /usr/lib/openvswitch/xs-saved \
285     || printf "Could not create script backup directory.\n"
286 for f in $replace_files; do
287     s=$(basename "$f")
288     t=$(readlink "$f")
289     if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
290         mv "$f" /usr/lib/openvswitch/xs-saved/ \
291             || printf "Could not save original XenServer $s script\n"
292         ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
293             || printf "Could not link to Open vSwitch $s script\n"
294     fi
295 done
296
297 # Clean up dangling symlinks to removed OVS replacement scripts no longer
298 # provided by OVS. Any time a replacement script is removed from OVS,
299 # it should be added here to ensure correct reversion from old versions of
300 # OVS that don't clean up dangling symlinks during the uninstall phase.
301 for orig in /usr/sbin/xen-bugtool $keep_files; do
302     saved=/usr/lib/openvswitch/xs-saved/$(basename "$orig")
303     [ -e "$saved" ] && mv -f "$saved" "$orig"
304 done
305
306 # Ensure all required services are set to run
307 for s in openvswitch openvswitch-xapi-update; do
308     if chkconfig --list $s >/dev/null 2>&1; then
309         chkconfig --del $s || printf "Could not remove $s init script.\n"
310     fi
311     chkconfig --add $s || printf "Could not add $s init script.\n"
312     chkconfig $s on || printf "Could not enable $s init script.\n"
313 done
314
315 if [ "$1" = "1" ]; then    # $1 = 1 for install
316     # Configure system to use Open vSwitch
317     /opt/xensource/bin/xe-switch-network-backend vswitch
318 else    # $1 = 2 for upgrade
319
320     mode=$(cat /etc/xensource/network.conf)
321     if [ "$mode" != "vswitch" ] && [ "$mode" != "openvswitch" ]; then
322         printf "\nThe server is not configured to run Open vSwitch.  To run in\n"
323         printf "vswitch mode, you must run the following command:\n\n"
324         printf "\txe-switch-network-backend vswitch"
325         printf "\n\n"
326     fi
327 fi
328
329 %posttrans %{module_package}
330 # Ensure that modprobe will find our modules.
331 #
332 # This has to be in %posttrans instead of %post because older versions
333 # installed modules into a different directory and "rpm -U" runs the
334 # new version's %post before removing the old version's files, so if
335 # we use %post then depmod may find the old versions that are about to
336 # be removed.
337 depmod %{xen_version}
338
339 mode=$(cat /etc/xensource/network.conf)
340 if [ "$mode" = "vswitch" ] || [ "$mode" = "openvswitch" ]; then
341     printf "\nTo use the newly installed Open vSwitch kernel module, you\n"
342     printf "will either have to reboot the hypervisor or follow any\n"
343     printf "workarounds provided by your administration guide. Failure to do\n"
344     printf "so may result in incorrect operation."
345     printf "\n\n"
346 fi
347
348 %preun
349 if [ "$1" = "0" ]; then     # $1 = 0 for uninstall
350     # Configure system to use bridge
351     /opt/xensource/bin/xe-switch-network-backend bridge
352
353     # The "openvswitch" service should have been removed from
354     # "xe-switch-network-backend bridge".
355     for s in openvswitch openvswitch-xapi-update; do
356         if chkconfig --list $s >/dev/null 2>&1; then
357             chkconfig --del $s || printf "Could not remove $s init script."
358         fi
359     done
360 fi
361
362 %postun
363 # Restore original XenServer scripts if the OVS equivalent no longer exists.
364 # This works both in the upgrade and erase cases.
365 # This lists every file that every version of OVS has ever replaced. Never
366 # remove old files that OVS no longer replaces, or upgrades from old versions
367 # will fail to restore the XS originals, leaving the system in a broken state.
368 # Also be sure to add removed script paths to the %post scriptlet above to
369 # prevent the same problem when upgrading from old versions of OVS that lack
370 # this restore-on-upgrade logic.
371 for f in \
372     /etc/xensource/scripts/vif \
373     /usr/sbin/xen-bugtool \
374     /opt/xensource/libexec/interface-reconfigure \
375     /opt/xensource/libexec/InterfaceReconfigure.py \
376     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
377     /opt/xensource/libexec/InterfaceReconfigureVswitch.py
378 do
379     # Only revert dangling symlinks.
380     if [ -h "$f" ] && [ ! -e "$f" ]; then
381         s=$(basename "$f")
382         if [ ! -f "/usr/lib/openvswitch/xs-saved/$s" ]; then
383             printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-saved\n" >&2
384             printf "Could not restore original XenServer script.\n" >&2
385         else
386             (rm -f "$f" \
387                 && mv "/usr/lib/openvswitch/xs-saved/$s" "$f") \
388                 || printf "Could not restore original XenServer $s script.\n" >&2
389         fi
390     fi
391 done
392
393 if [ "$1" = "0" ]; then     # $1 = 0 for uninstall
394     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
395         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
396
397     rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
398         /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
399         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
400         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
401         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
402         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo
403
404     # Remove all configuration files
405     rm -f /etc/openvswitch/conf.db
406     rm -f /etc/sysconfig/openvswitch
407     rm -f /etc/openvswitch/vswitchd.cacert
408
409     # Remove saved XenServer scripts directory, but only if it's empty
410     rmdir -p /usr/lib/openvswitch/xs-saved 2>/dev/null
411 fi
412
413 exit 0
414
415 %files
416 %defattr(-,root,root)
417 /etc/init.d/openvswitch
418 /etc/init.d/openvswitch-xapi-update
419 /etc/xapi.d/plugins/openvswitch-cfg-update
420 /etc/xensource/bugtool/*
421 /etc/logrotate.d/openvswitch
422 /etc/profile.d/openvswitch.sh
423 /usr/share/openvswitch/python/
424 /usr/share/openvswitch/bugtool-plugins/*
425 /usr/share/openvswitch/scripts/ovs-check-dead-ifs
426 /usr/share/openvswitch/scripts/ovs-xapi-sync
427 /usr/share/openvswitch/scripts/interface-reconfigure
428 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
429 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
430 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
431 /usr/share/openvswitch/scripts/vif
432 /usr/share/openvswitch/scripts/sysconfig.template
433 /usr/share/openvswitch/scripts/ovs-bugtool-*
434 /usr/share/openvswitch/scripts/ovs-save
435 /usr/share/openvswitch/scripts/ovs-ctl
436 /usr/share/openvswitch/scripts/ovs-lib
437 /usr/share/openvswitch/scripts/ovs-vtep
438 /usr/share/openvswitch/vswitch.ovsschema
439 /usr/share/openvswitch/vtep.ovsschema
440 /usr/sbin/ovs-bugtool
441 /usr/sbin/ovs-vlan-bug-workaround
442 /usr/sbin/ovs-vswitchd
443 /usr/sbin/ovsdb-server
444 /usr/bin/ovs-appctl
445 /usr/bin/ovs-dpctl
446 /usr/bin/ovs-dpctl-top
447 /usr/bin/ovs-ofctl
448 /usr/bin/ovs-parse-backtrace
449 /usr/bin/ovs-pcap
450 /usr/bin/ovs-tcpundump
451 /usr/bin/ovs-vlan-test
452 /usr/bin/ovs-vsctl
453 /usr/bin/ovsdb-client
454 /usr/bin/ovsdb-tool
455 /usr/bin/vtep-ctl
456 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
457 /usr/share/man/man1/ovsdb-client.1.gz
458 /usr/share/man/man1/ovsdb-server.1.gz
459 /usr/share/man/man1/ovsdb-tool.1.gz
460 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
461 /usr/share/man/man5/vtep.5.gz
462 /usr/share/man/man8/ovs-appctl.8.gz
463 /usr/share/man/man8/ovs-bugtool.8.gz
464 /usr/share/man/man8/ovs-ctl.8.gz
465 /usr/share/man/man8/ovs-dpctl.8.gz
466 /usr/share/man/man8/ovs-dpctl-top.8.gz
467 /usr/share/man/man8/ovs-ofctl.8.gz
468 /usr/share/man/man8/ovs-parse-backtrace.8.gz
469 /usr/share/man/man1/ovs-pcap.1.gz
470 /usr/share/man/man1/ovs-tcpundump.1.gz
471 /usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
472 /usr/share/man/man8/ovs-vlan-test.8.gz
473 /usr/share/man/man8/ovs-vsctl.8.gz
474 /usr/share/man/man8/ovs-vswitchd.8.gz
475 /usr/share/man/man8/vtep-ctl.8.gz
476 /var/lib/openvswitch
477 /var/log/openvswitch
478 %exclude /usr/lib/xsconsole/plugins-base/*.py[co]
479 %exclude /usr/share/openvswitch/scripts/*.py[co]
480 %exclude /usr/share/openvswitch/python/*.py[co]
481 %exclude /usr/share/openvswitch/python/ovs/*.py[co]
482 %exclude /usr/share/openvswitch/python/ovs/db/*.py[co]
483
484 %files %{module_package}
485 /lib/modules/%{xen_version}/extra/openvswitch/openvswitch.ko