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.vswitch.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
69 xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
70 $RPM_BUILD_ROOT%{_prefix}/scripts/XSFeatureVSwitch.py
72 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/kernel_modules
73 find datapath/linux-2.6 -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT%{_prefix}/kernel_modules/ \;
75 # Get rid of stuff we don't want to make RPM happy.
77 $RPM_BUILD_ROOT/root/vswitch/bin/ezio-term \
78 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-controller \
79 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-discover \
80 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-kill \
81 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-pki \
82 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-switchui \
83 $RPM_BUILD_ROOT/root/vswitch/bin/ovs-wdt \
84 $RPM_BUILD_ROOT/root/vswitch/bin/secchan \
85 $RPM_BUILD_ROOT/root/vswitch/sbin/ovs-monitor \
86 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-controller.8 \
87 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-discover.8 \
88 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-kill.8 \
89 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-pki.8 \
90 $RPM_BUILD_ROOT/root/vswitch/share/man/man8/secchan.8 \
91 $RPM_BUILD_ROOT/root/vswitch/share/openvswitch
94 rm -rf $RPM_BUILD_ROOT
97 if [ ! -f /etc/xensource-inventory ]; then
98 printf "XenSource inventory not present in /etc/xensource-inventory"
102 if [ "$1" = "1" ]; then
103 if ! md5sum -c --status <<EOF
104 b8e9835862ef1a9cec2a3f477d26c989 /etc/xensource/scripts/vif
105 51970ad613a3996d5997e18e44db47da /opt/xensource/libexec/interface-reconfigure
108 printf "\nThe original XenServer scripts replaced by this package\n"
109 printf "are different than expected. This could lead to unexpected\n"
110 printf "behavior of your server. Unless you are sure you know what\n"
111 printf "you are doing, it is highly recomended that you remove this\n"
112 printf "package immediately after the install completes, which\n"
113 printf "will restore the XenServer scripts that you were previously\n"
118 if test ! -e /etc/ovs-vswitch.dbcache; then
119 if test "$1" = 1; then
120 printf "Creating xapi database cache... "
122 printf "warning: Open vSwitch is being re-installed or upgraded,\n"
123 printf " but the xapi database cache is missing.\n"
124 printf "Re-creating xapi database cache... "
127 source /etc/xensource-inventory
128 if python - "$INSTALLATION_UUID" <<EOF
133 session = XenAPI.xapi_local()
135 session.xenapi.login_with_password("root", "")
137 vlans = session.xenapi.VLAN.get_all_records()
138 bonds = session.xenapi.Bond.get_all_records()
139 pifs = session.xenapi.PIF.get_all_records()
140 networks = session.xenapi.network.get_all_records()
141 host = session.xenapi.host.get_by_uuid(sys.argv[1])
143 session.xenapi.session.logout()
145 dbcache_file = "/etc/ovs-vswitch.dbcache"
146 f = open(dbcache_file, 'w')
147 pickle.dump({'vlans': vlans,
150 'networks': networks}, f)
151 pickle.dump({'host': host}, f)
158 printf "Open vSwitch can only be installed on a XenServer that\n"
159 printf "has connectivity to xapi on the pool master. Please\n"
160 printf "fix connectivity to the pool master, then try again.\n"
166 source /etc/xensource-inventory
169 "other-config:vSwitchVersion=%{version}" uuid="$INSTALLATION_UUID" ||
170 echo "Could not set vSwitchVersion config parameter"
172 # Ensure ovs-vswitchd.conf exists
173 touch /etc/ovs-vswitchd.conf
175 # Replace original XenServer files
176 mkdir -p %{_prefix}/xs-original \
177 || printf "Could not create script backup directory.\n"
179 /opt/xensource/libexec/interface-reconfigure \
180 /etc/xensource/scripts/vif
184 if [ "$t" != "%{_prefix}/scripts/$s" ]; then
185 mv "$f" %{_prefix}/xs-original/ \
186 || printf "Could not save original XenServer $s script\n"
187 ln -s "%{_prefix}/scripts/$s" "$f" \
188 || printf "Could not link to vSwitch $s script\n"
192 # Install xsconsole plugin
193 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
194 if [ "$plugin" != "/root/vswitch/scripts/XSFeatureVSwitch.py" ]; then
195 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
196 ln -s /root/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
199 # Ensure all required services are set to run
200 for s in vswitch vswitch-xapi-update; do
201 if chkconfig --list $s >/dev/null 2>&1; then
202 chkconfig --del $s || printf "Could not remove $s init script."
204 chkconfig --add $s || printf "Could not add $s init script."
205 chkconfig $s on || printf "Could not enable $s init script."
208 if [ "$1" = "1" ]; then # $1 = 2 for upgrade
209 printf "\nYou MUST reboot the server NOW to complete the change to the\n"
210 printf "the vSwitch. Attempts to modify networking on the server\n"
211 printf "or any hosted VM will fail until after the reboot and could\n"
212 printf "leave the server in an state requiring manual recovery.\n\n"
214 printf "\nTo use the new vSwitch, you should reboot the server\n"
215 printf "now. Failure to do so may result in incorrect operation.\n\n"
219 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
220 for s in vswitch vswitch-xapi-update; do
221 chkconfig --del $s || printf "Could not remove $s init script."
227 if [ "$1" = "0" ]; then # $1 = 1 for upgrade
229 rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
230 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
231 /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
232 || printf "Could not remove vSwitch xsconsole plugin.\n"
234 # Restore original XenServer scripts
236 /opt/xensource/libexec/interface-reconfigure \
237 /etc/xensource/scripts/vif
240 if [ ! -f "%{_prefix}/xs-original/$s" ]; then
241 printf "Original XenServer $s script not present in %{_prefix}/xs-original\n"
242 printf "Could not restore original XenServer script.\n"
245 && mv "%{_prefix}/xs-original/$s" "$f") \
246 || printf "Could not restore original XenServer $s script.\n"
250 find %{_prefix} -type d -depth -exec rmdir \{\} \; \
251 || printf "Could not remove vSwitch install directory.\n"
253 # Remove all configuration and log files
254 rm -f /etc/ovs-vswitchd.conf
255 rm -f /etc/sysconfig/vswitch
256 rm -f /var/log/vswitch*
257 rm -f /etc/ovs-vswitchd.cacert
259 if [ ! -f /etc/xensource-inventory ]; then
260 printf "XenSource inventory not present in /etc/xensource-inventory\n"
261 printf "Could not remove vSwitchVersion from XAPI database.\n"
264 source /etc/xensource-inventory
265 xe host-param-remove \
266 param-name=other-config param-key=vSwitchVersion \
267 uuid="$INSTALLATION_UUID" ||
268 echo "Could not clear vSwitchVersion config parameter."
271 printf "\nYou MUST reboot the server now to complete the change to\n"
272 printf "standard Xen networking. Attempts to modify networking on the\n"
273 printf "server or any hosted VM will fail until after the reboot and\n"
274 printf "could leave the server in a state requiring manual recovery.\n\n"
279 %defattr(-,root,root)
281 /etc/init.d/vswitch-xapi-update
282 /etc/xapi.d/plugins/vswitch-cfg-update
283 /etc/sysconfig/vswitch.example
284 /etc/logrotate.d/vswitch
285 /etc/profile.d/vswitch.sh
286 /root/vswitch/kernel_modules/brcompat_mod.ko
287 /root/vswitch/kernel_modules/openvswitch_mod.ko
288 /root/vswitch/kernel_modules/veth_mod.ko
289 /root/vswitch/scripts/interface-reconfigure
290 /root/vswitch/scripts/vif
291 /root/vswitch/scripts/XSFeatureVSwitch.py
292 # Following two files are generated automatically by rpm. We don't
293 # really need them and they won't be used on the XenServer, but there
294 # isn't an obvious place to get rid of them since they are generated
295 # after the install script runs. Since they are small, we just
297 /root/vswitch/scripts/XSFeatureVSwitch.pyc
298 /root/vswitch/scripts/XSFeatureVSwitch.pyo
299 /root/vswitch/sbin/ovs-brcompatd
300 /root/vswitch/sbin/ovs-vswitchd
301 /root/vswitch/bin/ovs-appctl
302 /root/vswitch/bin/ovs-cfg-mod
303 /root/vswitch/bin/ovs-dpctl
304 /root/vswitch/bin/ovs-ofctl
305 /root/vswitch/share/man/man5/ovs-vswitchd.conf.5
306 /root/vswitch/share/man/man8/ovs-appctl.8
307 /root/vswitch/share/man/man8/ovs-brcompatd.8
308 /root/vswitch/share/man/man8/ovs-cfg-mod.8
309 /root/vswitch/share/man/man8/ovs-dpctl.8
310 /root/vswitch/share/man/man8/ovs-ofctl.8
311 /root/vswitch/share/man/man8/ovs-vswitchd.8