diff --git a/scripts/pkgdep.sh b/scripts/pkgdep.sh index 2fadc9442..da5f77d77 100755 --- a/scripts/pkgdep.sh +++ b/scripts/pkgdep.sh @@ -9,9 +9,10 @@ if [ -s /etc/redhat-release ]; then # Add EPEL repository for CUnit-devel yum --enablerepo=extras install -y epel-release fi - yum install -y gcc gcc-c++ make CUnit-devel libaio-devel openssl-devel \ + yum install -y gcc gcc-c++ make CUnit-devel libaio-devel \ git astyle python-pep8 lcov python clang-analyzer libuuid-devel \ sg3_utils libiscsi-devel + yum install -y --allowerasing openssl-devel # Additional dependencies for NVMe over Fabrics yum install -y libibverbs-devel librdmacm-devel # Additional dependencies for DPDK diff --git a/test/common/config/vm_setup.sh b/test/common/config/vm_setup.sh index 5dbc0ab95..0087dc204 100755 --- a/test/common/config/vm_setup.sh +++ b/test/common/config/vm_setup.sh @@ -17,12 +17,12 @@ # intel_iommu=on kvm-intel.nested=1 # We have made a lot of progress with removing hardcoded paths from the tests, -# but it may be easiest if you create your user with the name sys_sgsw for now. set -e UPGRADE=false INSTALL=false +CONF="librxe,iscsi,rocksdb,fio,flamegraph,tsocks,qemu,vpp,libiscsi" function usage() { @@ -30,20 +30,21 @@ function usage() echo "Please run this script as your regular user. The script will make calls to sudo as needed." echo "" echo "./vm_setup.sh" - echo "\t-h --help" - echo "\t-u --upgrade Run dnf upgrade" - echo "\t-i --install-deps Install dnf based dependencies" - + echo " -h --help" + echo " -u --upgrade Run dnf upgrade" + echo " -i --install-deps Install dnf based dependencies" + echo " -t --test-conf List of test configurations to enable (${CONF})" exit 0 } -while getopts 'iuh-:' optchar; do +while getopts 'iuht:-:' optchar; do case "$optchar" in -) case "$OPTARG" in help) usage;; upgrade) UPGRADE=true;; install-deps) INSTALL=true;; + test-conf=*) CONF="${OPTARG#*=}";; *) echo "Invalid argument '$OPTARG'" usage;; esac @@ -51,6 +52,7 @@ while getopts 'iuh-:' optchar; do h) usage;; u) UPGRADE=true;; i) INSTALL=true;; + t) CONF="$OPTARG";; *) echo "Invalid argument '$OPTARG'" usage;; esac @@ -82,9 +84,12 @@ git submodule update --init --recursive if $INSTALL; then sudo ./scripts/pkgdep.sh - sudo dnf install -y jq - sudo dnf install -y tsocks + if echo $CONF | grep -q tsocks; then + sudo dnf install -y tsocks + fi + sudo dnf install -y valgrind + sudo dnf install -y jq sudo dnf install -y nvme-cli sudo dnf install -y ceph sudo dnf install -y gdb @@ -98,6 +103,7 @@ if $INSTALL; then sudo dnf install -y automake sudo dnf install -y libtool sudo dnf install -y libmount-devel + sudo dnf install -y iscsi-initiator-utils sudo dnf install -y isns-utils-devel sudo dnf install -y pmempool sudo dnf install -y perl-open @@ -115,162 +121,198 @@ fi cd ~ -# rxe_cfg is used in the NVMe-oF tests -# The librxe-dev repository provides a command line tool called rxe_cfg which makes it -# very easy to use Soft-RoCE. The build pool utilizes this command line tool in the absence -# of any real RDMA NICs to simulate one for the NVMe-oF tests. -if [ -d librxe-dev ]; then - echo "librxe-dev source already present, not cloning" -elif [ hash rxe_cfg ]; then - echo "rxe_cfg is already installed. skipping" -else - git clone https://github.com/SoftRoCE/librxe-dev.git - cd librxe-dev - ./configure --libdir=/usr/lib64/ --prefix= - make -j${jobs} - sudo make install - cd ~ -fi +if echo $CONF | grep -q librxe; then + # rxe_cfg is used in the NVMe-oF tests + # The librxe-dev repository provides a command line tool called rxe_cfg which makes it + # very easy to use Soft-RoCE. The build pool utilizes this command line tool in the absence + # of any real RDMA NICs to simulate one for the NVMe-oF tests. + if hash rxe_cfg 2> /dev/null; then + echo "rxe_cfg is already installed. skipping" + else + if [ -d librxe-dev ]; then + echo "librxe-dev source already present, not cloning" + else + git clone https://github.com/SoftRoCE/librxe-dev.git + fi -# iscsiadm is used in the iscsi_tgt tests -# The version of iscsiadm that ships with fedora 26 was broken as of November 3 2017. -# There is already a bug report out about it, and hopefully it is fixed soon, but in the event that -# that version is still broken when you do your setup, the below steps will fix the issue. -CURRENT_VERSION=$(iscsiadm --version) -OPEN_ISCSI_VER='iscsiadm version 6.2.0.874' -if [ "$CURRENT_VERSION" == "$OPEN_ISCSI_VER" ]; then - if [ ! -d open-iscsi-install ]; then - mkdir -p open-iscsi-install - cd open-iscsi-install - sudo dnf download --source iscsi-initiator-utils - rpm2cpio $(ls) | cpio -idmv - mkdir -p patches - mv 00* patches/ - git clone https://github.com/open-iscsi/open-iscsi - - cd open-iscsi - - # the configurations of username and email are needed for applying patches to iscsiadm. - git config user.name none - git config user.email none - - git checkout 86e8892 - for patch in `ls ../patches`; do - git am ../patches/$patch - done - sed -i '427s/.*/-1);/' usr/session_info.c + cd librxe-dev + ./configure --libdir=/usr/lib64/ --prefix= make -j${jobs} sudo make install cd ~ - else - echo "custom open-iscsi install located, not reinstalling" fi fi +if echo $CONF | grep -q iscsi; then + # iscsiadm is used in the iscsi_tgt tests + # The version of iscsiadm that ships with fedora 26 was broken as of November 3 2017. + # There is already a bug report out about it, and hopefully it is fixed soon, but in the event that + # that version is still broken when you do your setup, the below steps will fix the issue. + CURRENT_VERSION=$(iscsiadm --version) + OPEN_ISCSI_VER='iscsiadm version 6.2.0.874' + if [ "$CURRENT_VERSION" == "$OPEN_ISCSI_VER" ]; then + if [ ! -d open-iscsi-install ]; then + mkdir -p open-iscsi-install + cd open-iscsi-install + sudo dnf download --source iscsi-initiator-utils + rpm2cpio $(ls) | cpio -idmv + mkdir -p patches + mv 00* patches/ + git clone https://github.com/open-iscsi/open-iscsi + + cd open-iscsi + + # the configurations of username and email are needed for applying patches to iscsiadm. + git config user.name none + git config user.email none + + git checkout 86e8892 + for patch in `ls ../patches`; do + git am ../patches/$patch + done + sed -i '427s/.*/-1);/' usr/session_info.c + make -j${jobs} + sudo make install + cd ~ + else + echo "custom open-iscsi install located, not reinstalling" + fi + fi +fi sudo mkdir -p /usr/src -# Rocksdb is installed for use with the blobfs tests. -if [ ! -d /usr/src/rocksdb ]; then - git clone https://review.gerrithub.io/spdk/rocksdb - git -C ./rocksdb checkout spdk-v5.6.1 - sudo mv rocksdb /usr/src/ -else - sudo git -C /usr/src/rocksdb checkout spdk-v5.6.1 - echo "rocksdb already in /usr/src. Not checking out again" -fi +if echo $CONF | grep -q rocksdb; then -# This version of fio is installed in /usr/src/fio to enable -# building the spdk fio plugin. -if [ ! -d /usr/src/fio ]; then - if [ ! -d fio ]; then - git clone http://git.kernel.dk/fio.git - sudo mv fio /usr/src/ + # Rocksdb is installed for use with the blobfs tests. + if [ ! -d /usr/src/rocksdb ]; then + git clone https://review.gerrithub.io/spdk/rocksdb + git -C ./rocksdb checkout spdk-v5.6.1 + sudo mv rocksdb /usr/src/ else - sudo mv fio /usr/src/ + sudo git -C /usr/src/rocksdb checkout spdk-v5.6.1 + echo "rocksdb already in /usr/src. Not checking out again" fi - ( - cd /usr/src/fio && - git checkout master && - git pull && - git checkout fio-3.3 && - make -j${jobs} && - sudo make install - ) -else - echo "fio already in /usr/src/fio. Not installing" fi + +if echo $CONF | grep -q fio; then + # This version of fio is installed in /usr/src/fio to enable + # building the spdk fio plugin. + if [ ! -d /usr/src/fio ]; then + if [ ! -d fio ]; then + git clone http://git.kernel.dk/fio.git + sudo mv fio /usr/src/ + else + sudo mv fio /usr/src/ + fi + ( + cd /usr/src/fio && + git checkout master && + git pull && + git checkout fio-3.3 && + make -j${jobs} && + sudo make install + ) + else + echo "fio already in /usr/src/fio. Not installing" + fi +fi + cd ~ -# Flamegraph is used when printing out timing graphs for the tests. -if [ ! -d /usr/local/FlameGraph ]; then - git clone https://github.com/brendangregg/FlameGraph.git - mkdir -p /usr/local - sudo mv FlameGraph /usr/local/FlameGraph -else - echo "flamegraph already installed. Skipping" +if echo $CONF | grep -q flamegraph; then + # Flamegraph is used when printing out timing graphs for the tests. + if [ ! -d /usr/local/FlameGraph ]; then + git clone https://github.com/brendangregg/FlameGraph.git + mkdir -p /usr/local + sudo mv FlameGraph /usr/local/FlameGraph + else + echo "flamegraph already installed. Skipping" + fi fi -# Qemu is used in the vhost tests. -SPDK_QEMU_BRANCH=spdk-2.12-pre -mkdir -p qemu -cd qemu -if [ ! -d "$SPDK_QEMU_BRANCH" ]; then - git clone https://github.com/spdk/qemu -b "$SPDK_QEMU_BRANCH" "$SPDK_QEMU_BRANCH" -else - echo "qemu already checked out. Skipping" -fi -cd "$SPDK_QEMU_BRANCH" +if echo $CONF | grep -q qemu; then + # Qemu is used in the vhost tests. + SPDK_QEMU_BRANCH=spdk-2.12-pre + mkdir -p qemu + cd qemu + if [ ! -d "$SPDK_QEMU_BRANCH" ]; then + git clone https://github.com/spdk/qemu -b "$SPDK_QEMU_BRANCH" "$SPDK_QEMU_BRANCH" + else + echo "qemu already checked out. Skipping" + fi -# Most tsocks proxies rely on a configuration file in /etc/tsocks.conf. -# If using tsocks, please make sure to complete this config before trying to build qemu. -if hash tsocks 2> /dev/null; then - git_param="--with-git='tsocks git'" + cd "$SPDK_QEMU_BRANCH" + + declare -a opt_params=("--prefix=/usr/local/qemu/$SPDK_QEMU_BRANCH") + + # Most tsocks proxies rely on a configuration file in /etc/tsocks.conf. + # If using tsocks, please make sure to complete this config before trying to build qemu. + if echo $CONF | grep -q tsocks; then + if hash tsocks 2> /dev/null; then + opt_params+=(--with-git='tsocks git') + fi + fi + + ./configure "${opt_params[@]}" --target-list="x86_64-softmmu" --enable-kvm --enable-linux-aio --enable-numa + + make -j${jobs} + sudo make install fi -./configure "$git_param" --prefix=/usr/local/qemu/$SPDK_QEMU_BRANCH --target-list="x86_64-softmmu" --enable-kvm --enable-linux-aio --enable-numa -make -j${jobs} -sudo make install + cd ~ -# Vector packet processing (VPP) is installed for use with iSCSI tests. -git clone https://gerrit.fd.io/r/vpp -cd vpp -git checkout v18.01.1 -# VPP 18.01.1 does not support OpenSSL 1.1. -# For compilation, a compatibility package is used temporarily. -sudo dnf install -y --allowerasing compat-openssl10-devel -# Installing required dependencies for building VPP -yes | make install-dep +if echo $CONF | grep -q vpp; then + # Vector packet processing (VPP) is installed for use with iSCSI tests. + if [ -d vpp ]; then + echo "vpp already cloned." + if [ ! -d vpp/build-root ]; then + echo "build-root has not been done" + echo "remove the `pwd` and start again" + exit 1 + fi + else + git clone https://gerrit.fd.io/r/vpp + cd vpp + git checkout v18.01.1 + # VPP 18.01.1 does not support OpenSSL 1.1. + # For compilation, a compatibility package is used temporarily. + sudo dnf install -y --allowerasing compat-openssl10-devel + # Installing required dependencies for building VPP + yes | make install-dep -make pkg-rpm -j${jobs} -# Reinstall latest OpenSSL devel package. -sudo dnf install -y --allowerasing openssl-devel -cd build-root -sudo dnf install -y \ - ./vpp-lib-18.01.1-release.x86_64.rpm \ - ./vpp-devel-18.01.1-release.x86_64.rpm \ - ./vpp-18.01.1-release.x86_64.rpm -# Since hugepage configuration is done via spdk/scripts/setup.sh, -# this default config is not needed. -# -# NOTE: Parameters kernel.shmmax and vm.max_map_count are set to -# very low count and cause issues with hugepage total sizes above 1GB. -sudo rm -f /etc/sysctl.d/80-vpp.conf -cd ~ - -# We currently don't make any changes to the libiscsi repository for our tests, but it is possible that we will need -# to later. Cloning from git is just future proofing the machines. -if [ ! -d libiscsi ]; then - git clone https://github.com/sahlberg/libiscsi -else - echo "libiscsi already checked out. Skipping" + make pkg-rpm -j${jobs} + # Reinstall latest OpenSSL devel package. + sudo dnf install -y --allowerasing openssl-devel + cd build-root + sudo dnf install -y \ + ./vpp-lib-18.01.1-release.x86_64.rpm \ + ./vpp-devel-18.01.1-release.x86_64.rpm \ + ./vpp-18.01.1-release.x86_64.rpm + # Since hugepage configuration is done via spdk/scripts/setup.sh, + # this default config is not needed. + # + # NOTE: Parameters kernel.shmmax and vm.max_map_count are set to + # very low count and cause issues with hugepage total sizes above 1GB. + sudo rm -f /etc/sysctl.d/80-vpp.conf + cd ~ + fi fi -cd libiscsi -./autogen.sh -./configure --prefix=/usr/local/libiscsi -make -j${jobs} -sudo make install +if echo $CONF | grep -q libiscsi; then + # We currently don't make any changes to the libiscsi repository for our tests, but it is possible that we will need + # to later. Cloning from git is just future proofing the machines. + if [ ! -d libiscsi ]; then + git clone https://github.com/sahlberg/libiscsi + else + echo "libiscsi already checked out. Skipping" + fi + cd libiscsi + ./autogen.sh + ./configure --prefix=/usr/local/libiscsi + make -j${jobs} + sudo make install +fi # 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