1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2017 Intel Corporation 4# All rights reserved. 5# Copyright (c) 2022 Dell Inc, or its subsidiaries. 6# 7# Please run this script as root. 8 9set -e 10 11function usage() { 12 echo "" 13 echo "This script is intended to automate the installation of package dependencies to build SPDK." 14 echo "Please run this script as root user or with sudo -E." 15 echo "" 16 echo "$0" 17 echo " -h --help" 18 echo " -a --all" 19 echo " -d --developer-tools Install tools for developers (code styling, code coverage, etc.)" 20 echo " -p --pmem Additional dependencies for reduce" 21 echo " -R --rbd Additional dependencies for RBD" 22 echo " -r --rdma Additional dependencies for RDMA transport in NVMe over Fabrics" 23 echo " -b --docs Additional dependencies for building docs" 24 echo " -u --uring Additional dependencies for io_uring" 25 echo " --uadk Additional dependencies for UADK" 26 echo " -D --daos Additional dependencies for DAOS" 27 echo " -A --avahi Additional dependencies for Avahi mDNS Discovery" 28 echo " -G --golang Additional dependencies for go API generation" 29 echo " -I --idxd Additional dependencies for IDXD" 30 echo "" 31 exit 0 32} 33 34function install_all_dependencies() { 35 INSTALL_DEV_TOOLS=true 36 INSTALL_PMEM=true 37 INSTALL_RBD=true 38 INSTALL_RDMA=true 39 INSTALL_DOCS=true 40 INSTALL_LIBURING=true 41 INSTALL_DAOS=true 42 INSTALL_AVAHI=true 43 INSTALL_GOLANG=true 44 INSTALL_IDXD=true 45} 46 47INSTALL_CRYPTO=false 48INSTALL_DEV_TOOLS=false 49INSTALL_PMEM=false 50INSTALL_RBD=false 51INSTALL_RDMA=false 52INSTALL_DOCS=false 53INSTALL_LIBURING=false 54INSTALL_DAOS=false 55INSTALL_AVAHI=false 56INSTALL_GOLANG=false 57INSTALL_IDXD=false 58INSTALL_UADK=false 59 60while getopts 'abdfhipruADGIR-:' optchar; do 61 case "$optchar" in 62 -) 63 case "$OPTARG" in 64 help) usage ;; 65 all) install_all_dependencies ;; 66 developer-tools) INSTALL_DEV_TOOLS=true ;; 67 pmem) INSTALL_PMEM=true ;; 68 rbd) INSTALL_RBD=true ;; 69 rdma) INSTALL_RDMA=true ;; 70 docs) INSTALL_DOCS=true ;; 71 uring) INSTALL_LIBURING=true ;; 72 uadk) INSTALL_UADK=true ;; 73 daos) INSTALL_DAOS=true ;; 74 avahi) INSTALL_AVAHI=true ;; 75 golang) INSTALL_GOLANG=true ;; 76 idxd) INSTALL_IDXD=true ;; 77 *) 78 echo "Invalid argument '$OPTARG'" 79 usage 80 ;; 81 esac 82 ;; 83 h) usage ;; 84 a) install_all_dependencies ;; 85 d) INSTALL_DEV_TOOLS=true ;; 86 p) INSTALL_PMEM=true ;; 87 R) INSTALL_RBD=true ;; 88 r) INSTALL_RDMA=true ;; 89 b) INSTALL_DOCS=true ;; 90 u) INSTALL_LIBURING=true ;; 91 D) INSTALL_DAOS=true ;; 92 A) INSTALL_AVAHI=true ;; 93 G) INSTALL_GOLANG=true ;; 94 I) INSTALL_IDXD=true ;; 95 *) 96 echo "Invalid argument '$OPTARG'" 97 usage 98 ;; 99 esac 100done 101 102trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR 103 104scriptsdir=$(readlink -f $(dirname $0)) 105rootdir=$(readlink -f $scriptsdir/..) 106source "$rootdir/scripts/common.sh" 107source "$scriptsdir/pkgdep/helpers.sh" 108 109OS=$(uname -s) 110 111if [[ -e /etc/os-release ]]; then 112 source /etc/os-release 113elif [[ $OS == FreeBSD ]]; then 114 ID=freebsd 115else 116 ID=unknown 117fi 118 119ID=${ID,,} 120 121#Link suse related OS to sles 122if [[ $ID == *"suse"* ]]; then 123 ID="sles" 124fi 125 126# Some distros don't provide these paths in their default $PATH setups, nor 127# sudo's secure_path, so add it here. These are needed since gem is most likely 128# to put target bins at these locations. 129export PATH=$PATH:/usr/local/bin:/usr/local/sbin 130 131for id in $ID $ID_LIKE; do 132 if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then 133 source "$scriptsdir/pkgdep/$id.sh" 134 source "$scriptsdir/pkgdep/common.sh" 135 exit 0 136 fi 137done 138 139printf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2 140exit 1 141