Adding support for package creation. 81/6181/4
authorMauro Sardara <msardara+fdio@cisco.com>
Thu, 13 Apr 2017 09:44:29 +0000 (11:44 +0200)
committerMauro Sardara <msardara+fdio@cisco.com>
Thu, 13 Apr 2017 11:26:36 +0000 (11:26 +0000)
The script for creating the package is scripts/build-package.sh, and it will create the correct package depending
on the OS and the architecture users are running on.

Supported OS: Ubuntu 16.04, Ubuntu 14.04 and Centos7

Change-Id: I72bde4808067cd1dd80bb389b690d49e1b643f87
Signed-off-by: Mauro Sardara <msardara+fdio@cisco.com>
libparc/.gitignore
libparc/CMakeLists.txt
libparc/scripts/build-package.sh [new file with mode: 0644]
libparc/scripts/version [new file with mode: 0644]
longbow/.gitignore
longbow/CMakeLists.txt
longbow/scripts/build-package.sh [new file with mode: 0644]
longbow/scripts/version [new file with mode: 0644]

index c4d2eae..926b1a2 100644 (file)
@@ -57,8 +57,6 @@ test_parc_URIPath
 test_parc_URIAuthority
 test_parc_URISegment
 
-VERSION
-
 parc/parcLibrary_About.c
 parc/parcLibrary_About.h
 parc/parc_About.c
index 821a8d0..01079ee 100644 (file)
@@ -3,9 +3,6 @@ project(Libparc)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
-set(${CMAKE_PROJECT_NAME}_VERSION_MAJOR 1)
-set(${CMAKE_PROJECT_NAME}_VERSION_MINOR 0)
-
 set(CMAKE_C_STANDARD 99)
 set(CMAKE_C_STANDARD_REQUIRED ON)
 
@@ -85,25 +82,27 @@ SET(CONTACT "msardara@cisco.com" CACHE STRING "Contact")
 SET(DISTRIBUTION "xenial" CACHE STRING "Distribution")
 SET(ARCHITECTURE "amd64" CACHE STRING "Architecture")
 SET(PACKAGE_MAINTAINER "Mauro Sardara (msardara@cisco.com)" CACHE STRING "Maintainer")
-SET(PACKAGE_VERSION "1.0" CACHE STRING "Version")
 SET(BUILD_NUMBER "1" CACHE STRING "Build Number")
 STRING(TOLOWER ${CMAKE_PROJECT_NAME} PACKAGE_NAME)
 
 SET(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
-SET(CPACK_PACKAGE_VERSION_MAJOR ${${CMAKE_PROJECT_NAME}_VERSION_MAJOR})
-SET(CPACK_PACKAGE_VERSION_MINOR ${${CMAKE_PROJECT_NAME}_VERSION_MINOR})
 SET(CPACK_PACKAGE_VENDOR ${VENDOR})
 SET(CPACK_PACKAGE_CONTACT ${CONTACT})
 
+# Get the version
+execute_process(COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/version
+                OUTPUT_VARIABLE PACKAGE_VERSION)
+string(STRIP ${PACKAGE_VERSION} PACKAGE_VERSION)
+
 if(DEB_PACKAGE)
     SET(TYPE "DEBIAN")
     SET(GENERATOR "DEB")
-    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}-${BUILD_NUMBER}~${DISTRIBUTION}_${ARCHITECTURE}")
+    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${PACKAGE_VERSION}_${ARCHITECTURE}")
     SET(CPACK_${TYPE}_PACKAGE_DEPENDS "longbow (>= 1.0), libevent-2.0-5, libssl1.0.0")
 elseif(RPM_PACKAGE)
     SET(TYPE "RPM")
     SET(GENERATOR "RPM")
-    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}-${BUILD_NUMBER}.${DISTRIBUTION}.${ARCHITECTURE}")
+    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${PACKAGE_VERSION}.${ARCHITECTURE}")
     SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/etc" "/usr/lib/python2.7" "/usr/lib/python2.7/site-packages")
     SET(CPACK_${TYPE}_PACKAGE_REQUIRES "longbow >= 1.0, libevent >= 2.0, openssl >= 1.0")
 else()
diff --git a/libparc/scripts/build-package.sh b/libparc/scripts/build-package.sh
new file mode 100644 (file)
index 0000000..846713e
--- /dev/null
@@ -0,0 +1,220 @@
+#!/bin/bash
+# basic build script example
+set -euxo pipefail
+IFS=$'\n\t'
+
+APT_PATH=`which apt-get` || true
+apt_get=${APT_PATH:-"/usr/local/bin/apt-get"}
+
+BUILD_TOOLS_UBUNTU="build-essential cmake"
+LIBSSL_LIBEVENT_UBUNTU="libevent-dev libssl-dev"
+DEPS_UBUNTU="longbow $LIBSSL_LIBEVENT_UBUNTU"
+
+BUILD_TOOLS_GROUP_CENTOS="'Development Tools'"
+BUILD_TOOLS_SINGLE_CENTOS="cmake"
+LIBSSL_LIBEVENT_CENTOS="libevent-devel openssl-devel"
+DEPS_CENTOS="longbow $LIBSSL_LIBEVENT_CENTOS"
+
+# Parameters:
+# $1 = Distribution [Trusty / CentOS]
+#
+update_cmake_repo() {
+
+    DISTRIBUTION=$1
+
+    if [ "$DISTRIBUTION" == "trusty" ]; then
+        sudo ${apt_get} install -y --allow-unauthenticated software-properties-common
+        sudo add-apt-repository --yes ppa:george-edison55/cmake-3.x
+    elif [ "$DISTRIBUTION" == "CentOS" ]; then
+        sudo cat << EOF > cmake.repo
+[cmake-repo]
+name=Repo for cmake3
+baseurl=http://mirror.ghettoforge.org/distributions/gf/el/7/plus/x86_64/
+enabled=1
+gpgcheck=0
+EOF
+        sudo cat << EOF > jsoncpp.repo
+[jsoncp-repo]
+name=Repo for jsoncpp
+baseurl=http://dl.fedoraproject.org/pub/epel/7/x86_64/
+enabled=1
+gpgcheck=0
+EOF
+        sudo mv cmake.repo /etc/yum.repos.d/cmake.repo
+        sudo mv jsoncpp.repo /etc/yum.repos.d/jsoncpp.repo
+    fi
+}
+
+# Parameters:
+# $1 = Distribution codename
+#
+update_qt_repo() {
+    DISTRIBUTION_CODENAME=$1
+
+    if [ "$DISTRIBUTION_CODENAME" != "trusty" ] && [ "$DISTRIBUTION_CODENAME" != "xenial" ]; then
+        echo "No valid distribution specified when calling 'update_qt_repo'. Exiting.."
+        exit -1
+    fi
+
+    sudo ${apt_get} install -y --allow-unauthenticated software-properties-common
+    sudo add-apt-repository --yes ppa:beineri/opt-qt571-$DISTRIBUTION_CODENAME
+
+    wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
+    sudo sh -c "echo 'deb http://archive.getdeb.net/ubuntu $DISTRIBUTION_CODENAME-getdeb apps' >> /etc/apt/sources.list.d/getdeb.list"
+
+    sudo ${apt_get} update
+}
+
+# Parameters:
+# $1 = Distribution id
+# $2 = Distribution codename
+#
+update_fdio_repo() {
+    DISTRIB_ID=$1
+    DISTRIB_CODENAME=$2
+
+    NEXUS_PROXY=${NEXUSPROXY:-"http://nexus.fd.io"}
+    REPO_CICN_URL=""
+    REPO_VPP_URL=""
+
+    if [ "$DISTRIB_ID" == "Ubuntu" ]; then
+
+        if [ "$DISTRIB_CODENAME" == "xenial" ]; then
+            REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.stable.1701.ubuntu.xenial.main/"
+            REPO=${REPO_NAME:-"master.ubuntu.xenial.main"}
+            REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+        elif [ "$DISTRIB_CODENAME" == "trusty" ]; then
+            REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.stable.1701.ubuntu.trusty.main/"
+            REPO=${REPO_NAME:-"master.ubuntu.trusty.main"}
+            REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+        else
+            echo "Distribution $DISTRIB_CODENAME is not supported"
+            exit -1
+        fi
+
+        echo "deb ${REPO_VPP_URL} ./" | sudo tee /etc/apt/sources.list.d/99fd.io.list
+        echo "deb ${REPO_CICN_URL} ./" | sudo tee /etc/apt/sources.list.d/99fd.io.master.list
+
+    elif [ "$DISTRIB_ID" == "CentOS" ]; then
+        REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.centos7/"
+        REPO=${REPO_NAME:-"master.centos7"}
+        REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+
+                sudo cat << EOF > fdio.repo
+[fdio-vpp-master]
+name=fd.io master branch latest merge
+baseurl=${REPO_VPP_URL}
+enabled=1
+gpgcheck=0
+
+[fdio-cicn-master]
+name=fd.io master branch latest merge
+baseurl=${REPO_CICN_URL}
+enabled=1
+gpgcheck=0
+EOF
+        sudo mv fdio.repo /etc/yum.repos.d/fdio.repo
+    else
+        echo "Distribution $DISTRIB_CODENAME is not supported"
+        exit -1
+    fi
+}
+
+setup() {
+
+    DISTRIB_ID=$1
+    DISTRIB_CODENAME=$2
+
+    if [ "$DISTRIB_ID" == "Ubuntu" ]; then
+        if [ "$DISTRIB_CODENAME" == "trusty" ]; then
+            update_cmake_repo $DISTRIB_CODENAME
+        fi
+
+        update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
+
+        sudo ${apt_get} update || true
+
+    elif [ "$DISTRIB_ID" == "CentOS" ]; then
+        update_cmake_repo $DISTRIB_ID
+        update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
+    fi
+}
+
+# Parameters:
+# $1 = Package name
+#
+build_package() {
+
+    PACKAGE_NAME=$1
+
+    ARCHITECTURE=`uname -m`
+
+    # Figure out what system we are running on
+    if [ -f /etc/lsb-release ];then
+
+        . /etc/lsb-release
+        DEB=ON
+        RPM=OFF
+
+        if [ "$ARCHITECTURE" == "x86_64" ]; then
+            ARCHITECTURE="amd64"
+        fi
+
+    elif [ -f /etc/redhat-release ];then
+
+        sudo yum install -y redhat-lsb
+        DISTRIB_ID=`lsb_release -si`
+        DISTRIB_RELEASE=`lsb_release -sr`
+        DISTRIB_CODENAME=`lsb_release -sc`
+        DISTRIB_DESCRIPTION=`lsb_release -sd`
+
+        DEB=OFF
+        RPM=ON
+    else
+        echo "ERROR: System configuration not recognized. Build failed"
+        exit -1
+    fi
+
+    echo ARCHITECTURE: $ARCHITECTURE
+    echo DISTRIB_ID: $DISTRIB_ID
+    echo DISTRIB_RELEASE: $DISTRIB_RELEASE
+    echo DISTRIB_CODENAME: $DISTRIB_CODENAME
+    echo DISTRIB_DESCRIPTION: $DISTRIB_DESCRIPTION
+
+    setup $DISTRIB_ID $DISTRIB_CODENAME
+
+    # Install package dependencies
+    if [ $DISTRIB_ID == "Ubuntu" ]; then
+        echo $BUILD_TOOLS_UBUNTU $DEPS_UBUNTU | xargs sudo ${apt_get} install -y --allow-unauthenticated
+    elif [ $DISTRIB_ID == "CentOS" ]; then
+        echo $BUILD_TOOLS_GROUP_CENTOS | xargs sudo yum groupinstall -y --nogpgcheck
+        echo $BUILD_TOOLS_SINGLE_CENTOS | xargs sudo yum install -y --nogpgcheck
+        echo $DEPS_CENTOS | xargs sudo yum install -y --nogpgcheck || true
+    fi
+
+    # do nothing but print the current slave hostname
+    hostname
+
+    # Make the package
+    mkdir -p build && pushd build
+
+    rm -rf *
+    cmake -DCMAKE_INSTALL_PREFIX=/usr -DRPM_PACKAGE=$RPM -DDEB_PACKAGE=$DEB -DDISTRIBUTION=$DISTRIB_CODENAME -DARCHITECTURE=$ARCHITECTURE ..
+    make package
+
+    find . -not -name '*.deb' -not -name '*.rpm' -print0 | xargs -0 rm -rf -- || true
+
+    popd
+
+    echo "*******************************************************************"
+    echo "* $PACKAGE_NAME BUILD SUCCESSFULLY COMPLETED"
+    echo "*******************************************************************"
+
+    exit 0
+}
+
+PACKAGE_NAME="LIBPARC"
+PACKAGE_DEPS="LIBPARC_DEPS"
+pushd ..
+build_package $PACKAGE_NAME
+popd
diff --git a/libparc/scripts/version b/libparc/scripts/version
new file mode 100644 (file)
index 0000000..ad4f8ec
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
+version_prefix="Libparc-v"
+
+cd "$path"
+
+git rev-parse 2> /dev/null
+if [ $? == 0 ]; then
+    vstring=$(git describe --dirty --match "$version_prefix*" | sed "s/$version_prefix//")
+elif [ -f .version ]; then
+    vstring=$(cat .version)
+else
+    if [ -f ../rpm/*.gz ]; then
+        vstring=$(ls ../rpm/*.gz)
+    else
+        exit 1
+    fi
+fi
+
+TAG=$(echo ${vstring} | cut -d- -f1 | sed -e "s/$version_prefix//")
+ADD=$(echo ${vstring} | cut -s -d- -f2)
+
+git rev-parse 2> /dev/null
+if [ $? == 0 ]; then
+    CMT=$(git describe --dirty --match "$version_prefix*" | sed "s/$version_prefix//" | cut -s -d- -f3,4)
+else
+    CMT=$(echo ${vstring} | cut -s -d- -f3,4)
+fi
+CMTR=$(echo $CMT | sed 's/-/_/')
+
+if [ -n "${BUILD_NUMBER}" ]; then
+       BLD="~b${BUILD_NUMBER}"
+fi
+
+if [ -n "${BUILD_NUMBER}" ]; then
+       BLD="~b${BUILD_NUMBER}"
+else
+       BLD="~b1"
+fi
+
+if [ "$1" = "rpm-release" ]; then
+  [ -z "${ADD}" ] && echo release && exit
+  echo ${ADD}${CMTR:+~${CMTR}}${BLD}
+  exit
+fi
+
+  if [ -n "${ADD}" ]; then
+    if [ "$1" = "rpm-string" ]; then
+      echo ${TAG}-${ADD}${CMTR:+~${CMTR}}${BLD}
+    else
+      echo ${TAG}-${ADD}${CMT:+~${CMT}}${BLD}
+    fi
+  else
+    echo ${TAG}-release
+fi
\ No newline at end of file
index bd57cd4..e136555 100644 (file)
@@ -1,6 +1,5 @@
 build
 =======
-VERSION
 liblongbow*tar.gz
 lib
 bin
index 61572ba..0a706dd 100644 (file)
@@ -3,9 +3,6 @@ project(LongBow)
 
 include( CTest )
 
-set(${CMAKE_PROJECT_NAME}_VERSION_MAJOR 1)
-set(${CMAKE_PROJECT_NAME}_VERSION_MINOR 0)
-
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
 
 set(CMAKE_C_STANDARD 99)
@@ -80,24 +77,26 @@ else()
   SET(DISTRIBUTION "xenial" CACHE STRING "Distribution")
   SET(ARCHITECTURE "amd64" CACHE STRING "Architecture")
   SET(PACKAGE_MAINTAINER "Mauro Sardara (msardara@cisco.com)" CACHE STRING "Maintainer")
-  SET(PACKAGE_VERSION "1.0" CACHE STRING "Version")
-  SET(BUILD_NUMBER "1" CACHE STRING "Build Number")
   STRING(TOLOWER ${CMAKE_PROJECT_NAME} PACKAGE_NAME)
-
   SET(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
-  SET(CPACK_PACKAGE_VERSION_MAJOR ${${CMAKE_PROJECT_NAME}_VERSION_MAJOR})
-  SET(CPACK_PACKAGE_VERSION_MINOR ${${CMAKE_PROJECT_NAME}_VERSION_MINOR})
   SET(CPACK_PACKAGE_VENDOR ${VENDOR})
   SET(CPACK_PACKAGE_CONTACT ${CONTACT})
 
+  # Get the version
+  execute_process(COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/version
+                  OUTPUT_VARIABLE PACKAGE_VERSION)
+  string(STRIP ${PACKAGE_VERSION} PACKAGE_VERSION)
+
   if(DEB_PACKAGE)
     SET(TYPE "DEBIAN")
     SET(GENERATOR "DEB")
-    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}-${BUILD_NUMBER}~${DISTRIBUTION}_${ARCHITECTURE}")
+    SET(CPACK_${TYPE}_PACKAGE_DEPENDS "python (>= 2.7.0)")
+    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${PACKAGE_VERSION}_${ARCHITECTURE}")
   elseif(RPM_PACKAGE)
     SET(TYPE "RPM")
     SET(GENERATOR "RPM")
-    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}-${BUILD_NUMBER}.${DISTRIBUTION}.${ARCHITECTURE}")
+    SET(CPACK_${TYPE}_PACKAGE_REQUIRES "python >= 2.7.0")
+    SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${PACKAGE_VERSION}.${ARCHITECTURE}")
     SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/etc" "/usr/lib/python2.7" "/usr/lib/python2.7/site-packages")
   else()
     RETURN()
@@ -110,10 +109,9 @@ else()
   SET(CPACK_${TYPE}_PACKAGE_ARCHITECTURE ${ARCHITECTURE})
   SET(CPACK_${TYPE}_PACKAGE_RELEASE 1)
   SET(CPACK_${TYPE}_PACKAGE_VENDOR ${VENDOR})
-  SET(CPACK_${TYPE}_PACKAGE_REQUIRES "python >= 2.7.0")
   SET(CPACK_${TYPE}_PACKAGE_DESCRIPTION "Runtime and testing framework for C applications.")
   SET(CPACK_${TYPE}_PACKAGE_HOMEPAGE "https://wiki.fd.io/view/Cframework")
 
   INCLUDE(CPack)
 
-endif()
+endif()
\ No newline at end of file
diff --git a/longbow/scripts/build-package.sh b/longbow/scripts/build-package.sh
new file mode 100644 (file)
index 0000000..3bd0ff4
--- /dev/null
@@ -0,0 +1,219 @@
+#!/bin/bash
+# basic build script example
+set -euxo pipefail
+IFS=$'\n\t'
+
+APT_PATH=`which apt-get` || true
+apt_get=${APT_PATH:-"/usr/local/bin/apt-get"}
+
+BUILD_TOOLS_UBUNTU="build-essential cmake"
+LIBSSL_LIBEVENT_UBUNTU="libevent-dev libssl-dev"
+DEPS_UBUNTU=""
+
+BUILD_TOOLS_GROUP_CENTOS="'Development Tools'"
+BUILD_TOOLS_SINGLE_CENTOS="cmake"
+LIBSSL_LIBEVENT_CENTOS="libevent-devel openssl-devel"
+DEPS_CENTOS=""
+
+# Parameters:
+# $1 = Distribution [Trusty / CentOS]
+#
+update_cmake_repo() {
+
+    DISTRIBUTION=$1
+
+    if [ "$DISTRIBUTION" == "trusty" ]; then
+        sudo ${apt_get} install -y --allow-unauthenticated software-properties-common
+        sudo add-apt-repository --yes ppa:george-edison55/cmake-3.x
+    elif [ "$DISTRIBUTION" == "CentOS" ]; then
+        sudo cat << EOF > cmake.repo
+[cmake-repo]
+name=Repo for cmake3
+baseurl=http://mirror.ghettoforge.org/distributions/gf/el/7/plus/x86_64/
+enabled=1
+gpgcheck=0
+EOF
+        sudo cat << EOF > jsoncpp.repo
+[jsoncp-repo]
+name=Repo for jsoncpp
+baseurl=http://dl.fedoraproject.org/pub/epel/7/x86_64/
+enabled=1
+gpgcheck=0
+EOF
+        sudo mv cmake.repo /etc/yum.repos.d/cmake.repo
+        sudo mv jsoncpp.repo /etc/yum.repos.d/jsoncpp.repo
+    fi
+}
+
+# Parameters:
+# $1 = Distribution codename
+#
+update_qt_repo() {
+    DISTRIBUTION_CODENAME=$1
+
+    if [ "$DISTRIBUTION_CODENAME" != "trusty" ] && [ "$DISTRIBUTION_CODENAME" != "xenial" ]; then
+        echo "No valid distribution specified when calling 'update_qt_repo'. Exiting.."
+        exit -1
+    fi
+
+    sudo ${apt_get} install -y --allow-unauthenticated software-properties-common
+    sudo add-apt-repository --yes ppa:beineri/opt-qt571-$DISTRIBUTION_CODENAME
+
+    wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
+    sudo sh -c "echo 'deb http://archive.getdeb.net/ubuntu $DISTRIBUTION_CODENAME-getdeb apps' >> /etc/apt/sources.list.d/getdeb.list"
+
+    sudo ${apt_get} update
+}
+
+# Parameters:
+# $1 = Distribution id
+# $2 = Distribution codename
+#
+update_fdio_repo() {
+    DISTRIB_ID=$1
+    DISTRIB_CODENAME=$2
+
+    NEXUS_PROXY=${NEXUSPROXY:-"http://nexus.fd.io"}
+    REPO_CICN_URL=""
+    REPO_VPP_URL=""
+
+    if [ "$DISTRIB_ID" == "Ubuntu" ]; then
+
+        if [ "$DISTRIB_CODENAME" == "xenial" ]; then
+            REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.stable.1701.ubuntu.xenial.main/"
+            REPO=${REPO_NAME:-"master.ubuntu.xenial.main"}
+            REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+        elif [ "$DISTRIB_CODENAME" == "trusty" ]; then
+            REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.stable.1701.ubuntu.trusty.main/"
+            REPO=${REPO_NAME:-"master.ubuntu.trusty.main"}
+            REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+        else
+            echo "Distribution $DISTRIB_CODENAME is not supported"
+            exit -1
+        fi
+
+        echo "deb ${REPO_VPP_URL} ./" | sudo tee /etc/apt/sources.list.d/99fd.io.list
+        echo "deb ${REPO_CICN_URL} ./" | sudo tee /etc/apt/sources.list.d/99fd.io.master.list
+
+    elif [ "$DISTRIB_ID" == "CentOS" ]; then
+        REPO_VPP_URL="${NEXUS_PROXY}/content/repositories/fd.io.centos7/"
+        REPO=${REPO_NAME:-"master.centos7"}
+        REPO_CICN_URL="${NEXUS_PROXY}/content/repositories/fd.io.${REPO}"
+
+                sudo cat << EOF > fdio.repo
+[fdio-vpp-master]
+name=fd.io master branch latest merge
+baseurl=${REPO_VPP_URL}
+enabled=1
+gpgcheck=0
+
+[fdio-cicn-master]
+name=fd.io master branch latest merge
+baseurl=${REPO_CICN_URL}
+enabled=1
+gpgcheck=0
+EOF
+        sudo mv fdio.repo /etc/yum.repos.d/fdio.repo
+    else
+        echo "Distribution $DISTRIB_CODENAME is not supported"
+        exit -1
+    fi
+}
+
+setup() {
+
+    DISTRIB_ID=$1
+    DISTRIB_CODENAME=$2
+
+    if [ "$DISTRIB_ID" == "Ubuntu" ]; then
+        if [ "$DISTRIB_CODENAME" == "trusty" ]; then
+            update_cmake_repo $DISTRIB_CODENAME
+        fi
+
+        update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
+
+        sudo ${apt_get} update || true
+
+    elif [ "$DISTRIB_ID" == "CentOS" ]; then
+        update_cmake_repo $DISTRIB_ID
+        update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
+    fi
+}
+
+# Parameters:
+# $1 = Package name
+#
+build_package() {
+
+    PACKAGE_NAME=$1
+
+    ARCHITECTURE=`uname -m`
+
+    # Figure out what system we are running on
+    if [ -f /etc/lsb-release ];then
+
+        . /etc/lsb-release
+        DEB=ON
+        RPM=OFF
+
+        if [ "$ARCHITECTURE" == "x86_64" ]; then
+            ARCHITECTURE="amd64"
+        fi
+
+    elif [ -f /etc/redhat-release ];then
+
+        sudo yum install -y redhat-lsb
+        DISTRIB_ID=`lsb_release -si`
+        DISTRIB_RELEASE=`lsb_release -sr`
+        DISTRIB_CODENAME=`lsb_release -sc`
+        DISTRIB_DESCRIPTION=`lsb_release -sd`
+
+        DEB=OFF
+        RPM=ON
+    else
+        echo "ERROR: System configuration not recognized. Build failed"
+        exit -1
+    fi
+
+    echo ARCHITECTURE: $ARCHITECTURE
+    echo DISTRIB_ID: $DISTRIB_ID
+    echo DISTRIB_RELEASE: $DISTRIB_RELEASE
+    echo DISTRIB_CODENAME: $DISTRIB_CODENAME
+    echo DISTRIB_DESCRIPTION: $DISTRIB_DESCRIPTION
+
+    setup $DISTRIB_ID $DISTRIB_CODENAME
+
+    # Install package dependencies
+    if [ $DISTRIB_ID == "Ubuntu" ]; then
+        echo $BUILD_TOOLS_UBUNTU $DEPS_UBUNTU | xargs sudo ${apt_get} install -y --allow-unauthenticated
+    elif [ $DISTRIB_ID == "CentOS" ]; then
+        echo $BUILD_TOOLS_GROUP_CENTOS | xargs sudo yum groupinstall -y --nogpgcheck
+        echo $BUILD_TOOLS_SINGLE_CENTOS | xargs sudo yum install -y --nogpgcheck
+        echo $DEPS_CENTOS | xargs sudo yum install -y --nogpgcheck || true
+    fi
+
+    # do nothing but print the current slave hostname
+    hostname
+
+    # Make the package
+    mkdir -p build && pushd build
+
+    rm -rf *
+    cmake -DCMAKE_INSTALL_PREFIX=/usr -DRPM_PACKAGE=$RPM -DDEB_PACKAGE=$DEB -DDISTRIBUTION=$DISTRIB_CODENAME -DARCHITECTURE=$ARCHITECTURE ..
+    make package
+
+    find . -not -name '*.deb' -not -name '*.rpm' -print0 | xargs -0 rm -rf -- || true
+
+    popd
+
+    echo "*******************************************************************"
+    echo "* $PACKAGE_NAME BUILD SUCCESSFULLY COMPLETED"
+    echo "*******************************************************************"
+
+    exit 0
+}
+
+PACKAGE_NAME="LONGBOW"
+pushd ..
+build_package $PACKAGE_NAME
+popd
\ No newline at end of file
diff --git a/longbow/scripts/version b/longbow/scripts/version
new file mode 100644 (file)
index 0000000..fd6c618
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
+version_prefix="Longbow-v"
+
+cd "$path"
+
+git rev-parse 2> /dev/null
+if [ $? == 0 ]; then
+    vstring=$(git describe --dirty --match "$version_prefix*" | sed "s/$version_prefix//")
+elif [ -f .version ]; then
+    vstring=$(cat .version)
+else
+    if [ -f ../rpm/*.gz ]; then
+        vstring=$(ls ../rpm/*.gz)
+    else
+        exit 1
+    fi
+fi
+
+TAG=$(echo ${vstring} | cut -d- -f1 | sed -e "s/$version_prefix//")
+ADD=$(echo ${vstring} | cut -s -d- -f2)
+
+git rev-parse 2> /dev/null
+if [ $? == 0 ]; then
+    CMT=$(git describe --dirty --match "$version_prefix*" | sed "s/$version_prefix//" | cut -s -d- -f3,4)
+else
+    CMT=$(echo ${vstring} | cut -s -d- -f3,4)
+fi
+CMTR=$(echo $CMT | sed 's/-/_/')
+
+if [ -n "${BUILD_NUMBER}" ]; then
+       BLD="~b${BUILD_NUMBER}"
+else
+       BLD="~b1"
+fi
+
+if [ "$1" = "rpm-version" ]; then
+  echo ${TAG}
+  exit
+fi
+
+if [ "$1" = "rpm-release" ]; then
+  [ -z "${ADD}" ] && echo release && exit
+  echo ${ADD}${CMTR:+~${CMTR}}${BLD}
+  exit
+fi
+
+  if [ -n "${ADD}" ]; then
+    if [ "$1" = "rpm-string" ]; then
+      echo ${TAG}-${ADD}${CMTR:+~${CMTR}}${BLD}
+    else
+      echo ${TAG}-${ADD}${CMT:+~${CMT}}${BLD}
+    fi
+  else
+    echo ${TAG}-release
+fi
\ No newline at end of file