Build OVS 2.6 with DPDK 16.11
[ovsnfv.git] / build / build_ovs_rpm.sh
1 #!/bin/bash
2
3 # Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors
4 #
5 #    Licensed under the Apache License, Version 2.0 (the "License");
6 #    you may not use this file except in compliance with the License.
7 #    You may obtain a copy of the License at
8 #
9 #        http://www.apache.org/licenses/LICENSE-2.0
10 #    Unless required by applicable law or agreed to in writing, software
11 #    distributed under the License is distributed on an "AS IS" BASIS,
12 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #    See the License for the specific language governing permissions and
14 #    limitations under the License.
15
16 set -e
17
18 echo "==============================="
19 echo "executing $0 $@"
20 echo "executing on machine `uname -a`"
21
22 usage() {
23     echo "run BuildAndTestOVS -h for help"
24 }
25
26 while getopts "cdg:hkp:u:v" opt; do
27     case "$opt" in
28         c)
29             setnocheck="--without check"
30             ;;
31         d)
32             DPDK="yes"
33             ;;
34         g)
35             TAG=${OPTARG}
36             ;;
37         h|\?)
38             usage
39             exit 1
40             ;;
41         k)
42             kmod="yes"
43             ;;
44         p)
45             OVS_PATCH=${OPTARG}
46             ;;
47         u)
48             OVS_REPO_URL=${OPTARG}
49             ;;
50         v)
51             verbose="yes"
52             ;;
53     esac
54 done
55
56 HOME=`pwd`
57 TOPDIR=$HOME
58 TEMPDIR=$TOPDIR/ovsrpm
59
60 BUILDDIR=$HOME
61 BUILD_BASE=$BUILDDIR
62
63 source $BUILDDIR/functions.sh
64
65 echo "---------------------------------------"
66 echo "Clean out old working dir."
67 echo
68 if [ -d $TEMPDIR ]
69 then
70     rm -rf $TEMPDIR
71 fi
72
73 function install_pre_reqs() {
74     echo "----------------------------------------"
75     echo "Install pre-reqs."
76     echo
77     sudo yum -y install gcc make python-devel openssl-devel kernel-devel graphviz \
78                 kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \
79                 libtool python-twisted-core desktop-file-utils groff PyQt4 \
80                 selinux-policy-devel libpcap libpcap-devel libcap-ng-devel
81 }
82 function apply_nsh_patches() {
83     echo "-------------------------------------------"
84     echo "Clone NSH patch and copy patch files."
85     echo
86     cd $TEMPDIR
87     if [ -e ovs_nsh_patches ]; then
88         rm -rf ovs_nsh_patches
89     fi
90     git clone https://github.com/yyang13/ovs_nsh_patches.git
91     cp $TEMPDIR/ovs_nsh_patches/*.patch $RPMDIR/SOURCES
92     cd $TEMPDIR
93     if [ -e buildovsnsh ]; then
94         rm -rf buildovsnsh
95     fi
96     git clone https://github.com/tfherbert/buildovsnsh.git
97     cp buildovsnsh/*.spec $BUILDDIR
98 }
99
100 VERSION=2.3.90
101 os_type=fedora
102 kernel_version=$(uname -a | awk '{print $3}')
103
104 RPMDIR=$HOME/rpmbuild
105
106 echo "---------------------------------------"
107 echo "Clean out old reminents of old rpms and rpm _topdir."
108 echo
109
110 rm openvswitch*.rpm || true
111 if [  -d $RPMDIR ]; then
112     rm -rf $RPMDIR
113 fi
114
115 echo "---------------------------------------"
116 echo "Create new rpm _topdir."
117 echo
118 mkdir -p $HOME/rpmbuild/RPMS
119 mkdir -p $HOME/rpmbuild/SOURCES
120 mkdir -p $HOME/rpmbuild/SPECS
121 mkdir -p $HOME/rpmbuild/SRPMS
122
123
124 mkdir -p $TEMPDIR
125
126 install_pre_reqs
127
128 cd $TEMPDIR
129
130 if [ ! -z $DPDK ]; then
131     cleanrpms
132
133     if [ -z $DPDK_VERSION ]; then
134         DPDK_VERSION=16.11
135     fi
136     echo "-------------------------------------------"
137     echo "Install dpdk and dpdk development rpms for version $DPDK_VERSION"
138     echo
139     sudo rpm -ivh $HOME/dpdk-${DPDK_VERSION}*.rpm
140     sudo rpm -ivh $HOME/dpdk-devel*.rpm
141     echo "----------------------------------------"
142     echo "Copy DPDK RPM to SOURCES"
143     echo
144     cp $HOME/*.rpm $RPMDIR/SOURCES
145     cd $TEMPDIR
146     git clone $OVS_REPO_URL
147     cd $TEMPDIR/ovs
148     git checkout v$OVSTAG
149     echo "----------------------------------------------------"
150     echo "Build openvswitch RPM for version $OVSTAG"
151     echo
152     echo "--------------------------------------------"
153     ./boot.sh
154     ./configure
155     make rpm-fedora RPMBUILD_OPT="--with dpdk --without check"
156 else
157     echo "-------------------------------------------------"
158     echo "Build OVS without DPDK:"
159     echo "Use spec files for $os_type in OVS distribution."
160     echo
161     echo "-------------------------------------------"
162     echo "Remove old rpms."
163     echo
164     cleanrpms
165     cd $TEMPDIR
166     git clone $OVS_REPO_URL
167     cd $TEMPDIR/ovs
168     git checkout $OVS_FORK_COMMIT_FOR_NSH
169     echo "--------------------------------------------"
170     echo "Get commit from $snapgit User Space OVS version $TAG"
171     echo
172     snapgit=`git log --pretty=oneline -n1|cut -c1-8`
173     snapser=`git log --pretty=oneline | wc -l`
174     basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
175     prefix=openvswitch-${basever}
176     snapver=${snapser}.NSH${snapgit}
177     archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
178
179     if [ ! -z $OVS_PATCH ]; then
180         echo "-------------------------------------------"
181         echo "Apply OVS patches."
182         echo
183         apply_nsh_patches
184     fi
185
186     echo "----------------------------------"
187     echo "Create dist name and rpm name. Put $snapver into spec file"
188     echo
189     cd $BUILD_BASE
190     sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch.spec
191     echo "----------------------------------"
192     echo "Copy spec file."
193     echo
194     cp $BUILD_BASE/openvswitch.spec $RPMDIR/SPECS
195     cp $BUILD_BASE/openvswitch.spec $RPMDIR/SOURCES
196     echo "--------------------------------------------"
197     echo "Creating snapshot, $archive with name same as in spec file."
198     echo
199     cd $TEMPDIR/ovs
200     git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD  | gzip -9 > $RPMDIR/SOURCES/${archive}
201     echo "--------------------------------------------"
202     echo "Build openvswitch RPM"
203     echo
204     cd $BUILD_BASE
205     rpmbuild -bb -vv --without dpdk --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
206 fi
207 #
208 # This section is for building OVS kernel module.
209 #
210 if [ ! -z $kmod ]; then
211     echo "--------------------------------------------"
212     echo Build Open vswitch kernel module
213     echo
214     cd $TEMPDIR
215     if [ -e ovs ]; then
216         rm -rf ovs
217     fi
218     git clone $OVS_REPO_URL
219     cd $TEMPDIR/ovs
220     git checkout $OVS_FORK_COMMIT_FOR_NSH
221     echo "--------------------------------------------"
222     echo "Get commit from $snapgit User Space OVS version $TAG"
223     echo
224     snapgit=`git log --pretty=oneline -n1|cut -c1-8`
225     snapser=`git log --pretty=oneline | wc -l`
226     basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
227     prefix=openvswitch-kmod-${basever}
228     snapver=${snapser}.NSH${snapgit}
229     archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
230
231     if [ ! -z $OVS_PATCH ]; then
232         echo "-------------------------------------------"
233         echo "Apply OVS patches."
234         echo
235         apply_nsh_patches
236     fi
237     echo "----------------------------------"
238     echo "Create dist name and rpm name. Put $snapver into spec file"
239     echo
240     cd $BUILD_BASE
241     sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch-kmod.spec
242     echo "----------------------------------"
243     echo "Copy spec file."
244     echo
245     cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SPECS
246     cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SOURCES
247     echo "-------------------------------------------"
248     echo "Apply nsh patches."
249     echo
250     apply_nsh_patches
251     echo "--------------------------------------------"
252     echo "Creating snapshot, $archive with name same as in spec file."
253     echo
254     cd $TEMPDIR/ovs
255     git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD  | gzip -9 > $RPMDIR/SOURCES/${archive}
256     echo "--------------------------------------------"
257     echo "Building openvswitch kernel module RPM"
258     echo
259     cd $BUILD_BASE
260     rpmbuild -bb -vv -D "kversion $kernel_version" -D "kflavors default" --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch-kmod.spec
261 fi
262
263 cp $RPMDIR/RPMS/x86_64/*.rpm $HOME || true
264 cp $TEMPDIR/ovs/rpm/rpmbuild/RPMS/x86_64/*.rpm $HOME || true
265
266 exit 0