-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstartNet.sh
More file actions
executable file
·305 lines (249 loc) · 8.45 KB
/
startNet.sh
File metadata and controls
executable file
·305 lines (249 loc) · 8.45 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
#!/bin/bash
# IMPORTING THE ENVIRONMENT VARIABLES
source ./.env
export PATH=${PWD}/bin:${PWD}:$PATH
export FABRIC_CFG_PATH=${PWD}/configs
# FUNCTION TO PRINT HELP
function printHelp(){
echo
echo "Usage: "
echo " startNet.sh <mode> [-h] [-n]"
echo " <mode> - one of the 'up', 'down', 'restart', 'generate', 'clear'"
echo " - 'up' - Bring Up The Network"
echo " - 'down' - Tear Down The Services"
echo " - 'clear' - Clear the Crypto Material"
echo " - 'restart' - Restart The Network"
echo " - 'generate' - Generate Crypto-Config & Channel-Artifacts"
echo " -n - Don't start CA Nodes"
echo " -h - Get Help"
echo
}
# FUNCTION TO CHECK FOR ERRORS
function checkResult(){
res=$?
set +x
if [ $res -ne 0 ]
then
echo ERROR
exit 1
else
echo "----- SUCCESS ----- "
echo
fi
}
# FUNCTION TO GENERATE PKI CERTIFICATES
function generateCerts(){
which cryptogen > /dev/null
if [ $? -ne 0 ]; then
echo "Please check bin folder for cryptogen tool."
exit 1
fi
echo
echo "##########################################################"
echo "##### Generate certificates using cryptogen tool #########"
echo "##########################################################"
if [ -d "crypto-config" ]; then
rm -Rf crypto-config
fi
pushd ./configs > /dev/null
set -x
cryptogen generate --config=./crypto-config.yaml
checkResult
popd > /dev/null
echo
}
# FUNCTION TO GENERATE CHANNEL ARTIFACTS (GENISIS BLOCK, CHANNEL Tx, ANCHOR PEERs Txs)
function generateChannelArtifacts(){
which configtxgen > /dev/null
if [ "$?" -ne 0 ]; then
echo "Please check bin folder for configtxgen tool."
exit 1
fi
pushd ./configs > /dev/null
echo "##########################################################"
echo "######### Generating Orderer Genesis block ##############"
echo "##########################################################"
set -x
configtxgen -profile SampleMultiNodeEtcdRaft -channelID $SYS_CHANNEL \
-outputBlock ./channel-artifacts/genesis.block
checkResult
echo
echo "#################################################################"
echo "### Generating channel configuration transaction 'channel.tx' ###"
echo "#################################################################"
set -x
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx \
./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
checkResult
echo
echo "#################################################################"
echo "####### Generating anchor peer update for Org1MSP ##########"
echo "#################################################################"
set -x
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \
./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME \
-asOrg Org1MSP
checkResult
echo
echo "#################################################################"
echo "####### Generating anchor peer update for Org2MSP ##########"
echo "#################################################################"
set -x
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \
./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME \
-asOrg Org2MSP
checkResult
popd > /dev/null
echo
}
# FUNCTION TO GENERATE NETWORK CCP
function generateCCP(){
echo
echo "##########################################################"
echo "##### Generate certificates using cryptogen tool #########"
echo "##########################################################"
set -x
./genccp.sh
checkResult
echo
}
# FUNCTION TO CLEAR PREVIOUSLY GENERATED CERTS AND ARTIFACTS
function clearThings(){
# GETTING THE ARGUMENTS PASSED TO THE FUNCTION.
CLEAR_SCREEN=$1
# CLEARING THE SCEEN FIRST IF NO ARGUMENTS HAVE BEEN PASSED.
if [ "${CLEAR_SCREEN}" == "" ]; then
clear
fi
echo
echo "#################################################################"
echo "####### Clearing Generated Certificates And Artificats #########"
echo "#################################################################"
set -x
./clearFolders.sh
checkResult
}
# FUNCTION TO START THE CONTAINERS
function networkUp(){
if [ "${NO_CA}" != "true" ]; then
DOCKER_COMPOSE_FILES="${DOCKER_COMPOSE_FILES} -f ${DOCKER_COMPOSE_CA}"
export EAPPROVAL_CA1_PRIVATE_KEY=$(cd configs/crypto-config/peerOrganizations/org1.eapproval.com/ca && ls *_sk)
# echo ${EAPPROVAL_CA1_PRIVATE_KEY}
export EAPPROVAL_CA2_PRIVATE_KEY=$(cd configs/crypto-config/peerOrganizations/org2.eapproval.com/ca && ls *_sk)
# echo ${EAPPROVAL_CA2_PRIVATE_KEY}
fi
echo
echo "#######################################"
echo "####### Starting The Network #########"
echo "#######################################"
docker-compose \
${DOCKER_COMPOSE_FILES} \
up -d
checkResult
sleep 5
echo
echo "#######################################"
echo "############ Containers #############"
echo "#######################################"
docker ps --all
echo "#######################################"
echo
}
# FUNCTION TO STOP AND REMOVE THE CONTAINERS
function networkDown(){
export EAPPROVAL_CA1_PRIVATE_KEY=$(cd configs/crypto-config/peerOrganizations/org1.eapproval.com/ca && ls *_sk)
export EAPPROVAL_CA2_PRIVATE_KEY=$(cd configs/crypto-config/peerOrganizations/org2.eapproval.com/ca && ls *_sk)
DOCKER_COMPOSE_FILES="${DOCKER_COMPOSE_FILES} -f ${DOCKER_COMPOSE_CA}"
echo
echo "#######################################"
echo "####### Stopping The Network #########"
echo "#######################################"
docker-compose \
${DOCKER_COMPOSE_FILES} \
down --volumes --remove-orphans
echo
echo
echo "#######################################"
echo "############ Containers #############"
echo "#######################################"
docker ps --all
echo "#######################################"
echo
# $(docker ps --all | awk '{ORS=" "} ($2 ~ /dev-peer.*/) {print $1}')
# $(docker images | awk '{ORS=" "} ($1 ~ /dev-peer.*/) {print $3}')
echo
echo "##########################################################"
echo "############ REMOVING CHAINCODE CONTAINERS #############"
echo "##########################################################"
CONTAINER_IDS=$(docker ps --all | awk '{ORS=" "} ($2 ~ /dev-peer.*/) {print $1}')
if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
echo "---- No containers available for deletion ----"
else
set -x
docker rm -f $CONTAINER_IDS
checkResult
fi
echo
echo
echo "##########################################################"
echo "############## REMOVING CHAINCODE IMAGES ###############"
echo "##########################################################"
DOCKER_IMAGE_IDS=$(docker images | awk '{ORS=" "} ($1 ~ /dev-peer.*/) {print $3}')
if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then
echo "---- No images available for deletion ----"
else
set -x
docker rmi -f $DOCKER_IMAGE_IDS
checkResult
fi
echo
}
###################################################
# DECLARING NECESSARY VARS
DOCKER_COMPOSE_CLI=configs/docker-compose-cli.yaml
DOCKER_COMPOSE_DB=configs/docker-compose-couch.yaml
DOCKER_COMPOSE_CA=configs/docker-compose-ca.yaml
DOCKER_COMPOSE_FILES="-f ${DOCKER_COMPOSE_CLI} -f ${DOCKER_COMPOSE_DB}"
# GETTING THE ARGUMENT PASSED WITH THE COMMAND
MODE=$1
shift
# GETTING OPTS
while getopts "nh" opt; do
case "$opt" in
h | \?)
printHelp
exit 0
;;
n)
NO_CA=true
;;
esac
done
# WORKING ACCORDING TO THE ARGUMENT
if [ "${MODE}" == "up" ]; then
clearThings
generateCerts
generateChannelArtifacts
generateCCP
networkUp
elif [ "${MODE}" == "down" ]; then
networkDown
clearThings 1
elif [ "${MODE}" == "restart" ]; then
networkDown
clearThings
generateCerts
generateChannelArtifacts
generateCCP
networkUp
elif [ "${MODE}" == "generate" ]; then
clearThings
generateCerts
generateChannelArtifacts
generateCCP
elif [ "${MODE}" == "clear" ]; then
clearThings
else
printHelp
exit 1
fi