3c8b12e741a4c2c28a96fdbf9c32313b85b37818
[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 TMPDIR=$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 $TMPDIR ]
69 then
70     rm -rf $TMPDIR
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 }
81 function apply_nsh_patches() {
82     echo "-------------------------------------------"
83     echo "Clone NSH patch and copy patch files."
84     echo
85     cd $TMPDIR
86     if [ -e ovs_nsh_patches ]; then
87         rm -rf ovs_nsh_patches
88     fi
89     git clone https://github.com/yyang13/ovs_nsh_patches.git
90     cp $TMPDIR/ovs_nsh_patches/*.patch $RPMDIR/SOURCES
91     cp $BUILDDIR/patches/ovs_nsh_patches/*.spec $BUILDDIR
92 }
93
94 VERSION=2.3.90
95 os_type=fedora
96 kernel_version=$(uname -a | awk '{print $3}')
97
98 RPMDIR=$HOME/rpmbuild
99
100 echo "---------------------------------------"
101 echo "Clean out old reminents of old rpms and rpm _topdir."
102 echo
103
104 rm openvswitch*.rpm || true
105 if [  -d $RPMDIR ]; then
106     rm -rf $RPMDIR
107 fi
108
109 echo "---------------------------------------"
110 echo "Create new rpm _topdir."
111 echo
112 mkdir -p $HOME/rpmbuild/RPMS
113 mkdir -p $HOME/rpmbuild/SOURCES
114 mkdir -p $HOME/rpmbuild/SPECS
115 mkdir -p $HOME/rpmbuild/SRPMS
116
117
118 mkdir -p $TMPDIR
119
120 install_pre_reqs
121
122 cd $TMPDIR
123
124 if [ ! -z $DPDK ]; then
125     echo "----------------------------------"
126     echo "Build OVS for dpdk. Use Fedora copr repo"
127     echo
128     echo "----------------------------------"
129     echo "Clone Fedora copr repo and copy files."
130     echo
131     git clone https://github.com/tfherbert/ovs-snap.git
132     cd ovs-snap
133     git checkout $COPR_OVS_VERSION
134     echo "-----------------------------------"
135     cp $TMPDIR/ovs-snap/openvswitch.spec $RPMDIR/SPECS
136     cp $TMPDIR/ovs-snap/* $RPMDIR/SOURCES
137     snapgit=`grep "define snapver" $TMPDIR/ovs-snap/openvswitch.spec | cut -c26-33`
138     echo "-----------------------------------------------"
139     echo "Remove any old installed ovs and dpdk rpms."
140     echo
141     cleanrpms
142
143     if [ -z $DPDK_VERSION ]; then
144         DPDK_VERSION=16.04.0
145     fi
146     echo "-------------------------------------------"
147     echo "Install dpdk and dpdk development rpms for version $DPDK_VERSION"
148     echo
149     sudo rpm -ivh $HOME/dpdk-${DPDK_VERSION:0:1}*.rpm
150     sudo rpm -ivh $HOME/dpdk-devel*.rpm
151     echo "----------------------------------------"
152     echo "Copy DPDK RPM to SOURCES"
153     echo
154     cp $HOME/*.rpm $RPMDIR/SOURCES
155     echo "--------------------------------------------"
156     echo "Get commit from $snapgit User Space OVS version $TAG"
157     echo
158     cd $TMPDIR
159     git clone $OVS_REPO_URL
160     cd $TMPDIR/ovs
161     git checkout $snapgit
162     echo "--------------------------------------------"
163     echo "Creating snapshot, $archive with name same as in spec file."
164     echo
165     snapser=`git log --pretty=oneline | wc -l`
166     basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
167     prefix=openvswitch-${basever}
168     archive=${prefix}-${snapser}.git${snapgit}.tar.gz
169     git archive --prefix=${prefix}-${snapser}.git${snapgit}/ HEAD  | gzip -9 > $RPMDIR/SOURCES/${archive}
170     cd $TMPDIR/ovs-snap
171     echo "--------------------------------------------"
172     echo "Build openvswitch RPM"
173     echo
174     rpmbuild -bb -vv --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
175 else
176     echo "-------------------------------------------------"
177     echo "Build OVS without DPDK:"
178     echo "Use spec files for $os_type in OVS distribution."
179     echo
180     echo "-------------------------------------------"
181     echo "Remove old rpms."
182     echo
183     cleanrpms
184     cd $TMPDIR
185     git clone $OVS_REPO_URL
186     cd $TMPDIR/ovs
187     git checkout $OVS_VERSION
188     echo "--------------------------------------------"
189     echo "Get commit from $snapgit User Space OVS version $TAG"
190     echo
191     snapgit=`git log --pretty=oneline -n1|cut -c1-8`
192     snapser=`git log --pretty=oneline | wc -l`
193     basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
194     prefix=openvswitch-${basever}
195     snapver=${snapser}.NSH${snapgit}
196     archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
197
198     if [ ! -z $OVS_PATCH ]; then
199         echo "-------------------------------------------"
200         echo "Apply OVS patches."
201         echo
202         apply_nsh_patches
203     fi
204
205     echo "----------------------------------"
206     echo "Create dist name and rpm name. Put $snapver into spec file"
207     echo
208     cd $BUILD_BASE
209     sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch.spec
210     echo "----------------------------------"
211     echo "Copy spec file."
212     echo
213     cp $BUILD_BASE/openvswitch.spec $RPMDIR/SPECS
214     cp $BUILD_BASE/openvswitch.spec $RPMDIR/SOURCES
215     echo "--------------------------------------------"
216     echo "Creating snapshot, $archive with name same as in spec file."
217     echo
218     cd $TMPDIR/ovs
219     git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD  | gzip -9 > $RPMDIR/SOURCES/${archive}
220     echo "--------------------------------------------"
221     echo "Build openvswitch RPM"
222     echo
223     cd $BUILD_BASE
224     rpmbuild -bb -vv --without dpdk --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
225 fi
226 #
227 # This section is for building OVS kernel module.
228 #
229 if [ ! -z $kmod ]; then
230     echo "--------------------------------------------"
231     echo Build Open vswitch kernel module
232     echo
233     cd $TMPDIR
234     if [ -e ovs ]; then
235         rm -rf ovs
236     fi
237     git clone $OVS_REPO_URL
238     cd $TMPDIR/ovs
239     git checkout $OVS_VERSION
240     echo "--------------------------------------------"
241     echo "Get commit from $snapgit User Space OVS version $TAG"
242     echo
243     snapgit=`git log --pretty=oneline -n1|cut -c1-8`
244     snapser=`git log --pretty=oneline | wc -l`
245     basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
246     prefix=openvswitch-kmod-${basever}
247     snapver=${snapser}.NSH${snapgit}
248     archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
249
250     if [ ! -z $OVS_PATCH ]; then
251         echo "-------------------------------------------"
252         echo "Apply OVS patches."
253         echo
254         apply_nsh_patches
255     fi
256     echo "----------------------------------"
257     echo "Create dist name and rpm name. Put $snapver into spec file"
258     echo
259     cd $BUILD_BASE
260     sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch-kmod.spec
261     echo "----------------------------------"
262     echo "Copy spec file."
263     echo
264     cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SPECS
265     cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SOURCES
266     echo "-------------------------------------------"
267     echo "Apply nsh patches."
268     echo
269     apply_nsh_patches
270     echo "--------------------------------------------"
271     echo "Creating snapshot, $archive with name same as in spec file."
272     echo
273     cd $TMPDIR/ovs
274     git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD  | gzip -9 > $RPMDIR/SOURCES/${archive}
275     echo "--------------------------------------------"
276     echo "Building openvswitch kernel module RPM"
277     echo
278     cd $BUILD_BASE
279     rpmbuild -bb -vv -D "kversion $kernel_version" -D "kflavors default" --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch-kmod.spec
280 fi
281
282 cp $RPMDIR/RPMS/x86_64/*.rpm $HOME
283
284 exit 0