You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

350 lines
11 KiB

#!/bin/bash -ex
# printout debug info when running this script.
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
#
# Gemaakt voor RuG-CIT 2017-06-10 Door: Rein van Weerden
# ======================================================================
# JuniperControllerBuild Copyright dVR H&S Sys. 2017
# ======================================================================
#
# JuniperControllerBuild is used
# go and build a Contrail Controlller in a virtualbox
#
# ____
# <. .\
# \..|
# \ |___(\--/)
# __/ ( . . )
# "'._. '-.O.'
# '-. \ "|\
# '.,,/'., dVR
#
#https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [[ -n ${DX} ]]
then
exec 1>>/tmp/${0##*/}.log 2>&1
set -${DX} # Are you going to debug? (DX is set to 'x' (set DX='x') or unset)
fi
#
date > $HOME/JuniperControllerBuild.run.time
rm -Rf .repo
rm -Rf ~/.repo*
cd $HOME
echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
sudo apt-get update
sudo apt-get -y install pkgconf libcurl4-openssl-dev autoconf automake bison debhelper flex libexpat-dev \
libgettextpo0 libtool libxml2-utils make python-all python-dev python-lxml python-setuptools python-sphinx \
ruby-ronn scons unzip vim-common libsnmp-python libfixbuf3 libfixbuf3-dev zlib1g-dev glibc-source libsslcommon2 libssl-dev
cd ~/src
# sudo cp /media/sf_VM-sfolder/build/openssl-1.0.2d.tar.gz .
# sudo chown rein:rein openssl-1.0.2d.tar.gz
# tar xzf openssl-1.0.2d.tar.gz
# cd openssl-1.0.2d
# ./config --prefix=/usr threads zlib shared
# make all > make.all.lst 2>&1
# find /usr -name "libssl.*" -exec rm -f {} \;
# find /usr -name "libcrypto.*" -exec rm -f {} \;
# sudo make install > make.install.lst 2>&1
cd /usr/lib/x86_64-linux-gnu
# sudo ln -s libssl.so.1.0.0 libssl.so.1.0.0
# sudo ln -s libssl.so.1.0.0 libssl.so.1.0.2
# sudo ln -s libssl.so.1.0.0 libssl.so
# sudo ln -s libcrypto.so.1.0.0 libcrypto.so.1.0.0
# sudo ln -s libcrypto.so.1.0.0 libcrypto.so.1.0.2
# sudo ln -s libcrypto.so.1.0.0 libcrypto.so
sudo cp -a libssl.* libcrypto.* /lib/x86_64-linux-gnu/
mkdir -p ~/src/Juniper/build/lib
sudo cp -a libssl.* libcrypto.* ~/src/Juniper/build/lib
sudo ldconfig
cd ~/src
sudo apt-get -y install libboost-dev libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-system-dev google-mock libgoogle-perftools-dev liblog4cplus-dev libtbb-dev libhttp-parser-dev libxml2-dev libicu-dev libpcap-dev libsasl2-dev
sudo apt-get -y install libcurl4-gnutls-dev
sudo apt-get -y install libzookeeper-java libzookeeper2 libzookeeper-mt2 libzookeeper-mt-dev
sudo apt-get -y install cmake cmake-data cmake-extras
sudo apt-get -y install python-virtualenv python-libxml2 libxslt1-dev
sudo apt-get -y install w3m
sudo apt-get -y install nmon
sudo apt-get -y install python3-pip
sudo pip3 install pip --upgrade
sudo apt-get -y install python-pip
sudo pip2 install pip --upgrade
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y autoremove
#sudo ln -s /usr/bin/libtoolize /usr/bin/libtool
cd ~/src
# git clone https://github.com/tubav/libipfix.git
#sudo cp /media/sf_VM-sfolder/build/libipfix_110209.tgz # staat er al
#sudo chown rein:rein libipfix_110209.tgz
tar xzf libipfix_110209.tgz
cd libipfix_110209/
./configure --prefix=/usr > configure.lst 2>&1
make all > make.all.lst 2>&1
sudo make install > make.install.lst 2>&1
cd ~/src
if [ ! -d librdkafka ] ; then
git clone https://github.com/edenhill/librdkafka.git
fi
cd librdkafka
./configure --prefix=/usr
make all > make.all.lst 2>&1
sudo make install > make.install.lst 2>&1
sudo ldconfig
cd /usr/lib
if [[ ! -f libnl-3.so ]]
then
sudo ln -s /lib/x86_64-linux-gnu/libnl-3.so.200 libnl-3.so
fi
if [[ ! -f libnl-genl-3.so ]]
then
sudo ln -s /lib/x86_64-linux-gnu/libnl-genl-3.so.200 libnl-genl-3.so
fi
cd ~/src
sudo ldconfig
cat << EOF > ~/.gitconfig.new
[user]
name = plReynaerde
email = plreynaerde@dvrhss.net
[push]
default = simple
[filter "media"]
clean = git media clean %f
smudge = git media smudge %f
required = true
[http]
sslVerify = false
EOF
sudo mv -f ~/.gitconfig.new ~/.gitconfig
cd ~/src
if [ ! -d protobuf ] ; then
git clone https://github.com/google/protobuf.git -b 3.3.x
fi
cd protobuf
# Copied from autogen.sh and modified.
if [ ! -d gmock ]; then
curl -L -O http://pkgs.fedoraproject.org/repo/pkgs/gmock/gmock-1.7.0.zip/073b984d8798ea1594f5e44d85b20d66/gmock-1.7.0.zip
unzip gmock-1.7.0.zip
sudo cp -r gmock-1.7.0 gmock
sudo chown $USER: gmock
mv gmock-1.7.0 gtest
rm gmock-1.7.0.zip
fi
sudo chown -R $USER: .
autoreconf -f -i -Wall
rm -rf autom4te.cache config.h.in~
./configure --prefix=/usr
make > make.all.lst 2>&1
sudo make install > make.install.lst 2>&1
mkdir -p ~/src/Juniper/build/lib
cd ~/src/Juniper/build/lib/
cp -a ~/src/protobuf/src/.libs/* .
rm -f libprotobuf.la libprotobuf-lite.la libprotoc.la
cp -a ~/src/protobuf/src/libprotobuf.la .
cp -a ~/src/protobuf/src/libprotobuf-lite.la .
cp -a ~/src/protobuf/src/libprotoc.la .
sudo ldconfig
cd ~/src
mkdir -p casdrvr
cd casdrvr
DISTRO=$(sudo lsb_release -is|tr '[:upper:]' '[:lower:]')
THISONE=$(sudo lsb_release -rs)
ALIST=$(w3m -dump -no-graph http://downloads.datastax.com/cpp-driver/${DISTRO}/${THISONE}/dependencies/libuv/|tail -n +6|head -n -2|cut -f2 -d'v'|sed 's/\/.*$//'|tr -d '.')
for ALN in ${ALIST}
do
if [[ $((${ALNO})) -lt $((${ALN})) ]]
then
export ALNO=${ALN}
fi
done
export ALNN=v
for ((i=0; i<${#ALNO}; i++))
do
if [[ i -ne 1 ]]
then
export ALNN+="${ALNO:$i:1}."
else
export ALNN+="${ALNO:$i:1}"
fi
done
ALEN=$((${#ALNN} - 1))
AVN=${ALNN:0:${ALEN}}
ADRVLST=$(w3m -dump -no-graph http://downloads.datastax.com/cpp-driver/${DISTRO}/${THISONE}/dependencies/libuv/${AVN}/|tail -n +7|head -n -2|awk -F ' ' '{ print $3 }'|grep -v dbg)
for AFN in ${ADRVLST}
do
wget http://downloads.datastax.com/cpp-driver/${DISTRO}/${THISONE}/dependencies/libuv/${AVN}/${AFN}
done
sudo dpkg --force-all --install libuv_*
sudo dpkg --force-all --install libuv-dev_*
cd ~/src
test -d cpp-driver || git clone https://github.com/datastax/cpp-driver.git
mkdir -p cpp-driver/build
cd cpp-driver
cd build
cmake .. > cmake..lst 2>&1
make > make.all.lst 2>&1
sudo make install > make.install.lst 2>&1
mkdir -p ~/src/Juniper/build/lib/
cd ~/src/Juniper/build/lib/
cp ~/src/cpp-driver/build/libcassandra.so.2.7.0 .
cp ~/src/cpp-driver/build/libcassandra_static.a .
rm libcassandra.so.2 libcassandra.so
ln -s libcassandra.so.2.7.0 libcassandra.so.2
ln -s libcassandra.so.2 libcassandra.so
sudo ldconfig
cd ~/src
test -d git-repo || git clone https://gerrit.googlesource.com/git-repo
cd git-repo
sudo cp repo /usr/bin/
cd ~/src
mkdir -p Juniper
cd Juniper
#repo init -u https://github.com/Juniper/contrail-vnc -b R4.0
yes | repo init -u git@github.com:Juniper/contrail-vnc -b R4.0
#find .repo/manifests -iname "*.xml" -exec sed -i 's/project name="/project name="Juniper\//' {} \;
repo sync
#sed -i 's#third_party/rapidjson#build/third_party/rapidjson#' controller/lib/rapidjson/SConscript
# <package>
# <name>Apache Thrift 0.8</name>
# <url>http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gz</url>
# <patches>
# <patch strip="2">thrift_patch1.diff</patch>
# <patch strip="2">thrift_autoconf.patch</patch>
# </patches>
# <format>tgz</format>
# <md5>d29dfcd38d476cbc420b6f4d80ab966c</md5>
# <autoreconf>true</autoreconf>
# </package>
cd third_party
cp packages.xml packages.xml.org
# sed -i 's/0.8.0\/thrift-0.8.0.tar.gz/0.10.0\/thrift-0.10.0.tar.gz/' packages.xml
# sed -i 's/d29dfcd38d476cbc420b6f4d80ab966c/795c5dd192e310ffff38cfd9430d6b29/' packages.xml
# sed -i '/thrift_patch1.diff/d' packages.xml
# sed -i '/thrift_autoconf.patch/d' packages.xml
# sed -i '/autoreconf/d' packages.xml
sudo mkdir -p /tmp/cache/$USER/third_party
sudo chown $USER: /tmp/cache/$USER/third_party
curl https://github.com/redis/hiredis/archive/v0.11.0.tar.gz -o /tmp/cache/$USER/third_party/hiredis-v0.11.0.tar.gz
python fetch_packages.py --file packages.xml
# mv thrift-0.10.0 thrift-0.8.0
cd thrift-0.8.0
autoconf
# sudo cp /media/sf_VM-sfolder/build/THRIFT-2039-thrift_config_h.patch .
# sudo chown rein:rein THRIFT-2039-thrift_config_h.patch
# patch -p1 < THRIFT-2039-thrift_config_h.patch
mkdir -p ~/src/Juniper/build/include/
cd ~/src/Juniper/build/include/
# sudo cp /media/sf_VM-sfolder/build/thrift_include.txz .
# sudo chown rein:rein thrift_include.txz
# tar xJf thrift_include.txz
mkdir -p ~/src/Juniper/third_party/thrift-0.8.0/compiler/cpp
cd ~/src/Juniper/third_party/thrift-0.8.0/compiler/cpp
# sudo cp /media/sf_VM-sfolder/build/thrift_include.txz .
# sudo chown rein:rein thrift_include.txz
# tar xJf thrift_include.txz
cd ~/src/Juniper
if [[ -f third_party/.cache/vijava55b20130927src.jar ]]
then
if [[ -d ~/src/Juniper/third_party/vijava ]]
then
cd ~/src/Juniper/third_party/vijava
if [[ ! -f README.txt ]]
then
unzip ../.cache/vijava55b20130927src.jar
cd ~/src/Juniper
patch -p1 < third_party/vijava_patch1.diff
fi
fi
fi
cd ~/src/Juniper
if [[ -f third_party/.cache/pugixml-1.2.tar.gz ]]
then
if [[ -d ~/src/Juniper/third_party/pugixml ]]
then
cd ~/src/Juniper/third_party/pugixml
if [[ ! -f readme.txt ]]
then
tar xzf ../.cache/pugixml-1.2.tar.gz
fi
fi
fi
cd ~/src/Juniper/third_party
tar xvf $DIR/sharespot.tar
python fetch_packages.py --file mpackages.xml
export GOROOT=$HOME/src/Juniper/third_party/go
export GOPATH=$HOME/go
export GO=${GOROOT}/bin/go
mkdir -p ${GOPATH}/src/github.com/containernetworking
cd ${GOPATH}/src/github.com/containernetworking
rm -Rf cni
test -d cni || git clone https://github.com/containernetworking/cni.git
test -d plugins || git clone https://github.com/containernetworking/plugins.git
cd -
${GO} get "github.com/docker/docker/client"
${GO} get "github.com/natefinch/lumberjack"
${GO} get "github.com/vishvananda/netlink"
mkdir -p ~/src/Juniper/third_party/go/src
cd ~/src/Juniper/third_party/go/src
ln -s ~/go/src/github.com github.com
mkdir -p ~/src/Juniper/third_party/go/pkg/linux_amd64
cd ~/src/Juniper/third_party/go/pkg/linux_amd64
ln -s ~/go/pkg/linux_amd64/github.com github.com
cd ~/src/Juniper/controller/src/container/cni/cni/common
sudo cp ~/src/Juniper/third_party/{macvlan.go,interface.go,veth.go} .
sudo chown -R $USER: .
# cd ~/src
# git clone https://github.com/Juniper/contrail-controller.git
# cd ~/src/Juniper/controller/src
# rm -Rf analytics
# cp -a ~/src/contrail-controller/src/analytics .
cd ~/src/Juniper/controller/src/analytics
# ln -s ../../../build/debug/analytics/analytics_request_skeleton.cpp analytics_request_skeleton.cpp # analytics_request_skeleton.cpp not present
sed -i "s/ 'nodeinfo',/ 'nodeinfo',\n 'dl',/" SConscript
cd ~/src/Juniper
sudo -H pip install generateDS --upgrade
echo "doScons" > ~/next
# should fix "scons: *** [build/packages/contrail/usr/bin/contrail-k8s-cni] build/production/container/cni/bin/kube_cni: No such file or directory"
# taken from here: https://github.com/zioc/contrail-devstack-plugin/issues/27
CONTRAIL_PATCHES='cd $CONTRAIL_DEST/controller && git fetch https://review.opencontrail.org/Juniper/contrail-controller refs/changes/52/32652/4 && git cherry-pick FETCH_HEAD'
make -f packages.make all