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.
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()
{
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 libjson-c-dev libssl-dev
touch .download
}
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"
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
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
}
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
echo "Download dpdk for VNF build..."
download_dpdk_zip
+ echo "Download civetweb for VNF build..."
+ download_civetweb_zip
+
echo "Build dpdk..."
install_dpdk
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=<proxy> and to use different dpdk version use -d=<dpdk>"
+ 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