xenserver: Set network-uuid for internal bridges
[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 755 xenserver/opt_xensource_libexec_interface-reconfigure \
71              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/interface-reconfigure
72 install -m 755 xenserver/etc_xensource_scripts_vif \
73              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif
74 install -m 755 xenserver/usr_share_vswitch_scripts_vif-on-internal-bridge \
75              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif-on-internal-bridge
76 install -m 755 xenserver/usr_sbin_xen-bugtool \
77              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-bugtool
78 install -m 755 xenserver/usr_sbin_brctl \
79              $RPM_BUILD_ROOT/usr/share/vswitch/scripts/brctl
80 install -m 755 xenserver/usr_share_vswitch_scripts_sysconfig.template \
81          $RPM_BUILD_ROOT/usr/share/vswitch/scripts/sysconfig.template
82 install -m 644 xenserver/etc_udev_xen-backend.rules \
83         $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-backend.rules
84 install -m 644 \
85         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
86                $RPM_BUILD_ROOT/usr/share/vswitch/scripts/XSFeatureVSwitch.py
87
88 install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch
89 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT/lib/modules/%{xen_version}/kernel/net/vswitch \;
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/vswitch/veth_mod.ko
106 rm -r \
107     $RPM_BUILD_ROOT/usr/share/openvswitch/commands
108
109 install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch
110
111 %clean
112 rm -rf $RPM_BUILD_ROOT
113
114 %post
115 if [ ! -f /etc/xensource-inventory ]; then
116     printf "XenSource inventory not present in /etc/xensource-inventory"
117     exit 1
118 fi
119
120 if [ "$1" = "1" ]; then
121     if md5sum -c --status <<EOF
122 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
123 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
124 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
125 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
126 883820a78723ee21340f31099b18f18e  /etc/udev/xen-backend.rules
127 EOF
128     then
129         printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
130     elif md5sum -c --status <<EOF
131 ca141d60061dcfdade73e75abc6529b5  /usr/sbin/brctl
132 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
133 ce451d3c985fd1db6497a363f0d9dedb  /opt/xensource/libexec/interface-reconfigure
134 2b53f500431fcba5276c896e9e4281b9  /usr/sbin/xen-bugtool
135 883820a78723ee21340f31099b18f18e  /etc/udev/xen-backend.rules
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 # Ensure ovs-vswitchd.conf exists
192 touch /etc/ovs-vswitchd.conf
193
194 # Create default or update existing /etc/sysconfig/vswitch.
195 SYSCONFIG=/etc/sysconfig/vswitch
196 TEMPLATE=/usr/share/vswitch/scripts/sysconfig.template
197 if [ ! -e $SYSCONFIG ]; then
198     cp $TEMPLATE $SYSCONFIG
199 else
200     for var in $(awk -F'[ :]' '/^# [_A-Z0-9]+:/{print $2}' $TEMPLATE)
201     do
202         if ! grep $var $SYSCONFIG >/dev/null 2>&1; then
203             echo >> $SYSCONFIG
204             sed -n "/$var:/,/$var=/p" $TEMPLATE >> $SYSCONFIG
205         fi
206     done
207 fi
208
209 # Replace XenServer files by our versions.
210 mkdir -p /usr/lib/vswitch/xs-original \
211     || printf "Could not create script backup directory.\n"
212 for f in \
213     /opt/xensource/libexec/interface-reconfigure \
214     /etc/xensource/scripts/vif \
215     /usr/sbin/xen-bugtool \
216     /usr/sbin/brctl \
217     /etc/udev/xen-backend.rules
218 do
219     s=$(basename "$f")
220     t=$(readlink "$f")
221     if [ "$t" != "/usr/share/vswitch/scripts/$s" ]; then
222         mv "$f" /usr/lib/vswitch/xs-original/ \
223             || printf "Could not save original XenServer $s script\n"
224         ln -s "/usr/share/vswitch/scripts/$s" "$f" \
225             || printf "Could not link to vSwitch $s script\n"
226     fi
227 done
228
229 # Install xsconsole plugin
230 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
231 if [ "$plugin" != "/usr/share/vswitch/scripts/XSFeatureVSwitch.py" ]; then
232     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
233     ln -s /usr/share/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
234 fi
235
236 # Ensure all required services are set to run
237 for s in vswitch vswitch-xapi-update; do
238     if chkconfig --list $s >/dev/null 2>&1; then
239         chkconfig --del $s || printf "Could not remove $s init script."
240     fi
241     chkconfig --add $s || printf "Could not add $s init script."
242     chkconfig $s on || printf "Could not enable $s init script."
243 done
244
245 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
246     printf "\nYou MUST reboot the server NOW to complete the change to the\n"
247     printf "the vSwitch.  Attempts to modify networking on the server\n"
248     printf "or any hosted VM will fail until after the reboot and could\n"
249     printf "leave the server in an state requiring manual recovery.\n\n"
250 else
251     printf "\nTo use the new vSwitch, you should reboot the server\n"
252     printf "now.  Failure to do so may result in incorrect operation.\n\n"
253 fi
254
255 %preun
256 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
257     for s in vswitch vswitch-xapi-update; do
258         chkconfig --del $s || printf "Could not remove $s init script."
259     done
260 fi
261
262
263 %postun
264 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
265
266     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
267         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
268         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
269         || printf "Could not remove vSwitch xsconsole plugin.\n"
270
271     # Restore original XenServer scripts
272     for f in \
273         /opt/xensource/libexec/interface-reconfigure \
274         /etc/xensource/scripts/vif \
275         /usr/sbin/xen-bugtool \
276         /usr/sbin/brctl \
277         /etc/udev/xen-backend.rules
278     do
279         s=$(basename "$f")
280         if [ ! -f "/usr/lib/vswitch/xs-original/$s" ]; then
281             printf "Original XenServer $s script not present in /usr/lib/vswitch/xs-original\n"
282             printf "Could not restore original XenServer script.\n"
283         else
284             (rm -f "$f" \
285                 && mv "/usr/lib/vswitch/xs-original/$s" "$f") \
286                 || printf "Could not restore original XenServer $s script.\n"
287         fi
288     done
289
290     # Remove all configuration files
291     rm -f /etc/ovs-vswitchd.conf
292     rm -f /etc/sysconfig/vswitch
293     rm -f /etc/ovs-vswitchd.cacert
294     rm -f /var/lib/openvswitch/dbcache
295
296     printf "\nYou MUST reboot the server now to complete the change to\n"
297     printf "standard Xen networking.  Attempts to modify networking on the\n"
298     printf "server or any hosted VM will fail until after the reboot and\n"
299     printf "could leave the server in a state requiring manual recovery.\n\n"
300 fi
301
302
303 %files
304 %defattr(-,root,root)
305 /etc/init.d/vswitch
306 /etc/init.d/vswitch-xapi-update
307 /etc/xapi.d/plugins/vswitch-cfg-update
308 /etc/logrotate.d/vswitch
309 /etc/profile.d/vswitch.sh
310 /lib/modules/%{xen_version}/kernel/net/vswitch/openvswitch_mod.ko
311 /lib/modules/%{xen_version}/kernel/net/vswitch/brcompat_mod.ko
312 /usr/share/vswitch/scripts/interface-reconfigure
313 /usr/share/vswitch/scripts/vif
314 /usr/share/vswitch/scripts/xen-bugtool
315 /usr/share/vswitch/scripts/XSFeatureVSwitch.py
316 /usr/share/vswitch/scripts/brctl
317 /usr/share/vswitch/scripts/sysconfig.template
318 /usr/share/vswitch/scripts/vif-on-internal-bridge
319 /usr/share/vswitch/scripts/xen-backend.rules
320 # Following two files are generated automatically by rpm.  We don't
321 # really need them and they won't be used on the XenServer, but there
322 # isn't an obvious place to get rid of them since they are generated
323 # after the install script runs.  Since they are small, we just
324 # include them.
325 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyc
326 /usr/share/vswitch/scripts/XSFeatureVSwitch.pyo
327 /usr/sbin/ovs-brcompatd
328 /usr/sbin/ovs-vswitchd
329 /usr/bin/ovs-appctl
330 /usr/bin/ovs-cfg-mod
331 /usr/bin/ovs-dpctl
332 /usr/bin/ovs-ofctl
333 /usr/bin/ovs-vsctl
334 /usr/share/man/man5/ovs-vswitchd.conf.5.gz
335 /usr/share/man/man8/ovs-appctl.8.gz
336 /usr/share/man/man8/ovs-brcompatd.8.gz
337 /usr/share/man/man8/ovs-cfg-mod.8.gz
338 /usr/share/man/man8/ovs-dpctl.8.gz
339 /usr/share/man/man8/ovs-ofctl.8.gz
340 /usr/share/man/man8/ovs-vsctl.8.gz
341 /usr/share/man/man8/ovs-vswitchd.8.gz
342 /var/lib/openvswitch