In case vm_setup.sh is called on a bare system (e.g. cloud image), it will instantly fail since gcc won't be on board, forcing user to either install it by itself or by running our pkgdep.sh first. Moving this check to pkgdep/git will mitigate similar issues since before it's sourced, an $INSTALL portion of the script will have a chance to run pkgdep.sh on its own (this still depends on user running vm_setup.sh with -i arg, but still ;)). Change-Id: I309ca42e8ea15fd14e416fc85fa0e244de2d8262 Signed-off-by: Michal Berger <michalx.berger@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2785 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Karol Latecki <karol.latecki@intel.com>
169 lines
4.7 KiB
Bash
Executable File
169 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Virtual Machine environment requirements:
|
|
# 8 GiB of RAM (for DPDK)
|
|
# enable intel_kvm on your host machine
|
|
|
|
# The purpose of this script is to provide a simple procedure for spinning up a new
|
|
# virtual test environment capable of running our whole test suite. This script, when
|
|
# applied to a fresh install of fedora 26 or ubuntu 16,18 server will install all of the
|
|
# necessary dependencies to run almost the complete test suite. The main exception being VHost.
|
|
# Vhost requires the configuration of a second virtual machine. instructions for how to configure
|
|
# that vm are included in the file TEST_ENV_SETUP_README inside this repository
|
|
|
|
# it is important to enable nesting for vms in kernel command line of your machine for the vhost tests.
|
|
# in /etc/default/grub
|
|
# append the following to the GRUB_CMDLINE_LINUX line
|
|
# intel_iommu=on kvm-intel.nested=1
|
|
|
|
# We have made a lot of progress with removing hardcoded paths from the tests,
|
|
|
|
sudo() {
|
|
"$(type -P sudo)" -E "$@"
|
|
}
|
|
|
|
set -e
|
|
|
|
VM_SETUP_PATH=$(readlink -f ${BASH_SOURCE%/*})
|
|
|
|
UPGRADE=false
|
|
INSTALL=false
|
|
CONF="rocksdb,fio,flamegraph,tsocks,qemu,vpp,libiscsi,nvmecli,qat,spdk,refspdk"
|
|
|
|
if [[ -e /etc/os-release ]]; then
|
|
source /etc/os-release
|
|
fi
|
|
|
|
if [ $(uname -s) == "FreeBSD" ]; then
|
|
OSID="freebsd"
|
|
OSVERSION=$(freebsd-version | cut -d. -f1)
|
|
PACKAGEMNG='pkg'
|
|
else
|
|
OSID=$(source /etc/os-release && echo $ID)
|
|
OSVERSION=$(source /etc/os-release && echo $VERSION_ID)
|
|
PACKAGEMNG='undefined'
|
|
fi
|
|
|
|
function usage() {
|
|
echo "This script is intended to automate the environment setup for a linux virtual machine."
|
|
echo "Please run this script as your regular user. The script will make calls to sudo as needed."
|
|
echo ""
|
|
echo "./vm_setup.sh"
|
|
echo " -h --help"
|
|
echo " -u --upgrade Run $PACKAGEMNG upgrade"
|
|
echo " -i --install-deps Install $PACKAGEMNG based dependencies"
|
|
echo " -t --test-conf List of test configurations to enable (${CONF})"
|
|
echo " -c --conf-path Path to configuration file"
|
|
echo " -d --dir-git Path to where git sources should be saved"
|
|
exit 0
|
|
}
|
|
|
|
vmsetupdir=$(readlink -f "$(dirname "$0")")
|
|
rootdir=$(readlink -f "$vmsetupdir/../../../")
|
|
|
|
managers=("$vmsetupdir/pkgdep/"*)
|
|
# Get package manager #
|
|
if hash yum &> /dev/null; then
|
|
source "$vmsetupdir/pkgdep/yum"
|
|
elif hash dnf &> /dev/null; then
|
|
source "$vmsetupdir/pkgdep/dnf"
|
|
elif hash apt-get &> /dev/null; then
|
|
source "$vmsetupdir/pkgdep/apt-get"
|
|
elif hash pacman &> /dev/null; then
|
|
source "$vmsetupdir/pkgdep/pacman"
|
|
elif hash pkg &> /dev/null; then
|
|
source "$vmsetupdir/pkgdep/pkg"
|
|
else
|
|
echo "Supported package manager not found. Script supports:"
|
|
printf ' * %s\n' "${managers[@]##*/}"
|
|
fi
|
|
|
|
# Parse input arguments #
|
|
while getopts 'd:iuht:c:-:' optchar; do
|
|
case "$optchar" in
|
|
-)
|
|
case "$OPTARG" in
|
|
help) usage ;;
|
|
upgrade) UPGRADE=true ;;
|
|
install-deps) INSTALL=true ;;
|
|
test-conf=*) CONF="${OPTARG#*=}" ;;
|
|
conf-path=*) CONF_PATH="${OPTARG#*=}" ;;
|
|
dir-git=*) GIT_REPOS="${OPTARG#*=}" ;;
|
|
*)
|
|
echo "Invalid argument '$OPTARG'"
|
|
usage
|
|
;;
|
|
esac
|
|
;;
|
|
h) usage ;;
|
|
u) UPGRADE=true ;;
|
|
i) INSTALL=true ;;
|
|
t) CONF="$OPTARG" ;;
|
|
c) CONF_PATH="$OPTARG" ;;
|
|
d) GIT_REPOS="$OPTARG" ;;
|
|
*)
|
|
echo "Invalid argument '$OPTARG'"
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "$CONF_PATH" ]; then
|
|
if [ ! -f "$CONF_PATH" ]; then
|
|
echo Configuration file does not exist: "$CONF_PATH"
|
|
exit 1
|
|
else
|
|
source "$CONF_PATH"
|
|
fi
|
|
fi
|
|
|
|
if $UPGRADE; then
|
|
upgrade
|
|
fi
|
|
|
|
if $INSTALL; then
|
|
sudo "$rootdir/scripts/pkgdep.sh" --all
|
|
pre_install
|
|
install "${packages[@]}"
|
|
fi
|
|
|
|
source "$vmsetupdir/pkgdep/git"
|
|
|
|
# create autorun-spdk.conf in home folder. This is sourced by the autotest_common.sh file.
|
|
# By setting any one of the values below to 0, you can skip that specific test. If you are
|
|
# using your autotest platform to do sanity checks before uploading to the build pool, it is
|
|
# probably best to only run the tests that you believe your changes have modified along with
|
|
# Scanbuild and check format. This is because running the whole suite of tests in series can
|
|
# take ~40 minutes to complete.
|
|
if [ ! -e ~/autorun-spdk.conf ]; then
|
|
cat > ~/autorun-spdk.conf << EOF
|
|
# assign a value of 1 to all of the pertinent tests
|
|
SPDK_RUN_VALGRIND=1
|
|
SPDK_TEST_CRYPTO=1
|
|
SPDK_RUN_FUNCTIONAL_TEST=1
|
|
SPDK_TEST_AUTOBUILD=1
|
|
SPDK_TEST_UNITTEST=1
|
|
SPDK_TEST_ISCSI=1
|
|
SPDK_TEST_ISCSI_INITIATOR=1
|
|
SPDK_TEST_NVME=1
|
|
SPDK_TEST_NVME_CLI=1
|
|
SPDK_TEST_NVMF=1
|
|
SPDK_TEST_RBD=1
|
|
SPDK_TEST_BLOCKDEV=1
|
|
SPDK_TEST_BLOBFS=1
|
|
SPDK_TEST_PMDK=1
|
|
SPDK_TEST_LVOL=1
|
|
SPDK_TEST_JSON=1
|
|
SPDK_RUN_ASAN=1
|
|
SPDK_RUN_UBSAN=1
|
|
# doesn't work on vm
|
|
SPDK_TEST_IOAT=0
|
|
# requires some extra configuration. see TEST_ENV_SETUP_README
|
|
SPDK_TEST_VHOST=0
|
|
SPDK_TEST_VHOST_INIT=0
|
|
# Not configured here
|
|
SPDK_RUN_INSTALLED_DPDK=0
|
|
|
|
EOF
|
|
fi
|