test/vm_setup: various improvements

- improve package manager detection
- add error function
- exclude "git" from managers
- use etc_os-release package on FreeBSD
- use newer bash built-in "test" ( [[ ) instead of old fashioned ( [ )

Signed-off-by: Pawel Piatek <pawelx.piatek@intel.com>
Change-Id: Id88d60e027bf9993e04f6cdf1d9e23f2249135af
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3575
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Karol Latecki <karol.latecki@intel.com>
Reviewed-by: Maciej Wawryk <maciejx.wawryk@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Pawel Piatek 2020-07-27 08:43:00 +02:00 committed by Tomasz Zawadzki
parent ba3dcb6fcf
commit 69d5d77bfb
2 changed files with 59 additions and 46 deletions

View File

@ -11,6 +11,7 @@ install() {
} }
packages=( packages=(
etc_os-release
pciutils pciutils
jq jq
gdb gdb

View File

@ -23,24 +23,14 @@ sudo() {
} }
set -e set -e
shopt -s extglob
VM_SETUP_PATH=$(readlink -f ${BASH_SOURCE%/*}) VM_SETUP_PATH=$(readlink -f ${BASH_SOURCE%/*})
UPGRADE=false UPGRADE=false
INSTALL=false INSTALL=false
CONF="rocksdb,fio,flamegraph,tsocks,qemu,libiscsi,nvmecli,qat,spdk,refspdk" CONF="rocksdb,fio,flamegraph,tsocks,qemu,libiscsi,nvmecli,qat,spdk,refspdk"
package_manager=
if [[ -e /etc/os-release ]]; then
source /etc/os-release
fi
if [ $(uname -s) == "FreeBSD" ]; then
OSID="freebsd"
OSVERSION=$(freebsd-version | cut -d. -f1)
else
OSID=$(source /etc/os-release && echo $ID)
OSVERSION=$(source /etc/os-release && echo $VERSION_ID)
fi
function usage() { function usage() {
echo "This script is intended to automate the environment setup for a linux virtual machine." echo "This script is intended to automate the environment setup for a linux virtual machine."
@ -54,29 +44,58 @@ function usage() {
echo " -c --conf-path Path to configuration file" echo " -c --conf-path Path to configuration file"
echo " -d --dir-git Path to where git sources should be saved" echo " -d --dir-git Path to where git sources should be saved"
echo " -s --disable-tsocks Disable use of tsocks" echo " -s --disable-tsocks Disable use of tsocks"
exit 0 exit ${1:-0}
}
function error() {
printf "%s\n\n" "$1" >&2
usage 1
}
function set_os_id_version() {
if [[ $(uname -s) == FreeBSD ]] && ! pkg info -q etc_os-release; then
echo "Please install 'etc_os-release' package" >&2
echo "pkg install -y etc_os-release" >&2
exit 2
fi
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
else
echo "File os-release not found" >&2
exit 3
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
package_manager="undefined"
} }
vmsetupdir=$(readlink -f "$(dirname "$0")") vmsetupdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$vmsetupdir/../../../") rootdir=$(readlink -f "$vmsetupdir/../../../")
managers=("$vmsetupdir/pkgdep/"*) set_os_id_version
# Get package manager # detect_package_manager
if hash dnf &> /dev/null; then
source "$vmsetupdir/pkgdep/dnf"
elif hash yum &> /dev/null; then
source "$vmsetupdir/pkgdep/yum"
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"
elif hash swupd &> /dev/null; then
source "$vmsetupdir/pkgdep/swupd"
else
package_manager="undefined"
fi
if [[ -e $vmsetupdir/pkgdep/os/$OSID ]]; then if [[ -e $vmsetupdir/pkgdep/os/$OSID ]]; then
source "$vmsetupdir/pkgdep/os/$OSID" source "$vmsetupdir/pkgdep/os/$OSID"
@ -94,10 +113,7 @@ while getopts 'd:siuht:c:-:' optchar; do
conf-path=*) CONF_PATH="${OPTARG#*=}" ;; conf-path=*) CONF_PATH="${OPTARG#*=}" ;;
dir-git=*) GIT_REPOS="${OPTARG#*=}" ;; dir-git=*) GIT_REPOS="${OPTARG#*=}" ;;
disable-tsocks) NO_TSOCKS=true ;; disable-tsocks) NO_TSOCKS=true ;;
*) *) error "Invalid argument '$OPTARG'" ;;
echo "Invalid argument '$OPTARG'"
usage
;;
esac esac
;; ;;
h) usage ;; h) usage ;;
@ -107,25 +123,21 @@ while getopts 'd:siuht:c:-:' optchar; do
c) CONF_PATH="$OPTARG" ;; c) CONF_PATH="$OPTARG" ;;
d) GIT_REPOS="$OPTARG" ;; d) GIT_REPOS="$OPTARG" ;;
s) NO_TSOCKS=true ;; s) NO_TSOCKS=true ;;
*) *) error "Invalid argument '$OPTARG'" ;;
echo "Invalid argument '$OPTARG'"
usage
;;
esac esac
done done
if [[ "$package_manager" == "undefined" ]]; then if [[ $package_manager == undefined ]]; then
echo "Supported package manager not found. Script supports:" echo "Supported package manager not found. Script supports:"
printf ' * %s\n' "${managers[@]##*/}" printf " * %s\n" "${manager_scripts[@]##*/}"
exit 1 exit 1
fi fi
if [ -n "$CONF_PATH" ]; then if [[ -n $CONF_PATH ]]; then
if [ ! -f "$CONF_PATH" ]; then if [[ -f $CONF_PATH ]]; then
echo Configuration file does not exist: "$CONF_PATH"
exit 1
else
source "$CONF_PATH" source "$CONF_PATH"
else
error "Configuration file does not exist: '$CONF_PATH'"
fi fi
fi fi
@ -147,7 +159,7 @@ source "$vmsetupdir/pkgdep/git"
# probably best to only run the tests that you believe your changes have modified along with # 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 # Scanbuild and check format. This is because running the whole suite of tests in series can
# take ~40 minutes to complete. # take ~40 minutes to complete.
if [ ! -e ~/autorun-spdk.conf ]; then if [[ ! -e ~/autorun-spdk.conf ]]; then
cat > ~/autorun-spdk.conf << EOF cat > ~/autorun-spdk.conf << EOF
# assign a value of 1 to all of the pertinent tests # assign a value of 1 to all of the pertinent tests
SPDK_RUN_VALGRIND=1 SPDK_RUN_VALGRIND=1