diff options
author | Ashlee Young <ashlee@wildernessvoice.com> | 2015-11-16 21:44:36 -0800 |
---|---|---|
committer | Ashlee Young <ashlee@wildernessvoice.com> | 2015-11-16 21:44:36 -0800 |
commit | 00e6500d0813dcbccaaa741ef38cc1eae6d11e07 (patch) | |
tree | bef53bb71e7888909992aef20f9a7534ab7bf496 | |
parent | e794488a513df0ddea2c5c6816cb2dd69e06fa7d (diff) |
Unattended build script
Change-Id: I10a94bbe1ddc0bc3735abd1e5ac50aebb43173f1
Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
-rwxr-xr-x | autobuild.sh | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/autobuild.sh b/autobuild.sh new file mode 100755 index 00000000..faee7b95 --- /dev/null +++ b/autobuild.sh @@ -0,0 +1,359 @@ +#!/bin/bash + +# autobuild.sh +# +# +# Copyright 2015, Yunify, Inc. All rights reserved. +# +# 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. + +##### Settings ##### +VERSION=1.0.0 +AUTHOR="Ashlee Young" +MODIFIED="November 16, 2015" +GERRITURL="git clone ssh://im2bz2pee@gerrit.opnfv.org:29418/onosfw" +ONOSURL="https://github.com/opennetworkinglab/onos" +SURICATAURL="https://github.com/inliniac/suricata" +ONOSGIT="git clone --recursive $ONOSURL" +JAVA_VERSION=1.8 +ANT_VERSION=1.9.6 +MAVEN_VERSION=3.3.3 +KARAF_VERSION=4.0.2 +##### End Settings ##### + +##### Platform detection ##### +detectOS() +{ + if [ -f "/etc/centos-release" ]; then + export OS=centos + export JAVA_HOME=/etc/alternatives/java_sdk + export JRE_HOME=/etc/alternatives/java_sdk/bin + elif [ -f "/etc/lsb-release" ]; then + export OS=ubuntu + export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 + export JRE_HOME=$JAVA_HOME/bin + elif [[ -f "/etc/SuSE-release" ]]; then + export OS=suse + export JAVA_HOME=/usr/lib64/jvm/java-1.8.0-openjdk + export JRE_HOME=$JAVA_HOME/bin + else + export OS=other + fi + printf "We have detected a derivitive OS of $OS.\n\n" +} +##### End Platform detection ##### + +##### Set build environment ##### +export GERRITROOT="$(pwd)" +export BUILDROOT=$GERRITROOT/framework/build +export ONOSRC=$GERRITROOT/framework/src/onos +export ONOSROOT=$BUILDROOT/onos +export ONOS_ROOT=$BUILDROOT/onos +export ANT_HOME=$BUILDROOT/ant/apache-ant-1.9.6 +export M2_HOME=$BUILDROOT/maven/build +export M2=$M2_HOME/bin +export PATH=$PATH:$ANT_HOME/bin:$M2:$JAVA_HOME/bin +export KARAF_ROOT=$BUILDROOT/karaf/$KARAF_VERSION +export ONOS_USER=root +export ONOS_GROUP=root +export ONOS_CELL=sdnds-tw +export RPMBUILDPATH=~/rpmbuild +##### End Set build environment ##### + +##### Patches ##### +PATCHES=$GERRITROOT/framework/patches +BUILDS=$GERRITROOT/framework/build # Pretty much the same as BUILDROOT. +PATCH_PATH_1=onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/sfc #patches should be labled as #PATCH_PATH_n beginning with 1. +##### End Patches ##### + +##### Ask Function ##### +# ask() +# { +# while true; do +# if [ "${2:-}" = "Y" ]; then +# prompt="Y/n" +# default=Y +# elif [ "${2:-}" = "N" ]; then +# prompt="y/N" +# default=N +# else +# prompt="y/n" +# default= +# fi +# # Ask the question +# read -p "$1 [$prompt] " REPLY +# # Default? +# if [ -z "$REPLY" ]; then +# REPLY=$default +# fi +# # Check if the reply is valid +# case "$REPLY" in +# Y*|y*) return 0 ;; +# N*|n*) return 1 ;; +# esac +# done +# } +##### End Ask Function ##### + +##### Version ##### +displayVersion() +{ + clear + printf "You are running installer script Version: %s \n" "$VERSION" + printf "Last modified on %s, by %s. \n\n" "$MODIFIED" "$AUTHOR" + sleep 2 +} +##### End Version ##### + +##### Update ONOS ##### +# This function will pull the ONOS upstream project and then update the +# repository in this project with just the diffs. +# updateONOS() +# { +# printf "NOTE: Updating upstream src is a PTL function. Please use this function locally, only. \n" +# printf "If you need the main repo updated to pick up ONOS upstream features, please email \n" +# printf "me at ashlee AT onosfw.com. \n\n" +# printf "Thanks! \n\n" +# if ask "Do you still wish to update your local ONOS source tree?"; then +# freshONOS +# printf "\n" +# cd $BUILDROOT +# git clone $ONOSURL onosproject +# rsync -arvP --delete --exclude=.git --exclude=.gitignore --exclude=.gitreview onosproject/ ../src/onos/ +# cd onosproject +# git log > ../onos_update.$(date +%s) +# cd ../ +# rm -rf onosproject +# cd $GERRITROOT +# # End applying patches +# fi +# printf "\n" +# } +##### End Update ONOS ##### + +##### Check Java ##### +checkJRE() +{ + INSTALLED_JAVA=`java -version 2>&1 | head -n 1 | cut -d\" -f 2` # | awk -F "." '{print $1"."$2}'` + JAVA_NUM=`echo $INSTALLED_JAVA | awk -F "." '{print $1"."$2}'` + if [ "$JAVA_NUM" '<' "$JAVA_VERSION" ]; then + echo -e "Java version $INSTALLED_JAVA is lower than the required version of $JAVA_VERSION. \n" + if [ "$OS" = "centos" ]; then + # printf "It is recommended that you run \"sudo yum -y install java-$JAVA_VERSION.0-openjdk-devel\".\n" + # if ask "May we perform this task for you?"; then + sudo yum -y install java-$JAVA_VERSION.0-openjdk-devel + # fi + elif [[ "$OS" = "ubuntu" ]]; then + # printf "It is recommended that you run \"sudo apt-get -y install openjdk-8-jdk\".\n" + # if ask "May we perform this task for you?"; then + sudo add-apt-repository ppa:openjdk-r/ppa + sudo apt-get update + sudo apt-get -y install openjdk-8-jdk + # fi + + elif [[ "$OS" = "suse" ]]; then + # printf "It is recommended that you run \"sudo zypper --non-interactive install java-1_8_0-openjdk-devel\".\n" + # if ask "May we perform this task for you?"; then + sudo zypper --non-interactive install java-1_8_0-openjdk-devel + # fi + fi + else + printf "Installed Java version meets the requirements. \n\n" + fi +} + +checkJDK() +{ + if [ ! -d "$JAVA_HOME" ]; then + if [ "OS" = "centos" ]; then + # printf "It doesn't look there's a valid JDK installed.\n" + # if ask "May we install one?"; then + sudo yum -y install java-$JAVA_VERSION.0-openjdk-devel + # else + # printf "You should run \"sudo yum -y install java-$JAVA_VERSION.0-openjdk-devel\". \n\n" + # fi + elif [[ "$OS" = "ubuntu" ]]; then + # printf "It doesn't look there's a valid JDK installed.\n" + # if ask "May we install one?"; then + sudo add-apt-repository -y ppa:openjdk-r/ppa + sudo apt-get -y update + sudo apt-get -y install openjdk-8-jdk + # else + # printf "You should run \"sudo apt-get -y install openjdk-8-jdk\". \n\n" + # fi + elif [[ "$OS" = "suse" ]]; then + # printf "It doesn't look there's a valid JDK installed.\n" + # if ask "May we install one?"; then + sudo zypper --non-interactive install java-1_8_0-openjdk-devel + # else + # printf "You should run \"sudo zypper --non-interactive install java-1_8_0-openjdk-devel\". \n\n" + # fi + fi + fi +} +##### End Check Java ##### + +##### Install Ant ##### +installAnt() +{ + if [ ! -d "$ANT_HOME/bin" ]; then + printf "You may have Ant installed on your system, but to avoid build issues, we'd like \n" + printf "to use our own. It will be installed at $ANT_HOME. \n" + # if ask "May we proceed with installing ant here?"; then + if [ ! -d "$GERRITROOT/framework/build/ant" ]; then + mkdir -p $GERRITROOT/framework/build/ant + cd $GERRITROOT/framework/build/ant + wget http://mirror.olnevhost.net/pub/apache/ant/source/apache-ant-$ANT_VERSION-src.tar.gz + tar xzvf apache-ant-$ANT_VERSION-src.tar.gz + fi + cd $ANT_HOME + sh build.sh install + # fi + else + printf "Ant looks to be properly installed at $ANT_HOME. \n\n" + fi +} +##### Install Ant ##### + +##### Install Maven ##### +installMaven() +{ + if [ ! -d $M2_HOME ]; then + # printf "While you may or may not have Maven installed, our supported version is not yet installed.\n" + # if ask "May we install it?"; then + clear + mkdir -p $GERRITROOT/framework/build/maven + cd $GERRITROOT/framework/build/maven + printf "Maven version $MAVEN_VERSION is being installed in: \n" + printf "$GERRITROOT/framework/build/maven.\n\n" + sleep 3 + wget http://supergsego.com/apache/maven/maven-3/3.3.3/source/apache-maven-3.3.3-src.tar.gz + tar xzvf apache-maven-3.3.3-src.tar.gz + cd $GERRITROOT/framework/build/maven/apache-maven-$MAVEN_VERSION + ant + cd $GERRITROOT + # fi + else + printf "Maven looks to be properly installed at $M2_HOME. \n\n" + fi +} +##### End Install Maven ##### + +##### Install karaf ##### +installKaraf() +{ + if [ ! -d $KARAF_ROOT ]; then + # printf "While you may or may not have Karaf installed, our supported version is not yet installed.\n" + # if ask "May we install it?"; then + clear + mkdir -p $BUILDROOT/karaf/$KARAF_VERSION + cd $KARAF_ROOT + wget http://download.nextag.com/apache/karaf/$KARAF_VERSION/apache-karaf-$KARAF_VERSION-src.tar.gz + tar xzvf apache-karaf-$KARAF_VERSION-src.tar.gz + cd apache-karaf-$KARAF_VERSION + mvn -Pfastinstall + # fi + fi +} +##### End Install karaf ##### + +##### Delete ONOS Build ##### +# freshONOS() +# { +# if [ -d $ONOSROOT ]; then +# printf "ONOS has previously been built.\n" +# if ask "Would you like to build fresh? This involves deleting the old build."; then +# rm -rf $ONOSROOT +# fi +# fi +# } +##### End Delete ONOS Build ##### + +##### Build ONOS ##### +buildONOS() +{ + if [ ! -d $ONOSROOT ]; then + # if ask "May we proceed to build ONOS?"; then + clear + mkdir -p $ONOSROOT + cp -rv $ONOSRC/* $ONOSROOT/ + # if ask "Would you like to apply ONOSFW unique patches?"; then + mkdir -p $BUILDROOT/$PATCH_PATH_1 # Begin applying patches + cp $PATCHES/$PATCH_PATH_1/* $BUILDROOT/$PATCH_PATH_1/ + # fi + cd $ONOSROOT + ln -sf $KARAF_ROOT/apache-karaf-$KARAF_VERSION apache-karaf-$KARAF_VERSION + mvn clean install + if [ -f "$ONOSROOT/tools/build/envDefaults" ]; then + export ONOSVERSION="`cat $ONOSROOT/tools/build/envDefaults | grep "export ONOS_POM_VERSION" \ + | awk -F "=" {'print $2'} | sed -e 's/^"//' -e 's/"$//' | awk -F "-" {'print $1'}`-onosfw-$(date +%s)" + printf "ONOSFW ONOS version is $ONOSVERSION. \n\n" + fi + # fi + else + # if ask "Would you like us to re-run building ONOS?"; then + # if ask "Would you like to apply ONOSFW unique patches?"; then + mkdir -p $BUILDROOT/$PATCH_PATH_1 # Begin applying patches + cp -v $PATCHES/$PATCH_PATH_1/* $BUILDROOT/$PATCH_PATH_1/ + # fi + cd $ONOSROOT + ln -sf $KARAF_ROOT/apache-karaf-$KARAF_VERSION apache-karaf-$KARAF_VERSION + mvn clean install + if [ -f "$ONOSROOT/tools/build/envDefaults" ]; then + export ONOSVERSION="`cat $ONOSROOT/tools/build/envDefaults | grep "export ONOS_POM_VERSION" \ + | awk -F "=" {'print $2'} | sed -e 's/^"//' -e 's/"$//' | awk -F "-" {'print $1'}`-onosfw-$(date +%s)" + printf "ONOSFW ONOS version is $ONOSVERSION. \n\n" + fi + # fi + fi +} +##### End Build ONOS ##### + +##### Check for RPMBUILD tools ##### +checkforRPMBUILD() # Checks whether RPMBUILD is installed +{ + if [ -z "$(command -v rpmbuild)" ]; then + # printf "RPM Development support is not installed. We need it to build the RPM packages. \n" + # if ask "May we install it?"; then + if [ "$OS" = "centos" ]; then + sudo yum -y install rpm-build + sudo yum -y install rpm-devel + elif [ "$OS" = "suse" ]; then + sudo zypper --non-interactive install rpm-build + sudo zypper --non-interactive install rpm-devel + elif [ "$OS" = "ubuntu" ]; then + sudo apt-get -y install rpm + fi + # fi + fi +} +##### End Check for RPMBUILD tools ##### + +##### Execution order ##### +main() +{ + displayVersion + detectOS + # updateONOS + checkJRE + checkJDK + installAnt + installMaven + installKaraf + # freshONOS + buildONOS + checkforRPMBUILD +} +##### End Execution order ##### + +main # Launches the build process |