9e6f79945b598b11596bd451929b7dc116173195
[sliver-openvswitch.git] / 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 -m 644 \
85         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
86                $RPM_BUILD_ROOT/usr/share/openvswitch/scripts/XSFeatureVSwitch.py
87
88 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/openvswitch
89 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/openvswitch \;
90
91 # Get rid of stuff we don't want to make RPM happy.
92 rm \
93     $RPM_BUILD_ROOT/usr/bin/ovs-controller \
94     $RPM_BUILD_ROOT/usr/bin/ovs-discover \
95     $RPM_BUILD_ROOT/usr/bin/ovs-kill \
96     $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
97     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
98     $RPM_BUILD_ROOT/usr/bin/ovs-wdt \
99     $RPM_BUILD_ROOT/usr/sbin/ovs-monitor \
100     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
101     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
102     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
103     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
104     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
105 rm -f $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/openvswitch/veth_mod.ko
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
118 if [ "$1" = "1" ]; then
119     if md5sum -c --status <<EOF
120 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
121 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
122 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
123 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
124 EOF
125     then
126         printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
127     elif md5sum -c --status <<EOF
128 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
129 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
130 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
131 f6519085c2fc5f7bc4eccc294ed62000  /usr/sbin/xen-bugtool
132 EOF
133     then
134         printf "\nVerified host scripts from XenServer 5.5.0-24648p (Update 1)\n"
135         printf "or 5.5.0-25727p (Update 2).\n\n"
136     elif md5sum -c --status <<EOF
137 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
138 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
139 ce451d3c985fd1db6497a363f0d9dedb  /opt/xensource/libexec/interface-reconfigure
140 2b53f500431fcba5276c896e9e4281b9  /usr/sbin/xen-bugtool
141 EOF
142     then
143         printf "\nVerified host scripts from XenServer 5.5.900.\n\n"
144     else
145 cat <<EOF
146
147 The original XenServer scripts replaced by this package are not those
148 of any supported version of XenServer.  This could lead to unexpected
149 behavior of your server.  Unless you are sure you know what you are
150 doing, it is highly recommended that you remove this package
151 immediately after the install completes, which will restore the
152 XenServer scripts that you were previously using.
153
154 EOF
155     fi
156 fi
157
158 if test ! -e /var/xapi/network.dbcache; then
159     if test "$1" = 1; then
160         printf "Creating xapi database cache...  "
161     else
162         printf "warning: Open vSwitch is being re-installed or upgraded,\n"
163         printf "         but the xapi database cache is missing.\n"
164         printf "Re-creating xapi database cache...  "
165     fi
166
167     if /usr/share/openvswitch/scripts/interface-reconfigure rewrite; then
168         printf "done.\n"
169     else
170         printf "FAILED\n"
171         printf "Open vSwitch can only be installed on a XenServer that\n"
172         printf "has connectivity to xapi on the pool master.  Please\n"
173         printf "fix connectivity to the pool master, then try again.\n"
174         exit 1
175     fi
176 fi
177
178 # Ensure that modprobe will find our modules.
179 depmod %{xen_version}
180
181 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
182     cat >>/etc/sysctl.conf <<EOF
183 # This works around an issue in xhad, which binds to a particular
184 # Ethernet device, which in turn causes ICMP port unreachable messages
185 # if packets are received are on the wrong interface, which in turn
186 # can happen if we send out ARP replies on every interface (as Linux
187 # does by default) instead of just on the interface that has the IP
188 # address being ARPed for, which this sysctl setting in turn works
189 # around.
190 #
191 # Bug #1378.
192 net.ipv4.conf.all.arp_filter = 1
193 EOF
194 fi
195
196 if test ! -e /etc/openvswitch/conf.db; then
197     install -d -m 755 -o root -g root /etc/openvswitch
198
199     # Create ovs-vswitchd config database
200     ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
201             /usr/share/openvswitch/vswitch.ovsschema \
202
203     # Create initial table in config database
204     ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
205             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
206             > /dev/null
207 fi
208
209 # Create default or update existing /etc/sysconfig/openvswitch.
210 SYSCONFIG=/etc/sysconfig/openvswitch
211 TEMPLATE=/usr/share/openvswitch/scripts/sysconfig.template
212 if [ ! -e $SYSCONFIG ]; then
213     cp $TEMPLATE $SYSCONFIG
214 else
215     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
216     do
217         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
218             echo >> $SYSCONFIG
219             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
220         fi
221     done
222 fi
223
224 # Replace XenServer files by our versions.
225 mkdir -p /usr/lib/openvswitch/xs-original \
226     || printf "Could not create script backup directory.\n"
227 for f in \
228     /opt/xensource/libexec/interface-reconfigure \
229     /opt/xensource/libexec/InterfaceReconfigure.py \
230     /opt/xensource/libexec/InterfaceReconfigureBridge.py \
231     /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
232     /etc/xensource/scripts/vif \
233     /usr/sbin/xen-bugtool \
234     /usr/sbin/brctl
235 do
236     s=$(basename "$f")
237     t=$(readlink "$f")
238     if [ -f "$f" ] && [ "$t" != "/usr/share/openvswitch/scripts/$s" ]; then
239         mv "$f" /usr/lib/openvswitch/xs-original/ \
240             || printf "Could not save original XenServer $s script\n"
241         ln -s "/usr/share/openvswitch/scripts/$s" "$f" \
242             || printf "Could not link to Open vSwitch $s script\n"
243     fi
244 done
245
246 # Install xsconsole plugin
247 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
248 if [ "$plugin" != "/usr/share/openvswitch/scripts/XSFeatureVSwitch.py" ]; then
249     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
250     ln -s /usr/share/openvswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
251 fi
252
253 # Ensure all required services are set to run
254 for s in openvswitch openvswitch-xapi-update; do
255     if chkconfig --list $s >/dev/null 2>&1; then
256         chkconfig --del $s || printf "Could not remove $s init script."
257     fi
258     chkconfig --add $s || printf "Could not add $s init script."
259     chkconfig $s on || printf "Could not enable $s init script."
260 done
261
262 # Configure system to use Open vSwitch
263 echo vswitch > /etc/xensource/network.conf
264
265 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
266     printf "\nYou MUST reboot the server NOW to complete the change to\n"
267     printf "Open vSwitch.  Attempts to modify networking on the server\n"
268     printf "or any hosted VM will fail until after the reboot and could\n"
269     printf "leave the server in an state requiring manual recovery.\n\n"
270 else
271     printf "\nTo use the new Open vSwitch install, you should reboot the\n" 
272     printf "server now.  Failure to do so may result in incorrect operation."
273     printf "\n\n"
274 fi
275
276 %preun
277 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
278     for s in openvswitch openvswitch-xapi-update; do
279         chkconfig --del $s || printf "Could not remove $s init script."
280     done
281 fi
282
283
284 %postun
285 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
286
287     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
288         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
289         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
290         || printf "Could not remove Open vSwitch xsconsole plugin.\n"
291
292     # Restore original XenServer scripts
293     for f in \
294         /opt/xensource/libexec/interface-reconfigure \
295         /etc/xensource/scripts/vif \
296         /usr/sbin/xen-bugtool \
297         /usr/sbin/brctl
298     do
299         s=$(basename "$f")
300         if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
301             printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
302             printf "Could not restore original XenServer script.\n"
303         else
304             (rm -f "$f" \
305                 && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
306                 || printf "Could not restore original XenServer $s script.\n"
307         fi
308     done
309
310     # Remove all configuration files
311     rm -f /etc/openvswitch/conf.db
312     rm -f /etc/sysconfig/openvswitch
313     rm -f /etc/openvswitch/vswitchd.cacert
314     rm -f /var/xapi/network.dbcache
315
316     # Configure system to use bridge
317     echo bridge > /etc/xensource/network.conf
318
319     printf "\nYou MUST reboot the server now to complete the change to\n"
320     printf "standard Xen networking.  Attempts to modify networking on the\n"
321     printf "server or any hosted VM will fail until after the reboot and\n"
322     printf "could leave the server in a state requiring manual recovery.\n\n"
323 fi
324
325
326 %files
327 %defattr(-,root,root)
328 /etc/init.d/openvswitch
329 /etc/init.d/openvswitch-xapi-update
330 /etc/xapi.d/plugins/openvswitch-cfg-update
331 /etc/logrotate.d/openvswitch
332 /etc/profile.d/openvswitch.sh
333 /lib/modules/%{xen_version}/kernel/net/openvswitch/openvswitch_mod.ko
334 /lib/modules/%{xen_version}/kernel/net/openvswitch/brcompat_mod.ko
335 %if %(echo '%{xen_version}'|awk -F"." '{if ($3>=18) print 1; else print 0;}')
336 /lib/modules/%{xen_version}/kernel/net/openvswitch/ip_gre_mod.ko
337 %endif
338 /usr/share/openvswitch/scripts/refresh-network-uuids
339 /usr/share/openvswitch/scripts/interface-reconfigure
340 /usr/share/openvswitch/scripts/InterfaceReconfigure.py
341 /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.py
342 /usr/share/openvswitch/scripts/InterfaceReconfigureVswitch.py
343 /usr/share/openvswitch/scripts/vif
344 /usr/share/openvswitch/scripts/xen-bugtool
345 /usr/share/openvswitch/scripts/XSFeatureVSwitch.py
346 /usr/share/openvswitch/scripts/brctl
347 /usr/share/openvswitch/scripts/sysconfig.template
348 /usr/share/openvswitch/vswitch.ovsschema
349 /usr/sbin/ovs-brcompatd
350 /usr/sbin/ovs-vswitchd
351 /usr/sbin/ovsdb-server
352 /usr/bin/ovs-appctl
353 /usr/bin/ovs-dpctl
354 /usr/bin/ovs-ofctl
355 /usr/bin/ovs-vsctl
356 /usr/bin/ovsdb-client
357 /usr/bin/ovsdb-tool
358 /usr/share/man/man1/ovsdb-client.1.gz
359 /usr/share/man/man1/ovsdb-server.1.gz
360 /usr/share/man/man1/ovsdb-tool.1.gz
361 /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
362 /usr/share/man/man8/ovs-appctl.8.gz
363 /usr/share/man/man8/ovs-brcompatd.8.gz
364 /usr/share/man/man8/ovs-dpctl.8.gz
365 /usr/share/man/man8/ovs-ofctl.8.gz
366 /usr/share/man/man8/ovs-vsctl.8.gz
367 /usr/share/man/man8/ovs-vswitchd.8.gz
368 /var/lib/openvswitch
369 %exclude /usr/share/openvswitch/scripts/*.pyc
370 %exclude /usr/share/openvswitch/scripts/*.pyo