Merge citrix into master.
[sliver-openvswitch.git] / xenserver / vswitch-xen.spec
1 # Spec file for vswitch and related programs.
2
3 # Copyright (C) 2009 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 # vswitch_version, xen_version, and build_number using -D arguments.
12 # for example:
13 #
14 #    rpmbuild -D "vswitch_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/vswitch-xen.spec
15 #
16 %define version %{vswitch_version}-%{xen_version}
17 %define _prefix /root/vswitch
18
19 Name: vswitch
20 Summary: Virtual switch
21 Group: System Environment/Daemons
22 URL: http://www.openvswitch.org/
23 Version: %{vswitch_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-%{vswitch_version}.tar.gz
29 Buildroot: /tmp/vswitch-xen-rpm
30 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
31
32 %description
33 The 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-%{vswitch_version}
39
40 %build
41 ./configure --prefix=%{_prefix} --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 prefix=%{_prefix}
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_vswitch \
50          $RPM_BUILD_ROOT/etc/init.d/vswitch
51 install -m 755 xenserver/etc_init.d_vswitch-xapi-update \
52          $RPM_BUILD_ROOT/etc/init.d/vswitch-xapi-update
53 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
54 install -m 755 xenserver/etc_sysconfig_vswitch.example \
55          $RPM_BUILD_ROOT/etc/sysconfig/vswitch.example
56 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
57 install -m 755 xenserver/etc_logrotate.d_vswitch \
58          $RPM_BUILD_ROOT/etc/logrotate.d/vswitch
59 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
60 install -m 755 xenserver/etc_profile.d_vswitch.sh \
61          $RPM_BUILD_ROOT/etc/profile.d/vswitch.sh
62 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
63 install -m 755 xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
64          $RPM_BUILD_ROOT/etc/xapi.d/plugins/vswitch-cfg-update
65 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/scripts
66 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
67              $RPM_BUILD_ROOT%{_prefix}/scripts/interface-reconfigure
68 install -m 755 xenserver/etc_xensource_scripts_vif \
69              $RPM_BUILD_ROOT%{_prefix}/scripts/vif
70 install -m 755 xenserver/root_vswitch_scripts_dump-vif-details \
71                $RPM_BUILD_ROOT%{_prefix}/scripts/dump-vif-details
72 install -m 755 xenserver/usr_sbin_xen-bugtool \
73              $RPM_BUILD_ROOT%{_prefix}/scripts/xen-bugtool
74 install -m 644 \
75         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
76                $RPM_BUILD_ROOT%{_prefix}/scripts/XSFeatureVSwitch.py
77
78 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/kernel_modules
79 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT%{_prefix}/kernel_modules/ \;
80
81 # Get rid of stuff we don't want to make RPM happy.
82 rm -rf \
83     $RPM_BUILD_ROOT/root/vswitch/bin/ezio-term \
84     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-controller \
85     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-discover \
86     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-kill \
87     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-openflowd \
88     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-pki \
89     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-switchui \
90     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-wdt \
91     $RPM_BUILD_ROOT/root/vswitch/kernel_modules/veth_mod.ko \
92     $RPM_BUILD_ROOT/root/vswitch/sbin/ovs-monitor \
93     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-controller.8 \
94     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-discover.8 \
95     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-kill.8 \
96     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-openflowd.8 \
97     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-pki.8 \
98     $RPM_BUILD_ROOT/root/vswitch/share/openvswitch
99
100 %clean
101 rm -rf $RPM_BUILD_ROOT
102
103 %pre
104 if [ ! -f /etc/xensource-inventory ]; then
105     printf "XenSource inventory not present in /etc/xensource-inventory"
106     exit 1
107 fi
108
109 if [ "$1" = "1" ]; then
110     if ! md5sum -c --status <<EOF
111 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
112 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
113 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
114 EOF
115     then
116         printf "\nThe original XenServer scripts replaced by this package\n"
117         printf "are different than expected.  This could lead to unexpected\n"
118         printf "behavior of your server.  Unless you are sure you know what\n"
119         printf "you are doing, it is highly recomended that you remove this\n"
120         printf "package immediately after the install completes, which\n"
121         printf "will restore the XenServer scripts that you were previously\n"
122         printf "using.\n\n"
123     fi
124 fi
125
126 if test ! -e /etc/ovs-vswitch.dbcache; then
127     if test "$1" = 1; then
128         printf "Creating xapi database cache...  "
129     else
130         printf "warning: Open vSwitch is being re-installed or upgraded,\n"
131         printf "         but the xapi database cache is missing.\n"
132         printf "Re-creating xapi database cache...  "
133     fi
134
135     source /etc/xensource-inventory
136     if python - "$INSTALLATION_UUID" <<EOF
137 import XenAPI
138 import pickle
139 import sys
140
141 session = XenAPI.xapi_local()
142 try:
143     session.xenapi.login_with_password("root", "")
144
145     vlans = session.xenapi.VLAN.get_all_records()
146     bonds = session.xenapi.Bond.get_all_records()
147     pifs = session.xenapi.PIF.get_all_records()
148     networks = session.xenapi.network.get_all_records()
149     host = session.xenapi.host.get_by_uuid(sys.argv[1])
150 finally:
151     session.xenapi.session.logout()
152
153 dbcache_file = "/etc/ovs-vswitch.dbcache"
154 f = open(dbcache_file, 'w')
155 pickle.dump({'vlans': vlans,
156              'bonds': bonds,
157              'pifs': pifs,
158              'networks': networks}, f)
159 pickle.dump({'host': host}, f)
160 f.close()
161 EOF
162     then
163         printf "done.\n"
164     else
165         printf "FAILED\n"
166         printf "Open vSwitch can only be installed on a XenServer that\n"
167         printf "has connectivity to xapi on the pool master.  Please\n"
168         printf "fix connectivity to the pool master, then try again.\n"
169         exit 1
170     fi
171 fi
172
173 %post
174 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
175     cat >>/etc/sysctl.conf <<EOF
176 # This works around an issue in xhad, which binds to a particular
177 # Ethernet device, which in turn causes ICMP port unreachable messages
178 # if packets are received are on the wrong interface, which in turn
179 # can happen if we send out ARP replies on every interface (as Linux
180 # does by default) instead of just on the interface that has the IP
181 # address being ARPed for, which this sysctl setting in turn works
182 # around.
183 #
184 # Bug #1378.
185 net.ipv4.conf.all.arp_filter = 1
186 EOF
187 fi
188
189 # Ensure ovs-vswitchd.conf exists
190 touch /etc/ovs-vswitchd.conf
191
192 # Replace original XenServer files
193 mkdir -p %{_prefix}/xs-original \
194     || printf "Could not create script backup directory.\n"
195 for f in \
196     /opt/xensource/libexec/interface-reconfigure \
197     /etc/xensource/scripts/vif \
198     /usr/sbin/xen-bugtool
199 do
200     s=$(basename "$f")
201     t=$(readlink "$f")
202     if [ "$t" != "%{_prefix}/scripts/$s" ]; then
203         mv "$f" %{_prefix}/xs-original/ \
204             || printf "Could not save original XenServer $s script\n"
205         ln -s "%{_prefix}/scripts/$s" "$f" \
206             || printf "Could not link to vSwitch $s script\n"
207     fi
208 done
209
210 # Install xsconsole plugin
211 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
212 if [ "$plugin" != "/root/vswitch/scripts/XSFeatureVSwitch.py" ]; then
213     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
214     ln -s /root/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
215 fi
216
217 # Ensure all required services are set to run
218 for s in vswitch vswitch-xapi-update; do
219     if chkconfig --list $s >/dev/null 2>&1; then
220         chkconfig --del $s || printf "Could not remove $s init script."
221     fi
222     chkconfig --add $s || printf "Could not add $s init script."
223     chkconfig $s on || printf "Could not enable $s init script."
224 done
225
226 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
227     printf "\nYou MUST reboot the server NOW to complete the change to the\n"
228     printf "the vSwitch.  Attempts to modify networking on the server\n"
229     printf "or any hosted VM will fail until after the reboot and could\n"
230     printf "leave the server in an state requiring manual recovery.\n\n"
231 else
232     printf "\nTo use the new vSwitch, you should reboot the server\n"
233     printf "now.  Failure to do so may result in incorrect operation.\n\n"
234 fi
235
236 %preun
237 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
238     for s in vswitch vswitch-xapi-update; do
239         chkconfig --del $s || printf "Could not remove $s init script."
240     done
241 fi
242
243
244 %postun
245 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
246
247     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
248         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
249         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
250         || printf "Could not remove vSwitch xsconsole plugin.\n"
251
252     # Restore original XenServer scripts
253     for f in \
254         /opt/xensource/libexec/interface-reconfigure \
255         /etc/xensource/scripts/vif \
256         /usr/sbin/xen-bugtool
257     do
258         s=$(basename "$f")
259         if [ ! -f "%{_prefix}/xs-original/$s" ]; then
260             printf "Original XenServer $s script not present in %{_prefix}/xs-original\n"
261             printf "Could not restore original XenServer script.\n"
262         else
263             (rm -f "$f" \
264                 && mv "%{_prefix}/xs-original/$s" "$f") \
265                 || printf "Could not restore original XenServer $s script.\n"
266         fi
267     done
268
269     find  %{_prefix} -type d -depth -exec rmdir \{\} \; \
270         || printf "Could not remove vSwitch install directory.\n"
271
272     # Remove all configuration and log files
273     rm -f /etc/ovs-vswitchd.conf
274     rm -f /etc/sysconfig/vswitch
275     rm -f /var/log/vswitch*
276     rm -f /etc/ovs-vswitchd.cacert
277
278     printf "\nYou MUST reboot the server now to complete the change to\n"
279     printf "standard Xen networking.  Attempts to modify networking on the\n"
280     printf "server or any hosted VM will fail until after the reboot and\n"
281     printf "could leave the server in a state requiring manual recovery.\n\n"
282 fi
283
284
285 %files
286 %defattr(-,root,root)
287 /etc/init.d/vswitch
288 /etc/init.d/vswitch-xapi-update
289 /etc/xapi.d/plugins/vswitch-cfg-update
290 /etc/sysconfig/vswitch.example
291 /etc/logrotate.d/vswitch
292 /etc/profile.d/vswitch.sh
293 /root/vswitch/kernel_modules/brcompat_mod.ko
294 /root/vswitch/kernel_modules/openvswitch_mod.ko
295 /root/vswitch/scripts/dump-vif-details
296 /root/vswitch/scripts/interface-reconfigure
297 /root/vswitch/scripts/vif
298 /root/vswitch/scripts/xen-bugtool
299 /root/vswitch/scripts/XSFeatureVSwitch.py
300 # Following two files are generated automatically by rpm.  We don't
301 # really need them and they won't be used on the XenServer, but there
302 # isn't an obvious place to get rid of them since they are generated
303 # after the install script runs.  Since they are small, we just
304 # include them.
305 /root/vswitch/scripts/XSFeatureVSwitch.pyc
306 /root/vswitch/scripts/XSFeatureVSwitch.pyo
307 /root/vswitch/sbin/ovs-brcompatd
308 /root/vswitch/sbin/ovs-vswitchd
309 /root/vswitch/bin/ovs-appctl
310 /root/vswitch/bin/ovs-cfg-mod
311 /root/vswitch/bin/ovs-dpctl
312 /root/vswitch/bin/ovs-ofctl
313 /root/vswitch/share/man/man5/ovs-vswitchd.conf.5
314 /root/vswitch/share/man/man8/ovs-appctl.8
315 /root/vswitch/share/man/man8/ovs-brcompatd.8
316 /root/vswitch/share/man/man8/ovs-cfg-mod.8
317 /root/vswitch/share/man/man8/ovs-dpctl.8
318 /root/vswitch/share/man/man8/ovs-ofctl.8
319 /root/vswitch/share/man/man8/ovs-vswitchd.8