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}
26 Source: openvswitch-%{vswitch_version}.tar.gz
27 Buildroot: /tmp/vswitch-xen-rpm
28 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
31 The vswitch provides standard network bridging functions augmented with
32 support for the OpenFlow protocol for remote per-flow control of
36 %setup -q -n openvswitch-%{vswitch_version}
39 ./configure --prefix=%{_prefix} --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
43 rm -rf $RPM_BUILD_ROOT
44 make install DESTDIR=$RPM_BUILD_ROOT prefix=%{_prefix}
45 install -d -m 755 $RPM_BUILD_ROOT/etc
46 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
47 install -m 755 xenserver/etc_init.d_vswitch \
48 $RPM_BUILD_ROOT/etc/init.d/vswitch
49 install -m 755 xenserver/etc_init.d_vswitch-xapi-update \
50 $RPM_BUILD_ROOT/etc/init.d/vswitch-xapi-update
51 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
52 install -m 755 xenserver/etc_sysconfig_vswitch.example \
53 $RPM_BUILD_ROOT/etc/sysconfig/vswitch.example
54 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
55 install -m 755 xenserver/etc_logrotate.d_vswitch \
56 $RPM_BUILD_ROOT/etc/logrotate.d/vswitch
57 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
58 install -m 755 xenserver/etc_profile.d_vswitch.sh \
59 $RPM_BUILD_ROOT/etc/profile.d/vswitch.sh
60 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
61 install -m 755 xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
62 $RPM_BUILD_ROOT/etc/xapi.d/plugins/vswitch-cfg-update
63 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/scripts
64 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
65 $RPM_BUILD_ROOT%{_prefix}/scripts/interface-reconfigure
66 install -m 755 xenserver/etc_xensource_scripts_vif \
67 $RPM_BUILD_ROOT%{_prefix}/scripts/vif
68 install -m 755 xenserver/root_vswitch_scripts_dump-vif-details \
69 $RPM_BUILD_ROOT%{_prefix}/scripts/dump-vif-details
71 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
72 $RPM_BUILD_ROOT%{_prefix}/scripts/XSFeatureVSwitch.py
74 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/kernel_modules
75 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT%{_prefix}/kernel_modules/ \;
77 # Get rid of stuff we don't want to make RPM happy.
79 $RPM_BUILD_ROOT/root/vswitch/bin/ezio-term \
80 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-controller \
81 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-discover \
82 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-kill \
83 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-openflowd \
84 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-pki \
85 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-switchui \
86 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-wdt \
87 $RPM_BUILD_ROOT/root/vswitch/kernel_modules/veth_mod.ko \
88 $RPM_BUILD_ROOT/root/vswitch/sbin/ovs-monitor \
89 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-controller.8 \
90 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-discover.8 \
91 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-kill.8 \
92 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-openflowd.8 \
93 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-pki.8 \
94 $RPM_BUILD_ROOT/root/vswitch/share/openvswitch
97 rm -rf $RPM_BUILD_ROOT
100 if [ ! -f /etc/xensource-inventory ]; then
101 printf "XenSource inventory not present in /etc/xensource-inventory"
105 if [ "$1" = "1" ]; then
106 if ! md5sum -c --status <<EOF
107 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
108 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
111 printf "\nThe original XenServer scripts replaced by this package\n"
112 printf "are different than expected. This could lead to unexpected\n"
113 printf "behavior of your server. Unless you are sure you know what\n"
114 printf "you are doing, it is highly recomended that you remove this\n"
115 printf "package immediately after the install completes, which\n"
116 printf "will restore the XenServer scripts that you were previously\n"
121 if test ! -e /etc/ovs-vswitch.dbcache; then
122 if test "$1" = 1; then
123 printf "Creating xapi database cache... "
125 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
126 printf " but the xapi database cache is missing.\n"
127 printf "Re-creating xapi database cache... "
130 source /etc/xensource-inventory
131 if python - "$INSTALLATION_UUID" <<EOF
136 session = XenAPI.xapi_local()
138 session.xenapi.login_with_password("root", "")
140 vlans = session.xenapi.VLAN.get_all_records()
141 bonds = session.xenapi.Bond.get_all_records()
142 pifs = session.xenapi.PIF.get_all_records()
143 networks = session.xenapi.network.get_all_records()
144 host = session.xenapi.host.get_by_uuid(sys.argv[1])
146 session.xenapi.session.logout()
148 dbcache_file = "/etc/ovs-vswitch.dbcache"
149 f = open(dbcache_file, 'w')
150 pickle.dump({'vlans': vlans,
153 'networks': networks}, f)
154 pickle.dump({'host': host}, f)
161 printf "Open vSwitch can only be installed on a XenServer that\n"
162 printf "has connectivity to xapi on the pool master. Please\n"
163 printf "fix connectivity to the pool master, then try again.\n"
169 source /etc/xensource-inventory
171 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
172 cat >>/etc/sysctl.conf <<EOF
173 # This works around an issue in xhad, which binds to a particular
174 # Ethernet device, which in turn causes ICMP port unreachable messages
175 # if packets are received are on the wrong interface, which in turn
176 # can happen if we send out ARP replies on every interface (as Linux
177 # does by default) instead of just on the interface that has the IP
178 # address being ARPed for, which this sysctl setting in turn works
182 net.ipv4.conf.all.arp_filter = 1
187 "other-config:vSwitchVersion=%{version}" uuid="$INSTALLATION_UUID" ||
188 echo "Could not set vSwitchVersion config parameter"
190 # Ensure ovs-vswitchd.conf exists
191 touch /etc/ovs-vswitchd.conf
193 # Replace original XenServer files
194 mkdir -p %{_prefix}/xs-original \
195 || printf "Could not create script backup directory.\n"
197 /opt/xensource/libexec/interface-reconfigure \
198 /etc/xensource/scripts/vif
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
258 if [ ! -f "%{_prefix}/xs-original/$s" ]; then
259 printf "Original XenServer $s script not present in %{_prefix}/xs-original\n"
260 printf "Could not restore original XenServer script.\n"
263 && mv "%{_prefix}/xs-original/$s" "$f") \
264 || printf "Could not restore original XenServer $s script.\n"
268 find %{_prefix} -type d -depth -exec rmdir \{\} \; \
269 || printf "Could not remove vSwitch install directory.\n"
271 # Remove all configuration and log files
272 rm -f /etc/ovs-vswitchd.conf
273 rm -f /etc/sysconfig/vswitch
274 rm -f /var/log/vswitch*
275 rm -f /etc/ovs-vswitchd.cacert
277 if [ ! -f /etc/xensource-inventory ]; then
278 printf "XenSource inventory not present in /etc/xensource-inventory\n"
279 printf "Could not remove vSwitchVersion from XAPI database.\n"
282 source /etc/xensource-inventory
283 xe host-param-remove \
284 param-name=other-config param-key=vSwitchVersion \
285 uuid="$INSTALLATION_UUID" ||
286 echo "Could not clear vSwitchVersion config parameter."
289 printf "\nYou MUST reboot the server now to complete the change to\n"
290 printf "standard Xen networking. Attempts to modify networking on the\n"
291 printf "server or any hosted VM will fail until after the reboot and\n"
292 printf "could leave the server in a state requiring manual recovery.\n\n"
297 %defattr(-,root,root)
299 /etc/init.d/vswitch-xapi-update
300 /etc/xapi.d/plugins/vswitch-cfg-update
301 /etc/sysconfig/vswitch.example
302 /etc/logrotate.d/vswitch
303 /etc/profile.d/vswitch.sh
304 /root/vswitch/kernel_modules/brcompat_mod.ko
305 /root/vswitch/kernel_modules/openvswitch_mod.ko
306 /root/vswitch/scripts/dump-vif-details
307 /root/vswitch/scripts/interface-reconfigure
308 /root/vswitch/scripts/vif
309 /root/vswitch/scripts/XSFeatureVSwitch.py
310 # Following two files are generated automatically by rpm. We don't
311 # really need them and they won't be used on the XenServer, but there
312 # isn't an obvious place to get rid of them since they are generated
313 # after the install script runs. Since they are small, we just
315 /root/vswitch/scripts/XSFeatureVSwitch.pyc
316 /root/vswitch/scripts/XSFeatureVSwitch.pyo
317 /root/vswitch/sbin/ovs-brcompatd
318 /root/vswitch/sbin/ovs-vswitchd
319 /root/vswitch/bin/ovs-appctl
320 /root/vswitch/bin/ovs-cfg-mod
321 /root/vswitch/bin/ovs-dpctl
322 /root/vswitch/bin/ovs-ofctl
323 /root/vswitch/share/man/man5/ovs-vswitchd.conf.5
324 /root/vswitch/share/man/man8/ovs-appctl.8
325 /root/vswitch/share/man/man8/ovs-brcompatd.8
326 /root/vswitch/share/man/man8/ovs-cfg-mod.8
327 /root/vswitch/share/man/man8/ovs-dpctl.8
328 /root/vswitch/share/man/man8/ovs-ofctl.8
329 /root/vswitch/share/man/man8/ovs-vswitchd.8