poll-loop: Drop unused poll_fd_callback() feature.
[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
18 Name: vswitch
19 Summary: Virtual switch
20 Group: System Environment/Daemons
21 URL: http://www.openvswitch.org/
22 Version: %{vswitch_version}
23
24 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
25 License: ASL 2.0 and GPLv2
26 Release: 1
27 Source: openvswitch-%{vswitch_version}.tar.gz
28 Buildroot: /tmp/vswitch-xen-rpm
29 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
30 # The following Conflicts prevents the "vswitch" package generated by
31 # this spec file from installing at the same time as the "openvswitch"
32 # package shipped with XenServer 5.5.900.  In fact, the packages
33 # contain some files with identical names anyhow, so they will not
34 # coexist, but adding an explicit Conflicts makes this conflict more
35 # obvious.
36 Conflicts: openvswitch
37
38 %description
39 The vswitch provides standard network bridging functions augmented with
40 support for the OpenFlow protocol for remote per-flow control of
41 traffic.
42
43 %prep
44 %setup -q -n openvswitch-%{vswitch_version}
45
46 %build
47 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
48 make %{_smp_mflags}
49
50 %install
51 rm -rf $RPM_BUILD_ROOT
52 make install DESTDIR=$RPM_BUILD_ROOT
53 install -d -m 755 $RPM_BUILD_ROOT/etc
54 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
55 install -m 755 xenserver/etc_init.d_vswitch \
56          $RPM_BUILD_ROOT/etc/init.d/vswitch
57 install -m 755 xenserver/etc_init.d_vswitch-xapi-update \
58          $RPM_BUILD_ROOT/etc/init.d/vswitch-xapi-update
59 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
60 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
61 install -m 755 xenserver/etc_logrotate.d_vswitch \
62          $RPM_BUILD_ROOT/etc/logrotate.d/vswitch
63 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
64 install -m 755 xenserver/etc_profile.d_vswitch.sh \
65          $RPM_BUILD_ROOT/etc/profile.d/vswitch.sh
66 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
67 install -m 755 xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
68          $RPM_BUILD_ROOT/etc/xapi.d/plugins/vswitch-cfg-update
69 install -d -m 755 $RPM_BUILD_ROOT/usr/share/vswitch/scripts
70 install -m 644 vswitchd/vswitch-idl.ovsschema \
71          $RPM_BUILD_ROOT/usr/share/vswitch/vswitch-idl.ovsschema
72 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
73              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/interface-reconfigure
74 install -m 755 xenserver/etc_xensource_scripts_vif \
75              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif
76 install -m 755 xenserver/usr_share_vswitch_scripts_dump-vif-details \
77                $RPM_BUILD_ROOT/usr/share/vswitch/scripts/dump-vif-details
78 install -m 755 xenserver/usr_share_vswitch_scripts_refresh-xs-network-uuids \
79                $RPM_BUILD_ROOT/usr/share/vswitch/scripts/refresh-xs-network-uuids
80 install -m 755 xenserver/usr_sbin_xen-bugtool \
81              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-bugtool
82 install -m 755 xenserver/usr_sbin_brctl \
83              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/brctl
84 install -m 755 xenserver/usr_share_vswitch_scripts_sysconfig.template \
85          $RPM_BUILD_ROOT/usr/share/vswitch/scripts/sysconfig.template
86 install -m 644 \
87         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
88                $RPM_BUILD_ROOT/usr/share/vswitch/scripts/XSFeatureVSwitch.py
89
90 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch
91 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch \;
92
93 # Get rid of stuff we don't want to make RPM happy.
94 rm \
95     $RPM_BUILD_ROOT/usr/bin/ovs-controller \
96     $RPM_BUILD_ROOT/usr/bin/ovs-discover \
97     $RPM_BUILD_ROOT/usr/bin/ovs-kill \
98     $RPM_BUILD_ROOT/usr/bin/ovs-openflowd \
99     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
100     $RPM_BUILD_ROOT/usr/bin/ovs-wdt \
101     $RPM_BUILD_ROOT/usr/sbin/ovs-monitor \
102     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-controller.8 \
103     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-discover.8 \
104     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-kill.8 \
105     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-openflowd.8 \
106     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8
107 rm -f $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch/veth_mod.ko
108 rm -r \
109     $RPM_BUILD_ROOT/usr/share/openvswitch/commands
110
111 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
112
113 %clean
114 rm -rf $RPM_BUILD_ROOT
115
116 %post
117 if [ ! -f /etc/xensource-inventory ]; then
118     printf "XenSource inventory not present in /etc/xensource-inventory"
119     exit 1
120 fi
121
122 if [ "$1" = "1" ]; then
123     if md5sum -c --status <<EOF
124 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
125 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
126 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
127 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
128 EOF
129     then
130         printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
131     elif md5sum -c --status <<EOF
132 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
133 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
134 ce451d3c985fd1db6497a363f0d9dedb  /opt/xensource/libexec/interface-reconfigure
135 2b53f500431fcba5276c896e9e4281b9  /usr/sbin/xen-bugtool
136 EOF
137     then
138         printf "\nVerified host scripts from XenServer 5.5.900.\n\n"
139     else
140 cat <<EOF
141
142 The original XenServer scripts replaced by this package are not those
143 of any supported version of XenServer.  This could lead to unexpected
144 behavior of your server.  Unless you are sure you know what you are
145 doing, it is highly recommended that you remove this package
146 immediately after the install completes, which will restore the
147 XenServer scripts that you were previously using.
148
149 EOF
150     fi
151 fi
152
153 if test ! -e /var/lib/openvswitch/dbcache; then
154     if test "$1" = 1; then
155         printf "Creating xapi database cache...  "
156     else
157         printf "warning: Open vSwitch is being re-installed or upgraded,\n"
158         printf "         but the xapi database cache is missing.\n"
159         printf "Re-creating xapi database cache...  "
160     fi
161
162     if /usr/share/vswitch/scripts/interface-reconfigure rewrite; 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 # Ensure that modprobe will find our modules.
174 depmod %{xen_version}
175
176 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
177     cat >>/etc/sysctl.conf <<EOF
178 # This works around an issue in xhad, which binds to a particular
179 # Ethernet device, which in turn causes ICMP port unreachable messages
180 # if packets are received are on the wrong interface, which in turn
181 # can happen if we send out ARP replies on every interface (as Linux
182 # does by default) instead of just on the interface that has the IP
183 # address being ARPed for, which this sysctl setting in turn works
184 # around.
185 #
186 # Bug #1378.
187 net.ipv4.conf.all.arp_filter = 1
188 EOF
189 fi
190
191 if test ! -e /etc/ovs-vswitchd.conf.db; then
192     # Create ovs-vswitchd config database
193     ovsdb-tool -vANY:console:emer create /etc/ovs-vswitchd.conf.db \
194             /usr/share/vswitch/vswitch-idl.ovsschema \
195
196     # Create initial table in config database
197     ovsdb-tool -vANY:console:emer transact /etc/ovs-vswitchd.conf.db \
198             '[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
199             > /dev/null
200 fi
201
202 # Create default or update existing /etc/sysconfig/vswitch.
203 SYSCONFIG=/etc/sysconfig/vswitch
204 TEMPLATE=/usr/share/vswitch/scripts/sysconfig.template
205 if [ ! -e $SYSCONFIG ]; then
206     cp $TEMPLATE $SYSCONFIG
207 else
208     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
209     do
210         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
211             echo >> $SYSCONFIG
212             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
213         fi
214     done
215 fi
216
217 # Replace XenServer files by our versions.
218 mkdir -p /usr/lib/vswitch/xs-original \
219     || printf "Could not create script backup directory.\n"
220 for f in \
221     /opt/xensource/libexec/interface-reconfigure \
222     /etc/xensource/scripts/vif \
223     /usr/sbin/xen-bugtool \
224     /usr/sbin/brctl
225 do
226     s=$(basename "$f")
227     t=$(readlink "$f")
228     if [ "$t" != "/usr/share/vswitch/scripts/$s" ]; then
229         mv "$f" /usr/lib/vswitch/xs-original/ \
230             || printf "Could not save original XenServer $s script\n"
231         ln -s "/usr/share/vswitch/scripts/$s" "$f" \
232             || printf "Could not link to vSwitch $s script\n"
233     fi
234 done
235
236 # Install xsconsole plugin
237 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
238 if [ "$plugin" != "/usr/share/vswitch/scripts/XSFeatureVSwitch.py" ]; then
239     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
240     ln -s /usr/share/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
241 fi
242
243 # Ensure all required services are set to run
244 for s in vswitch vswitch-xapi-update; do
245     if chkconfig --list $s >/dev/null 2>&1; then
246         chkconfig --del $s || printf "Could not remove $s init script."
247     fi
248     chkconfig --add $s || printf "Could not add $s init script."
249     chkconfig $s on || printf "Could not enable $s init script."
250 done
251
252 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
253     printf "\nYou MUST reboot the server NOW to complete the change to the\n"
254     printf "the vSwitch.  Attempts to modify networking on the server\n"
255     printf "or any hosted VM will fail until after the reboot and could\n"
256     printf "leave the server in an state requiring manual recovery.\n\n"
257 else
258     printf "\nTo use the new vSwitch, you should reboot the server\n"
259     printf "now.  Failure to do so may result in incorrect operation.\n\n"
260 fi
261
262 %preun
263 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
264     for s in vswitch vswitch-xapi-update; do
265         chkconfig --del $s || printf "Could not remove $s init script."
266     done
267 fi
268
269
270 %postun
271 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
272
273     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
274         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
275         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
276         || printf "Could not remove vSwitch xsconsole plugin.\n"
277
278     # Restore original XenServer scripts
279     for f in \
280         /opt/xensource/libexec/interface-reconfigure \
281         /etc/xensource/scripts/vif \
282         /usr/sbin/xen-bugtool \
283         /usr/sbin/brctl
284     do
285         s=$(basename "$f")
286         if [ ! -f "/usr/lib/vswitch/xs-original/$s" ]; then
287             printf "Original XenServer $s script not present in /usr/lib/vswitch/xs-original\n"
288             printf "Could not restore original XenServer script.\n"
289         else
290             (rm -f "$f" \
291                 && mv "/usr/lib/vswitch/xs-original/$s" "$f") \
292                 || printf "Could not restore original XenServer $s script.\n"
293         fi
294     done
295
296     # Remove all configuration files
297     rm -f /etc/ovs-vswitchd.conf.db
298     rm -f /etc/sysconfig/vswitch
299     rm -f /etc/ovs-vswitchd.cacert
300     rm -f /var/lib/openvswitch/dbcache
301
302     printf "\nYou MUST reboot the server now to complete the change to\n"
303     printf "standard Xen networking.  Attempts to modify networking on the\n"
304     printf "server or any hosted VM will fail until after the reboot and\n"
305     printf "could leave the server in a state requiring manual recovery.\n\n"
306 fi
307
308
309 %files
310 %defattr(-,root,root)
311 /etc/init.d/vswitch
312 /etc/init.d/vswitch-xapi-update
313 /etc/xapi.d/plugins/vswitch-cfg-update
314 /etc/logrotate.d/vswitch
315 /etc/profile.d/vswitch.sh
316 /lib/modules/%{xen_version}/kernel/net/vswitch/openvswitch_mod.ko
317 /lib/modules/%{xen_version}/kernel/net/vswitch/brcompat_mod.ko
318 %if %(echo '%{xen_version}'|awk -F"." '{if ($3>=18) print 1; else print 0;}')
319 /lib/modules/%{xen_version}/kernel/net/vswitch/ip_gre_mod.ko
320 %endif
321 /usr/share/vswitch/scripts/dump-vif-details
322 /usr/share/vswitch/scripts/refresh-xs-network-uuids
323 /usr/share/vswitch/scripts/interface-reconfigure
324 /usr/share/vswitch/scripts/vif
325 /usr/share/vswitch/scripts/xen-bugtool
326 /usr/share/vswitch/scripts/XSFeatureVSwitch.py
327 /usr/share/vswitch/scripts/brctl
328 /usr/share/vswitch/scripts/sysconfig.template
329 # Following two files are generated automatically by rpm.  We don't
330 # really need them and they won't be used on the XenServer, but there
331 # isn't an obvious place to get rid of them since they are generated
332 # after the install script runs.  Since they are small, we just
333 # include them.
334 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyc
335 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyo
336 /usr/share/vswitch/vswitch-idl.ovsschema
337 /usr/sbin/ovs-brcompatd
338 /usr/sbin/ovs-vswitchd
339 /usr/sbin/ovsdb-server
340 /usr/bin/ovs-appctl
341 /usr/bin/ovs-dpctl
342 /usr/bin/ovs-ofctl
343 /usr/bin/ovs-vsctl
344 /usr/bin/ovsdb-client
345 /usr/bin/ovsdb-tool
346 /usr/share/man/man1/ovsdb-client.1.gz
347 /usr/share/man/man1/ovsdb-server.1.gz
348 /usr/share/man/man1/ovsdb-tool.1.gz
349 /usr/share/man/man8/ovs-appctl.8.gz
350 /usr/share/man/man8/ovs-brcompatd.8.gz
351 /usr/share/man/man8/ovs-dpctl.8.gz
352 /usr/share/man/man8/ovs-ofctl.8.gz
353 /usr/share/man/man8/ovs-vsctl.8.gz
354 /usr/share/man/man8/ovs-vswitchd.8.gz
355 /var/lib/openvswitch