summaryrefslogtreecommitdiffstats
path: root/vagrant/bootstrap.ubuntu1404.sh
diff options
context:
space:
mode:
authorDave Wallace <dwallacelf@gmail.com>2016-02-03 02:09:58 -0500
committerDave Wallace <dwallacelf@gmail.com>2016-02-03 02:10:25 -0500
commitdd98ae7aa20dfa4d601c1c584f28ace9497bae46 (patch)
tree4aaa31545681afb394d5cb2b3b568b521e37ab36 /vagrant/bootstrap.ubuntu1404.sh
parent2587eee429cb0ef07125f0f6d74d1f669878d553 (diff)
Initial Honeycomb vagrant support.
The following environment variables are used to customize the behavior of the vagrant VM: HONEYCOMB_VAGRANT_DISTRO - Set to "centos7" to run CentOS (currently inop). Unset or any other value runs ubuntu 14.04. HONEYCOMB_M2_REPOSITORY - Set to the pathname of a directory to contain the M2 repository outside of the VM. The specified directory will be mounted at /m2-repository and /home/vagrant/.m2/settings.xml will be modified to use /m2-repository instead of the default directory (/home/vagrant/.m2/repository). VPP_VAGRANT_NICS - Set to the number of addtional NICS desired for VPP to use. VPP_REPO - Set to the pathname of a VPP repository. The specified pathname will be mounted on /vpp and a working repo will be cloned into /home/vagrant/git/vpp. VPP will then be built, installed and started after the VM is created. Change-Id: I6b673c3c378c6b6b7c342d91dc33118ecc97bd05 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Diffstat (limited to 'vagrant/bootstrap.ubuntu1404.sh')
-rw-r--r--vagrant/bootstrap.ubuntu1404.sh128
1 files changed, 128 insertions, 0 deletions
diff --git a/vagrant/bootstrap.ubuntu1404.sh b/vagrant/bootstrap.ubuntu1404.sh
new file mode 100644
index 000000000..da51e48df
--- /dev/null
+++ b/vagrant/bootstrap.ubuntu1404.sh
@@ -0,0 +1,128 @@
+# set default route to be the GATEWAY
+declare -r GATEWAY=${1:-}
+# set default gateway for bridged interface, and make it happen at reboot
+if [[ -n "${GATEWAY}" ]]; then
+ echo "Setting default gateway through bridged interface"
+ ip route delete default 2>&1 >/dev/null || true
+ ip route add default via ${GATEWAY}
+ echo "GATEWAY=${GATEWAY}" >/etc/default/vagrant-bridge
+ [ -r /vagrant/vagrant-bridge.conf ] && cp /vagrant/vagrant-bridge.conf /etc/init/ # symlinks don't work
+ initctl reload-configuration
+fi
+
+# Fix grub-pc on Virtualbox with Ubuntu
+export DEBIAN_FRONTEND=noninteractive
+
+# Standard update + upgrade dance
+apt-get update
+apt-get upgrade -y
+
+# Fix the silly notion that /bin/sh should point to dash by pointing it to bash
+
+sudo update-alternatives --install /bin/sh sh /bin/bash 100
+
+# Install build tools
+apt-get install -y build-essential autoconf automake bison libssl-dev ccache libtool git dkms debhelper emacs libganglia1-dev libapr1-dev libconfuse-dev
+
+# Install other stuff
+# apt-get install -y qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
+
+# Install uio
+apt-get install -y linux-image-extra-`uname -r`
+
+# Install jdk and maven
+apt-get install -y openjdk-7-jdk
+mkdir /usr/local/apache-maven
+cd /usr/local/apache-maven
+wget http://apache.go-parts.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
+tar -xzvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/apache-maven/
+update-alternatives --install /usr/bin/mvn mvn /usr/local/apache-maven/apache-maven-3.3.9/bin/mvn 1
+update-alternatives --config mvn
+cd /home/vagrant
+sudo -H -u vagrant mkdir .m2
+sudo -H -u vagrant cp /honeycomb/vagrant/settings.xml .m2
+
+cat << EOF > .bash_aliases
+export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.9
+export MAVEN_OPTS="-Xms256m -Xmx512m" # Very important to put the "m" on the end
+export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
+EOF
+chown vagrant:vagrant .bash_aliases
+
+# Use the external Maven M2 repository if it has been mounted on /m2-repository
+[ -d /m2-repository ] && sudo -u vagrant sed -i -e 's,/home/vagrant/.m2/repository,/m2-repository,g' /home/vagrant/.m2/settings.xml
+
+# Setup for hugepages using upstart so it persists across reboots
+echo "vm.nr_hugepages=1024" >> /etc/sysctl.d/20-hugepages.conf
+sysctl --system
+
+cat << EOF > /etc/init/hugepages.conf
+start on runlevel [2345]
+
+task
+
+script
+ mkdir -p /run/hugepages/kvm || true
+ rm -f /run/hugepages/kvm/* || true
+ rm -f /dev/shm/* || true
+ mount -t hugetlbfs nodev /run/hugepages/kvm
+end script
+EOF
+
+# Make sure we run that hugepages.conf right now
+start hugepages
+
+# Setup the vpp code
+cd ~vagrant/
+
+sudo -u vagrant mkdir git
+cd git/
+
+# Check if git exists and remove it before attempting clone, else clone ineffective when "reload --provision"
+[ -d honeycomb ] && rm -rf honeycomb
+sudo -H -u vagrant git clone /honeycomb
+cd honeycomb/
+
+# Initial honeycomb build
+sudo -H -u vagrant mvn clean install -DskipTests
+
+# Install honeycomb agent (v3po)
+mkdir -p /opt/honeycomb/v3po
+cp -a v3po/karaf /opt/honeycomb/v3po
+
+# Install ODL Virtual Bridge App
+mkdir -p /opt/odl/vbd
+cp -a vbd/karaf /opt/odl/vbd
+
+if [ -d /vpp ] ; then
+ cd ..
+
+ # Check if git exists and remove it before attempting clone, else clone ineffective when "reload --provision"
+ [ -d vpp ] && rm -rf vpp
+ sudo -H -u vagrant git clone /vpp
+ cd vpp/
+
+ # Initial vpp build
+ if [ -d build-root ]; then
+ # Bootstrap vpp
+ cd build-root/
+ sudo -H -u vagrant ./bootstrap.sh
+
+ # Build vpp
+ sudo -H -u vagrant make V=0 PLATFORM=vpp TAG=vpp_debug install-deb
+
+ # Install debian packages
+ dpkg -i *.deb
+
+ # Disable all ethernet interfaces other than the default route
+ # so VPP will use those interfaces.
+ for intf in $(ls /sys/class/net) ; do
+ if [ -d /sys/class/net/$intf/device ] && [ "$(route | grep default | grep $intf)" == "" ] ; then
+ ifconfig $intf down
+ fi
+ done
+
+ # Start vpp
+ start vpp
+ fi
+fi