2024.08.21版　symbol-bootstrapを使用した symbol node作成

windowsでは ｺﾏﾝﾄﾞﾌﾟﾛﾝﾌﾟﾄから
Linuxでは 端末から
contabo cloud vps 3(ubuntu 22.04)に rootで ﾛｸﾞｲﾝ
```
ssh root@ｻｰﾊﾞのIP
```
ｻｰﾊﾞ契約時に登録した ﾛｸﾞｲﾝﾊﾟｽﾜｰﾄﾞを入力

※下の画像の命令では `ssh -p 22 root@81.0.246.247`となってますが `-p 22`は不要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ba38360c-552c-5004-b551-da4daeb9ceef.png)
```
wget 6.dusanjp.com/b
```
この 'b'で
1.通常 loginする user accountを作成 sudo権を付与
2.ssh portを defaultの 22から任意の portへ変更
3.sshでの root loginを禁止
4.ufwの installと sshで loginする portを開く
5.dockerの install(install時での最新)
6.docker-composeの install(v2.24.0)
7.node.jsの install(20.x)
8.jqの install
以上の操作を行う
```
sh b
```
`??? please input new username ???`
通常 loginする accountの usernameを入力

`??? please input new sshd port ???`
sshで loginする portは defaultでは 22だが　これを変更する　任意の portを入力

`New password:`
通常 loginする account の passwordを入力

`Retype new password:`
先程入力した **通常 loginする accountの password**を再入力

```
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] 
```
以上の 6項目は[enter]

`Command may disrupt existing ssh connections. Proceed with operation (y|n)?`
`y`を入力[enter]

**ここで数分待つ**

`Do you want to continue? [Y/n]`
[enter]

`Please log off After this, and use 'up' after re-login with the set sshd / username / password.`

これで 'b'は終了

それぞれが install出来ているかを確認する
```
docker -v
docker-compose -v
node -v
```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/af048842-dcc7-fe0a-4b6a-fca1e7602280.png)
それぞれの ver.が表示されている事を確認
　

端末を新たにもう一つ開き　port22で root loginを試みて login出来ない事を確認

```
ssh -p 22 root@ｻｰﾊﾞのIP
```
上の命令で login出来ない事を確認
　

新たに開いた端末で
**22から変更した ssh port**に **新しく作成した user account**と **新しく作成した user accountの password**で login
```
ssh -p 変更後のsshport 作成したuseraccount@ｻｰﾊﾞのIP
```
新しく設定した user accountの passwordを入力して login
　

上の命令で loginが出来たら
　

rootで loginしていた最初に開いた端末を閉じる
ここからはこちらの**新たに開いた端末**を使用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/3cf6749b-ff8f-9db9-f1ca-20a42a75d6f0.png)


symbol-bootstrapを install

:::note alert
現在は以下の命令では旧ﾊﾞｰｼﾞｮﾝの symbol-bootstrapが installされてしまいます
```
sudo npm install -g symbol-bootstrap
```
:::

:::note info
**現在の symbol-bootstrapの install**
```
git clone https://github.com/symbol/symbol-bootstrap
cd symbol-bootstrap
npm install
npm run build
sudo npm install -g .
cd -
```

:::

上記 symbol-bootstrapの現在の install方法についての詳細は以下を参照

https://qiita.com/dusanjp/items/eb4b47397c5509677dde

symbol-bootstrapの ver.を確認
```
symbol-bootstrap -v
```
2024.08.21の時点での最新は　1.1.11です


testnet用 directoryを作成
```
mkdir testnet
```

`testnet` directoryに入る
```
cd testnet
```

`custom.yml`の 原型を download
```
wget 6.dusanjp.com/custom.yml
```

`custom.yml`を編集
```
vi custom.yml
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/26b54de0-35c2-ea1b-da4e-ac1dbfad21cc.png)

`i`と打鍵し　入力状態にする
自分の環境に合わせ　各設定項目を変更

hostの項目に IPを設定する場合や httpsにしない場合は以下の様に
`https設定`以下を `#`で ｺﾒﾝﾄｱｳﾄする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e66086b7-90b7-af1c-9f96-b6ab948c6323.png)

以下は変更例（今回は testnet nodeを作成）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/812b6d09-2530-b871-9e03-7a0a0d355a77.png)


`esc`を打鍵
`:wq`と入力[enter]

nodeを startする
```
symbol-bootstrap start -c custom.yml -d
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/dc2123f3-3134-ca9f-926e-6b8ce7b22917.png)
nodeの passwordを入力　以後は各操作時にここで入力した passwordが求められる事があるので忘れない様に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/bca7acb2-bd3b-49f8-d535-f841f7663143.png)

**healthCheck**
```
symbol-bootstrap healthCheck
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ef6bfeaf-f709-0512-e37f-81bd70f3a4ce.png)

**node info**
```
curl localhost:3000/node/info|jq
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/616d5535-12a5-d790-58ae-71e4634e9110.png)

**block height**
```
curl localhost:3000/chain/info|jq
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/7d8afc0a-7a9f-65d4-6186-e3f461ec6a28.png)

**node ver.**
```
curl localhost:3000/node/server|jq
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/838ed64b-8b45-b1ab-2bb7-6dedfb42b9b4.png)

**peer nodes**
```
curl localhost:3000/node/peers|jq
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/b1fb30a5-e579-40ba-8308-ff372514b120.png)

**nodeの 復号された privateKeyの取得**
```
symbol-bootstrap decrypt --source target/addresses.yml --destination add.yml
```

nodeの password **(symbol-bootstrap start -c custom.yml -dと命令した時に入力した password)**を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/a03f1660-28d9-dfc0-51f2-73cf2a1bb3f1.png)
この場合`add.yml`名の fileが生成されるので　これを任意の方法で保管
この fileを保管する事で後に nodeが起動不能になった時　又は node passwordを失念した場合にも再生が可能

**nodeの停止**
```
symbol-bootstrap stop
```

**nodeの起動**
```
symbol-bootstrap run -d
```
**通常1年期限の ssl証明書の更新**
```
symbol-bootstrap renewCertificates
symbol-bootstrap stop
symbol-bootstrap run -d
```
ssl証明書の期限の一ヶ月前から更新が可能
期限一ヶ月前より前に更新したい場合
```
symbol-bootstrap renewCertificates --force
symbol-bootstrap stop
symbol-bootstrap run -d
```

**resetData**
blockdataを削除　nodeを最初から起動
```
symbol-bootstrap stop
symbol-bootstrap resetData
symbol-bootstrap run -d
```
----
# `wget 6.dusanjp.com/b`で downloadされる `b`の内容
```
#!/bin/bash

#new username
echo "??? please input new username ???"
read username

#new sshd port
echo "??? please input new sshd port ???"
read sshd
#----------
echo "continue working......."

#usernameset
adduser $username
gpasswd -a $username sudo

#sshdset
sed -i -e s/"#Port .*"/"Port 22"/ /etc/ssh/sshd_config
sed -i -e s/"Port .*"/"Port $sshd"/ /etc/ssh/sshd_config
sed -i -e s/"PermitRootLogin .*"/"PermitRootLogin no"/ /etc/ssh/sshd_config
systemctl restart sshd

#ufw set
apt-get install ufw
ufw allow $sshd/tcp

#ufw start
ufw enable
ufw status

#docker
curl https://get.docker.com | sh
usermod -aG docker $username
systemctl start docker
systemctl enable docker
docker --version

#docker-compose
#ver.
#https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

systemctl restart docker

#node js
#ver.
#https://nodejs.org/en
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
apt-get install -y nodejs
node -v
npm -v

#install jq
apt-get install jq

echo "Please log off After this, and use 'up' after re-login with the set sshd / username / password."
```
# `wget 6.dusanjp.com/custom.yml`で downloadされる`custom.yml`の内容
```
#-a 設定
assembly: dual
#-p 設定
preset: mainnet
#上記を記述すると start/config命令で -p/-aを書かずに済む
#例 symbol-bootstrap start -c custom.yml -dで済む

privateKeySecurityMode: ENCRYPT
nodes:
    -
        host: IPか ﾄﾞﾒｲﾝ
        friendlyName: ﾉｰﾄﾞの名前
        maxUnlockedAccounts: 最大受け入れ委任者数
        minFeeMultiplier: 10 #（ﾃﾞﾌｫﾙﾄでは 100）
        beneficiaryAddress: 報酬の25%を受け取る ｱﾄﾞﾚｽ
        
        #登攀設定
        maxChainBytesPerSyncAttempt: 50MB
        messageSynchronizationMaxResponseSize: 5MB
        blockDisruptorMaxMemorySize: 1000MB

#https設定
httpsProxies:
    -
        excludeDockerService: false
```