mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2024-12-03 02:48:08 +03:00
8b4b2ca869
* Update to use node 18 and npm 9 * `$(npm bin)` -> `$(npm prefix)/bin` * `$(npm bin)` -> `$(npm prefix)/node_modules/.bin` * Upgraded package-lock version * `start-gui.sh` now requires npm >= 9 * Reverted `package-lock.json` version for old NodeJS/npm --------- Co-authored-by: ChiaMineJP <admin@chiamine.jp>
221 lines
6.5 KiB
Bash
Executable File
221 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o errexit
|
|
|
|
export NODE_OPTIONS="--max-old-space-size=3000"
|
|
|
|
SCRIPT_DIR=$(cd -- "$(dirname -- "$0")"; pwd)
|
|
|
|
if [ "${SCRIPT_DIR}" != "$(pwd)" ]; then
|
|
echo "Please change working directory by the command below"
|
|
echo " cd ${SCRIPT_DIR}"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$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 "The Chia Blockchain GUI can not be installed or run by the root user."
|
|
exit 1
|
|
fi
|
|
|
|
# Allows overriding the branch or commit to build in chia-blockchain-gui
|
|
SUBMODULE_BRANCH=$1
|
|
|
|
nodejs_is_installed(){
|
|
if ! npm version >/dev/null 2>&1; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
do_install_npm_locally(){
|
|
NODEJS_VERSION="$(node -v | cut -d'.' -f 1 | sed -e 's/^v//')"
|
|
NPM_VERSION="$(npm -v | cut -d'.' -f 1)"
|
|
|
|
if [ "$NODEJS_VERSION" -lt "18" ] || [ "$NPM_VERSION" -lt "9" ]; then
|
|
if [ "$NODEJS_VERSION" -lt "18" ]; then
|
|
echo "Current NodeJS version($(node -v)) is less than 18. GUI app requires NodeJS>=18."
|
|
fi
|
|
if [ "$NPM_VERSION" -lt "9" ]; then
|
|
echo "Current npm version($(npm -v)) is less than 9. GUI app requires npm>=9."
|
|
fi
|
|
|
|
if [ "$(uname)" = "OpenBSD" ] || [ "$(uname)" = "FreeBSD" ]; then
|
|
# `n` package does not support OpenBSD/FreeBSD
|
|
echo "Please install NodeJS>=18 and/or npm>=9 manually"
|
|
exit 1
|
|
fi
|
|
|
|
NPM_GLOBAL="${SCRIPT_DIR}/build_scripts/npm_global"
|
|
# install-gui.sh can be executed
|
|
echo "cd ${NPM_GLOBAL}"
|
|
cd "${NPM_GLOBAL}"
|
|
if [ "$NPM_VERSION" -lt "6" ]; then
|
|
# Ubuntu image of Amazon ec2 instance surprisingly uses nodejs@3.5.2
|
|
# which doesn't support `npm ci` as of 27th Jan, 2022
|
|
echo "npm install"
|
|
npm install
|
|
else
|
|
echo "npm ci"
|
|
npm ci
|
|
fi
|
|
export N_PREFIX=${SCRIPT_DIR}/.n
|
|
PATH="${N_PREFIX}/bin:$(npm prefix)/node_modules/.bin:${PATH}"
|
|
export PATH
|
|
# `n 18` here installs nodejs@18 under $N_PREFIX directory
|
|
echo "n 18"
|
|
n 18
|
|
echo "Current NodeJS version: $(node -v)"
|
|
echo "Current npm version: $(npm -v)"
|
|
if [ "$(node -v | cut -d'.' -f 1 | sed -e 's/^v//')" -lt "18" ]; then
|
|
echo "Error: Failed to install NodeJS>=18"
|
|
exit 1
|
|
fi
|
|
if [ "$(npm -v | cut -d'.' -f 1)" -lt "9" ]; then
|
|
echo "Error: Failed to install npm>=9"
|
|
exit 1
|
|
fi
|
|
cd "${SCRIPT_DIR}"
|
|
else
|
|
echo "Found NodeJS $(node -v)"
|
|
echo "Found npm $(npm -v)"
|
|
fi
|
|
}
|
|
|
|
# Work around for inconsistent `npm` exec path issue
|
|
# https://github.com/Chia-Network/chia-blockchain/pull/10460#issuecomment-1054492495
|
|
patch_inconsistent_npm_issue(){
|
|
node_module_dir=$1
|
|
if [ ! -d "$node_module_dir" ]; then
|
|
mkdir "$node_module_dir"
|
|
fi
|
|
if [ ! -d "${node_module_dir}/.bin" ]; then
|
|
mkdir "${node_module_dir}/.bin"
|
|
fi
|
|
if [ -e "${node_module_dir}/.bin/npm" ]; then
|
|
rm -f "${node_module_dir}/.bin/npm"
|
|
fi
|
|
ln -s "$(command -v npm)" "${node_module_dir}/.bin/npm"
|
|
}
|
|
|
|
# Manage npm and other install requirements on an OS specific basis
|
|
if [ "$(uname)" = "Linux" ]; then
|
|
#LINUX=1
|
|
if type apt-get >/dev/null 2>&1; then
|
|
# Debian/Ubuntu
|
|
|
|
# Check if we are running a Raspberry PI 4
|
|
if [ "$(uname -m)" = "aarch64" ] \
|
|
&& [ "$(uname -n)" = "raspberrypi" ]; then
|
|
# Check if NodeJS & NPM is installed
|
|
type npm >/dev/null 2>&1 || {
|
|
echo >&2 "Please install NODEJS&NPM manually"
|
|
}
|
|
else
|
|
if ! nodejs_is_installed; then
|
|
echo "nodejs is not installed. Installing..."
|
|
echo "sudo apt-get install -y npm nodejs libxss1"
|
|
sudo apt-get install -y npm nodejs libxss1
|
|
fi
|
|
do_install_npm_locally
|
|
fi
|
|
elif type yum >/dev/null 2>&1 && [ ! -f "/etc/redhat-release" ] && [ ! -f "/etc/centos-release" ] && [ ! -f /etc/rocky-release ] && [ ! -f /etc/fedora-release ]; then
|
|
# AMZN 2
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs on Amazon Linux 2."
|
|
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
|
|
sudo yum install -y nodejs
|
|
fi
|
|
do_install_npm_locally
|
|
elif type yum >/dev/null 2>&1 && [ ! -f /etc/rocky-release ] && [ ! -f /etc/fedora-release ] && [ -f /etc/redhat-release ] || [ -f /etc/centos-release ]; then
|
|
# CentOS or Redhat
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs on CentOS/Redhat."
|
|
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
|
|
sudo yum install -y nodejs
|
|
fi
|
|
do_install_npm_locally
|
|
elif type yum >/dev/null 2>&1 && [ -f /etc/rocky-release ] || [ -f /etc/fedora-release ]; then
|
|
# RockyLinux
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs on RockyLinux/Fedora"
|
|
sudo dnf module enable nodejs:12
|
|
sudo dnf install -y nodejs
|
|
fi
|
|
do_install_npm_locally
|
|
elif type pacman >/dev/null 2>&1 && [ -f /etc/arch-release ]; then
|
|
#Arch Linux
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs on Arch Linux"
|
|
sudo pacman -S nodejs npm
|
|
fi
|
|
do_install_npm_locally
|
|
fi
|
|
elif [ "$(uname)" = "Darwin" ] && type brew >/dev/null 2>&1; then
|
|
# MacOS
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs on MacOS"
|
|
brew install npm
|
|
fi
|
|
do_install_npm_locally
|
|
elif [ "$(uname)" = "OpenBSD" ]; then
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs"
|
|
pkg_add node
|
|
fi
|
|
do_install_npm_locally
|
|
elif [ "$(uname)" = "FreeBSD" ]; then
|
|
if ! nodejs_is_installed; then
|
|
echo "Installing nodejs"
|
|
pkg install node
|
|
fi
|
|
do_install_npm_locally
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# For Mac and Windows, we will set up node.js on GitHub Actions and Azure
|
|
# Pipelines directly, so skip unless you are completing a source/developer install.
|
|
# Ubuntu special cases above.
|
|
if [ ! "$CI" ]; then
|
|
echo "Running git submodule update --init --recursive."
|
|
echo ""
|
|
git submodule update --init --recursive
|
|
echo "Running git submodule update."
|
|
echo ""
|
|
git submodule update
|
|
cd chia-blockchain-gui
|
|
|
|
if [ "$SUBMODULE_BRANCH" ];
|
|
then
|
|
git fetch --all
|
|
git reset --hard "$SUBMODULE_BRANCH"
|
|
echo ""
|
|
echo "Building the GUI with branch $SUBMODULE_BRANCH"
|
|
echo ""
|
|
fi
|
|
|
|
# Work around for inconsistent `npm` exec path issue
|
|
# https://github.com/Chia-Network/chia-blockchain/pull/10460#issuecomment-1054492495
|
|
patch_inconsistent_npm_issue "../node_modules"
|
|
|
|
npm ci
|
|
npm audit fix || true
|
|
npm run build
|
|
|
|
# Set modified output of `chia version` to version property of GUI's package.json
|
|
python ../installhelper.py
|
|
else
|
|
echo "Skipping node.js in install.sh on MacOS ci."
|
|
fi
|
|
|
|
echo ""
|
|
echo "Chia blockchain install-gui.sh completed."
|
|
echo ""
|
|
echo "Type 'bash start-gui.sh &' to start the GUI."
|