2018-11-11 08:19:04 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
2018-09-03 18:15:55 -10:00
|
|
|
|
2018-09-04 09:21:03 -07:00
|
|
|
cd "$(dirname "$0")"/../..
|
|
|
|
|
2018-12-05 16:40:08 -08:00
|
|
|
set -x
|
2018-09-03 18:15:55 -10:00
|
|
|
deployMethod="$1"
|
|
|
|
nodeType="$2"
|
2018-09-04 22:21:58 -07:00
|
|
|
publicNetwork="$3"
|
|
|
|
entrypointIp="$4"
|
|
|
|
numNodes="$5"
|
2018-09-04 09:21:03 -07:00
|
|
|
RUST_LOG="$6"
|
2018-12-09 17:28:18 -08:00
|
|
|
skipSetup="$7"
|
2018-12-05 16:40:08 -08:00
|
|
|
set +x
|
2018-11-15 22:27:16 -08:00
|
|
|
export RUST_LOG=${RUST_LOG:-solana=warn} # if RUST_LOG is unset, default to warn
|
2018-09-04 09:21:03 -07:00
|
|
|
|
2018-09-07 08:46:20 -07:00
|
|
|
missing() {
|
|
|
|
echo "Error: $1 not specified"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
[[ -n $deployMethod ]] || missing deployMethod
|
|
|
|
[[ -n $nodeType ]] || missing nodeType
|
|
|
|
[[ -n $publicNetwork ]] || missing publicNetwork
|
|
|
|
[[ -n $entrypointIp ]] || missing entrypointIp
|
|
|
|
[[ -n $numNodes ]] || missing numNodes
|
2018-12-09 17:28:18 -08:00
|
|
|
[[ -n $skipSetup ]] || missing skipSetup
|
2018-09-04 22:21:58 -07:00
|
|
|
|
2018-09-04 09:21:03 -07:00
|
|
|
cat > deployConfig <<EOF
|
|
|
|
deployMethod="$deployMethod"
|
2018-09-04 22:21:58 -07:00
|
|
|
entrypointIp="$entrypointIp"
|
2018-09-04 09:21:03 -07:00
|
|
|
numNodes="$numNodes"
|
|
|
|
EOF
|
2018-09-03 18:15:55 -10:00
|
|
|
|
|
|
|
source net/common.sh
|
|
|
|
loadConfigFile
|
|
|
|
|
2018-09-04 22:21:58 -07:00
|
|
|
if [[ $publicNetwork = true ]]; then
|
|
|
|
setupArgs="-p"
|
|
|
|
else
|
|
|
|
setupArgs="-l"
|
|
|
|
fi
|
|
|
|
|
2018-09-03 18:15:55 -10:00
|
|
|
case $deployMethod in
|
|
|
|
snap)
|
|
|
|
SECONDS=0
|
2018-12-09 17:28:18 -08:00
|
|
|
|
|
|
|
if [[ $skipSetup = true ]]; then
|
|
|
|
for configDir in /var/snap/solana/current/config{,-local}; do
|
|
|
|
if [[ ! -d $configDir ]]; then
|
|
|
|
echo Error: not a directory: $configDir
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
(
|
|
|
|
set -x
|
|
|
|
sudo rm -rf /saved-node-config
|
|
|
|
sudo mkdir /saved-node-config
|
|
|
|
sudo mv /var/snap/solana/current/config{,-local} /saved-node-config
|
|
|
|
)
|
|
|
|
fi
|
|
|
|
|
2018-12-07 15:59:25 -08:00
|
|
|
[[ $nodeType = bootstrap-leader ]] ||
|
2018-09-08 11:10:26 -07:00
|
|
|
net/scripts/rsync-retry.sh -vPrc "$entrypointIp:~/solana/solana.snap" .
|
2018-12-09 17:28:18 -08:00
|
|
|
if snap list solana; then
|
|
|
|
sudo snap remove solana
|
|
|
|
fi
|
2018-09-03 18:15:55 -10:00
|
|
|
sudo snap install solana.snap --devmode --dangerous
|
|
|
|
|
2018-12-09 17:28:18 -08:00
|
|
|
if [[ $skipSetup = true ]]; then
|
|
|
|
(
|
|
|
|
set -x
|
|
|
|
sudo rm -rf /var/snap/solana/current/config{,-local}
|
|
|
|
sudo mv /saved-node-config/* /var/snap/solana/current/
|
|
|
|
sudo rm -rf /saved-node-config
|
|
|
|
)
|
|
|
|
fi
|
|
|
|
|
2018-10-13 13:35:54 -07:00
|
|
|
# shellcheck disable=SC2089
|
2018-09-03 18:15:55 -10:00
|
|
|
commonNodeConfig="\
|
2018-12-05 17:03:49 -08:00
|
|
|
entrypoint-ip=\"$entrypointIp\" \
|
2018-10-13 13:35:54 -07:00
|
|
|
metrics-config=\"$SOLANA_METRICS_CONFIG\" \
|
|
|
|
rust-log=\"$RUST_LOG\" \
|
|
|
|
setup-args=\"$setupArgs\" \
|
2018-12-09 17:28:18 -08:00
|
|
|
skip-setup=$skipSetup \
|
2018-09-03 18:15:55 -10:00
|
|
|
"
|
2018-09-04 09:21:03 -07:00
|
|
|
|
|
|
|
if [[ -e /dev/nvidia0 ]]; then
|
2018-11-12 19:47:38 -08:00
|
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
|
|
echo
|
|
|
|
echo "WARNING: GPU detected by snap builds to not support CUDA."
|
|
|
|
echo " Consider using instances with a GPU to reduce cost."
|
|
|
|
echo
|
|
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
2018-09-04 09:21:03 -07:00
|
|
|
fi
|
|
|
|
|
2018-12-07 15:59:25 -08:00
|
|
|
if [[ $nodeType = bootstrap-leader ]]; then
|
2018-12-06 13:38:45 -08:00
|
|
|
nodeConfig="mode=bootstrap-leader+drone $commonNodeConfig"
|
|
|
|
ln -sf -T /var/snap/solana/current/bootstrap-leader/current fullnode.log
|
2018-09-05 08:51:40 -07:00
|
|
|
ln -sf -T /var/snap/solana/current/drone/current drone.log
|
2018-09-03 18:15:55 -10:00
|
|
|
else
|
2018-12-06 08:04:01 -08:00
|
|
|
nodeConfig="mode=fullnode $commonNodeConfig"
|
2018-12-06 13:38:45 -08:00
|
|
|
ln -sf -T /var/snap/solana/current/fullnode/current fullnode.log
|
2018-09-03 18:15:55 -10:00
|
|
|
fi
|
|
|
|
|
|
|
|
logmarker="solana deploy $(date)/$RANDOM"
|
|
|
|
logger "$logmarker"
|
|
|
|
|
2018-10-15 16:49:22 -07:00
|
|
|
# shellcheck disable=SC2086,SC2090 # Don't want to double quote "$nodeConfig"
|
|
|
|
sudo snap set solana $nodeConfig
|
2018-09-03 18:15:55 -10:00
|
|
|
snap info solana
|
|
|
|
sudo snap get solana
|
|
|
|
echo Slight delay to get more syslog output
|
|
|
|
sleep 2
|
|
|
|
sudo grep -Pzo "$logmarker(.|\\n)*" /var/log/syslog
|
|
|
|
|
|
|
|
echo "Succeeded in ${SECONDS} seconds"
|
|
|
|
;;
|
2018-10-30 18:05:38 -07:00
|
|
|
local|tar)
|
2018-09-03 18:15:55 -10:00
|
|
|
PATH="$HOME"/.cargo/bin:"$PATH"
|
|
|
|
export USE_INSTALL=1
|
2018-09-04 09:21:03 -07:00
|
|
|
export RUST_LOG
|
2018-09-03 18:15:55 -10:00
|
|
|
|
2018-12-09 17:28:18 -08:00
|
|
|
# Setup `/var/snap/solana/current` symlink so rsyncing the genesis
|
2018-12-07 12:33:58 -08:00
|
|
|
# ledger works (reference: `net/scripts/install-rsync.sh`)
|
2018-12-09 17:28:18 -08:00
|
|
|
sudo rm -rf /var/snap/solana/current
|
|
|
|
sudo mkdir -p /var/snap/solana
|
|
|
|
sudo ln -sT /home/solana/solana /var/snap/solana/current
|
2018-12-07 12:33:58 -08:00
|
|
|
|
2018-09-03 18:15:55 -10:00
|
|
|
./fetch-perf-libs.sh
|
2018-11-12 17:50:16 -08:00
|
|
|
# shellcheck source=/dev/null
|
|
|
|
source ./target/perf-libs/env.sh
|
2018-09-04 23:15:39 -07:00
|
|
|
|
2018-09-04 09:21:03 -07:00
|
|
|
scripts/oom-monitor.sh > oom-monitor.log 2>&1 &
|
2018-09-10 15:52:08 -07:00
|
|
|
scripts/net-stats.sh > net-stats.log 2>&1 &
|
2018-09-03 18:15:55 -10:00
|
|
|
|
|
|
|
case $nodeType in
|
2018-12-07 15:59:25 -08:00
|
|
|
bootstrap-leader)
|
2018-11-07 10:56:40 -08:00
|
|
|
if [[ -e /dev/nvidia0 && -x ~/.cargo/bin/solana-fullnode-cuda ]]; then
|
|
|
|
echo Selecting solana-fullnode-cuda
|
|
|
|
export SOLANA_CUDA=1
|
|
|
|
fi
|
2018-12-09 17:28:18 -08:00
|
|
|
if [[ $skipSetup != true ]]; then
|
|
|
|
./multinode-demo/setup.sh -t bootstrap-leader $setupArgs
|
|
|
|
fi
|
2018-09-03 18:15:55 -10:00
|
|
|
./multinode-demo/drone.sh > drone.log 2>&1 &
|
2018-12-06 13:38:45 -08:00
|
|
|
./multinode-demo/bootstrap-leader.sh > bootstrap-leader.log 2>&1 &
|
|
|
|
ln -sTf bootstrap-leader.log fullnode.log
|
2018-09-03 18:15:55 -10:00
|
|
|
;;
|
2018-12-05 16:40:08 -08:00
|
|
|
fullnode)
|
|
|
|
net/scripts/rsync-retry.sh -vPrc "$entrypointIp":~/.cargo/bin/ ~/.cargo/bin/
|
2018-09-03 18:15:55 -10:00
|
|
|
|
2018-11-07 10:56:40 -08:00
|
|
|
if [[ -e /dev/nvidia0 && -x ~/.cargo/bin/solana-fullnode-cuda ]]; then
|
|
|
|
echo Selecting solana-fullnode-cuda
|
|
|
|
export SOLANA_CUDA=1
|
|
|
|
fi
|
|
|
|
|
2018-12-09 17:28:18 -08:00
|
|
|
if [[ $skipSetup != true ]]; then
|
|
|
|
./multinode-demo/setup.sh -t fullnode $setupArgs
|
|
|
|
fi
|
2018-12-06 13:38:45 -08:00
|
|
|
./multinode-demo/fullnode.sh "$entrypointIp":~/solana "$entrypointIp:8001" > fullnode.log 2>&1 &
|
2018-09-03 18:15:55 -10:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Error: unknown node type: $nodeType"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unknown deployment method: $deployMethod"
|
|
|
|
exit 1
|
|
|
|
esac
|