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