#!/bin/bash
-##############################################################################
-# Copyright (c) 2016 Red Hat Inc. and others.
-# therbert@redhat.com
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
+
+# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
set -e
-declare -i CNT
echo "==============================="
-echo executing $0 $@
-echo executing on machine `uname -a`
+echo "executing $0 $@"
+echo "executing on machine `uname -a`"
usage() {
- echo run BuildAndTestOVS -h for help
+ echo "run BuildAndTestOVS -h for help"
}
while getopts "cdg:hkp:u:v" opt; do
TOPDIR=$HOME
TMPDIR=$TOPDIR/ovsrpm
+BUILDDIR=$HOME
+
+source $BUILDDIR/functions.sh
+
+echo "---------------------------------------"
+echo "Clean out old working dir."
+echo
if [ -d $TMPDIR ]
then
rm -rf $TMPDIR
fi
-sudo yum -y install gcc make python-devel openssl-devel kernel-devel graphviz \
- kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \
- libtool
+function install_pre_reqs() {
+ echo "----------------------------------------"
+ echo "Install pre-reqs."
+ echo
+ sudo yum -y install gcc make python-devel openssl-devel kernel-devel graphviz \
+ kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \
+ libtool python-twisted-core desktop-file-utils groff PyQt4
+}
VERSION=2.3.90
os_type=fedora
kernel_version=$(uname -a | awk '{print $3}')
-mkdir -p $TMPDIR
+RPMDIR=$HOME/rpmbuild
-cd $TMPDIR
+echo "---------------------------------------"
+echo "Clean out old reminents of old rpms and rpm _topdir."
+echo
+rm openvswitch*.rpm || true
+if [ -d $RPMDIR ]; then
+ rm -rf $RPMDIR
+fi
+
+echo "---------------------------------------"
+echo "Create new rpm _topdir."
+echo
mkdir -p $HOME/rpmbuild/RPMS
mkdir -p $HOME/rpmbuild/SOURCES
mkdir -p $HOME/rpmbuild/SPECS
mkdir -p $HOME/rpmbuild/SRPMS
-RPMDIR=$HOME/rpmbuild
+mkdir -p $TMPDIR
-echo "---------------------"
-echo "Clone git repo $OVS_REPO_URL and checkout branch or tag $TAG"
-echo
-git clone $OVS_REPO_URL
+cd $TMPDIR
-cd ovs
-echo "--------------------"
-echo "Checkout OVS $TAG"
-echo
-if [[ ! "$TAG" =~ "master" ]]; then
- git checkout $TAG
-fi
-if [[ ! "$OVS_PATCH" =~ "no" ]]; then
- echo "Apply patches from $OVS_PATCH"
-fi
-./boot.sh
if [ ! -z $DPDK ]; then
- ./configure --with-dpdk
+ echo "----------------------------------"
+ echo "Build OVS for dpdk. Use Fedora copr repo"
+ echo
+ echo "----------------------------------"
+ echo "Clone Fedora copr repo and copy files."
+ echo
+ git clone https://github.com/tfherbert/ovs-snap.git
+ cd ovs-snap
+ git checkout $COPR_OVS_VERSION
+ echo "-----------------------------------"
+ cp $TMPDIR/ovs-snap/openvswitch.spec $RPMDIR/SPECS
+ cp $TMPDIR/ovs-snap/* $RPMDIR/SOURCES
+ snapgit=`grep "define snapver" $TMPDIR/ovs-snap/openvswitch.spec | cut -c26-33`
+ echo "-----------------------------------------------"
+ echo "Remove any old installed ovs and dpdk rpms."
+ echo
+ cleanrpms
+
+ if [ -z $DPDK_VERSION ]; then
+ DPDK_VERSION=16.04.0
+ fi
+ echo "-------------------------------------------"
+ echo "Install dpdk and dpdk development rpms for version $DPDK_VERSION"
+ echo
+ sudo rpm -ivh $HOME/dpdk-${DPDK_VERSION:0:1}*.rpm
+ sudo rpm -ivh $HOME/dpdk-devel*.rpm
+ echo "----------------------------------------"
+ echo "Copy DPDK RPM to SOURCES"
+ echo
+ cp $HOME/*.rpm $RPMDIR/SOURCES
+ echo "--------------------------------------------"
+ echo "Get commit from $snapgit User Space OVS version $TAG"
+ echo
+ cd $TMPDIR
+ git clone $OVS_REPO_URL
+ cd $TMPDIR/ovs
+ git checkout $snapgit
+ echo "--------------------------------------------"
+ echo "Creating snapshot, $archive with name same as in spec file."
+ echo
+ snapser=`git log --pretty=oneline | wc -l`
+ basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
+ prefix=openvswitch-${basever}
+ archive=${prefix}-${snapser}.git${snapgit}.tar.gz
+ git archive --prefix=${prefix}-${snapser}.git${snapgit}/ HEAD | gzip -9 > $RPMDIR/SOURCES/${archive}
+ cd $TMPDIR/ovs-snap
+ echo "--------------------------------------------"
+ echo "Build openvswitch RPM"
+ echo
+ rpmbuild -bb --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec
else
- ./configure --with-linux=/lib/modules/`uname -r`/build
-fi
-echo "--------------------"
-echo "Make OVS $TAG"
-echo
-make
+ echo "-------------------------------------------------"
+ echo "Build OVS without DPDK:"
+ echo "Use spec files for $os_type in OVS distribution."
+ echo
+ if [[ "$TAG" =~ "master" ]]; then
+ git clone $OVS_REPO_URL
+ cd ovs
+
+ if [[ ! "$OVS_PATCH" =~ "no" ]]; then
+ echo "Apply patches from $OVS_PATCH"
+ fi
+ basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1`
+ export VERSION=$basever
+
+ echo "--------------------------------------------"
+ echo "Making distribution tarball for Open vswitch version $VERSION"
+ echo
+ ./boot.sh
+ ./configure
+ make dist
+
+ echo cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES
+ cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES
+ else
+ export VERSION=${TAG}
+ echo "---------------------------------------------"
+ echo "Get openvswith-${VERSION}.tar.gz"
+ echo
+ curl --silent --output $HOME/rpmbuild/SOURCES/openvswitch-${VERSION}.tar.gz http://openvswitch.org/releases/openvswitch-${VERSION}.tar.gz
+ fi
-if [[ "$TAG" =~ "master" ]]; then
- v=$($TMPDIR/ovs/utilities/ovs-vsctl --version | head -1 | cut -d' ' -f4)
- export VERSION=$v
-else
- export VERSION=${TAG:1}
fi
-
-echo making RPM for Open vswitch version $VERSION
-make dist
-
-echo cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES
-cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES
-
+#
+# This section is for building OVS kernel module.
+#
if [ ! -z $kmod ]; then
- echo "Building kernel module..."
+ cd $TMPDIR/ovs
+ echo "--------------------------------------------"
+ echo "Making distribution tarball for Open vswitch version $VERSION"
+ echo
+ ./boot.sh
+ ./configure
+ make dist
+ echo "--------------------------------------------"
+ echo "Copy distribution tarball to $HOME/rpmbuild/SOURCES"
+ echo
+ cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES
+ echo "--------------------------------------------"
+ echo "Building openvswitch kernel module RPM"
+ echo
rpmbuild -bb -D "kversion $kernel_version" -D "kflavors default" --define "_topdir `echo $RPMDIR`" $setnocheck rhel/openvswitch-kmod-${os_type}.spec
-echo " Kernel RPM built!"
fi
-echo "Building User Space..."
-rpmbuild -bb --define "_topdir `echo $RPMDIR`" $setnocheck rhel/openvswitch.spec
-
cp $RPMDIR/RPMS/x86_64/*.rpm $HOME
exit 0