github.com/braveheart12/insolar-09-08-19@v0.8.7/scripts/insolard/launchnet.sh (about) 1 #!/usr/bin/env bash 2 set -e 3 4 BIN_DIR=bin 5 TEST_DATA=testdata 6 INSOLARD=$BIN_DIR/insolard 7 INSGORUND=$BIN_DIR/insgorund 8 PULSARD=$BIN_DIR/pulsard 9 PULSEWATCHER=$BIN_DIR/pulsewatcher 10 CONTRACT_STORAGE=contractstorage 11 LEDGER_DIR=data 12 CONFIGS_DIR=configs 13 BASE_DIR=scripts/insolard 14 KEYS_FILE=$BASE_DIR/$CONFIGS_DIR/bootstrap_keys.json 15 ROOT_MEMBER_KEYS_FILE=$BASE_DIR/$CONFIGS_DIR/root_member_keys.json 16 DISCOVERY_NODES_DATA=$BASE_DIR/discoverynodes/ 17 NODES_DATA=$BASE_DIR/nodes/ 18 INSGORUND_DATA=$BASE_DIR/insgorund/ 19 GENESIS_CONFIG=$BASE_DIR/genesis.yaml 20 GENERATED_CONFIGS_DIR=$BASE_DIR/$CONFIGS_DIR/generated_configs 21 GENERATED_DISCOVERY_CONFIGS_DIR=$GENERATED_CONFIGS_DIR/discoverynodes 22 INSGORUND_PORT_FILE=$BASE_DIR/$CONFIGS_DIR/insgorund_ports.txt 23 PULSEWATCHER_CONFIG=$GENERATED_CONFIGS_DIR/utils/pulsewatcher.yaml 24 25 insolar_log_level=${INSOLAR_LOG_LEVEL:-"Debug"} 26 gorund_log_level=$insolar_log_level 27 28 NUM_DISCOVERY_NODES=$(sed '/^nodes:/ q' $GENESIS_CONFIG | grep "host:" | grep -v "#" | wc -l) 29 30 for i in `seq 1 $NUM_DISCOVERY_NODES` 31 do 32 DISCOVERY_NODES+=($DISCOVERY_NODES_DATA/$i) 33 done 34 35 DISCOVERY_NODES_KEYS_DIR=$TEST_DATA/scripts/discovery_nodes 36 37 NUM_NODES=$(sed -n '/^nodes:/,$p' $GENESIS_CONFIG | grep "host:" | grep -v "#" | wc -l) 38 39 if [[ "$NUM_NODES" -ne "0" ]] 40 then 41 for i in `seq 1 $NUM_NODES` 42 do 43 NODES+=($NODES_DATA/$i) 44 done 45 fi 46 47 kill_port() 48 { 49 port=$1 50 pids=$(lsof -i :$port | grep "LISTEN\|UDP" | awk '{print $2}') 51 for pid in $pids 52 do 53 echo "killing pid $pid" 54 kill -9 $pid 55 done 56 } 57 58 stop_listening() 59 { 60 echo "stop_listening() starts ..." 61 stop_insgorund=$1 62 ports="$ports 58090" # Pulsar 63 ports="$ports 53837" # Genesis 64 if [[ "$stop_insgorund" == "true" ]] 65 then 66 gorund_ports= 67 while read -r line; do 68 69 listen_port=$( echo "$line" | awk '{print $1}' ) 70 rpc_port=$( echo "$line" | awk '{print $2}' ) 71 72 gorund_ports="$gorund_ports $listen_port $rpc_port" 73 74 done < "$INSGORUND_PORT_FILE" 75 76 gorund_ports="$gorund_ports $(echo $(pgrep insgorund ))" 77 78 ports="$ports $gorund_ports" 79 80 fi 81 82 transport_ports=$( grep "host:" $GENESIS_CONFIG | grep -o ":\d\+" | grep -o "\d\+" | tr '\n' ' ' ) 83 ports="$ports $transport_ports" 84 85 echo "Stop listening..." 86 87 for port in $ports 88 do 89 echo "port: $port" 90 kill_port $port 91 done 92 echo "stop_listening() end." 93 } 94 95 clear_dirs() 96 { 97 echo "clear_dirs() starts ..." 98 rm -rfv $CONTRACT_STORAGE/* 99 rm -rfv $LEDGER_DIR/* 100 rm -rfv $DISCOVERY_NODES_DATA/* 101 rm -rfv $GENERATED_CONFIGS_DIR/* 102 rm -rfv $INSGORUND_DATA/* 103 rm -rfv $NODES_DATA/* 104 echo "clear_dirs() end." 105 } 106 107 create_required_dirs() 108 { 109 echo "create_required_dirs() starts ..." 110 mkdir -vp $CONTRACT_STORAGE 111 mkdir -vp $LEDGER_DIR 112 mkdir -vp $DISCOVERY_NODES_DATA/certs 113 mkdir -vp $GENERATED_CONFIGS_DIR 114 mkdir -vp $INSGORUND_DATA 115 touch $INSGORUND_PORT_FILE 116 117 for node in "${DISCOVERY_NODES[@]}" 118 do 119 mkdir -vp $node/data 120 done 121 122 mkdir -p scripts/insolard/$CONFIGS_DIR 123 124 echo "create_required_dirs() end." 125 } 126 127 generate_insolard_configs() 128 { 129 go run scripts/generate_insolar_configs.go -o $GENERATED_CONFIGS_DIR -p $INSGORUND_PORT_FILE -g $GENESIS_CONFIG -t $BASE_DIR/pulsar_template.yaml 130 } 131 132 prepare() 133 { 134 echo "prepare() starts ..." 135 stop_listening $run_insgorund 136 clear_dirs 137 create_required_dirs 138 echo "prepare() end." 139 } 140 141 build_binaries() 142 { 143 make build 144 } 145 146 rebuild_binaries() 147 { 148 make clean 149 build_binaries 150 } 151 152 generate_bootstrap_keys() 153 { 154 echo "generate_bootstrap_keys() starts ..." 155 bin/insolar -c gen_keys > $KEYS_FILE 156 echo "generate_bootstrap_keys() end." 157 } 158 159 generate_root_member_keys() 160 { 161 echo "generate_root_member_keys() starts ..." 162 bin/insolar -c gen_keys > $ROOT_MEMBER_KEYS_FILE 163 echo "generate_root_member_keys() end." 164 } 165 166 check_working_dir() 167 { 168 echo "check_working_dir() starts ..." 169 if ! pwd | grep -q "src/github.com/insolar/insolar$" 170 then 171 echo "Run me from insolar root" 172 exit 1 173 fi 174 echo "check_working_dir() end." 175 } 176 177 usage() 178 { 179 echo "usage: $0 [options]" 180 echo "possible options: " 181 echo -e "\t-h - show help" 182 echo -e "\t-n - don't run insgorund" 183 echo -e "\t-g - preventively generate initial ledger" 184 echo -e "\t-l - clear all and exit" 185 echo -e "\t-C - generate configs only" 186 } 187 188 process_input_params() 189 { 190 OPTIND=1 191 while getopts "h?nglwC" opt; do 192 case "$opt" in 193 h|\?) 194 usage 195 exit 0 196 ;; 197 n) 198 run_insgorund=false 199 ;; 200 g) 201 genesis 202 ;; 203 l) 204 prepare 205 exit 0 206 ;; 207 w) 208 watch_pulse=false 209 ;; 210 C) 211 generate_insolard_configs 212 exit $? 213 esac 214 done 215 } 216 217 launch_insgorund() 218 { 219 host=127.0.0.1 220 metrics_port=28223 221 while read -r line; do 222 223 metrics_port=$((metrics_port + 20)) 224 listen_port=$( echo "$line" | awk '{print $1}' ) 225 rpc_port=$( echo "$line" | awk '{print $2}' ) 226 227 $INSGORUND -l $host:$listen_port --rpc $host:$rpc_port --log-level=$gorund_log_level --metrics :$metrics_port &> $INSGORUND_DATA/$rpc_port.log & 228 229 done < "$INSGORUND_PORT_FILE" 230 } 231 232 copy_data() 233 { 234 echo "copy_data() starts ..." 235 for node in "${DISCOVERY_NODES[@]}" 236 do 237 cp -v $LEDGER_DIR/* $node/data 238 done 239 echo "copy_data() end." 240 } 241 242 copy_discovery_certs() 243 { 244 echo "copy_certs() starts ..." 245 i=0 246 for node in "${DISCOVERY_NODES[@]}" 247 do 248 i=$((i + 1)) 249 cp -v $DISCOVERY_NODES_DATA/certs/discovery_cert_$i.json $node/cert.json 250 done 251 echo "copy_certs() end." 252 } 253 254 wait_for_complete_network_state() 255 { 256 while true 257 do 258 num=`scripts/insolard/check_status.sh 2>/dev/null | grep "NodeReady" | wc -l` 259 echo "$num/$NUM_DISCOVERY_NODES discovery nodes ready" 260 if [[ "$num" -eq "$NUM_DISCOVERY_NODES" ]] 261 then 262 break 263 fi 264 sleep 5s 265 done 266 } 267 268 genesis() 269 { 270 prepare 271 build_binaries 272 generate_bootstrap_keys 273 generate_root_member_keys 274 generate_insolard_configs 275 276 printf "start genesis ... \n" 277 $INSOLARD --config $BASE_DIR/insolar.yaml --genesis $GENESIS_CONFIG --keyout $DISCOVERY_NODES_DATA/certs &> $DISCOVERY_NODES_DATA/genesis_output.log 278 printf "genesis is done\n" 279 280 copy_data 281 copy_discovery_certs 282 283 if which jq ; then 284 NL=$BASE_DIR/loglinks 285 mkdir $NL || \ 286 rm -f $NL/*.log 287 for node in "${DISCOVERY_NODES[@]}" ; do 288 ref=`jq -r '.reference' $node/cert.json` 289 [[ $ref =~ .+\. ]] 290 ln -s `pwd`/$node/output.log $NL/${BASH_REMATCH[0]}log 291 done 292 else 293 echo "no jq =(" 294 fi 295 } 296 297 run_insgorund=true 298 watch_pulse=true 299 check_working_dir 300 process_input_params $@ 301 302 trap 'stop_listening true' INT TERM EXIT 303 304 printf "start pulsar ... \n" 305 ARTIFACTS_DIR=${ARTIFACTS_DIR:-".artifacts"} 306 PULSAR_DATA_DIR=$ARTIFACTS_DIR/pulsar_data 307 mkdir -p $PULSAR_DATA_DIR 308 $PULSARD -c $GENERATED_CONFIGS_DIR/pulsar.yaml --trace &> $DISCOVERY_NODES_DATA/pulsar_output.log & 309 310 if [[ "$run_insgorund" == "true" ]] 311 then 312 printf "start insgorund ... \n" 313 launch_insgorund 314 else 315 echo "INSGORUND IS NOT LAUNCHED" 316 fi 317 318 printf "start discovery nodes ... \n" 319 320 i=0 321 for node in "${DISCOVERY_NODES[@]}" 322 do 323 i=$((i + 1)) 324 INSOLAR_LOG_LEVEL=$insolar_log_level $INSOLARD --config $GENERATED_DISCOVERY_CONFIGS_DIR/insolar_$i.yaml --trace &> $node/output.log & 325 echo "DISCOVERY NODE $i STARTED in background" 326 done 327 328 printf "discovery nodes started ... \n" 329 330 if [[ "$NUM_NODES" -ne "0" ]] 331 then 332 wait_for_complete_network_state 333 scripts/insolard/start_nodes.sh 334 fi 335 336 if [[ "$watch_pulse" == "true" ]] 337 then 338 echo "Starting pulse watcher..." 339 $PULSEWATCHER -c $PULSEWATCHER_CONFIG 340 else 341 echo "Waiting..." 342 wait 343 fi 344 345 echo "FINISHING ..."