-
Notifications
You must be signed in to change notification settings - Fork 569
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·336 lines (289 loc) · 11.5 KB
/
setup.sh
File metadata and controls
executable file
·336 lines (289 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
#!/bin/bash
BUILD_COMMIT=$1
LC_TAG=$2
VAL_COUNT=$3
NODE_COUNT=$4
LC_COUNT=$5
## Installing prerequisites.
curl https://sh.rustup.rs -sSf | sh -s -- -y
source $HOME/.cargo/env
rustup update nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
## Cloning and Building avail-node and light client bootstrap binaries.
git clone https://github.com/kaustubhkapatral/avail.git ~/avail-node && cd ~/avail-node
git checkout $BUILD_COMMIT
cargo build --release -p avail-node
sudo cp target/release/avail-node /usr/bin
cd $HOME
git clone https://github.com/availproject/avail-light-bootstrap.git ~/light-bootstrap && cd ~/light-bootstrap
cargo build --release
sudo cp target/release/avail-light-bootstrap /usr/bin
cd $HOME
## Downloading light client binary based on system architecture.
export aarch=$(uname -m)
if [ "$aarch" == "x86_64" ]
then
wget https://github.com/availproject/avail-light/releases/download/$LC_TAG/avail-light-linux-amd64.tar.gz
tar -xvf avail-light-linux-amd64.tar.gz
sudo mv avail-light-linux-amd64 /usr/bin/avail-light
rm avail-light-linux-amd64.tar.gz
fi
if [ "$aarch" == "aarch64" ]
then
wget https://github.com/availproject/avail-light/releases/download/$LC_TAG/avail-light-linux-aarch64.tar.gz
tar -xvf avail-light-linux-aarch64.tar.gz
sudo mv avail-light-linux-aarch64 /usr/bin/avail-light
rm avail-light-linux-aarch64.tar.gz
fi
## Generating keys for validators, sudo and tech committee.
mkdir $HOME/avail-keys
for (( i=1; i<=$VAL_COUNT; i++ ))
do
echo "validator-$i" >> $HOME/avail-keys/nodecount.txt
done
echo "election-01" >> $HOME/avail-keys/nodecount.txt
echo "sudo-01" >> $HOME/avail-keys/nodecount.txt
echo "tech-committee-01" >> $HOME/avail-keys/nodecount.txt
echo "tech-committee-02" >> $HOME/avail-keys/nodecount.txt
echo "tech-committee-03" >> $HOME/avail-keys/nodecount.txt
echo "load-test" >> $HOME/avail-keys/nodecount.txt
cat $HOME/avail-keys/nodecount.txt | while IFS= read -r node_name; do
printf 'Generating keys for %s\n' "$node_name"
avail-node key generate --output-type json --scheme Sr25519 -w 21 > $HOME/avail-keys/$node_name.wallet.sr25519.json
cat $HOME/avail-keys/$node_name.wallet.sr25519.json | jq -r '.secretPhrase' > $HOME/avail-keys/$node_name.wallet.secret
avail-node key generate-node-key 2> $HOME/avail-keys/$node_name.public.key 1> $HOME/avail-keys/$node_name.private.key
avail-node key inspect --scheme Ed25519 --output-type json $HOME/avail-keys/$node_name.wallet.secret > $HOME/avail-keys/$node_name.wallet.ed25519.json
done
cd $HOME/scripts
python3 consolidate-keys.py $HOME/avail-keys
## Generating dynamic spec.
avail-node build-spec --disable-default-bootnode --chain dev > $HOME/avail-keys/devnet.template.json
python3 update-dev-chainspec.py $HOME/avail-keys
avail-node build-spec --chain=$HOME/avail-keys/populated.devnet.chainspec.json --raw --disable-default-bootnode > $HOME/avail-keys/populated.devnet.chainspec.raw.json
CHAIN_NAME=$(cat $HOME/avail-keys/populated.devnet.chainspec.raw.json | jq -r .id)
## Importing respective validator keys into their directories.
mkdir -p $HOME/avail-home/avail-validators
for (( i=1; i<=$VAL_COUNT; i++ ))
do
mkdir -p $HOME/avail-home/avail-validators/validator-$i/chains/$CHAIN_NAME/network
mkdir -p $HOME/avail-home/avail-fullnodes/node-$i/chains/$CHAIN_NAME/network
cp $HOME/avail-keys/validator-$i.private.key $HOME/avail-home/avail-validators/validator-$i/chains/$CHAIN_NAME/network/secret_ed25519
avail-node key insert --base-path $HOME/avail-home/avail-validators/validator-$i --chain $HOME/avail-keys/populated.devnet.chainspec.raw.json --scheme Sr25519 --suri "$(cat $HOME/avail-keys/validator-${i}.wallet.secret)" --key-type babe
avail-node key insert --base-path $HOME/avail-home/avail-validators/validator-$i --chain $HOME/avail-keys/populated.devnet.chainspec.raw.json --scheme Ed25519 --suri "$(cat $HOME/avail-keys/validator-${i}.wallet.secret)" --key-type gran
export NODE_KEY=$(cat $HOME/avail-keys/validator-$i.public.key)
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
P2P=$((30335 + $INC))
echo "--bootnodes=/ip4/127.0.0.1/tcp/$P2P/p2p/$NODE_KEY" >> $HOME/avail-keys/bootnode.txt
done
## Generating systemd service files for validators and starting the service.
export IP=$(curl ifconfig.me)
for (( i=1; i<=$VAL_COUNT; i++ ))
do
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
RPC=$((26657 + $INC))
P2P=$((30335 + $INC))
PROM=$((6000 + $INC))
echo "[Unit]
Description=Avail val ${i} daemon
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$(which avail-node) --validator --allow-private-ipv4 --base-path $HOME/avail-home/avail-validators/validator-$i --rpc-port $RPC --port $P2P --prometheus-port $PROM --no-mdns --chain $HOME/avail-keys/populated.devnet.chainspec.raw.json $(cat $HOME/avail-keys/bootnode.txt)
Restart=on-failure
RuntimeMaxSec=1d
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target" | sudo tee "/etc/systemd/system/avail-val-${i}.service"
sudo systemctl enable avail-val-${i}.service
sudo systemctl start avail-val-${i}.service
echo "Validator $i RPC endpoint is: http://$IP:$RPC" >> $HOME/endpoints.txt
echo "Validator $i WS endpoint is : ws://$IP:$RPC" >> $HOME/endpoints.txt
done
## Generating systemd service files for full nodes and starting the service.
for (( i=1; i<=$NODE_COUNT; i++ ))
do
mkdir -p $HOME/avail-home/avail-fullnodes/node-$i/chains/$CHAIN_NAME/network
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
RPC=$((9944 + $INC))
P2P=$((30135 + $INC))
PROM=$((6100 + $INC))
echo "[Unit]
Description=Avail full node daemon
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$(which avail-node) --rpc-cors=all --rpc-port $RPC --port $P2P --prometheus-port $PROM --rpc-external --unsafe-rpc-external --no-mdns --allow-private-ipv4 --base-path $HOME/avail-home/avail-fullnodes/node-$i --chain $HOME/avail-keys/populated.devnet.chainspec.raw.json $(cat $HOME/avail-keys/bootnode.txt)
Restart=on-failure
RuntimeMaxSec=1d
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target" | sudo tee "/etc/systemd/system/avail-full-${i}.service"
sudo systemctl enable avail-full-${i}.service
sudo systemctl start avail-full-${i}.service
echo "Fullnode ${i} RPC endpoint is: http://$IP:$RPC" >> $HOME/endpoints.txt
echo "Fullnode ${i} WS endpoint is: ws://$IP:$RPC" >> $HOME/endpoints.txt
done
## Generate node key and config for light client bootstrap.
avail-node key generate-node-key 2> $HOME/avail-keys/light-client-boot.public.key 1> $HOME/avail-keys/light-client-boot.private.key
mkdir -p $HOME/avail-home/avail-light/light-1
echo "log_level = \"info\"
p2p_port = 39000
secret_key = { key = \"$(cat $HOME/avail-keys/light-client-boot.private.key)\" }
identify_protocol = \"/avail_kad/id/1.0.0\"
identify_agent = \"avail-light-client/rust-client\"
kad_connection_idle_timeout = 30
kad_query_timeout = 60
avail_path = \"$HOME/avail-home/avail-light/light-1\"
" | tee "$HOME/avail-home/avail-light/light-1/config.yaml"
echo "HTTP port of bootstrap light client is: http://$IP:7000" >> $HOME/endpoints.txt
## Generate config files for light clients
for (( i=2; i<=$LC_COUNT; i++ ))
do
mkdir -p $HOME/avail-home/avail-light/light-$i
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
P2P=$((37000 + $INC))
PROM=$((9520 + $INC))
HTTP=$((7001 + $INC))
echo "log_level = \"info\"
http_server_host = \"127.0.0.1\"
http_server_port = $HTTP
port = $P2P
bootstraps = [[\"$(cat $HOME/avail-keys/light-client-boot.public.key)\", \"/ip4/127.0.0.1/tcp/39001\"]]
full_node_ws = [\"ws://127.0.0.1:9944\"]
app_id = 0
confidence = 92.0
prometheus_port = $PROM
avail_path = \"$HOME/avail-home/avail-light/light-$i\" " | tee "$HOME/avail-home/avail-light/light-$i/config.yaml"
echo "HTTP port of light client $i is: http://$IP:$HTTP" >> $HOME/endpoints.txt
done
## Generating systemd service file for bootstrap and starting the service
echo "[Unit]
Description=Avail light client bootstrap
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$(which avail-light-bootstrap) -c $HOME/avail-home/avail-light/light-1/config.yaml
Restart=on-failure
RuntimeMaxSec=1d
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target" | sudo tee "/etc/systemd/system/avail-light-1.service"
sudo systemctl enable avail-light-1.service
sudo systemctl start avail-light-1.service
## Generating systemd service files for light clients and starting the service
for (( i=2; i<=$LC_COUNT; i++ ))
do
echo "[Unit]
Description=Avail light ${i} daemon
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$(which avail-light) -c $HOME/avail-home/avail-light/light-$i/config.yaml
Restart=on-failure
RuntimeMaxSec=1d
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target" | sudo tee "/etc/systemd/system/avail-light-${i}.service"
sudo systemctl enable avail-light-${i}.service
sudo systemctl start avail-light-${i}.service
done
# Setting up the explorer
cd ~/
wget https://github.com/availproject/avail-apps/releases/download/v1.6-rc2/avail-explorer.tar.gz
tar -xvf avail-explorer.tar.gz
rm avail-explorer.tar.gz
echo "window.process_env = {"\"WS_URL"\": "\"ws://$IP:9944"\"};" >> build/env-config.js
sudo cp -r build/* /var/www/html/
sudo systemctl restart apache2
echo "Explorer url is http://$IP" >> $HOME/endpoints.txt
# Setting up observability components
# Setting up Prometheus job for collecting metrics
cd ~/
cp prometheus-example.yaml prometheus.yaml
for (( i=1; i<=$VAL_COUNT; i++ ))
do
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
PROM=$((6000 + $INC))
echo " - job_name: \"validator-$i\"
static_configs:
- targets: [\"localhost:$PROM\"]" >> prometheus.yaml
done
for (( i=1; i<=$NODE_COUNT; i++ ))
do
DIFF=$(($i - 1))
INC=$(($DIFF * 2))
PROM=$((6100 + $INC))
echo " - job_name: \"full-node-$i\"
static_configs:
- targets: [\"localhost:$PROM\"]
" >> prometheus.yaml
done
sudo systemctl restart prometheus.service
# Setting up Promtail job for collecting logs
cd ~/
cp promtail-example.yaml promtail.yaml
for (( i=1; i<=$VAL_COUNT; i++ ))
do
echo " - job_name: val-$i-log
journal:
json: false
max_age: 12h
path: /var/log/journal
labels:
job: val-$i-log
relabel_configs:
- action: keep
source_labels: ["__journal__systemd_unit"]
regex: avail-val-${i}.service
- source_labels: ["__journal__systemd_unit"]
target_label: "systemd_unit"
" >> promtail.yaml
done
for (( i=1; i<=$NODE_COUNT; i++ ))
do
echo " - job_name: full-$i-log
journal:
json: false
max_age: 12h
path: /var/log/journal
labels:
job: full-$i-log
relabel_configs:
- action: keep
source_labels: ["__journal__systemd_unit"]
regex: avail-full-${i}.service
- source_labels: ["__journal__systemd_unit"]
target_label: "systemd_unit"
" >> promtail.yaml
done
for (( i=1; i<=$LC_COUNT; i++ ))
do
echo " - job_name: light-$i-log
journal:
json: false
max_age: 12h
path: /var/log/journal
labels:
job: light-$i-log
relabel_configs:
- action: keep
source_labels: ["__journal__systemd_unit"]
regex: avail-light-${i}.service
- source_labels: ["__journal__systemd_unit"]
target_label: "systemd_unit"
" >> promtail.yaml
done
sudo systemctl restart promtail