@@ -21,9 +21,12 @@ export PATH="$PATH:/usr/bin"
21
21
SCRIPT_PATH=" $( readlink -f " $0 " ) "
22
22
BASEDIR=" $( dirname " $SCRIPT_PATH " ) "
23
23
24
- # TODO DOC dcld.service and other files in the current directory
25
24
# TODO errors to stderr
26
- # TODO optionally fetch dcld, dclcli and dcld.service from GitHub release
25
+ #
26
+ # TODO
27
+ # - check wherther ip6 and domain names in persistent-peers work
28
+ # - do not show private data
29
+ # - requries 'dclcli keys' adjustment, pipes configuration is not an option
27
30
28
31
SERVICE_FILE=" ./dcld.service"
29
32
PERSISTENT_PEERS_FILE=' ./persistent_peers.txt'
@@ -44,13 +47,6 @@ DEF_NODE_TYPE="validator"
44
47
DEF_CHAIN_ID=" testnet"
45
48
DEF_NODE_USER=" ubuntu"
46
49
47
- # NODE_TYPE="${1:-validator}"
48
- # NODE_NAME="$2"
49
- # KEY_NAME="${3:-${NODE_NAME}admin}"
50
- # CHAIN_ID="${4:-testnet}"
51
- # NODE_USER="${5:-ubuntu}"
52
- # PEER="${5:-}"
53
-
54
50
verbosity=0
55
51
NODE_NAME=
56
52
KEY_NAME=
@@ -70,7 +66,7 @@ Initializes DCL node of a given type.
70
66
Options:
71
67
-c, --chain-id chain id, default: '$DEF_CHAIN_ID '
72
68
-h, --help print this help and exit
73
- -k, --key-name account key-name, default: '<node-name>admin'
69
+ -k, --key-name account key-name, default: '<node-name>- admin'
74
70
-u, --user node service user, default: '$DEF_NODE_USER '
75
71
-t, --type node type, one of 'genesis', 'validator', 'observer', default: '$DEF_NODE_TYPE '
76
72
"
@@ -97,7 +93,6 @@ function parse_args {
97
93
# exit 2
98
94
# fi
99
95
100
- # TODO why eval here
101
96
eval set -- " $_getopt_res "
102
97
103
98
while true ; do
@@ -153,7 +148,7 @@ function parse_args {
153
148
NODE_NAME=" $1 "
154
149
155
150
if [[ -z " $KEY_NAME " ]]; then
156
- KEY_NAME=" ${NODE_NAME} admin"
151
+ KEY_NAME=" ${NODE_NAME} - admin"
157
152
fi
158
153
159
154
if [[ " $NODE_TYPE " == " genesis" ]]; then
@@ -250,28 +245,27 @@ function config_node {
250
245
251
246
sed -i -r ' s~^laddr = "tcp://127.0.0.1:~laddr = "tcp://0.0.0.0:~' " $CONFIG_FILE "
252
247
253
- # FIXME verify
254
248
if [[ -n " $_peers " ]]; then
255
249
sed -i -r " s~^persistent_peers = .*~persistent_peers = \" $_peers \" ~" " $CONFIG_FILE "
256
250
fi
257
251
258
252
if [[ -z " $_debug " ]]; then
259
253
# config the service
260
- # Ubuntu only
261
- grep -q -i -e ' ubuntu' /etc/* -release && {
254
+ test -d " /etc/systemd/system" && {
262
255
if [[ ! -f " $_dcld_service_p " ]]; then
263
256
echo " Error. '$_dcld_service_p ' file not found"
264
257
exit 1
265
258
fi
266
259
267
260
# TODO move ot a separate script
268
261
# Open '26656' (p2p) and '26657' (RPC) ports.
269
- sudo ufw allow 26656/tcp
270
- sudo ufw allow 26657/tcp
262
+ # sudo ufw allow 26656/tcp
263
+ # sudo ufw allow 26657/tcp
264
+
271
265
# set systemd dcld.service
272
266
sed -i -r " s~^User=ubuntu$~User=${NODE_USER} ~" " $_dcld_service_p "
273
267
sudo cp -f " $_dcld_service_p " /etc/systemd/system/dcld.service
274
- } || { echo " Warning : Not an Ubuntu system. Skipping systemd service configuration" ; }
268
+ } || { echo " WARNING : Not a systemd system. Skipping systemd service configuration" ; }
275
269
fi
276
270
}
277
271
@@ -283,13 +277,12 @@ function run_node {
283
277
local _debug=" ${DEBUG:- } "
284
278
285
279
if [[ -z " $_debug " ]]; then
286
- # Ubuntu only
287
- grep -q -i -e ' ubuntu' /etc/* -release && {
280
+ test -d " /etc/systemd/system" && {
288
281
# Enable the service
289
282
sudo systemctl enable dcld
290
283
# Start node
291
284
sudo systemctl start dcld
292
- } || { echo " Warning : Not an Ubuntu system. Skipping service start..." ; return 0; }
285
+ } || { echo " WARNING : Not a systemd system. Skipping service start..." ; return 0; }
293
286
294
287
echo " Node has been stared as a service."
295
288
@@ -302,6 +295,25 @@ function run_node {
302
295
}
303
296
304
297
298
+ function wait_node_up {
299
+ local _timeout=" ${1:- 5} "
300
+ local _try=1
301
+
302
+ echo -e " Waiting the node becomes up"
303
+ until dclcli status > /dev/null 2>&1
304
+ do
305
+ if [[ " $_try " -gt " $_timeout " ]]; then
306
+ echo -e " \nERROR: dcld node seems not ready after $_timeout seconds."
307
+ return 1
308
+ fi
309
+ echo -n " ."
310
+ _try=$(( $_try + 1 ))
311
+ sleep 1
312
+ done
313
+ echo -e " \n\tNode is responding"
314
+ }
315
+
316
+
305
317
function verify_node {
306
318
set -eu
307
319
set -o pipefail
@@ -401,7 +413,6 @@ node_init "$NODE_NAME" "$CHAIN_ID"
401
413
if [[ " $NODE_TYPE " == " genesis" ]]; then
402
414
echo " Building genesis file"
403
415
build_genesis " $KEY_NAME " " $ACC_ADDR " " $ACC_PUBKEY "
404
- # TODO copy to the current directory
405
416
else
406
417
echo " Locating the genesis file at $GENESIS_FILE "
407
418
cp -f " $GENESIS_IN_FILE " " $GENESIS_FILE "
@@ -415,35 +426,41 @@ echo -e "\nOptionally, edit '$CONFIG_FILE' in order to set different setting (li
415
426
echo " Running the node"
416
427
run_node
417
428
418
- if [[ " $NODE_TYPE " == " validator" ]]; then
419
- VAL_ADDR=" $( dcld tendermint show-address) "
420
- VAL_PUBKEY=" $( dcld tendermint show-validator) "
429
+ VAL_ID=" unknown"
430
+ wait_node_up && VAL_ID=" $( dclcli status | grep ' "id"' | awk -F' "' ' {print $4}' ) "
431
+
432
+ VAL_ADDR=" $( dcld tendermint show-address) "
433
+ VAL_PUBKEY=" $( dcld tendermint show-validator) "
421
434
435
+ echo " Done"
422
436
423
- echo " Done "
437
+ echo -e " \n====================================\n "
424
438
425
- echo -e " \n====================================\n"
439
+ echo " Generated data:"
440
+ echo -e " \n\tAccount data:"
441
+ echo -e " \t\tkey name: '$KEY_NAME '"
442
+ echo -e " \t\taddress: '$ACC_ADDR '"
443
+ echo -e " \t\tpublic key: '$ACC_PUBKEY '"
444
+ echo -e " \n\tValidator node data:"
445
+ echo -e " \t\tname: '$NODE_NAME '"
446
+ echo -e " \t\taddress: '$VAL_ADDR '"
447
+ echo -e " \t\tpublic key: '$VAL_PUBKEY '"
448
+ echo -e " \t\tID: '$VAL_ID '"
426
449
427
- echo " Generated data:"
428
- echo -e " \tAccount data:"
429
- echo -e " \t\taddress: '$ACC_ADDR '"
430
- echo -e " \t\tpublic key: '$ACC_PUBKEY '"
431
- echo -e " \tValidator node data:"
432
- echo -e " \t\taddress: '$VAL_ADDR '"
433
- echo -e " \t\tpublic key: '$VAL_PUBKEY '"
450
+ if [[ " $NODE_TYPE " == " genesis" ]]; then
451
+ echo -e " \n\tGenesis file: '$GENESIS_FILE '"
434
452
453
+ elif [[ " $NODE_TYPE " == " validator" ]]; then
435
454
echo -e " \nNext steps:"
436
455
echo -e " \t1. Share generated account addres and pubkey to any 'Trustee' to create an account with 'NodeAdmin' role."
437
456
echo -e " \t(e.g. dclcli tx auth propose-add-account --address=$ACC_ADDR --pubkey=$ACC_PUBKEY --roles=NodeAdmin --from=<signer>)"
438
- echo -e " \n\t2 Once the account is approved, please run the following command to make the node a validator:"
457
+ echo -e " \n\t2. Once the account is approved, please run the following command to make the node a validator:"
439
458
echo -e " \t\t'dclcli tx validator add-node --validator-address=$VAL_ADDR --validator-pubkey=$VAL_PUBKEY --name=$NODE_NAME --from=$KEY_NAME '"
440
-
459
+ echo -e " \n\t3. Explore the node external IP and provide it along with validator ID '$VAL_ID '"
460
+ echo -e " \t\t to DCLedger '$CHAIN_ID ' network validator administrators"
441
461
442
462
fi
443
463
444
- echo " Done"
445
-
446
-
447
464
# useful commands
448
465
# - keys:
449
466
# dclcli keys show <name>: to get address and oubkey for a ketname
0 commit comments