summaryrefslogtreecommitdiffstats
path: root/src/spdk/scripts/pkgdep.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/scripts/pkgdep.sh')
-rwxr-xr-xsrc/spdk/scripts/pkgdep.sh160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/spdk/scripts/pkgdep.sh b/src/spdk/scripts/pkgdep.sh
new file mode 100755
index 000000000..7d748c437
--- /dev/null
+++ b/src/spdk/scripts/pkgdep.sh
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+# Please run this script as root.
+
+set -e
+
+function usage() {
+ echo ""
+ echo "This script is intended to automate the installation of package dependencies to build SPDK."
+ echo "Please run this script as root user or with sudo -E."
+ echo ""
+ echo "$0"
+ echo " -h --help"
+ echo " -a --all"
+ echo " -d --developer-tools Install tools for developers (code styling, code coverage, etc.)"
+ echo " -p --pmem Additional dependencies for reduce and pmdk"
+ echo " -f --fuse Additional dependencies for FUSE and NVMe-CUSE"
+ echo " -r --rdma Additional dependencies for RDMA transport in NVMe over Fabrics"
+ echo " -b --docs Additional dependencies for building docs"
+ echo " -u --uring Additional dependencies for io_uring"
+ echo ""
+ exit 0
+}
+
+function install_all_dependencies() {
+ INSTALL_DEV_TOOLS=true
+ INSTALL_PMEM=true
+ INSTALL_FUSE=true
+ INSTALL_RDMA=true
+ INSTALL_DOCS=true
+ INSTALL_LIBURING=true
+}
+
+function install_liburing() {
+ local GIT_REPO_LIBURING=https://github.com/axboe/liburing.git
+ local liburing_dir=/usr/local/src/liburing
+
+ if [[ -e /usr/lib64/liburing.so ]]; then
+ echo "liburing is already installed. skipping"
+ else
+ if [[ -d $liburing_dir ]]; then
+ echo "liburing source already present, not cloning"
+ else
+ mkdir $liburing_dir
+ git clone "${GIT_REPO_LIBURING}" "$liburing_dir"
+ fi
+ (cd "$liburing_dir" && ./configure --libdir=/usr/lib64 && make install)
+ fi
+}
+
+function install_shfmt() {
+ # Fetch version that has been tested
+ local shfmt_version=3.1.0
+ local shfmt=shfmt-$shfmt_version
+ local shfmt_dir=${SHFMT_DIR:-/opt/shfmt}
+ local shfmt_dir_out=${SHFMT_DIR_OUT:-/usr/bin}
+ local shfmt_url
+ local os
+
+ if hash "$shfmt" && [[ $("$shfmt" --version) == "v$shfmt_version" ]]; then
+ echo "$shfmt already installed"
+ return 0
+ fi 2> /dev/null
+
+ os=$(uname -s)
+
+ case "$os" in
+ Linux) shfmt_url=https://github.com/mvdan/sh/releases/download/v$shfmt_version/shfmt_v${shfmt_version}_linux_amd64 ;;
+ FreeBSD) shfmt_url=https://github.com/mvdan/sh/releases/download/v$shfmt_version/shfmt_v${shfmt_version}_freebsd_amd64 ;;
+ *)
+ echo "Not supported OS (${os:-Unknown}), skipping"
+ return 0
+ ;;
+ esac
+
+ mkdir -p "$shfmt_dir"
+ mkdir -p "$shfmt_dir_out"
+
+ echo "Fetching ${shfmt_url##*/}"...
+ local err
+ if err=$(curl -f -Lo"$shfmt_dir/$shfmt" "$shfmt_url" 2>&1); then
+ chmod +x "$shfmt_dir/$shfmt"
+ ln -sf "$shfmt_dir/$shfmt" "$shfmt_dir_out"
+ else
+ cat <<- CURL_ERR
+
+ * Fetching $shfmt_url failed, $shfmt will not be available for format check.
+ * Error:
+
+ $err
+
+ CURL_ERR
+ return 0
+ fi
+ echo "$shfmt installed"
+}
+
+INSTALL_CRYPTO=false
+INSTALL_DEV_TOOLS=false
+INSTALL_PMEM=false
+INSTALL_FUSE=false
+INSTALL_RDMA=false
+INSTALL_DOCS=false
+INSTALL_LIBURING=false
+
+while getopts 'abdfhipru-:' optchar; do
+ case "$optchar" in
+ -)
+ case "$OPTARG" in
+ help) usage ;;
+ all) install_all_dependencies ;;
+ developer-tools) INSTALL_DEV_TOOLS=true ;;
+ pmem) INSTALL_PMEM=true ;;
+ fuse) INSTALL_FUSE=true ;;
+ rdma) INSTALL_RDMA=true ;;
+ docs) INSTALL_DOCS=true ;;
+ uring) INSTALL_LIBURING=true ;;
+ *)
+ echo "Invalid argument '$OPTARG'"
+ usage
+ ;;
+ esac
+ ;;
+ h) usage ;;
+ a) install_all_dependencies ;;
+ d) INSTALL_DEV_TOOLS=true ;;
+ p) INSTALL_PMEM=true ;;
+ f) INSTALL_FUSE=true ;;
+ r) INSTALL_RDMA=true ;;
+ b) INSTALL_DOCS=true ;;
+ u) INSTALL_LIBURING=true ;;
+ *)
+ echo "Invalid argument '$OPTARG'"
+ usage
+ ;;
+ esac
+done
+
+trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
+
+scriptsdir=$(readlink -f $(dirname $0))
+rootdir=$(readlink -f $scriptsdir/..)
+
+OS=$(uname -s)
+
+if [[ -e /etc/os-release ]]; then
+ source /etc/os-release
+fi
+
+ID=${ID:-$OS} ID=${ID,,}
+
+#Link suse related OS to sles
+if [[ ${ID,,} == *"suse"* ]]; then
+ ID="sles"
+fi
+
+if [[ -e $scriptsdir/pkgdep/$ID.sh ]]; then
+ source "$scriptsdir/pkgdep/$ID.sh"
+else
+ printf 'Not supported platform detected (%s), aborting\n' "$ID" >&2
+fi