3 # Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors
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
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.
18 echo "==============================="
19 echo "executing $0 $@"
20 echo "executing on machine `uname -a`"
23 echo "run BuildAndTestOVS -h for help"
26 while getopts "cdg:hkp:u:v" opt; do
29 setnocheck="--without check"
48 OVS_REPO_URL=${OPTARG}
63 source $BUILDDIR/functions.sh
65 echo "---------------------------------------"
66 echo "Clean out old working dir."
73 function install_pre_reqs() {
74 echo "----------------------------------------"
75 echo "Install pre-reqs."
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
81 function apply_nsh_patches() {
82 echo "-------------------------------------------"
83 echo "Clone NSH patch and copy patch files."
86 if [ -e ovs_nsh_patches ]; then
87 rm -rf ovs_nsh_patches
89 git clone https://github.com/yyang13/ovs_nsh_patches.git
90 cp $TMPDIR/ovs_nsh_patches/*.patch $RPMDIR/SOURCES
92 if [ -e buildovsnsh ]; then
95 git clone https://github.com/tfherbert/buildovsnsh.git
96 cp buildovsnsh/*.spec $BUILDDIR
101 kernel_version=$(uname -a | awk '{print $3}')
103 RPMDIR=$HOME/rpmbuild
105 echo "---------------------------------------"
106 echo "Clean out old reminents of old rpms and rpm _topdir."
109 rm openvswitch*.rpm || true
110 if [ -d $RPMDIR ]; then
114 echo "---------------------------------------"
115 echo "Create new rpm _topdir."
117 mkdir -p $HOME/rpmbuild/RPMS
118 mkdir -p $HOME/rpmbuild/SOURCES
119 mkdir -p $HOME/rpmbuild/SPECS
120 mkdir -p $HOME/rpmbuild/SRPMS
129 if [ ! -z $DPDK ]; then
130 echo "----------------------------------"
131 echo "Build OVS for dpdk. Use Fedora copr repo"
133 echo "----------------------------------"
134 echo "Clone Fedora copr repo and copy files."
136 git clone https://github.com/tfherbert/ovs-snap.git
138 git checkout $COPR_OVS_VERSION
139 echo "-----------------------------------"
140 cp $TMPDIR/ovs-snap/openvswitch.spec $RPMDIR/SPECS
141 cp $TMPDIR/ovs-snap/* $RPMDIR/SOURCES
142 snapgit=`grep "define snapver" $TMPDIR/ovs-snap/openvswitch.spec | cut -c26-33`
143 echo "-----------------------------------------------"
144 echo "Remove any old installed ovs and dpdk rpms."
148 if [ -z $DPDK_VERSION ]; then
151 echo "-------------------------------------------"
152 echo "Install dpdk and dpdk development rpms for version $DPDK_VERSION"
154 sudo rpm -ivh $HOME/dpdk-${DPDK_VERSION:0:1}*.rpm
155 sudo rpm -ivh $HOME/dpdk-devel*.rpm
156 echo "----------------------------------------"
157 echo "Copy DPDK RPM to SOURCES"
159 cp $HOME/*.rpm $RPMDIR/SOURCES
160 echo "--------------------------------------------"
161 echo "Get commit from $snapgit User Space OVS version $TAG"
164 git clone $OVS_REPO_URL
166 git checkout $snapgit
167 echo "--------------------------------------------"
168 echo "Creating snapshot, $archive with name same as in spec file."
170 snapser=`git log --pretty=oneline | wc -l`
171 basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
172 prefix=openvswitch-${basever}
173 archive=${prefix}-${snapser}.git${snapgit}.tar.gz
174 git archive --prefix=${prefix}-${snapser}.git${snapgit}/ HEAD | gzip -9 > $RPMDIR/SOURCES/${archive}
176 echo "--------------------------------------------"
177 echo "Build openvswitch RPM"
179 rpmbuild -bb -vv --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
181 echo "-------------------------------------------------"
182 echo "Build OVS without DPDK:"
183 echo "Use spec files for $os_type in OVS distribution."
185 echo "-------------------------------------------"
186 echo "Remove old rpms."
190 git clone $OVS_REPO_URL
192 git checkout $OVS_VERSION
193 echo "--------------------------------------------"
194 echo "Get commit from $snapgit User Space OVS version $TAG"
196 snapgit=`git log --pretty=oneline -n1|cut -c1-8`
197 snapser=`git log --pretty=oneline | wc -l`
198 basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
199 prefix=openvswitch-${basever}
200 snapver=${snapser}.NSH${snapgit}
201 archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
203 if [ ! -z $OVS_PATCH ]; then
204 echo "-------------------------------------------"
205 echo "Apply OVS patches."
210 echo "----------------------------------"
211 echo "Create dist name and rpm name. Put $snapver into spec file"
214 sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch.spec
215 echo "----------------------------------"
216 echo "Copy spec file."
218 cp $BUILD_BASE/openvswitch.spec $RPMDIR/SPECS
219 cp $BUILD_BASE/openvswitch.spec $RPMDIR/SOURCES
220 echo "--------------------------------------------"
221 echo "Creating snapshot, $archive with name same as in spec file."
224 git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD | gzip -9 > $RPMDIR/SOURCES/${archive}
225 echo "--------------------------------------------"
226 echo "Build openvswitch RPM"
229 rpmbuild -bb -vv --without dpdk --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
232 # This section is for building OVS kernel module.
234 if [ ! -z $kmod ]; then
235 echo "--------------------------------------------"
236 echo Build Open vswitch kernel module
242 git clone $OVS_REPO_URL
244 git checkout $OVS_VERSION
245 echo "--------------------------------------------"
246 echo "Get commit from $snapgit User Space OVS version $TAG"
248 snapgit=`git log --pretty=oneline -n1|cut -c1-8`
249 snapser=`git log --pretty=oneline | wc -l`
250 basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
251 prefix=openvswitch-kmod-${basever}
252 snapver=${snapser}.NSH${snapgit}
253 archive=${prefix}-${snapser}.NSH${snapgit}.tar.gz
255 if [ ! -z $OVS_PATCH ]; then
256 echo "-------------------------------------------"
257 echo "Apply OVS patches."
261 echo "----------------------------------"
262 echo "Create dist name and rpm name. Put $snapver into spec file"
265 sed -i "s/%define snapver.*/%define snapver ${snapver}/" openvswitch-kmod.spec
266 echo "----------------------------------"
267 echo "Copy spec file."
269 cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SPECS
270 cp $BUILD_BASE/openvswitch-kmod.spec $RPMDIR/SOURCES
271 echo "-------------------------------------------"
272 echo "Apply nsh patches."
275 echo "--------------------------------------------"
276 echo "Creating snapshot, $archive with name same as in spec file."
279 git archive --prefix=${prefix}-${snapser}.NSH${snapgit}/ HEAD | gzip -9 > $RPMDIR/SOURCES/${archive}
280 echo "--------------------------------------------"
281 echo "Building openvswitch kernel module RPM"
284 rpmbuild -bb -vv -D "kversion $kernel_version" -D "kflavors default" --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch-kmod.spec
287 cp $RPMDIR/RPMS/x86_64/*.rpm $HOME