forked from Goose-Tech/ZelNodeInstallv2
-
Notifications
You must be signed in to change notification settings - Fork 4
/
zelnodev2.sh
281 lines (253 loc) · 11.4 KB
/
zelnodev2.sh
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
#!/bin/bash
#############################################################################################################################################################################
# IF PLANNING TO RUN ZELNODE FROM HOME/OFFICE/PERSONAL EQUIPMENT & NETWORK!!!
# You must understand the implications of running a ZelNode on your on equipment and network. There are many possible security issues. DYOR!!!
# Running a ZelNode from home should only be done by those with experience/knowledge of how to set up the proper security.
# It is recommended for most operators to use a VPS to run a ZelNode
#
#**Potential Issues (not an exhaustive list):**
#1. Your home network IP address will be displayed to the world. Without proper network security in place, a malicious person sniff around your IP for vulnerabilities to access your network.
#2. Port forwarding: The p2p port for ZelCash will need to be open.
#3. DDOS: VPS providers typically provide mitigation tools to resist a DDOS attack, while home networks typically don't have these tools.
#4. Zelcash daemon is ran with sudo permissions, meaning the daemon has elevated access to your system. **Do not run a ZelNode on equipment that also has a funded wallet loaded.**
#5. Static vs. Dynamic IPs: If you have a revolving IP, every time the IP address changes, the ZelNode will fail and need to be stood back up.
#6. Anti-cheating mechanisms: If a ZelNode fails benchmarking/anti-cheating tests too many times in the future, its possible your IP will be blacklisted and no nodes can not dirun using that public-facing IP.
#7. Home connections typically have a monthly data cap. ZelNodes will use 2.5 - 6 TB monthly usage depending on ZelNode tier, which can result in overage charges. Check your ISP agreement.
#8. Many home connections provide adequate download speeds but very low upload speeds. ZelNodes require 100mbps (12.5MB/s) download **AND** upload speeds. Ensure your ISP plan can provide this continually.
#9. ZelNodes can saturate your network at times. If you are sharing the connection with other devices at home, its possible to fail a benchmark if network is saturated.
#############################################################################################################################################################################
###### you must be logged in as a sudo user, not root #######
COIN_NAME='zelcash'
#wallet information
WALLET_DOWNLOAD='https://github.com/zelcash/zelcash/releases/download/v3.1.0/ZelCash-Linux.tar.gz'
WALLET_BOOTSTRAP='https://zelcore.io/zelcashbootstraptxindex.zip'
BOOTSTRAP_ZIP_FILE='zelcashbootstraptxindex.zip'
WALLET_TAR_FILE='ZelCash-Linux.tar.gz'
ZIPTAR='unzip'
CONFIG_FILE='zelcash.conf'
RPCPORT=16124
PORT=16125
COIN_DAEMON='zelcashd'
COIN_CLI='zelcash-cli'
COIN_TX='zelcash-tx'
COIN_PATH='/usr/bin'
USERNAME=$(who -m | awk '{print $1;}')
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
GREEN='\033[1;32m'
CYAN='\033[1;36m'
NC='\033[0m'
STOP='\e[0m'
FETCHPARAMS='https://raw.githubusercontent.com/zelcash/zelcash/master/zcutil/fetch-params.sh'
#end of required details
#
#
#
#countdown timer to provide outputs for forced pauses
#countdown "00:00:30" is a 30 second countdown
countdown()
(
IFS=:
set -- $*
secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} ))
while [ $secs -gt 0 ]
do
sleep 1 &
printf "\r%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60))
secs=$(( $secs - 1 ))
wait
done
echo -e "\033[1K"
)
#Suppressing password promts for this user so zelnode can operate
sudo echo -e "$(who -m | awk '{print $1;}') ALL=(ALL) NOPASSWD:ALL" | sudo EDITOR='tee -a' visudo
clear
echo -e '\033[1;33m===============================================================================\033[0m'
echo -e 'ZelNode Setup, v2.3'
echo -e '\033[1;33m===============================================================================\033[0m'
echo -e '\033[1;34m23 Feb. 2019, by AltTank fam, dk808, Goose-Tech, Skyslayer, & Packetflow\033[0m'
echo -e
echo -e '\033[1;36mNode setup starting, press [CTRL-C] to cancel.\033[0m'
countdown "00:00:03"
echo -e
if [ "$USERNAME" = "root" ]; then
echo -e "\033[1;36mYou are currently logged in as \033[0mroot\033[1;36m, please log out and\nlog back in with the username you just created.\033[0m"
exit
fi
#echo -e "Hello $USERNAME, please enter your password: "
#[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
WANIP=$(wget http://ipecho.net/plain -O - -q)
echo -e 'Detected IP Address is' $WANIP
echo -e
read -p 'Is IP Address correct? [Y/n] ' -n 1 -r
if [[ $REPLY =~ ^[Nn]$ ]]
then
echo -e
read -p 'Enter the IP address for your VPS, then hit [ENTER]: ' WANIP
fi
echo ""
echo -e "\033[1;33mEnter the MAINNET ZELNODE KEY generated by your ZelMate/ZelCore wallet: \033[0m"
read zelnodeprivkey
echo -e "\033[1;33m=======================================================\033[0m"
echo "INSTALLING ZELNODE DEPENDENCIES"
echo -e "\033[1;33m=======================================================\033[0m"
echo "Installing packages and updates..."
sleep 2
sudo apt-get update -y
sudo apt-get install software-properties-common -y
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install nano htop pwgen ufw figlet -y
sudo apt-get install build-essential libtool pkg-config -y
sudo apt-get install libc6-dev m4 g++-multilib -y
sudo apt-get install autoconf ncurses-dev unzip git python python-zmq -y
sudo apt-get install wget curl bsdmainutils automake -y
sudo apt-get remove sysbench -y
echo -e "\033[1;33mPackages complete...\033[0m"
echo -e
if [ -f ~/.zelcash/zelcash.conf ]; then
echo -e "\033[1;36mExisting conf file found, backing up to zelcash.old ...\033[0m"
sudo mv ~/.zelcash/zelcash.conf ~/.zelcash/zelcash.old;
fi
RPCUSER=`pwgen -1 8 -n`
PASSWORD=`pwgen -1 20 -n`
if [ "x$PASSWORD" = "x" ]; then
PASSWORD=${WANIP}-`date +%s`
fi
echo -e "\n\033[1;32mCreating MainNet Conf File...\033[0m"
sleep 3
mkdir ~/.zelcash
touch ~/.zelcash/$CONFIG_FILE
echo "rpcuser=$RPCUSER" >> ~/.zelcash/$CONFIG_FILE
echo "rpcpassword=$PASSWORD" >> ~/.zelcash/$CONFIG_FILE
echo "rpcallowip=127.0.0.1" >> ~/.zelcash/$CONFIG_FILE
#echo "rpcport=$RPCPORT" >> ~/.zelcash/$CONFIG_FILE
#echo "port=$PORT" >> ~/.zelcash/$CONFIG_FILE
echo "zelnode=1" >> ~/.zelcash/$CONFIG_FILE
echo zelnodeprivkey=$zelnodeprivkey >> ~/.zelcash/$CONFIG_FILE
echo "server=1" >> ~/.zelcash/$CONFIG_FILE
echo "daemon=1" >> ~/.zelcash/$CONFIG_FILE
echo "txindex=1" >> ~/.zelcash/$CONFIG_FILE
echo "listen=1" >> ~/.zelcash/$CONFIG_FILE
echo "logtimestamps=1" >> ~/.zelcash/$CONFIG_FILE
echo "externalip=$WANIP" >> ~/.zelcash/$CONFIG_FILE
echo "bind=$WANIP" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=explorer.zel.cash" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=explorer.zel.zelcore.io" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=explorer2.zel.cash" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=explorer.zelcash.online" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=node-eu.zelcash.com" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=node-uk.zelcash.com" >> ~/.zelcash/$CONFIG_FILE
echo "addnode=node-asia.zelcash.com" >> ~/.zelcash/$CONFIG_FILE
echo "maxconnections=256" >> ~/.zelcash/$CONFIG_FILE
sleep 2
#begin downloading wallet binaries
echo -e "\033[1;32mKilling and removing any old instances of $COIN_NAME."
echo -e "Downloading new wallet...\033[0m"
sudo killall $COIN_DAEMON > /dev/null 2>&1
cd /usr/bin && sudo rm $COIN_CLI $COIN_DAEMON > /dev/null 2>&1 && sleep 2
# added to be sure to delete the old files for someone using the old script
cd /usr/local/bin && sudo rm $COIN_CLI $COIN_DAEMON > /dev/null 2>&1 && sleep 2
cd
wget -c $WALLET_DOWNLOAD -O - | sudo tar -xz &> /dev/null
sudo mv $COIN_DAEMON $COIN_CLI $COIN_TX /usr/bin
sudo chmod 555 /usr/bin/zelcash*
sudo rm -rf $WALLET_TAR_FILE && sudo rm -rf ~/zelcash-gtest && sudo rm -rf ~/fetch-params.sh
echo -e "\033[1;32mDownloading wallet bootstrap please be patient...\033[0m"
wget -U Mozilla/5.0 $WALLET_BOOTSTRAP
unzip -o $BOOTSTRAP_ZIP_FILE -d /home/$USERNAME/.zelcash
rm -rf $BOOTSTRAP_ZIP_FILE
#end download/extract bootstrap file
echo ""
echo -e "\033[1;32mDownloading chain params...\033[0m"
wget -q $FETCHPARAMS
chmod 770 fetch-params.sh &> /dev/null
sudo bash fetch-params.sh
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME
rm fetch-params.sh
echo -e "\033[1;33mDone fetching chain params.\033[0m"
echo -e "\033[1;32mCreating system service file...\033[0m"
sudo touch /etc/systemd/system/$COIN_NAME.service
sudo chown $USERNAME:$USERNAME /etc/systemd/system/$COIN_NAME.service
cat << EOF > /etc/systemd/system/$COIN_NAME.service
[Unit]
Description=$COIN_NAME service
After=network.target
[Service]
Type=forking
User=$USERNAME
Group=$USERNAME
WorkingDirectory=/home/$USERNAME/.zelcash/
ExecStart=$COIN_PATH/$COIN_DAEMON -datadir=/home/$USERNAME/.zelcash/ -conf=/home/$USERNAME/.zelcash/$CONFIG_FILE -daemon
ExecStop=-$COIN_PATH/$COIN_CLI stop
Restart=always
RestartSec=3
PrivateTmp=true
TimeoutStopSec=60s
TimeoutStartSec=10s
StartLimitInterval=120s
StartLimitBurst=5
[Install]
WantedBy=multi-user.target
EOF
sudo chown root:root /etc/systemd/system/$COIN_NAME.service
sudo systemctl daemon-reload
sleep 3
sudo systemctl enable $COIN_NAME.service &> /dev/null
echo -e "\033[1;33mSystemctl Complete....\033[0m"
echo ""
echo -e "\033[1;33m=================================================================="
echo "DO NOT CLOSE THIS WINDOW OR TRY TO FINISH THIS PROCESS "
echo "PLEASE WAIT UNTIL YOU SEE THE RESTARTING WALLET MESSAGE"
echo -e "==================================================================\033[0m"
echo ""
echo -e "\033[1;32mConfiguring firewall and enabling fail2ban...\033[0m"
sudo ufw allow ssh/tcp
sudo ufw allow $PORT/tcp
sudo ufw logging on
sudo ufw default deny incoming
sudo ufw default allow outgoing
echo "y" | sudo ufw enable >/dev/null 2>&1
sudo systemctl enable fail2ban >/dev/null 2>&1
sudo systemctl start fail2ban >/dev/null 2>&1
echo -e "\033[1;33mBasic security completed...\033[0m"
echo -e "\033[1;32mBenchmarking node & syncing $COIN_NAME wallet with blockchain, please be patient...\033[0m"
$COIN_DAEMON -daemon &> /dev/null
countdown "00:10:00"
$COIN_CLI stop &> /dev/null
sleep 15
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME
echo -e "\033[1;32mRestarting ZelNode Daemon...\033[0m"
$COIN_DAEMON -daemon &> /dev/null
for (( counter=30; counter>0; counter-- ))
do
echo -n ". "
sleep 1
done
printf "\n"
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME
echo -e "\033[1;32mFinalizing ZelNode Setup...\033[0m"
sleep 5
printf "\033[1;34m"
figlet -t -k "WELCOME TO ZELNODES"
printf "\e[0m"
echo -e "\033[1;33m==================================================================="
echo -e "\033[1;32mPLEASE COMPLETE THE ZELNODE SETUP IN YOUR ZELCORE/ZELMATE WALLET\033[0m"
echo -e "COURTESY OF \033[1;34mALTTANK FAM\033[0m, \033[1;34mDK808\033[0m, \033[1;34mGOOSE-TECH\033[0m, \033[1;34mSKYSLAYER\033[0m, & \033[1;34mPACKETFLOW"
echo -e "\033[1;33m===================================================================\033[0m"
echo -e
read -n1 -r -p "Press any key to continue..." key
for (( countera=120; countera>0; countera-- ))
do
clear
echo -e "\033[1;33m==========================================================="
echo -e "\033[1;32mZELNODE SYNC STATUS"
echo -e "THIS SCREEN REFRESHES EVERY 30 SECONDS"
echo -e "\033[1;33m===========================================================\033[0m"
echo ""
$COIN_CLI getinfo
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME
echo -e '\033[1;32mPress [CTRL-C] when correct blockheight has been reached to exit.\033[0m'
countdown "00:00:30"
done
printf "\n"