@@ -33,8 +33,14 @@ aws s3 cp $ASSETS_S3_PATH ./assets.zip --region $AWS_REGION
33
33
unzip -q assets.zip
34
34
35
35
echo " Install and configure CloudWatch agent"
36
- wget -q https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
37
- sudo dpkg -i -E amazon-cloudwatch-agent.deb
36
+ if [ " $arch " == " x86_64" ]; then
37
+ CW_AGENT_BINARY_URI=https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
38
+ else
39
+ CW_AGENT_BINARY_URI=https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
40
+ fi
41
+
42
+ wget -q $CW_AGENT_BINARY_URI
43
+ dpkg -i -E amazon-cloudwatch-agent.deb
38
44
39
45
echo ' Configuring CloudWatch Agent'
40
46
mkdir -p /opt/aws/amazon-cloudwatch-agent/etc/
@@ -43,7 +49,7 @@ cp /opt/cw-agent.json /opt/aws/amazon-cloudwatch-agent/etc/custom-amazon-cloudwa
43
49
echo " Starting CloudWatch Agent"
44
50
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
45
51
-a fetch-config -c file:/opt/aws/amazon-cloudwatch-agent/etc/custom-amazon-cloudwatch-agent.json -m ec2 -s
46
- systemctl status amazon-cloudwatch-agent
52
+ systemctl restart amazon-cloudwatch-agent
47
53
48
54
case $SOLANA_CLUSTER in
49
55
" mainnet-beta" )
@@ -71,7 +77,7 @@ case $SOLANA_CLUSTER in
71
77
esac
72
78
73
79
echo " Fine tune sysctl to prepare the system for Solana"
74
- sudo bash -c " cat >/etc/sysctl.d/20-solana-additionals.conf <<EOF
80
+ bash -c " cat >/etc/sysctl.d/20-solana-additionals.conf <<EOF
75
81
kernel.hung_task_timeout_secs=600
76
82
vm.stat_interval=10
77
83
vm.dirty_ratio=40
@@ -85,47 +91,48 @@ net.ipv4.tcp_fastopen=3
85
91
fs.nr_open = 1000000
86
92
EOF"
87
93
88
- sudo bash -c " cat >/etc/sysctl.d/20-solana-mmaps.conf <<EOF
94
+ bash -c " cat >/etc/sysctl.d/20-solana-mmaps.conf <<EOF
89
95
# Increase memory mapped files limit
90
96
vm.max_map_count = 1000000
91
97
EOF"
92
98
93
- sudo bash -c " cat >/etc/sysctl.d/20-solana-udp-buffers.conf <<EOF
99
+ bash -c " cat >/etc/sysctl.d/20-solana-udp-buffers.conf <<EOF
94
100
# Increase UDP buffer size
95
101
net.core.rmem_default = 134217728
96
102
net.core.rmem_max = 134217728
97
103
net.core.wmem_default = 134217728
98
104
net.core.wmem_max = 134217728
99
105
EOF"
100
106
101
- sudo bash -c " echo 'DefaultLimitNOFILE=1000000' >> /etc/systemd/system.conf"
107
+ bash -c " echo 'DefaultLimitNOFILE=1000000' >> /etc/systemd/system.conf"
102
108
103
- sudo sysctl -p /etc/sysctl.d/20-solana-mmaps.conf
104
- sudo sysctl -p /etc/sysctl.d/20-solana-udp-buffers.conf
105
- sudo sysctl -p /etc/sysctl.d/20-solana-additionals.conf
109
+ sysctl -p /etc/sysctl.d/20-solana-mmaps.conf
110
+ sysctl -p /etc/sysctl.d/20-solana-udp-buffers.conf
111
+ sysctl -p /etc/sysctl.d/20-solana-additionals.conf
106
112
107
- sudo systemctl daemon-reload
113
+ systemctl daemon-reload
108
114
109
- sudo bash -c " cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
115
+ bash -c " cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
110
116
# Increase process file descriptor count limit
111
117
* - nofile 1000000
112
118
EOF"
113
119
114
120
echo ' Preparing fs for Solana installation'
115
- sudo mkdir /data
116
- sudo mkdir /data/solana
117
- sudo mkdir /data/solana/data
118
- sudo mkdir /data/solana/accounts
121
+ mkdir /data
122
+ mkdir /data/solana
123
+ mkdir /data/solana/data
124
+ mkdir /data/solana/accounts
119
125
120
126
echo ' Adding solana user and group'
121
- sudo groupadd -g 1002 solana
122
- sudo useradd -u 1002 -g 1002 -m -s /bin/bash solana
127
+ groupadd -g 1002 solana
128
+ useradd -u 1002 -g 1002 -m -s /bin/bash solana
129
+ usermod -aG solana solana
123
130
124
131
if [[ " $STACK_ID " != " none" ]]; then
125
132
echo " Install CloudFormation helper scripts"
126
133
mkdir -p /opt/aws/
127
134
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
128
- sudo ln -s /usr/local/init/ubuntu/cfn-hup /etc/init.d/cfn-hup
135
+ ln -s /usr/local/init/ubuntu/cfn-hup /etc/init.d/cfn-hup
129
136
130
137
echo " Configuring CloudFormation helper scripts"
131
138
mkdir -p /etc/cfn/
@@ -155,120 +162,123 @@ if [[ "$DATA_VOLUME_TYPE" == "instance-store" ]]; then
155
162
echo " Data volume type is instance store"
156
163
157
164
cd /opt
158
- sudo chmod +x /opt/setup-instance-store-volumes.sh
165
+ chmod +x /opt/setup-instance-store-volumes.sh
159
166
160
167
(crontab -l; echo " @reboot /opt/setup-instance-store-volumes.sh >/tmp/setup-instance-store-volumes.log 2>&1" ) | crontab -
161
168
crontab -l
162
169
163
- sudo /opt/setup-instance-store-volumes.sh
170
+ /opt/setup-instance-store-volumes.sh
164
171
165
172
else
166
173
echo " Data volume type is EBS"
167
174
168
175
DATA_VOLUME_ID=/dev/$( lsblk -lnb | awk -v VOLUME_SIZE_BYTES=" $DATA_VOLUME_SIZE " ' {if ($4== VOLUME_SIZE_BYTES) {print $1}}' )
169
- sudo mkfs -t xfs $DATA_VOLUME_ID
176
+ mkfs -t xfs $DATA_VOLUME_ID
170
177
sleep 10
171
178
DATA_VOLUME_UUID=$( lsblk -fn -o UUID $DATA_VOLUME_ID )
172
179
DATA_VOLUME_FSTAB_CONF=" UUID=$DATA_VOLUME_UUID /data/solana/data xfs defaults 0 2"
173
180
echo " DATA_VOLUME_ID=" $DATA_VOLUME_ID
174
181
echo " DATA_VOLUME_UUID=" $DATA_VOLUME_UUID
175
182
echo " DATA_VOLUME_FSTAB_CONF=" $DATA_VOLUME_FSTAB_CONF
176
- echo $DATA_VOLUME_FSTAB_CONF | sudo tee -a /etc/fstab
177
- sudo mount -a
183
+ echo $DATA_VOLUME_FSTAB_CONF | tee -a /etc/fstab
184
+ mount -a
178
185
fi
179
186
180
187
if [[ " $ACCOUNTS_VOLUME_TYPE " == " instance-store" ]]; then
181
188
echo " Accounts volume type is instance store"
182
189
if [[ " $DATA_VOLUME_TYPE " != " instance-store" ]]; then
183
190
cd /opt
184
- sudo chmod +x /opt/setup-instance-store-volumes.sh
191
+ chmod +x /opt/setup-instance-store-volumes.sh
185
192
(crontab -l; echo " @reboot /opt/setup-instance-store-volumes.sh >/tmp/setup-instance-store-volumes.log 2>&1" ) | crontab -
186
193
crontab -l
187
- sudo /opt/setup-instance-store-volumes.sh
194
+ /opt/setup-instance-store-volumes.sh
188
195
else
189
196
echo " Data and Accounts are configured by now"
190
197
fi
191
198
else
192
199
echo " Accounts volume type is EBS"
193
200
ACCOUNTS_VOLUME_ID=/dev/$( lsblk -lnb | awk -v VOLUME_SIZE_BYTES=" $ACCOUNTS_VOLUME_SIZE " ' {if ($4== VOLUME_SIZE_BYTES) {print $1}}' )
194
- sudo mkfs -t xfs $ACCOUNTS_VOLUME_ID
201
+ mkfs -t xfs $ACCOUNTS_VOLUME_ID
195
202
sleep 10
196
203
ACCOUNTS_VOLUME_UUID=$( lsblk -fn -o UUID $ACCOUNTS_VOLUME_ID )
197
204
ACCOUNTS_VOLUME_FSTAB_CONF=" UUID=$ACCOUNTS_VOLUME_UUID /data/solana/accounts xfs defaults 0 2"
198
205
echo " ACCOUNTS_VOLUME_ID=" $ACCOUNTS_VOLUME_ID
199
206
echo " ACCOUNTS_VOLUME_UUID=" $ACCOUNTS_VOLUME_UUID
200
207
echo " ACCOUNTS_VOLUME_FSTAB_CONF=" $ACCOUNTS_VOLUME_FSTAB_CONF
201
- echo $ACCOUNTS_VOLUME_FSTAB_CONF | sudo tee -a /etc/fstab
208
+ echo $ACCOUNTS_VOLUME_FSTAB_CONF | tee -a /etc/fstab
202
209
203
- sudo mount -a
210
+ mount -a
204
211
fi
205
212
206
- sudo mkdir /data/solana/data/ledger
207
- sudo usermod -aG sudo solana
213
+ mkdir /data/solana/data/ledger
208
214
209
215
cd /home/solana
210
- sudo mkdir ./bin
216
+ mkdir ./bin
211
217
212
218
ln -s /data/solana/data/ledger /home/solana
213
219
214
- echo " Downloading x86 binaries for version v$SOLANA_VERSION "
215
- sudo wget -q https://github.com/solana-labs/solana/releases/download/v$SOLANA_VERSION /solana-release-x86_64-unknown-linux-gnu.tar.bz2
216
- sudo tar -xjvf solana-release-x86_64-unknown-linux-gnu.tar.bz2
217
- sudo mv solana-release/bin/* ./bin/
220
+ echo " Build binaries for version v$SOLANA_VERSION "
221
+ /opt/build-binaries.sh
222
+ # continue only if the previous script has finished
223
+ if [ " $? " == 0 ]; then
224
+ echo " Build successful"
225
+ else
226
+ echo " Build failed"
227
+ fi
218
228
219
229
echo " Preparing Solana start script"
220
230
221
231
cd /home/solana/bin
222
232
223
233
if [[ $NODE_IDENTITY_SECRET_ARN == " none" ]]; then
224
234
echo " Create node identity"
225
- sudo ./solana-keygen new --no-passphrase -o /home/solana/config/validator-keypair.json
235
+ ./solana-keygen new --no-passphrase -o /home/solana/config/validator-keypair.json
226
236
else
227
237
echo " Get node identity from AWS Secrets Manager"
228
- sudo aws secretsmanager get-secret-value --secret-id $NODE_IDENTITY_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /validator-keypair.json
229
- sudo mv ~ /validator-keypair.json /home/solana/config/validator-keypair.json
238
+ aws secretsmanager get-secret-value --secret-id $NODE_IDENTITY_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /validator-keypair.json
239
+ mv ~ /validator-keypair.json /home/solana/config/validator-keypair.json
230
240
fi
231
241
if [[ " $SOLANA_NODE_TYPE " == " consensus" ]]; then
232
242
if [[ $NODE_IDENTITY_SECRET_ARN == " none" ]]; then
233
243
echo " Store node identity to AWS Secrets Manager"
234
- NODE_IDENTITY=$( sudo ./solana-keygen pubkey /home/solana/config/vote-account-keypair.json)
235
- sudo aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Solana Node Identity Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/validator-keypair.json --region $AWS_REGION
244
+ NODE_IDENTITY=$( ./solana-keygen pubkey /home/solana/config/vote-account-keypair.json)
245
+ aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Solana Node Identity Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/validator-keypair.json --region $AWS_REGION
236
246
fi
237
247
if [[ $VOTE_ACCOUNT_SECRET_ARN == " none" ]]; then
238
248
echo " Create Vote Account Secret"
239
- sudo ./solana-keygen new --no-passphrase -o /home/solana/config/vote-account-keypair.json
240
- NODE_IDENTITY=$( sudo ./solana-keygen pubkey /home/solana/config/vote-account-keypair.json)
249
+ ./solana-keygen new --no-passphrase -o /home/solana/config/vote-account-keypair.json
250
+ NODE_IDENTITY=$( ./solana-keygen pubkey /home/solana/config/vote-account-keypair.json)
241
251
echo " Store Vote Account Secret to AWS Secrets Manager"
242
- sudo aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Solana Vote Account Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/vote-account-keypair.json --region $AWS_REGION
252
+ aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Solana Vote Account Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/vote-account-keypair.json --region $AWS_REGION
243
253
if [[ $AUTHORIZED_WITHDRAWER_ACCOUNT_SECRET_ARN == " none" ]]; then
244
254
echo " Create Authorized Withdrawer Account Secret"
245
- sudo ./solana-keygen new --no-passphrase -o /home/solana/config/authorized-withdrawer-keypair.json
246
- NODE_IDENTITY=$( sudo ./solana-keygen pubkey /home/solana/config/authorized-withdrawer-keypair.json)
255
+ ./solana-keygen new --no-passphrase -o /home/solana/config/authorized-withdrawer-keypair.json
256
+ NODE_IDENTITY=$( ./solana-keygen pubkey /home/solana/config/authorized-withdrawer-keypair.json)
247
257
echo " Store Authorized Withdrawer Account to AWS Secrets Manager"
248
- sudo aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Authorized Withdrawer Account Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/authorized-withdrawer-keypair.json --region $AWS_REGION
258
+ aws secretsmanager create-secret --name " solana-node/" $NODE_IDENTITY --description " Authorized Withdrawer Account Secret created for stack $CF_STACK_NAME " --secret-string file:///home/solana/config/authorized-withdrawer-keypair.json --region $AWS_REGION
249
259
else
250
260
echo " Get Authorized Withdrawer Account Secret from AWS Secrets Manager"
251
- sudo aws secretsmanager get-secret-value --secret-id $AUTHORIZED_WITHDRAWER_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /authorized-withdrawer-keypair.json
252
- sudo mv ~ /authorized-withdrawer-keypair.json /home/solana/config/authorized-withdrawer-keypair.json
261
+ aws secretsmanager get-secret-value --secret-id $AUTHORIZED_WITHDRAWER_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /authorized-withdrawer-keypair.json
262
+ mv ~ /authorized-withdrawer-keypair.json /home/solana/config/authorized-withdrawer-keypair.json
253
263
fi
254
264
if [[ $REGISTRATION_TRANSACTION_FUNDING_ACCOUNT_SECRET_ARN != " none" ]]; then
255
265
echo " Get Registration Transaction Funding Account Secret from AWS Secrets Manager"
256
- sudo aws secretsmanager get-secret-value --secret-id $REGISTRATION_TRANSACTION_FUNDING_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /id.json
257
- sudo mkdir -p /root/.config/solana
258
- sudo mv ~ /id.json /root/.config/solana/id.json
266
+ aws secretsmanager get-secret-value --secret-id $REGISTRATION_TRANSACTION_FUNDING_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /id.json
267
+ mkdir -p /root/.config/solana
268
+ mv ~ /id.json /root/.config/solana/id.json
259
269
echo " Creating Vote Account on-chain"
260
- sudo ./solana create-vote-account /home/solana/config/vote-account-keypair.json /home/solana/config/validator-keypair.json /home/solana/config/authorized-withdrawer-keypair.json
270
+ ./solana create-vote-account /home/solana/config/vote-account-keypair.json /home/solana/config/validator-keypair.json /home/solana/config/authorized-withdrawer-keypair.json
261
271
echo " Delete Transaction Funding Account Secret from the local disc"
262
- sudo rm /root/.config/solana/id.json
272
+ rm /root/.config/solana/id.json
263
273
else
264
274
echo " Vote Account not created. Please create it manually: https://docs.solana.com/running-validator/validator-start#create-vote-account"
265
275
fi
266
276
echo " Delete Authorized Withdrawer Account from the local disc"
267
- sudo rm /home/solana/config/authorized-withdrawer-keypair.json
277
+ rm /home/solana/config/authorized-withdrawer-keypair.json
268
278
else
269
279
echo " Get Vote Account Secret from AWS Secrets Manager"
270
- sudo aws secretsmanager get-secret-value --secret-id $VOTE_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /vote-account-keypair.json
271
- sudo mv ~ /vote-account-keypair.json /home/solana/config/vote-account-keypair.json
280
+ aws secretsmanager get-secret-value --secret-id $VOTE_ACCOUNT_SECRET_ARN --query SecretString --output text --region $AWS_REGION > ~ /vote-account-keypair.json
281
+ mv ~ /vote-account-keypair.json /home/solana/config/vote-account-keypair.json
272
282
fi
273
283
mv /opt/solana/node-consensus-template.sh /home/solana/bin/validator.sh
274
284
fi
@@ -285,27 +295,27 @@ sed -i "s;__SOLANA_METRICS_CONFIG__;\"$SOLANA_METRICS_CONFIG\";g" /home/solana/b
285
295
sed -i " s/__EXPECTED_GENESIS_HASH__/$EXPECTED_GENESIS_HASH /g" /home/solana/bin/validator.sh
286
296
sed -i " s/__KNOWN_VALIDATORS__/$KNOWN_VALIDATORS /g" /home/solana/bin/validator.sh
287
297
sed -i " s/__ENTRY_POINTS__/$ENTRY_POINTS /g" /home/solana/bin/validator.sh
288
- sudo chmod +x /home/solana/bin/validator.sh
298
+ chmod +x /home/solana/bin/validator.sh
289
299
290
- sudo chown -R solana:solana /data/solana
291
- sudo chown -R solana:solana /home/solana
300
+ chown -R solana:solana /data/solana
301
+ chown -R solana:solana /home/solana
292
302
293
303
echo " Starting solana as a service"
294
304
295
- sudo mv /opt/systemd/node.service /etc/systemd/system/node.service
296
- sudo systemctl daemon-reload
297
- sudo systemctl enable --now node
305
+ mv /opt/systemd/node.service /etc/systemd/system/node.service
306
+ systemctl daemon-reload
307
+ systemctl enable --now node
298
308
299
309
echo " Configuring syncchecker script"
300
- sudo mv /opt/sync-checker/syncchecker-solana.sh /opt/syncchecker.sh
301
- sudo chmod +x /opt/syncchecker.sh
310
+ mv /opt/sync-checker/syncchecker-solana.sh /opt/syncchecker.sh
311
+ chmod +x /opt/syncchecker.sh
302
312
303
313
echo " Setting up sync-checker service"
304
- sudo mv /opt/systemd/sync-checker.service /etc/systemd/system/sync-checker.service
314
+ mv /opt/systemd/sync-checker.service /etc/systemd/system/sync-checker.service
305
315
306
316
# Run every 5 minutes
307
317
echo " Setting up sync-checker timer"
308
- sudo mv /opt/systemd/sync-checker.timer /etc/systemd/system/sync-checker.timer
318
+ mv /opt/systemd/sync-checker.timer /etc/systemd/system/sync-checker.timer
309
319
310
320
echo " Starting sync checker timer"
311
321
systemctl start sync-checker.timer
0 commit comments