netdev-vport: Use vport set_stats instead of internal dev.
[openvswitch] / xenserver / openvswitch-xen.spec
1 # Spec file for Open vSwitch.
2
3 # Copyright (C) 2009, 2010 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 Name: openvswitch
19 Summary: Virtual switch
20 Group: System Environment/Daemons
21 URL: http://www.openvswitch.org/
22 Vendor: Nicira Networks, Inc.
23 Version: %{openvswitch_version}
24
25 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
26 License: ASL 2.0 and GPLv2
27 Release: 1
28 Source: openvswitch-%{openvswitch_version}.tar.gz
29 Buildroot: /tmp/openvswitch-xen-rpm
30 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
31
32 %description
33 Open vSwitch provides standard network bridging functions augmented with
34 support for the OpenFlow protocol for remote per-flow control of
35 traffic.
36
37 %prep
38 %setup -q -n openvswitch-%{openvswitch_version}
39
40 %build
41 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
42 make %{_smp_mflags}
43
44 %install
45 rm -rf $RPM_BUILD_ROOT
46 make install DESTDIR=$RPM_BUILD_ROOT
47 install -d -m 755 $RPM_BUILD_ROOT/etc
48 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
49 install -m 755 xenserver/etc_init.d_openvswitch \
50          $RPM_BUILD_ROOT/etc/init.d/openvswitch
51 install -m 755 xenserver/etc_init.d_openvswitch-xapi-update \
52          $RPM_BUILD_ROOT/etc/init.d/openvswitch-xapi-update
53 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
54 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
55 install -m 755 xenserver/etc_logrotate.d_openvswitch \
56          $RPM_BUILD_ROOT/etc/logrotate.d/openvswitch
57 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
58 install -m 755 xenserver/etc_profile.d_openvswitch.sh \
59          $RPM_BUILD_ROOT/etc/profile.d/openvswitch.sh
60 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
61 install -m 755 xenserver/etc_xapi.d_plugins_openvswitch-cfg-update \
62          $RPM_BUILD_ROOT/etc/xapi.d/plugins/openvswitch-cfg-update
63 install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
64 install -m 644 vswitchd/vswitch.ovsschema \
65          $RPM_BUILD_ROOT/usr/share/openvswitch/vswitch.ovsschema
66 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
67              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/interface-reconfigure
68 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigure.py \
69              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigure.py
70 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py \
71              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
72 install -m 644 xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py \
73              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
74 install -m 755 xenserver/etc_xensource_scripts_vif \
75              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/vif
76 install -m 755 xenserver/usr_share_openvswitch_scripts_refresh-network-uuids \
77                $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/refresh-network-uuids
78 install -m 755 xenserver/usr_sbin_xen-bugtool \
79              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/xen-bugtool
80 install -m 755 xenserver/usr_sbin_brctl \
81              $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/brctl
82 install -m 755 xenserver/usr_share_openvswitch_scripts_sysconfig.template \
83          $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/sysconfig.template
84 install -d -m 755 $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base
85 install -m 644 \
86         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
87                $RPM_BUILD_ROOT/usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
88
89 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch
90 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/extra/openvswitch \;
91
92 # Get rid of stuff we don't want to make RPM happy.
93 rm \
94     $RPM_BUILD_ROOT/usr/bin/ovs-controller \
95     $RPM_BUILD_ROOT/usr/bin/ovs-discover \
96     $RPM_BUILD_ROOT/usr/bin/ovs-kill \
97     $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
98     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
99     $RPM_BUILD_ROOT/usr/bin/ovs-wdt \
100     $RPM_BUILD_ROOT/usr/sbin/ovs-monitor \
101     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
102     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
103     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
104     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
105     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
106
107 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
108
109 %clean
110 rm -rf $RPM_BUILD_ROOT
111
112 %post
113 if [ ! -f /etc/xensource-inventory ]; then
114     printf "XenSource inventory not present in /etc/xensource-inventory"
115     exit 1
116 fi
117 . /etc/xensource-inventory
118
119 if [ "$1" = "1" ]; then
120     if md5sum -c --status <<EOF
121 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
122 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
123 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
124 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
125 EOF
126     then
127         printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
128     elif md5sum -c --status <<EOF
129 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
130 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
131 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
132 f6519085c2fc5f7bc4eccc294ed62000  /usr/sbin/xen-bugtool
133 EOF
134     then
135         printf "\nVerified host scripts from XenServer 5.5.0-24648p (Update 1)\n"
136         printf "or 5.5.0-25727p (Update 2).\n\n"
137     elif md5sum -c --status <<EOF
138 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
139 02cf136237ed85fcbcc1efc15ce0591c  /opt/xensource/libexec/interface-reconfigure
140 3a192ee70ebf2153c90051b3af95f331  /opt/xensource/libexec/InterfaceReconfigureBridge.py
141 f71cadf1464caefa7943de0ab47fdd8a  /opt/xensource/libexec/InterfaceReconfigure.py
142 d70f08f235fb1bfd49a0580e440f15a0  /opt/xensource/libexec/InterfaceReconfigureVswitch.py
143 f5c85ca825b1e6f5a0845530981cd836  /etc/xensource/scripts/vif
144 facb851606f82ca2bcc760a4d91bbe33  /usr/sbin/xen-bugtool
145 EOF
146     then
147         printf "\nVerified host scripts from XenServer 5.5.900-29381p.\n\n"
148     else
149 cat <<EOF
150
151 The original XenServer scripts replaced by this package are not those
152 of any supported version of XenServer.  This could lead to unexpected
153 behavior of your server.  Unless you are sure you know what you are
154 doing, it is highly recommended that you remove this package
155 immediately after the install completes, which will restore the
156 XenServer scripts that you were previously using.
157
158 EOF
159     fi
160 fi
161
162 # On XenServer 5.5.0, we need refresh-network-uuids to run whenever
163 # XAPI starts or restarts.  (On XenServer 5.6.0, XAPI calls the
164 # "update" method of the vswitch-cfg-update plugin whenever it starts
165 # or restarts, so this is no longer necessary.)
166 if test "$PRODUCT_VERSION" = "5.5.0"; then
167     RNU=/usr/share/openvswitch/scripts/refresh-network-uuids
168     XSS=/opt/xensource/libexec/xapi-startup-script
169     if test -e $XSS && (test ! -L $XSS || test "`readlink $XSS`" != $RNU); then
170         echo "$XSS is already in use, refusing to overwrite"
171         exit 1
172     fi
173     rm -f $XSS
174     ln -s $RNU $XSS
175 fi
176
177 if test ! -e /var/xapi/network.dbcache; then
178     if test "$1" = 1; then
179         printf "Creating xapi database cache...  "
180     else
181         printf "warning: Open vSwitch is being re-installed or upgraded,\n"
182         printf "         but the xapi database cache is missing.\n"
183         printf "Re-creating xapi database cache...  "
184     fi
185
186     if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
187         printf "done.\n"
188     else
189         printf "FAILED\n"
190         printf "Open vSwitch can only be installed on a XenServer that\n"
191         printf "has connectivity to xapi on the pool master.  Please\n"
192         printf "fix connectivity to the pool master, then try again.\n"
193         exit 1
194     fi
195 fi
196
197 # Ensure that modprobe will find our modules.
198 depmod %{xen_version}
199
200 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
201     cat >>/etc/sysctl.conf <<EOF
202 # This works around an issue in xhad, which binds to a particular
203 # Ethernet device, which in turn causes ICMP port unreachable messages
204 # if packets are received are on the wrong interface, which in turn
205 # can happen if we send out ARP replies on every interface (as Linux
206 # does by default) instead of just on the interface that has the IP
207 # address being ARPed for, which this sysctl setting in turn works
208 # around.
209 #
210 # Bug #1378.
211 net.ipv4.conf.all.arp_filter = 1
212 EOF
213 fi
214
215 if test ! -e /etc/openvswitch/conf.db; then
216     install -d -m 755 -o root -g root /etc/openvswitch
217
218     # Create ovs-vswitchd config database
219     ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
220             /usr/share/openvswitch/vswitch.ovsschema
221
222     # Create initial table in config database
223     ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
224             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
225             > /dev/null
226 fi
227
228 # Create default or update existing /etc/sysconfig/openvswitch.
229 SYSCONFIG=/etc/sysconfig/openvswitch
230 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
231 if [ ! -e $SYSCONFIG ]; then
232     cp $TEMPLATE $SYSCONFIG
233 else
234     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
235     do
236         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
237             echo >> $SYSCONFIG
238             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
239         fi
240     done
241 fi
242
243 # Replace XenServer files by our versions.
244 mkdir -p /usr/lib/openvswitch/xs-original \
245     || printf "Could not create script backup directory.\n"
246 for f in \
247     /opt/xensource/libexec/interface-reconfigure \
248     /opt/xensource/libexec/InterfaceReconfigure.py \
249     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
250     /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
251     /etc/xensource/scripts/vif \
252     /usr/sbin/xen-bugtool \
253     /usr/sbin/brctl
254 do
255     s=$(basename "$f")
256     t=$(readlink "$f")
257     if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
258         mv "$f" /usr/lib/openvswitch/xs-original/ \
259             || printf "Could not save original XenServer $s script\n"
260         ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
261             || printf "Could not link to Open vSwitch $s script\n"
262     fi
263 done
264
265 # Ensure all required services are set to run
266 for s in openvswitch openvswitch-xapi-update; do
267     if chkconfig --list $s >/dev/null 2>&1; then
268         chkconfig --del $s || printf "Could not remove $s init script."
269     fi
270     chkconfig --add $s || printf "Could not add $s init script."
271     chkconfig $s on || printf "Could not enable $s init script."
272 done
273
274 # Configure system to use Open vSwitch
275 echo vswitch > /etc/xensource/network.conf
276
277 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
278     printf "\nYou MUST reboot the server NOW to complete the change to\n"
279     printf "Open vSwitch.  Attempts to modify networking on the server\n"
280     printf "or any hosted VM will fail until after the reboot and could\n"
281     printf "leave the server in an state requiring manual recovery.\n\n"
282 else
283     printf "\nTo use the new Open vSwitch install, you should reboot the\n" 
284     printf "server now.  Failure to do so may result in incorrect operation."
285     printf "\n\n"
286 fi
287
288 %preun
289 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
290     for s in openvswitch openvswitch-xapi-update; do
291         chkconfig --del $s || printf "Could not remove $s init script."
292     done
293 fi
294
295
296 %postun
297 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
298     . /etc/xensource-inventory
299     if test "$PRODUCT_VERSION" = "5.5.0"; then
300         XSS=/opt/xensource/libexec/xapi-startup-script
301         rm -f $XSS
302     fi
303
304     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
305         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
306
307     rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
308         /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
309         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
310         /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
311         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
312         /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo 
313
314     # Restore original XenServer scripts
315     for f in \
316         /opt/xensource/libexec/interface-reconfigure \
317         /opt/xensource/libexec/InterfaceReconfigure.py \
318         /opt/xensource/libexec/InterfaceReconfigureBridge.py \
319         /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
320         /etc/xensource/scripts/vif \
321         /usr/sbin/xen-bugtool \
322         /usr/sbin/brctl
323     do
324         s=$(basename "$f")
325         if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
326             printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
327             printf "Could not restore original XenServer script.\n"
328         else
329             (rm -f "$f" \
330                 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
331                 || printf "Could not restore original XenServer $s script.\n"
332         fi
333     done
334
335     # Remove all configuration files
336     rm -f /etc/openvswitch/conf.db
337     rm -f /etc/sysconfig/openvswitch
338     rm -f /etc/openvswitch/vswitchd.cacert
339     rm -f /var/xapi/network.dbcache
340
341     # Configure system to use bridge
342     echo bridge > /etc/xensource/network.conf
343
344     printf "\nYou MUST reboot the server now to complete the change to\n"
345     printf "standard Xen networking.  Attempts to modify networking on the\n"
346     printf "server or any hosted VM will fail until after the reboot and\n"
347     printf "could leave the server in a state requiring manual recovery.\n\n"
348 fi
349
350
351 %files
352 %defattr(-,root,root)
353 /etc/init.d/openvswitch
354 /etc/init.d/openvswitch-xapi-update
355 /etc/xapi.d/plugins/openvswitch-cfg-update
356 /etc/logrotate.d/openvswitch
357 /etc/profile.d/openvswitch.sh
358 /lib/modules/%{xen_version}/kernel/extra/openvswitch/openvswitch_mod.ko
359 /lib/modules/%{xen_version}/kernel/extra/openvswitch/brcompat_mod.ko
360 /usr/share/openvswitch/scripts/refresh-network-uuids
361 /usr/share/openvswitch/scripts/interface-reconfigure
362 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
363 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
364 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
365 /usr/share/openvswitch/scripts/vif
366 /usr/share/openvswitch/scripts/xen-bugtool
367 /usr/share/openvswitch/scripts/brctl
368 /usr/share/openvswitch/scripts/sysconfig.template
369 /usr/share/openvswitch/vswitch.ovsschema
370 /usr/sbin/ovs-brcompatd
371 /usr/sbin/ovs-vswitchd
372 /usr/sbin/ovsdb-server
373 /usr/bin/ovs-appctl
374 /usr/bin/ovs-dpctl
375 /usr/bin/ovs-ofctl
376 /usr/bin/ovs-vsctl
377 /usr/bin/ovsdb-client
378 /usr/bin/ovsdb-tool
379 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
380 /usr/share/man/man1/ovsdb-client.1.gz
381 /usr/share/man/man1/ovsdb-server.1.gz
382 /usr/share/man/man1/ovsdb-tool.1.gz
383 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
384 /usr/share/man/man8/ovs-appctl.8.gz
385 /usr/share/man/man8/ovs-brcompatd.8.gz
386 /usr/share/man/man8/ovs-dpctl.8.gz
387 /usr/share/man/man8/ovs-ofctl.8.gz
388 /usr/share/man/man8/ovs-vsctl.8.gz
389 /usr/share/man/man8/ovs-vswitchd.8.gz
390 /var/lib/openvswitch
391 %exclude /usr/lib/xsconsole/plugins-base/*.pyc
392 %exclude /usr/lib/xsconsole/plugins-base/*.pyo
393 %exclude /usr/share/openvswitch/scripts/*.pyc
394 %exclude /usr/share/openvswitch/scripts/*.pyo