| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2019-05-03 11:01:35 -07:00
										 |  |  | entrypointIp="$3" | 
					
						
							|  |  |  | numNodes="$4" | 
					
						
							|  |  |  | RUST_LOG="$5" | 
					
						
							|  |  |  | skipSetup="$6" | 
					
						
							| 
									
										
										
										
											2019-05-15 15:16:45 -07:00
										 |  |  | failOnValidatorBootupFailure="$7" | 
					
						
							| 
									
										
										
										
											2019-05-18 14:01:36 -07:00
										 |  |  | genesisOptions="$8" | 
					
						
							| 
									
										
										
										
											2018-12-05 16:40:08 -08:00
										 |  |  | set +x | 
					
						
							| 
									
										
										
										
											2019-04-09 10:39:31 -07:00
										 |  |  | export RUST_LOG | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-16 13:03:01 -07:00
										 |  |  | # Use a very large stake (relative to the default multinode-demo/ stake of 43) | 
					
						
							|  |  |  | # for the testnet fullnodes setup by net/.  This make it less likely that | 
					
						
							|  |  |  | # low-staked ephemeral validator a random user may attach to testnet will cause | 
					
						
							|  |  |  | # trouble | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Ref: https://github.com/solana-labs/solana/issues/3798 | 
					
						
							|  |  |  | stake=424243 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 $entrypointIp ]]  || missing entrypointIp | 
					
						
							|  |  |  | [[ -n $numNodes ]]      || missing numNodes | 
					
						
							| 
									
										
										
										
											2018-12-09 17:28:18 -08:00
										 |  |  | [[ -n $skipSetup ]]     || missing skipSetup | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  | [[ -n $failOnValidatorBootupFailure ]] || missing failOnValidatorBootupFailure | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  | failOnValidatorBootupFailure=$failOnValidatorBootupFailure | 
					
						
							| 
									
										
										
										
											2019-05-18 14:01:36 -07:00
										 |  |  | genesisOptions="$genesisOptions" | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | EOF | 
					
						
							| 
									
										
										
										
											2018-09-03 18:15:55 -10:00
										 |  |  | 
 | 
					
						
							|  |  |  | source net/common.sh | 
					
						
							|  |  |  | loadConfigFile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $deployMethod in | 
					
						
							| 
									
										
										
										
											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-12-10 22:59:38 -08:00
										 |  |  |   export SOLANA_METRICS_DISPLAY_HOSTNAME=1 | 
					
						
							| 
									
										
										
										
											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-12-23 22:12:58 -08:00
										 |  |  |   ( | 
					
						
							|  |  |  |     sudo scripts/oom-monitor.sh | 
					
						
							|  |  |  |   ) > oom-monitor.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2019-01-09 11:17:34 -07:00
										 |  |  |   echo $! > oom-monitor.pid | 
					
						
							| 
									
										
										
										
											2018-09-10 15:52:08 -07:00
										 |  |  |   scripts/net-stats.sh  > net-stats.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2019-01-09 11:17:34 -07:00
										 |  |  |   echo $! > net-stats.pid | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2019-01-09 10:50:43 -07:00
										 |  |  |     set -x | 
					
						
							| 
									
										
										
										
											2018-12-09 17:28:18 -08:00
										 |  |  |     if [[ $skipSetup != true ]]; then | 
					
						
							| 
									
										
										
										
											2019-05-18 14:01:36 -07:00
										 |  |  |       args=(--bootstrap-leader-lamports "$stake") | 
					
						
							|  |  |  |       # shellcheck disable=SC2206 # Do not want to quote $genesisOptions | 
					
						
							|  |  |  |       args+=($genesisOptions) | 
					
						
							|  |  |  |       ./multinode-demo/setup.sh "${args[@]}" | 
					
						
							| 
									
										
										
										
											2018-12-09 17:28:18 -08:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2018-09-03 18:15:55 -10:00
										 |  |  |     ./multinode-demo/drone.sh > drone.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2019-02-17 11:43:36 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-03 11:01:35 -07:00
										 |  |  |     args=( | 
					
						
							|  |  |  |       --enable-rpc-exit | 
					
						
							|  |  |  |       --gossip-port "$entrypointIp":8001 | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-03-04 14:27:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-13 10:51:18 -07:00
										 |  |  |     ./multinode-demo/fullnode.sh --bootstrap-leader "${args[@]}" > fullnode.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2018-09-03 18:15:55 -10:00
										 |  |  |     ;; | 
					
						
							| 
									
										
										
										
											2019-02-21 16:35:26 -07:00
										 |  |  |   fullnode|blockstreamer) | 
					
						
							| 
									
										
										
										
											2018-12-05 16:40:08 -08:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-04 08:22:36 -07:00
										 |  |  |     args=( | 
					
						
							|  |  |  |       "$entrypointIp":~/solana "$entrypointIp:8001" | 
					
						
							|  |  |  |       --gossip-port 8001 | 
					
						
							|  |  |  |       --rpc-port 8899 | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-02-21 16:35:26 -07:00
										 |  |  |     if [[ $nodeType = blockstreamer ]]; then | 
					
						
							| 
									
										
										
										
											2019-02-17 12:29:53 -08:00
										 |  |  |       args+=( | 
					
						
							| 
									
										
										
										
											2019-02-21 16:16:09 -07:00
										 |  |  |         --blockstream /tmp/solana-blockstream.sock | 
					
						
							| 
									
										
										
										
											2019-03-13 13:50:30 -07:00
										 |  |  |         --no-voting | 
					
						
							| 
									
										
										
										
											2019-04-16 13:03:01 -07:00
										 |  |  |         --stake 0 | 
					
						
							| 
									
										
										
										
											2019-02-17 12:29:53 -08:00
										 |  |  |       ) | 
					
						
							| 
									
										
										
										
											2019-04-16 13:03:01 -07:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2019-05-15 15:16:45 -07:00
										 |  |  |       args+=(--stake "$stake") | 
					
						
							| 
									
										
										
										
											2019-04-25 09:30:59 -07:00
										 |  |  |       args+=(--enable-rpc-exit) | 
					
						
							| 
									
										
										
										
											2019-02-17 09:48:27 -08:00
										 |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-09 10:50:43 -07:00
										 |  |  |     set -x | 
					
						
							| 
									
										
										
										
											2018-12-09 17:28:18 -08:00
										 |  |  |     if [[ $skipSetup != true ]]; then | 
					
						
							| 
									
										
										
										
											2019-04-17 18:03:58 -07:00
										 |  |  |       ./multinode-demo/clear-fullnode-config.sh | 
					
						
							| 
									
										
										
										
											2018-12-09 17:28:18 -08:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2019-02-17 09:48:27 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-21 16:35:26 -07:00
										 |  |  |     if [[ $nodeType = blockstreamer ]]; then | 
					
						
							| 
									
										
										
										
											2019-05-09 07:27:13 -07:00
										 |  |  |       # Sneak the mint-keypair.json from the bootstrap leader and run another drone | 
					
						
							| 
									
										
										
										
											2019-03-21 21:09:03 -07:00
										 |  |  |       # with it on the blockstreamer node.  Typically the blockstreamer node has | 
					
						
							|  |  |  |       # a static IP/DNS name for hosting the blockexplorer web app, and is | 
					
						
							|  |  |  |       # a location that somebody would expect to be able to airdrop from | 
					
						
							| 
									
										
										
										
											2019-05-09 07:27:13 -07:00
										 |  |  |       scp "$entrypointIp":~/solana/config-local/mint-keypair.json config-local/ | 
					
						
							| 
									
										
										
										
											2019-03-21 21:09:03 -07:00
										 |  |  |       ./multinode-demo/drone.sh > drone.log 2>&1 & | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-28 19:50:02 -07:00
										 |  |  |       export BLOCKEXPLORER_GEOIP_WHITELIST=$PWD/net/config/geoip.yml | 
					
						
							| 
									
										
										
										
											2019-02-18 16:48:32 -08:00
										 |  |  |       npm install @solana/blockexplorer@1 | 
					
						
							| 
									
										
										
										
											2019-02-17 12:29:53 -08:00
										 |  |  |       npx solana-blockexplorer > blockexplorer.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2019-03-13 09:57:35 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # Confirm the blockexplorer is accessible | 
					
						
							|  |  |  |       curl --head --retry 3 --retry-connrefused http://localhost:5000/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Redirect port 80 to port 5000 | 
					
						
							|  |  |  |       sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT | 
					
						
							|  |  |  |       sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT | 
					
						
							|  |  |  |       sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 5000 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Confirm the blockexplorer is now globally accessible | 
					
						
							|  |  |  |       curl --head "$(curl ifconfig.io)" | 
					
						
							| 
									
										
										
										
											2019-02-17 12:29:53 -08:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2019-04-22 14:51:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ./multinode-demo/fullnode.sh "${args[@]}" > fullnode.log 2>&1 & | 
					
						
							| 
									
										
										
										
											2018-09-03 18:15:55 -10:00
										 |  |  |     ;; | 
					
						
							|  |  |  |   *) | 
					
						
							|  |  |  |     echo "Error: unknown node type: $nodeType" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  |     ;; | 
					
						
							|  |  |  |   esac | 
					
						
							| 
									
										
										
										
											2019-01-16 19:18:32 -08:00
										 |  |  |   disown | 
					
						
							| 
									
										
										
										
											2018-09-03 18:15:55 -10:00
										 |  |  |   ;; | 
					
						
							|  |  |  | *) | 
					
						
							|  |  |  |   echo "Unknown deployment method: $deployMethod" | 
					
						
							|  |  |  |   exit 1 | 
					
						
							|  |  |  | esac |