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 " -l --lz4 Additional dependencies for lz4" 31 echo "" 32 exit 0 33} 34 35function install_all_dependencies() { 36 INSTALL_DEV_TOOLS=true 37 INSTALL_PMEM=true 38 INSTALL_RBD=true 39 INSTALL_RDMA=true 40 INSTALL_DOCS=true 41 INSTALL_LIBURING=true 42 INSTALL_DAOS=true 43 INSTALL_AVAHI=true 44 INSTALL_GOLANG=true 45 INSTALL_IDXD=true 46 INSTALL_LZ4=true 47} 48 49INSTALL_CRYPTO=false 50INSTALL_DEV_TOOLS=false 51INSTALL_PMEM=false 52INSTALL_RBD=false 53INSTALL_RDMA=false 54INSTALL_DOCS=false 55INSTALL_LIBURING=false 56INSTALL_DAOS=false 57INSTALL_AVAHI=false 58INSTALL_GOLANG=false 59INSTALL_IDXD=false 60INSTALL_UADK=false 61INSTALL_LZ4=false 62 63while getopts 'abdfhilpruADGIR-:' optchar; do 64 case "$optchar" in 65 -) 66 case "$OPTARG" in 67 help) usage ;; 68 all) install_all_dependencies ;; 69 developer-tools) INSTALL_DEV_TOOLS=true ;; 70 pmem) INSTALL_PMEM=true ;; 71 rbd) INSTALL_RBD=true ;; 72 rdma) INSTALL_RDMA=true ;; 73 docs) INSTALL_DOCS=true ;; 74 uring) INSTALL_LIBURING=true ;; 75 uadk) INSTALL_UADK=true ;; 76 daos) INSTALL_DAOS=true ;; 77 avahi) INSTALL_AVAHI=true ;; 78 golang) INSTALL_GOLANG=true ;; 79 idxd) INSTALL_IDXD=true ;; 80 lz4) INSTALL_LZ4=true ;; 81 *) 82 echo "Invalid argument '$OPTARG'" 83 usage 84 ;; 85 esac 86 ;; 87 h) usage ;; 88 a) install_all_dependencies ;; 89 d) INSTALL_DEV_TOOLS=true ;; 90 p) INSTALL_PMEM=true ;; 91 R) INSTALL_RBD=true ;; 92 r) INSTALL_RDMA=true ;; 93 b) INSTALL_DOCS=true ;; 94 u) INSTALL_LIBURING=true ;; 95 D) INSTALL_DAOS=true ;; 96 A) INSTALL_AVAHI=true ;; 97 G) INSTALL_GOLANG=true ;; 98 I) INSTALL_IDXD=true ;; 99 l) INSTALL_LZ4=true ;; 100 *) 101 echo "Invalid argument '$OPTARG'" 102 usage 103 ;; 104 esac 105done 106 107trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR 108 109scriptsdir=$(readlink -f $(dirname $0)) 110rootdir=$(readlink -f $scriptsdir/..) 111source "$rootdir/scripts/common.sh" 112source "$scriptsdir/pkgdep/helpers.sh" 113 114OS=$(uname -s) 115 116if [[ -e /etc/os-release ]]; then 117 source /etc/os-release 118elif [[ $OS == FreeBSD ]]; then 119 ID=freebsd 120else 121 ID=unknown 122fi 123 124ID=${ID,,} 125 126#Link suse related OS to sles 127if [[ $ID == *"suse"* ]]; then 128 ID="sles" 129fi 130 131# Some distros don't provide these paths in their default $PATH setups, nor 132# sudo's secure_path, so add it here. These are needed since gem is most likely 133# to put target bins at these locations. 134export PATH=$PATH:/usr/local/bin:/usr/local/sbin 135 136for id in $ID $ID_LIKE; do 137 if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then 138 source "$scriptsdir/pkgdep/$id.sh" 139 source "$scriptsdir/pkgdep/common.sh" 140 exit 0 141 fi 142done 143 144printf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2 145exit 1 146