159caaa97SVitaliy Mysak#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2017 Intel Corporation 4eb53c232Spaul luse# All rights reserved. 534bc24f1SJim Harris# Copyright (c) 2022 Dell Inc, or its subsidiaries. 6eb53c232Spaul luse# 793533c20SHailiang Wang# Please run this script as root. 893533c20SHailiang Wang 993fb58f2SPawel Wodkowskiset -e 109ba446a2SEd rodriguez 11844c8ec3SMichal Bergerfunction usage() { 129ba446a2SEd rodriguez echo "" 139ba446a2SEd rodriguez echo "This script is intended to automate the installation of package dependencies to build SPDK." 14a805c7deSKarol Latecki echo "Please run this script as root user or with sudo -E." 159ba446a2SEd rodriguez echo "" 169ba446a2SEd rodriguez echo "$0" 179ba446a2SEd rodriguez echo " -h --help" 189ebbf3acSMaciej Wawryk echo " -a --all" 199ebbf3acSMaciej Wawryk echo " -d --developer-tools Install tools for developers (code styling, code coverage, etc.)" 20b42295dbSMarcin Spiewak echo " -p --pmem Additional dependencies for reduce" 218a5d487dSMykola Golub echo " -R --rbd Additional dependencies for RBD" 22fe5954c6SMaciej Wawryk echo " -r --rdma Additional dependencies for RDMA transport in NVMe over Fabrics" 23e5a5eaa6SMaciej Wawryk echo " -b --docs Additional dependencies for building docs" 2473039182SMaciej Wawryk echo " -u --uring Additional dependencies for io_uring" 2513603217SZhangfei Gao echo " --uadk Additional dependencies for UADK" 26777afdf8SKarol Latecki echo " -D --daos Additional dependencies for DAOS" 2734bc24f1SJim Harris echo " -A --avahi Additional dependencies for Avahi mDNS Discovery" 288d5980a8SKarol Latecki echo " -G --golang Additional dependencies for go API generation" 2944dcf4fbSTomasz Zawadzki echo " -I --idxd Additional dependencies for IDXD" 30*6fac5aabSYankun Li echo " -l --lz4 Additional dependencies for lz4" 319ba446a2SEd rodriguez echo "" 329ba446a2SEd rodriguez exit 0 339ba446a2SEd rodriguez} 349ba446a2SEd rodriguez 35844c8ec3SMichal Bergerfunction install_all_dependencies() { 369ebbf3acSMaciej Wawryk INSTALL_DEV_TOOLS=true 37f035937dSMaciej Wawryk INSTALL_PMEM=true 388a5d487dSMykola Golub INSTALL_RBD=true 39fe5954c6SMaciej Wawryk INSTALL_RDMA=true 40e5a5eaa6SMaciej Wawryk INSTALL_DOCS=true 41817d077aSMaciej Wawryk INSTALL_LIBURING=true 42777afdf8SKarol Latecki INSTALL_DAOS=true 4334bc24f1SJim Harris INSTALL_AVAHI=true 448d5980a8SKarol Latecki INSTALL_GOLANG=true 4544dcf4fbSTomasz Zawadzki INSTALL_IDXD=true 46*6fac5aabSYankun Li INSTALL_LZ4=true 479ebbf3acSMaciej Wawryk} 489ba446a2SEd rodriguez 499ebbf3acSMaciej WawrykINSTALL_CRYPTO=false 509ebbf3acSMaciej WawrykINSTALL_DEV_TOOLS=false 51f035937dSMaciej WawrykINSTALL_PMEM=false 528a5d487dSMykola GolubINSTALL_RBD=false 53fe5954c6SMaciej WawrykINSTALL_RDMA=false 54e5a5eaa6SMaciej WawrykINSTALL_DOCS=false 5573039182SMaciej WawrykINSTALL_LIBURING=false 56777afdf8SKarol LateckiINSTALL_DAOS=false 5734bc24f1SJim HarrisINSTALL_AVAHI=false 58c2349da2SAntti KervinenINSTALL_GOLANG=false 5944dcf4fbSTomasz ZawadzkiINSTALL_IDXD=false 6013603217SZhangfei GaoINSTALL_UADK=false 61*6fac5aabSYankun LiINSTALL_LZ4=false 629ebbf3acSMaciej Wawryk 63*6fac5aabSYankun Liwhile getopts 'abdfhilpruADGIR-:' optchar; do 649ba446a2SEd rodriguez case "$optchar" in 659ba446a2SEd rodriguez -) 669ba446a2SEd rodriguez case "$OPTARG" in 679ba446a2SEd rodriguez help) usage ;; 689ebbf3acSMaciej Wawryk all) install_all_dependencies ;; 699ebbf3acSMaciej Wawryk developer-tools) INSTALL_DEV_TOOLS=true ;; 70f035937dSMaciej Wawryk pmem) INSTALL_PMEM=true ;; 718a5d487dSMykola Golub rbd) INSTALL_RBD=true ;; 72fe5954c6SMaciej Wawryk rdma) INSTALL_RDMA=true ;; 73e5a5eaa6SMaciej Wawryk docs) INSTALL_DOCS=true ;; 7473039182SMaciej Wawryk uring) INSTALL_LIBURING=true ;; 7513603217SZhangfei Gao uadk) INSTALL_UADK=true ;; 76777afdf8SKarol Latecki daos) INSTALL_DAOS=true ;; 7734bc24f1SJim Harris avahi) INSTALL_AVAHI=true ;; 78c2349da2SAntti Kervinen golang) INSTALL_GOLANG=true ;; 7944dcf4fbSTomasz Zawadzki idxd) INSTALL_IDXD=true ;; 80*6fac5aabSYankun Li lz4) INSTALL_LZ4=true ;; 81844c8ec3SMichal Berger *) 82844c8ec3SMichal Berger echo "Invalid argument '$OPTARG'" 83844c8ec3SMichal Berger usage 84844c8ec3SMichal Berger ;; 859ba446a2SEd rodriguez esac 869ba446a2SEd rodriguez ;; 879ba446a2SEd rodriguez h) usage ;; 889ebbf3acSMaciej Wawryk a) install_all_dependencies ;; 899ebbf3acSMaciej Wawryk d) INSTALL_DEV_TOOLS=true ;; 90f035937dSMaciej Wawryk p) INSTALL_PMEM=true ;; 918a5d487dSMykola Golub R) INSTALL_RBD=true ;; 92fe5954c6SMaciej Wawryk r) INSTALL_RDMA=true ;; 93e5a5eaa6SMaciej Wawryk b) INSTALL_DOCS=true ;; 9473039182SMaciej Wawryk u) INSTALL_LIBURING=true ;; 95777afdf8SKarol Latecki D) INSTALL_DAOS=true ;; 9634bc24f1SJim Harris A) INSTALL_AVAHI=true ;; 97c2349da2SAntti Kervinen G) INSTALL_GOLANG=true ;; 9844dcf4fbSTomasz Zawadzki I) INSTALL_IDXD=true ;; 99*6fac5aabSYankun Li l) INSTALL_LZ4=true ;; 100844c8ec3SMichal Berger *) 101844c8ec3SMichal Berger echo "Invalid argument '$OPTARG'" 102844c8ec3SMichal Berger usage 103844c8ec3SMichal Berger ;; 1049ba446a2SEd rodriguez esac 1059ba446a2SEd rodriguezdone 1069ba446a2SEd rodriguez 10793fb58f2SPawel Wodkowskitrap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR 10893533c20SHailiang Wang 1090fb1e1c5SPaul Lusescriptsdir=$(readlink -f $(dirname $0)) 1100fb1e1c5SPaul Luserootdir=$(readlink -f $scriptsdir/..) 111deea9d10SMichal Bergersource "$rootdir/scripts/common.sh" 112bfb76280SMichal Bergersource "$scriptsdir/pkgdep/helpers.sh" 1130fb1e1c5SPaul Luse 114f385076aSMichal BergerOS=$(uname -s) 115f385076aSMichal Berger 116f385076aSMichal Bergerif [[ -e /etc/os-release ]]; then 117f385076aSMichal Berger source /etc/os-release 1180b6a29d4SMichal Bergerelif [[ $OS == FreeBSD ]]; then 1190b6a29d4SMichal Berger ID=freebsd 1200b6a29d4SMichal Bergerelse 1210b6a29d4SMichal Berger ID=unknown 1229ebbf3acSMaciej Wawrykfi 1239ebbf3acSMaciej Wawryk 1240b6a29d4SMichal BergerID=${ID,,} 1259ebbf3acSMaciej Wawryk 1260b09b651Syidong0635#Link suse related OS to sles 1270b6a29d4SMichal Bergerif [[ $ID == *"suse"* ]]; then 1280b09b651Syidong0635 ID="sles" 1290b09b651Syidong0635fi 1300b09b651Syidong0635 1313a0fa0fbSMichal Berger# Some distros don't provide these paths in their default $PATH setups, nor 1323a0fa0fbSMichal Berger# sudo's secure_path, so add it here. These are needed since gem is most likely 1333a0fa0fbSMichal Berger# to put target bins at these locations. 1343a0fa0fbSMichal Bergerexport PATH=$PATH:/usr/local/bin:/usr/local/sbin 1353a0fa0fbSMichal Berger 136f0b05dd3SJohn Levonfor id in $ID $ID_LIKE; do 137f0b05dd3SJohn Levon if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then 138f0b05dd3SJohn Levon source "$scriptsdir/pkgdep/$id.sh" 13920708f35SMichal Berger source "$scriptsdir/pkgdep/common.sh" 140f0b05dd3SJohn Levon exit 0 14193533c20SHailiang Wang fi 142f0b05dd3SJohn Levondone 143f0b05dd3SJohn Levon 1440b6a29d4SMichal Bergerprintf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2 145f0b05dd3SJohn Levonexit 1 146