Files
chia-blockchain/install-timelord.sh
2026-02-04 10:38:29 -06:00

140 lines
5.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -o errexit
USAGE_TEXT="\
Usage: $0 [-d]
-n do not install Python development package, Python.h etc
-h display this help and exit
"
usage() {
echo "${USAGE_TEXT}"
}
INSTALL_PYTHON_DEV=1
while getopts nh flag; do
case "${flag}" in
# development
n) INSTALL_PYTHON_DEV= ;;
h)
usage
exit 0
;;
*)
echo
usage
exit 1
;;
esac
done
if [ -z "$VIRTUAL_ENV" ]; then
echo "This requires the chia python virtual environment."
echo "Execute '. ./activate' before running."
exit 1
fi
echo "Timelord requires CMake 3.14+ to compile vdf_client."
PYTHON_VERSION=$(python -c 'import sys; print(f"python{sys.version_info.major}.{sys.version_info.minor}")')
echo "Python version: $PYTHON_VERSION"
if [ "$INSTALL_PYTHON_DEV" ]; then
PYTHON_DEV_DEPENDENCY=lib"$PYTHON_VERSION"-dev
else
PYTHON_DEV_DEPENDENCY=
fi
export BUILD_VDF_BENCH=Y # Installs the useful vdf_bench test of CPU squaring speed
THE_PATH=$(python -c 'import pathlib, chiavdf, importlib_resources; print(pathlib.Path(chiavdf.__file__).parent)')/vdf_client
# Note that this picks the version based on the requirement, not the presently
# installed chiavdf.
CHIAVDF_POETRY_INFO=$(.penv/bin/poetry show --no-ansi --no-interaction chiavdf)
echo "${CHIAVDF_POETRY_INFO}"
CHIAVDF_POETRY_INFO_VERSION=$(echo "${CHIAVDF_POETRY_INFO}" | grep 'version[[:space:]]*:' | sed 's/version[[:space:]]*: //')
echo "${CHIAVDF_POETRY_INFO_VERSION}"
CHIAVDF_VERSION="chiavdf==${CHIAVDF_POETRY_INFO_VERSION}"
echo "${CHIAVDF_VERSION}"
symlink_vdf_bench() {
if [ ! -e vdf_bench ] && [ -e venv/lib/"$1"/site-packages/vdf_bench ]; then
echo ln -s venv/lib/"$1"/site-packages/vdf_bench
ln -s venv/lib/"$1"/site-packages/vdf_bench .
elif [ ! -e venv/lib/"$1"/site-packages/vdf_bench ]; then
echo "ERROR: Could not find venv/lib/$1/site-packages/vdf_bench"
else
echo "./vdf_bench link exists."
fi
}
if [ "$(uname)" = "Linux" ] && type apt-get; then
UBUNTU_DEBIAN=true
echo "Found Ubuntu/Debian."
elif [ "$(uname)" = "Linux" ] && type dnf || yum; then
RHEL_BASED=true
echo "Found RedHat."
if [ "$INSTALL_PYTHON_DEV" ]; then
yumcmd="sudo yum install $PYTHON_VERSION-devel gcc gcc-c++ gmp-devel libtool make autoconf automake openssl-devel libevent-devel boost-devel python3 cmake -y"
else
yumcmd="sudo yum install gcc gcc-c++ gmp-devel libtool make autoconf automake openssl-devel libevent-devel boost-devel python3 cmake -y"
fi
elif [ "$(uname)" = "Darwin" ]; then
MACOS=true
echo "Found MacOS."
fi
if [ -e "$THE_PATH" ]; then
echo "$THE_PATH"
echo "vdf_client already exists, no action taken"
else
if [ -e venv/bin/python ] && test "$UBUNTU_DEBIAN"; then
echo "Installing chiavdf dependencies on Ubuntu/Debian"
# Update package lists before install
echo "apt-get update"
sudo apt-get update
# Install remaining needed development tools - assumes venv and prior run of install.sh
echo "apt-get install libgmp-dev libboost-python-dev $PYTHON_DEV_DEPENDENCY libboost-system-dev build-essential -y"
sudo apt-get install libgmp-dev libboost-python-dev "$PYTHON_DEV_DEPENDENCY" libboost-system-dev build-essential -y
echo "Installing chiavdf from source on Ubuntu/Debian"
echo venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
symlink_vdf_bench "$PYTHON_VERSION"
elif [ -e venv/bin/python ] && test "$RHEL_BASED"; then
echo "Installing chiavdf dependencies on RedHat/CentOS/Fedora"
# Install remaining needed development tools - assumes venv and prior run of install.sh
echo "$yumcmd"
${yumcmd}
echo "Installing chiavdf from source on RedHat/CentOS/Fedora"
echo venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
symlink_vdf_bench "$PYTHON_VERSION"
elif [ -e venv/bin/python ] && test "$MACOS"; then
echo "Installing chiavdf dependencies for MacOS."
if ! cmake --version >/dev/null 2>&1; then
brew install --formula --quiet cmake
fi
# The most recent boost version causes compile errors.
brew install --formula --quiet boost gmp
echo "Installing chiavdf from source."
# User needs to provide required packages
echo venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
symlink_vdf_bench "$PYTHON_VERSION"
elif [ -e venv/bin/python ]; then
echo "Installing chiavdf from source."
# User needs to provide required packages
echo venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
venv/bin/python -m pip install --force --no-binary chiavdf "$CHIAVDF_VERSION"
symlink_vdf_bench "$PYTHON_VERSION"
else
echo "No venv created yet, please run install.sh."
fi
fi
echo "To estimate a timelord on this CPU try './vdf_bench square_asm 400000' for an ips estimate."