1 # Spec file for vswitch and related programs.
3 # Copyright (C) 2009 Nicira Networks, Inc.
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.
10 # When building, the rpmbuild command line should define
11 # vswitch_version, xen_version, and build_number using -D arguments.
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
16 %define version %{vswitch_version}-%{xen_version}
17 %define _prefix /root/vswitch
20 Summary: Virtual switch
21 Group: System Environment/Daemons
22 URL: http://www.openvswitch.org/
23 Version: %{vswitch_version}
25 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
26 License: ASL 2.0 and GPLv2
28 Source: openvswitch-%{vswitch_version}.tar.gz
29 Buildroot: /tmp/vswitch-xen-rpm
30 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
33 The vswitch provides standard network bridging functions augmented with
34 support for the OpenFlow protocol for remote per-flow control of
38 %setup -q -n openvswitch-%{vswitch_version}
41 ./configure --prefix=%{_prefix} --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
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
75 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
76 $RPM_BUILD_ROOT%{_prefix}/scripts/XSFeatureVSwitch.py
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/ \;
81 # Get rid of stuff we don't want to make RPM happy.
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
101 rm -rf $RPM_BUILD_ROOT
104 if [ ! -f /etc/xensource-inventory ]; then
105 printf "XenSource inventory not present in /etc/xensource-inventory"
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
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"
126 if test ! -e /etc/ovs-vswitch.dbcache; then
127 if test "$1" = 1; then
128 printf "Creating xapi database cache... "
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... "
135 source /etc/xensource-inventory
136 if python - "$INSTALLATION_UUID" <<EOF
141 session = XenAPI.xapi_local()
143 session.xenapi.login_with_password("root", "")
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])
151 session.xenapi.session.logout()
153 dbcache_file = "/etc/ovs-vswitch.dbcache"
154 f = open(dbcache_file, 'w')
155 pickle.dump({'vlans': vlans,
158 'networks': networks}, f)
159 pickle.dump({'host': host}, f)
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"
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
185 net.ipv4.conf.all.arp_filter = 1
189 # Ensure ovs-vswitchd.conf exists
190 touch /etc/ovs-vswitchd.conf
192 # Replace original XenServer files
193 mkdir -p %{_prefix}/xs-original \
194 || printf "Could not create script backup directory.\n"
196 /opt/xensource/libexec/interface-reconfigure \
197 /etc/xensource/scripts/vif \
198 /usr/sbin/xen-bugtool
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"
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"
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."
222 chkconfig --add $s || printf "Could not add $s init script."
223 chkconfig $s on || printf "Could not enable $s init script."
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"
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"
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."
245 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
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"
252 # Restore original XenServer scripts
254 /opt/xensource/libexec/interface-reconfigure \
255 /etc/xensource/scripts/vif \
256 /usr/sbin/xen-bugtool
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"
264 && mv "%{_prefix}/xs-original/$s" "$f") \
265 || printf "Could not restore original XenServer $s script.\n"
269 find %{_prefix} -type d -depth -exec rmdir \{\} \; \
270 || printf "Could not remove vSwitch install directory.\n"
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
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"
286 %defattr(-,root,root)
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
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