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