-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathARMer_init.sh
executable file
·189 lines (167 loc) · 7.27 KB
/
ARMer_init.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
#!/bin/bash
#
#ASCII color assign
RED="\033[0;31m"
LRED="\033[1;31m"
YELLOW="\033[0;33m"
LYELLOW="\033[1;33m"
GREEN="\033[0;32m"
LGREEN="\033[1;32m"
BLUE="\033[0;34m"
LBLUE="\033[1;34m"
PURPLE="\033[0;35m"
LPURPLE="\033[1;35m"
CYAN="\033[0;36m"
LCYAN="\033[1;36m"
NC="\033[0m" # No Color
set -o pipefail -o nounset -o noclobber -o allexport
ARMER_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
#Installing all required packages
apt update
apt upgrade -y
reqpkgs=('whiptail' 'moreutils' 'original-awk' 'systemd-cron' 'cron' 'procps' 'gettext' 'jq' 'gcc' 'sudo' 'git' 'curl' 'wget' 'nano' 'screen' 'psmisc' 'unzip' 'htop')
for x in "${reqpkgs[@]}"; do
dpkg -s "$x" &> /dev/null
if [ $? != 0 ]; then
echo -e "${LRED}Package $x is not instlled. Installing...${NC}"
apt-get install -y $x;
#
fi
done
#Adding new user for idena-go client
echo -e "${LYELLOW}Please enter a ${LRED}username${NC} and ${LRED}password${LYELLOW} that you would like to use for this ${LGREEN}Idena Node Daemon${LYELLOW} instance.${NC}"
while
echo -e "${NC}Please do not use ${LGREEN}root${NC} as a username"
read -p "Enter username : " username
[[ $username = 'root' ]] || [[ -z $username ]]
do true; done
#Some preliminary check
if screen -ls | grep -q "$username"; then
echo "The given username $username has a running idena-go client.\nTerminating..."
service idena stop
fi
#If user exists we have to save our beans
if id "$username" >/dev/null 2>&1; then
echo "User $username exists. All keys are saved in ./armer_backup directory"
mkdir -p /home/$username/ARMer_backup/
cp -r --backup=t /home/$username/idena-go/datadir/api.key /home/$username/idena-go/datadir/keystore/nodekey /home/$username/ARMer_backup/
rm -rf /home/$username/idena-go
rm -rf /home/$username/idena-coacher
rm -rf /home/$username/scripts
rm -rf /home/$username/flags
rm -f /etc/init.d/idena
crontab -l | grep -v 'idena_scrchk.sh' | crontab -
crontab -l | grep -v 'idena_selfcheck.sh' | crontab -
else
echo "Creating a user $username..."
password="$username"
salt=$(cat /dev/urandom | tr -dc A-Za-z0-9/_- | head -c16)
pass=$(openssl passwd -5 -salt "$salt" "$password")
useradd -s /bin/bash -m -p "$pass" "$username"
fi
mkdir /home/$username/idena-go
cd /home/$username/idena-go
read -p "Would you like me to compile idena-go bin file from the source code? " -n 1 -r
echo "Let's do some updates"
if [[ $REPLY =~ ^[Yy]$ ]]
then
if ! command -v go &> /dev/null
then
echo "Compiling idena-go..."
wget -O go1.17.13.linux-arm64.tar.gz https://go.dev/dl/go1.17.13.linux-arm64.tar.gz
tar -xvf go1.17.13.linux-arm64.tar.gz
rm go1.17.13.linux-arm64.tar.gz
fi
GOROOT=/home/$username/idena-go/go
GOPATH=/home/$username/idena-go/go
PATH=$GOPATH/bin:$PATH
gover=$(curl -s https://api.github.com/repos/idena-network/idena-go/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | sed 's/"tag_name": "v//g' | sed 's/",//g')
wget -O v$gover.tar.gz https://github.com/idena-network/idena-go/archive/refs/tags/v$gover.tar.gz
tar -xzf v$gover.tar.gz && rm v$gover.tar.gz
cd idena-go-$gover
go build -ldflags "-X main.version=$gover" && chmod +x idena-go && cp -r idena-go /home/$username/idena-go/ && cd /home/$username/idena-go && rm -rf ./idena-go-$gover ./go
else
wget -O idena-go https://github.com/ltraveler/idena-go-arm64/raw/main/idena-go
fi
chmod +x idena-go
mkdir -p /home/$username/idena-go/datadir/idenachain.db
cd /home/$username/idena-go/datadir/idenachain.db
wget -O main.zip https://github.com/ltraveler/idenachain.db/archive/refs/heads/main.zip
unzip -jo main.zip
rm main.zip
cd /home/$username/idena-go
wget -O config.json https://raw.githubusercontent.com/ltraveler/idena-runner/main/config.json
#chown -R $username:$username /home/$username/idena-go
screen -S idena -dm /home/$username/idena-go/idena-go --config=/home/$username/idena-go/config.json --datadir=/home/$username/idena-go/datadir
until [ -s /home/$username/idena-go/datadir/api.key ]
do
sleep 5
done
until [ -s /home/$username/idena-go/datadir/keystore/nodekey ]
do
sleep 5
done
screen -S idena -X quit
#Private rollback segment
apikey=$( cat /home/$username/idena-go/datadir/api.key )
echo -e ${LBLUE}Your IDENA-node API key is: ${YELLOW}$apikey
prvkey=$( cat /home/$username/idena-go/datadir/keystore/nodekey )
echo -e ${LBLUE}Your IDENA-node PRIVATE key is: ${YELLOW}$prvkey${NC}
while true; do
read -p "$(echo -e ${LYELLOW}Would you like to add your own ${LGREEN}IDENA NODE PRIVATE KEY${LYELLOW} \(aka ${LRED}nodekey${LYELLOW}\)?$'\n'${LGREEN}Default path: ${LRED}../idena-go/datadir/keystore/nodekey ${LGREEN}[y/N]${NC} )" yn
case $yn in
[Yy]* ) read -p "$(echo -e ${LYELLOW}Please enter your IDENA private key:${NC} )"; echo "$REPLY" >| /home/$username/idena-go/datadir/keystore/nodekey; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
while true; do
read -p "$(echo -e ${LYELLOW}Would you like to add your own ${LGREEN}IDENA NODE API KEY${LYELLOW} \(aka ${LRED}api.key${LYELLOW}\)?$'\n'${LGREEN}Default path: ${LRED}../idena-go/datadir/api.key ${LGREEN}[y/N]${NC} )" yn
case $yn in
[Yy]* ) read -p "$(echo -e ${LYELLOW}Please enter your IDENA node key: ${NC})"; echo "$REPLY" >| /home/$username/idena-go/datadir/api.key; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
#System curtain-raiser
cd $ARMER_DIR/armer/
envsubst < idena >| /etc/init.d/idena
chmod +x /etc/init.d/idena
update-rc.d idena defaults
#Measure thrice and cut once
tail --lines=+2 idena_bash.sh | envsubst >| idenabash.tmp
awk 'FNR == NR { lines[$0] = 1; next } ! ($0 in lines) {print}' /root/.bashrc idenabash.tmp | sponge -a /root/.bashrc
rm idenabash.tmp
#
#idenachain.db health check
mkdir /home/$username/scripts
mkdir -p /home/$username/flags
envsubst < idena_selfcheck.sh >| /home/$username/scripts/idena_selfcheck.sh
# idena-go manual update
cp ../armer_update.sh /home/$username/scripts/
cp ./idena_scrchk.sh /home/$username/scripts/
chmod +x /home/$username/scripts/*.sh
cd /home/$username/scripts
crontab -u root -l >| idenacron
#Particular error cases pre-check
#grep "\*\/30 \* \* \* \* \/home\/$username\/scripts\/idena_selfcheck.sh" idenacron || echo "*/30 * * * * /home/$username/scripts/idena_selfcheck.sh" >> idenacron
echo "*/30 * * * * /home/$username/scripts/idena_selfcheck.sh" >> idenacron
#idena-go daemon run check
#grep "\*\/13 \* \* \* \* \/home\/$username\/scripts\/idena_scrchk.sh" idenacron || echo "*/13 * * * * /home/$username/scripts/idena_scrchk.sh" >> idenacron
echo "*/13 * * * * /home/$username/scripts/idena_scrchk.sh" >> idenacron
crontab -u root idenacron
rm idenacron
/etc/init.d/cron restart
cd $ARMER_DIR
service idena start
#IDENA Coacher installation
cd /home/$username
git clone https://github.com/ltraveler/idena-coacher.git
cd idena-coacher
chmod +x idena_coacher.sh
# Installation has been successfully completed
echo -e "${LRED}IDENA NODE HAS BEEN SUCCESSFULLY INSTALLED"
echo -e "${LGREEN}FOR IDENA DONATIONS:${NC} 0xf041640788910fc89a211cd5bcbf518f4f14d831"
echo -e "${YELLOW}CONTACT AUTHOR:${NC} ltraveler@protonmail.com"
echo -e "${LBLUE}IDENA PERSONALIZED SHARED NODE SERVICE:${NC} https://t.me/ltrvlr"
exit