#!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright (C) 2017 Intel Corporation # All rights reserved. # # The purpose of this script is to provide a simple procedure for spinning up a new # test environment capable of running our whole test suite. This script will install # all of the necessary dependencies to run almost the complete test suite. sudo() { "$(type -P sudo)" -E "$@" } set -e shopt -s extglob UPGRADE=false INSTALL=false CONF="rocksdb,fio,flamegraph,tsocks,qemu,libiscsi,nvmecli,qat,spdk,refspdk,vagrant,igb_uio,ice" package_manager= function pre_install() { :; } function install() { :; } function upgrade() { :; } 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 $package_manager upgrade" echo " -i --install-deps Install $package_manager based dependencies" echo " -t --test-conf List of test configurations to enable (${CONF},irdma,lcov,bpftrace)" echo " -c --conf-path Path to configuration file" echo " -d --dir-git Path to where git sources should be saved" echo " -s --disable-tsocks Disable use of tsocks" } function error() { printf "%s\n\n" "$1" >&2 usage return 1 } function set_os_id_version() { if [[ -f /etc/os-release ]]; then source /etc/os-release elif [[ -f /usr/local/etc/os-release ]]; then # On FreeBSD file is located under /usr/local if etc_os-release package is installed source /usr/local/etc/os-release elif [[ $(uname -s) == FreeBSD ]]; then ID=freebsd VERSION_ID=$(freebsd-version) VERSION_ID=${VERSION_ID//.*/} else echo "File os-release not found" >&2 return 1 fi OSID=$ID OSVERSION=$VERSION_ID echo "OS-ID: $OSID | OS-Version: $OSVERSION" } function detect_package_manager() { local manager_scripts manager_scripts=("$vmsetupdir/pkgdep/"!(git)) local package_manager_lib for package_manager_lib in "${manager_scripts[@]}"; do package_manager=${package_manager_lib##*/} if hash "${package_manager}" &> /dev/null; then source "${package_manager_lib}" return fi done } vmsetupdir=$(readlink -f "$(dirname "$0")") rootdir=$(readlink -f "$vmsetupdir/../../../") source "$rootdir/scripts/common.sh" if [[ ${0##*/} == vm_setup.sh ]]; then cat <<- DEPRECATED >&2 Running this script as ${0##*/} is deprecated and support for it will be removed in the future. Please, use $vmsetupdir/autotest_setup.sh instead. DEPRECATED fi set_os_id_version source "$vmsetupdir/pkgdep/git" detect_package_manager if [[ -e $vmsetupdir/pkgdep/os/$OSID ]]; then source "$vmsetupdir/pkgdep/os/$OSID" fi # Parse input arguments # while getopts 'd:siuht:c:-:' optchar; do case "$optchar" in -) case "$OPTARG" in help) usage exit 0 ;; upgrade) UPGRADE=true ;; install-deps) INSTALL=true ;; test-conf=*) CONF="${OPTARG#*=}" ;; conf-path=*) CONF_PATH="${OPTARG#*=}" ;; dir-git=*) GIT_REPOS="${OPTARG#*=}" ;; disable-tsocks) NO_TSOCKS=true ;; *) error "Invalid argument '$OPTARG'" ;; esac ;; h) usage exit 0 ;; u) UPGRADE=true ;; i) INSTALL=true ;; t) CONF="$OPTARG" ;; c) CONF_PATH="$OPTARG" ;; d) GIT_REPOS="$OPTARG" ;; s) NO_TSOCKS=true ;; *) error "Invalid argument '$OPTARG'" ;; esac done if [[ -z $package_manager ]]; then echo "Supported package manager not found. Script supports:" printf " * %s\n" "${manager_scripts[@]##*/}" exit 1 fi if [[ -n $CONF_PATH ]]; then if [[ ! -f $CONF_PATH ]]; then error "Configuration file does not exist: '$CONF_PATH'" fi source "$CONF_PATH" fi if $UPGRADE; then upgrade fi if $INSTALL; then sudo "$rootdir/scripts/pkgdep.sh" --all pre_install install "${packages[@]}" fi install_sources