#!/usr/bin/env bash

if [ ! "$USER" = "root" ]; then
	echo
	echo Error: must be run as root!
	echo
	exit 1
fi

set -e

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SPDK_DIR="$( cd "${DIR}/../../" && pwd )"
echo "SPDK_DIR = $SPDK_DIR"

# Bug fix for vagrant rsync problem
if [ -d /home/vagrant/spdk_repo ]; then
	echo "Fixing permissions on /home/vagrant/spdk_repo"
	chown vagrant /home/vagrant/spdk_repo
	chgrp vagrant /home/vagrant/spdk_repo
fi

# Setup for run-autorun.sh
if [ ! -f /home/vagrant/autorun-spdk.conf ]; then
	echo "Copying scripts/vagrant/autorun-spdk.conf to /home/vagrant"
	cp ${SPDK_DIR}/scripts/vagrant/autorun-spdk.conf /home/vagrant
	chown vagrant /home/vagrant/autorun-spdk.conf
	chgrp vagrant /home/vagrant/autorun-spdk.conf
fi

SYSTEM=$(uname -s)

if [ "$SYSTEM" = "FreeBSD" ]; then
	# Do initial setup for the system
	pkg upgrade -f
	${SPDK_DIR}/scripts/pkgdep.sh
	if [ -d /usr/src/.git ]; then
		echo
		echo "/usr/src/ is a git repository"
		echo "consider \"cd /usr/src/; git pull\" to update"
		echo
	else
		git clone --depth 10 -b release/11.1.0 https://github.com/freebsd/freebsd.git /usr/src
	fi
else

	# Make sure that we get the hugepages we need on provision boot
	# Note: The package install should take care of this at the end
	#       But sometimes after all the work of provisioning, we can't
	#       get the requested number of hugepages without rebooting.
	#       So do it here just in case
	sysctl -w vm.nr_hugepages=1024
	HUGEPAGES=$(sysctl -n  vm.nr_hugepages)
	if [ $HUGEPAGES != 1024 ]; then
		echo "Warning: Unable to get 1024 hugepages, only got $HUGEPAGES"
		echo "Warning: Adjusting HUGEMEM in /home/vagrant/autorun-spdk.conf"
		sed "s/HUGEMEM=.*$/HUGEMEM=${HUGEPAGES}/g" /home/vagrant/autorun-spdk.conf > /home/vagrant/foo.conf
		mv -f /home/vagrant/foo.conf /home/vagrant/autorun-spdk.conf
	fi

	# Figure out what system we are running on
	if [ -f /etc/lsb-release ];then
		. /etc/lsb-release
	elif [ -f /etc/redhat-release ];then
		yum update -y
		yum install -y redhat-lsb
		DISTRIB_ID=$(lsb_release -si)
		DISTRIB_RELEASE=$(lsb_release -sr)
		DISTRIB_CODENAME=$(lsb_release -sc)
		DISTRIB_DESCRIPTION=$(lsb_release -sd)
	fi

	# Do initial setup for the system
	if [ "$DISTRIB_ID" == "Ubuntu" ]; then
		set -xv
		export DEBIAN_PRIORITY=critical
		export DEBIAN_FRONTEND=noninteractive
		export DEBCONF_NONINTERACTIVE_SEEN=true
		# Standard update + upgrade dance
		apt-get update --assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
		apt-get upgrade --assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
		${SPDK_DIR}/scripts/pkgdep.sh
	elif [ "$DISTRIB_ID" == "CentOS" ]; then
		# Standard update + upgrade dance
		yum check-update
		yum update -y
		${SPDK_DIR}/scripts/pkgdep.sh
	elif [ "$DISTRIB_ID" == "Fedora" ]; then
		if [ "$DISTRIB_RELEASE" = "26" ]; then
			echo
			echo "  Run \"${SPDK_DIR}/test/common/config/vm_setup.sh\" to complete setup of Fedora 26"
			echo
		else
			yum check-update
			yum update -y
			${SPDK_DIR}/scripts/pkgdep.sh
		fi
	fi
fi
