X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=tools%2Fvnf_build.sh;h=0a085a6ab3bc30024f263aec7bd892684955ede9;hb=refs%2Ftags%2Fopnfv-5.1.RC1;hp=53bee284ba713841d3f99c834e6e2c24906f40e1;hpb=4eca0440aee462f842567d5ef8b8796c27f4dd1b;p=samplevnf.git diff --git a/tools/vnf_build.sh b/tools/vnf_build.sh index 53bee284..0a085a6a 100755 --- a/tools/vnf_build.sh +++ b/tools/vnf_build.sh @@ -25,8 +25,9 @@ HUGEPGSZ=`cat /proc/meminfo | grep Hugepagesize | cut -d : -f 2 | tr -d ' '` MODPROBE="/sbin/modprobe" INSMOD="/sbin/insmod" DPDK_DOWNLOAD="Not initialized" +CIVETWEB_DOWNLOAD="Not initialized" DPDK_DIR=$VNF_CORE/dpdk -DPDK_RTE_VER="16.04" +DPDK_RTE_VER="17.02" # # Sets QUIT variable so script will finish. @@ -134,6 +135,8 @@ step_2() FUNC[4]="install_dpdk" TEXT[5]="Setup hugepages" FUNC[5]="setup_hugepages" + TEXT[6]="Download and Build civetweb" + FUNC[6]="download_civetweb_zip" } get_agreement_download() { @@ -176,7 +179,8 @@ install_libs() sudo apt-get update sudo apt-get -y install build-essential linux-headers-$(uname -r) git unzip libpcap0.8-dev gcc \ make libc6 libc6-dev g++-multilib libzmq3-dev libcurl4-openssl-dev net-tools wget gcc unzip \ - libpcap-dev libncurses-dev libedit-dev pciutils liblua5.2-dev libncursesw5-dev + libpcap-dev libncurses-dev libedit-dev pciutils liblua5.2-dev libncursesw5-dev libjson0 \ + libjson0-dev libssl-dev touch .download } @@ -197,6 +201,20 @@ download_dpdk_zip() mv $VNF_CORE/dpdk-$DPDK_RTE_VER $VNF_CORE/dpdk } +download_civetweb_zip() +{ + echo "Download CIVETWEB zip" + CIVETWEB_DOWNLOAD="https://sourceforge.net/projects/civetweb/files/1.9/CivetWeb_V1.9.zip" + if [ ! -e ${CIVETWEB_DOWNLOAD##*/} ] ; then + wget ${CIVETWEB_DOWNLOAD} + fi + unzip -o ${CIVETWEB_DOWNLOAD##*/} + mv $VNF_CORE/civetweb-master $VNF_CORE/civetweb + pushd $VNF_CORE/civetweb + make lib + popd +} + install_dpdk() { echo "Build DPDK" @@ -220,7 +238,7 @@ install_dpdk() patch -p1 < $VNF_CORE/patches/dpdk_custom_patch/set-log-level-to-info.patch fi - make -j install T=$RTE_TARGET + make -j16 install T=$RTE_TARGET if [ $? -ne 0 ] ; then echo "Failed to build dpdk, please check the errors." return @@ -234,6 +252,11 @@ install_dpdk() echo "igb_uio" | sudo tee -a /etc/modules sudo depmod fi + if [ -d "dpdk/usertools/" ]; then + cp usertools/dpdk-devbind.py /usr/sbin/dpdk-devbind + else + cp tools/dpdk_nic_bind.py /usr/sbin/dpdk-devbind + fi popd } @@ -289,13 +312,15 @@ build_vnfs() popd } -#--- Add non intractive option to build vnfs -if [[ "$1" = "--silient" ]];then - DPDK_VER=("" "16.04" "16.11" "17.02" "17.05") - member="$2" - for item in "${DPDK_VER[@]}"; do - if [[ "$member" == "$item" ]]; then - DPDK_RTE_VER="$member" +non_interactive() +{ + #--- Add non intractive option to build vnfs + if [[ "$1" = "true" ]];then + DPDK_VER=("" "16.04" "16.11" "17.02" "17.05") + member="$2" + for item in "${DPDK_VER[@]}"; do + if [[ "$member" == "$item" ]]; then + DPDK_RTE_VER="$member" fi done pushd $VNF_CORE @@ -307,6 +332,9 @@ if [[ "$1" = "--silient" ]];then echo "Download dpdk for VNF build..." download_dpdk_zip + echo "Download civetweb for VNF build..." + download_civetweb_zip + echo "Build dpdk..." install_dpdk @@ -318,62 +346,117 @@ if [[ "$1" = "--silient" ]];then popd exit -fi + fi +} -SETUP_PROXY="setup_http_proxy" -STEPS[1]="step_1" -STEPS[2]="step_2" -STEPS[3]="step_3" +interactive() +{ + SETUP_PROXY="setup_http_proxy" + STEPS[1]="step_1" + STEPS[2]="step_2" + STEPS[3]="step_3" -QUIT=0 + QUIT=0 -clear + while [ "$QUIT" == "0" ]; do + OPTION_NUM=1 + for s in $(seq ${#STEPS[@]}) ; do + ${STEPS[s]} + + echo "----------------------------------------------------------" + echo " Step $s: ${TITLE}" + echo "----------------------------------------------------------" + + for i in $(seq ${#TEXT[@]}) ; do + echo "[$OPTION_NUM] ${TEXT[i]}" + OPTIONS[$OPTION_NUM]=${FUNC[i]} + let "OPTION_NUM+=1" + done -echo -n "Checking for user permission.. " + # Clear TEXT and FUNC arrays before next step + unset TEXT + unset FUNC + + echo "" + done + + echo "[$OPTION_NUM] Exit Script" + OPTIONS[$OPTION_NUM]="quit" + echo "" + echo -n "Option: " + read our_entry + echo "" + ${OPTIONS[our_entry]} ${our_entry} + + if [ "$QUIT" == "0" ] ; then + echo + echo -n "Press enter to continue ..."; read + clear + continue + exit + fi + echo "Installation successfully complete." + done +} + +# -- main script +clear sudo -n true if [ $? -ne 0 ]; then - echo "Password-less sudo user must run this script" 1>&2 - exit 1 + echo -n "Checking for user permission.. " + echo "Password-less sudo user must run this script" 1>&2 + exit 1 fi -echo "Done" -clear -while [ "$QUIT" == "0" ]; do - OPTION_NUM=1 - for s in $(seq ${#STEPS[@]}) ; do - ${STEPS[s]} - - echo "----------------------------------------------------------" - echo " Step $s: ${TITLE}" - echo "----------------------------------------------------------" - - for i in $(seq ${#TEXT[@]}) ; do - echo "[$OPTION_NUM] ${TEXT[i]}" - OPTIONS[$OPTION_NUM]=${FUNC[i]} - let "OPTION_NUM+=1" - done - - # Clear TEXT and FUNC arrays before next step - unset TEXT - unset FUNC - - echo "" - done - - echo "[$OPTION_NUM] Exit Script" - OPTIONS[$OPTION_NUM]="quit" - echo "" - echo -n "Option: " - read our_entry - echo "" - ${OPTIONS[our_entry]} ${our_entry} - - if [ "$QUIT" == "0" ] ; then - echo - echo -n "Press enter to continue ..."; read - clear - continue - exit - fi - echo "Installation successfully complete." +NON_INTERACTIVE=false +INTERACTIVE=true +DPDK_VERSION=$DPDK_RTE_VER + +for i in "$@" +do +case $i in + -s|--silient) + NON_INTERACTIVE=true + INTERACTIVE=false + ;; + -i|--interactive) + INTERACTIVE=true + ;; + -p=*|--proxy=*) + export http_proxy="${i#*=}" + export https_proxy="${i#*=}" + ;; + -d=*|--dpdk=*) + DPDK_VERSION="${i#*=}" + ;; + -h|--help) + echo "CommandLine options:" + echo "====================" + echo "1. Intractive mode:" + echo "./tools/vnf_build.sh or ./tools/vnf_build.sh -i" + echo + echo "1. Non-Intractive mode:" + echo "./tools/vnf_build.sh -s [Default dpdk 17.02]" + echo "If system is behind proxy use -p= and to use different dpdk version use -d=" + echo "eg: ./tools/vnf_build.sh -s -p=http://proxy.com -d=17.05" + echo 'Note:- supported dpdk version ("16.04" "16.11" "17.02" "17.05")' + echo + exit + ;; + --default) + INTERACTIVE=true + ;; + *) + ;; +esac done + +if [[ "$INTERACTIVE" == "true" ]]; then + interactive + exit +fi + +if [[ "$NON_INTERACTIVE" == "true" ]]; then + non_interactive $NON_INTERACTIVE $DPDK_VERSION + exit +fi