chia-blockchain/install-plotter.sh
2023-10-05 11:15:38 -05:00

253 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -o errexit
USAGE_TEXT="\\
Usage: $0 <bladebit|madmax> [-v VERSION | -h]
-v VERSION Specify the version of plotter to install
-h Show usage
"
usage() {
echo "$USAGE_TEXT"
}
# Check for necessary tools
if ! command -v wget &>/dev/null; then
echo "ERROR: wget could not be found. Please install wget and try again."
exit 1
fi
if ! command -v tar &>/dev/null; then
echo "ERROR: tar could not be found. Please install tar and try again."
exit 1
fi
# Function to download, extract, set permissions, and clean up
handle_binary() {
URL="$1"
ARTIFACT=$(basename "$URL")
FILENAME="$2"
BINARY_NAME="$3"
echo "Fetching binary from: ${URL}"
if wget -q "$URL"; then
echo "Successfully downloaded: ${ARTIFACT}"
if [[ "$FILENAME" == *.tar.gz ]]; then
tar zxf "$FILENAME"
rm -f "$FILENAME"
else
mv "$ARTIFACT" "$BINARY_NAME"
fi
chmod 755 ./"$BINARY_NAME"
echo -e "\nSuccessfully installed '${BINARY_NAME}' to:\n$PWD/${BINARY_NAME}\n"
else
echo -e "\nWARNING: Failed to download from ${URL}. Maybe specified version of the binary does not exist.\n"
fi
}
get_bladebit_filename() {
BLADEBIT_VER="$1" # e.g. v2.0.0-beta1
OS="$2" # "ubuntu", "centos", "macos"
ARCH="$3" # "x86-64", "arm64"
echo "bladebit-${BLADEBIT_VER}-${OS}-${ARCH}.tar.gz"
}
get_bladebit_cuda_filename() {
BLADEBIT_VER="$1" # e.g. v2.0.0-beta1
OS="$2" # "ubuntu", "centos", "macos"
ARCH="$3" # "x86-64", "arm64"
echo "bladebit-cuda-${BLADEBIT_VER}-${OS}-${ARCH}.tar.gz"
}
get_bladebit_url() {
BLADEBIT_VER="$1" # e.g. v2.0.0-beta1
OS="$2" # "ubuntu", "centos", "macos"
ARCH="$3" # "x86-64", "arm64"
GITHUB_BASE_URL="https://github.com/Chia-Network/bladebit/releases/download"
BLADEBIT_FILENAME="$(get_bladebit_filename "$BLADEBIT_VER" "$OS" "$ARCH")"
echo "${GITHUB_BASE_URL}/${BLADEBIT_VER}/${BLADEBIT_FILENAME}"
}
get_bladebit_cuda_url() {
BLADEBIT_VER="$1" # e.g. v2.0.0-beta1
OS="$2" # "ubuntu", "centos", "macos"
ARCH="$3" # "x86-64", "arm64"
GITHUB_BASE_URL="https://github.com/Chia-Network/bladebit/releases/download"
BLADEBIT_CUDA_FILENAME="$(get_bladebit_cuda_filename "$BLADEBIT_VER" "$OS" "$ARCH")"
echo "${GITHUB_BASE_URL}/${BLADEBIT_VER}/${BLADEBIT_CUDA_FILENAME}"
}
get_madmax_filename() {
KSIZE="$1"
MADMAX_VER="$2"
OS="$3"
ARCH="$4"
export CHIA_PLOT="chia_plot"
if [ "$KSIZE" = "k34" ]; then
export CHIA_PLOT="chia_plot_k34"
fi
SUFFIX=""
if [ "$OS" = "macos" ]; then
if [ "$ARCH" = "arm64" ]; then
ARCH="m1"
else
ARCH="intel"
fi
SUFFIX="${OS}-${ARCH}"
else
SUFFIX="$ARCH"
fi
echo "${CHIA_PLOT}-${MADMAX_VER}-${SUFFIX}"
}
get_madmax_url() {
KSIZE="$1"
MADMAX_VER="$2"
OS="$3"
ARCH="$4"
GITHUB_BASE_URL="https://github.com/Chia-Network/chia-plotter-madmax/releases/download"
MADMAX_FILENAME="$(get_madmax_filename "$KSIZE" "$MADMAX_VER" "$OS" "$ARCH")"
echo "${GITHUB_BASE_URL}/${MADMAX_VER}/${MADMAX_FILENAME}"
}
if [ "$1" = "-h" ] || [ "$1" = "" ]; then
usage
exit 0
fi
DEFAULT_BLADEBIT_VERSION="v3.1.0"
DEFAULT_BLADEBIT_VERSION_FOR_MACOS="v2.0.1"
DEFAULT_MADMAX_VERSION="0.0.2"
VERSION=
PLOTTER=$1
shift 1
while getopts v:h flag; do
case "$flag" in
v) VERSION="$OPTARG" ;;
h)
usage
exit 0
;;
*)
echo
usage
exit 1
;;
esac
done
SCRIPT_DIR=$(
cd -- "$(dirname -- "$0")"
pwd
)
if [ "$SCRIPT_DIR" != "$PWD" ]; then
echo "ERROR: Please change working directory by the command below"
echo " cd ${SCRIPT_DIR}"
exit 1
fi
if [ "$VIRTUAL_ENV" = "" ]; then
echo "This requires the chia python virtual environment."
echo "Execute '. ./activate' before running."
exit 1
fi
if [ "$(id -u)" = 0 ]; then
echo "ERROR: Plotter can not be installed or run by the root user."
exit 1
fi
OS=""
ARCH="x86-64"
if [ "$(uname)" = "Linux" ]; then
if command -v apt-get >/dev/null; then
echo "Detected Debian/Ubuntu like OS"
OS="ubuntu"
elif type yum >/dev/null 2>&1; then
echo "Detected RedHut like OS"
OS="centos"
elif [ -f /etc/os-release ]; then
OS=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
if [ "$OS" == "arch" ]; then
OS="ubuntu"
fi
else
echo "ERROR: Unknown Linux distro"
exit 1
fi
elif [ "$(uname)" = "Darwin" ]; then
echo "Detected MacOS"
OS="macos"
else
echo "ERROR: $(uname) is not supported"
exit 1
fi
if [ "$(uname -m)" = "aarch64" ] || [ "$(uname -m)" = "arm64" ]; then
ARCH="arm64"
fi
if [ ! -d "${VIRTUAL_ENV}/bin" ]; then
echo "ERROR: venv directory does not exists: '${VIRTUAL_ENV}/bin'"
exit 1
fi
cd "${VIRTUAL_ENV}/bin"
# Handle BladeBit and BladeBit CUDA binaries
if [ "$PLOTTER" = "bladebit" ]; then
if [ "$VERSION" = "" ]; then
if [ "$OS" = "macos" ]; then
VERSION="$DEFAULT_BLADEBIT_VERSION_FOR_MACOS"
else
VERSION="$DEFAULT_BLADEBIT_VERSION"
fi
fi
echo -e "Installing bladebit $VERSION\n"
# Regular bladebit binary
url="$(get_bladebit_url "$VERSION" "$OS" "$ARCH")"
bladebit_filename="$(get_bladebit_filename "$VERSION" "$OS" "$ARCH")"
handle_binary "$url" "$bladebit_filename" "bladebit"
# CUDA bladebit binary
if [ "$OS" != "macos" ]; then
url="$(get_bladebit_cuda_url "$VERSION" "$OS" "$ARCH")"
bladebit_cuda_filename="$(get_bladebit_cuda_filename "$VERSION" "$OS" "$ARCH")"
handle_binary "$url" "$bladebit_cuda_filename" "bladebit_cuda"
fi
# Handle MadMax binaries
elif [ "$PLOTTER" = "madmax" ]; then
if [ "$VERSION" = "" ]; then
VERSION="$DEFAULT_MADMAX_VERSION"
fi
echo -e "Installing madmax $VERSION\n"
# k32 MadMax binary
url="$(get_madmax_url "k32" "$VERSION" "$OS" "$ARCH")"
madmax_filename="$(get_madmax_filename "k32" "$VERSION" "$OS" "$ARCH")"
handle_binary "$url" "$madmax_filename" "chia_plot"
# k34 MadMax binary
url="$(get_madmax_url "k34" "$VERSION" "$OS" "$ARCH")"
madmax_filename="$(get_madmax_filename "k34" "$VERSION" "$OS" "$ARCH")"
handle_binary "$url" "$madmax_filename" "chia_plot_k34"
else
usage
fi