github.com/noirx94/tendermintmp@v0.0.1/networks/remote/integration.sh (about) 1 #!/usr/bin/env bash 2 3 # XXX: this script is intended to be run from a fresh Digital Ocean droplet 4 5 # NOTE: you must set this manually now 6 echo "export DO_API_TOKEN=\"yourtoken\"" >> ~/.profile 7 8 sudo apt-get update -y 9 sudo apt-get upgrade -y 10 sudo apt-get install -y jq unzip python-pip software-properties-common make 11 12 # get and unpack golang 13 curl -O https://dl.google.com/go/go1.15.4.linux-amd64.tar.gz 14 tar -xvf go1.15.4.linux-amd64.tar.gz 15 16 ## move binary and add to path 17 mv go /usr/local 18 echo "export PATH=\$PATH:/usr/local/go/bin" >> ~/.profile 19 20 ## create the goApps directory, set GOPATH, and put it on PATH 21 mkdir goApps 22 echo "export GOPATH=/root/goApps" >> ~/.profile 23 echo "export PATH=\$PATH:\$GOPATH/bin" >> ~/.profile 24 # **turn on the go module, default is auto. The value is off, if tendermint source code 25 #is downloaded under $GOPATH/src directory 26 echo "export GO111MODULE=on" >> ~/.profile 27 28 source ~/.profile 29 30 mkdir -p $GOPATH/src/github.com/tendermint 31 cd $GOPATH/src/github.com/tendermint 32 # ** use git clone instead of go get. 33 # once go module is on, go get will download source code to 34 # specific version directory under $GOPATH/pkg/mod the make 35 # script will not work 36 git clone https://github.com/tendermint/tendermint.git 37 cd tendermint 38 ## build 39 make tools 40 make build 41 #** need to install the package, otherwise terdermint testnet will not execute 42 make install 43 44 # generate an ssh key 45 ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N '' 46 echo "export SSH_KEY_FILE=\"\$HOME/.ssh/id_rsa.pub\"" >> ~/.profile 47 source ~/.profile 48 49 # install terraform 50 wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip 51 unzip terraform_0.11.7_linux_amd64.zip -d /usr/bin/ 52 53 # install ansible 54 sudo apt-get update -y 55 sudo apt-add-repository ppa:ansible/ansible -y 56 sudo apt-get update -y 57 sudo apt-get install ansible -y 58 59 # required by ansible 60 pip install dopy 61 62 # the next two commands are directory sensitive 63 cd $GOPATH/src/github.com/tendermint/tendermint/networks/remote/terraform 64 65 terraform init 66 terraform apply -var DO_API_TOKEN="$DO_API_TOKEN" -var SSH_KEY_FILE="$SSH_KEY_FILE" -auto-approve 67 68 # let the droplets boot 69 sleep 60 70 71 # get the IPs 72 ip0=`terraform output -json public_ips | jq '.value[0]'` 73 ip1=`terraform output -json public_ips | jq '.value[1]'` 74 ip2=`terraform output -json public_ips | jq '.value[2]'` 75 ip3=`terraform output -json public_ips | jq '.value[3]'` 76 77 # to remove quotes 78 strip() { 79 opt=$1 80 temp="${opt%\"}" 81 temp="${temp#\"}" 82 echo $temp 83 } 84 85 ip0=$(strip $ip0) 86 ip1=$(strip $ip1) 87 ip2=$(strip $ip2) 88 ip3=$(strip $ip3) 89 90 # all the ansible commands are also directory specific 91 cd $GOPATH/src/github.com/tendermint/tendermint/networks/remote/ansible 92 93 # create config dirs 94 tendermint testnet 95 96 ansible-playbook -i inventory/digital_ocean.py -l sentrynet install.yml 97 ansible-playbook -i inventory/digital_ocean.py -l sentrynet config.yml -e BINARY=$GOPATH/src/github.com/tendermint/tendermint/build/tendermint -e CONFIGDIR=$GOPATH/src/github.com/tendermint/tendermint/networks/remote/ansible/mytestnet 98 99 sleep 10 100 101 # get each nodes ID then populate the ansible file 102 id0=`curl $ip0:26657/status | jq .result.node_info.id` 103 id1=`curl $ip1:26657/status | jq .result.node_info.id` 104 id2=`curl $ip2:26657/status | jq .result.node_info.id` 105 id3=`curl $ip3:26657/status | jq .result.node_info.id` 106 107 id0=$(strip $id0) 108 id1=$(strip $id1) 109 id2=$(strip $id2) 110 id3=$(strip $id3) 111 112 # remove file we'll re-write to with new info 113 old_ansible_file=$GOPATH/src/github.com/tendermint/tendermint/networks/remote/ansible/roles/install/templates/systemd.service.j2 114 rm $old_ansible_file 115 116 # need to populate the `--p2p.persistent_peers` flag 117 echo "[Unit] 118 Description={{service}} 119 Requires=network-online.target 120 After=network-online.target 121 122 [Service] 123 Restart=on-failure 124 User={{service}} 125 Group={{service}} 126 PermissionsStartOnly=true 127 ExecStart=/usr/bin/tendermint node --proxy_app=kvstore --p2p.persistent_peers=$id0@$ip0:26656,$id1@$ip1:26656,$id2@$ip2:26656,$id3@$ip3:26656 128 ExecReload=/bin/kill -HUP \$MAINPID 129 KillSignal=SIGTERM 130 131 [Install] 132 WantedBy=multi-user.target 133 " >> $old_ansible_file 134 135 # now, we can re-run the install command 136 ansible-playbook -i inventory/digital_ocean.py -l sentrynet install.yml 137 138 # and finally restart it all 139 ansible-playbook -i inventory/digital_ocean.py -l sentrynet restart.yml 140 141 echo "congratulations, your testnet is now running :)"