Build All (ball-u1)(ball-u2)　サーバがあったらすぐ SYMBOLノード！(既にサーバに userAccountがあるサーバ用)

**※このシェルスクリプトは、contabo vps1 OS:ubuntu 22.04 での動作確認をしています。**
　
　
 ログインする時に開く端末又は、コマンドプロンプトは、画面を広くすると、見やすいです。　
サーバに userAccountでログイン。
　
　
ログインしたばかりのその場所、ホームディレクトリから
```
wget b.dusanjp.com/ball/ball-u1
```
シェルスクリプト`ball-u1`をダウンロード。
　
　
```
sh ball-u1
```
シェルスクリプト`ball-u1`を起動。
後は表示にしたがって操作して行って下さい。
symbolDualNodeが起動します。
　
　
**シェルスクリプト `ball-u1` の内容**
```
#!/bin/bash

#開始の表示
echo 
echo "＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊"
echo "＊　　　　 symbolノード起動スクリプト 'Build-All' 環境構築　　　　　＊"
echo "＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊"
echo 

#サーバのIPアドレスの取得
ip=$(curl ifconfig.me)
echo 
echo "このサーバの 'IP' は "$ip" です。このサーバにログインする際は、この 'IP' を使用して下さい。"


echo 
echo "＊＊＊ノードを建てる為の環境を構築します。（少し時間が掛かります）.......＊＊＊"

#dockerのインストールとその権限のあたらしいユーザへの付与
echo 
echo "dockerをインストールして、ユーザに権限の付与をしています。"
echo
echo "次に停止して、入力待ちになった時に、パスワードの入力を求められます。"
echo "現在のユーザアカウントのログインパスワードを入力して、[ENTER]を押して下さい。"
curl https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo systemctl start docker
sudo systemctl enable docker
docker --version

echo 
echo "docker-composeをインストールして、ユーザに権限の付与をしています。"
#docker-composeのインストールとその権限のあたらしいユーザへの付与
sudo curl -L https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

#dockerの再起動
echo 
echo "dockerの設定を有効にする為に、dockerを再起動しています。"
sudo systemctl restart docker

#node jsのインストール
echo 
echo "node.jsをインストールしています。"
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g npm
node -v
npm -v

#jqのインストール
echo 
echo "jqをインストールしています。"
sudo apt-get install -y jq

#ユーザ上で使用する aliasの設定
echo 
echo "主に使用する命令を簡略化する alias を設定しています。"
cd 
alias=`cat .bashrc|grep "symbol-bootstrap run -d"`
if [ -z "$alias" ]; then
cat << __EOD__ >> .bashrc

alias run="symbol-bootstrap run -d"
alias stop="symbol-bootstrap stop"
alias hc="symbol-bootstrap healthCheck"
alias ci="curl localhost:3000/chain/info|jq"
alias ni="curl localhost:3000/node/info|jq"
alias np="curl localhost:3000/node/peers|jq"
alias nu="curl localhost:3000/node/unlockedaccount|jq"
alias ns="curl localhost:3000/node/server|jq"
alias nep="curl localhost:3000/network/properties|jq"
alias nef="curl localhost:3000/network/fees/rental|jq"
alias up="docker-compose up -d"
alias down="docker-compose down"
alias dp="docker ps"
alias od="od -L target/nodes/node/data/index.dat | awk 'BEGIN{}{print $2}'"
alias pn="cat target/nodes/node/server-config/resources/*node*"
alias ph="cat target/nodes/node/server-config/resources/*har*"
alias pf="cat target/nodes/node/server-config/resources/*fin*"
alias nm="curl localhost:3000/node/metadata|jq"
alias nginxstart="sudo systemctl start nginx"
alias nginxstop="sudo nginx -s quit"
alias nginxstatus="systemctl is-active nginx"
alias nch="curl localhost:7890/chain/height|jq"
alias nni="curl localhost:7890/node/info|jq"
alias nnm="curl localhost:7880/nr/metaData|jq"
alias nstop="sudo pkill -SIGTERM -f org.nem"

__EOD__

fi


#githubからの symbol-bootstrapのダウンロードとそのインストール
echo 
echo "symbol-bootstrapを githubからダウンロードしています。"
rm -rf symbol-bootstrap
#git clone https://github.com/symbol/symbol-bootstrap
git clone https://github.com/nemneshia/symbol-bootstrap.git
echo 
echo "symbol-bootstrapをインストールしています。"
cd symbol-bootstrap
npm install
npm run build
sudo npm install -g .
echo "インストールした symbol-bootstrapのバージョンを表示します。"
symbol-bootstrap --version

cd 
wget b.dusanjp.com/ball/ball-u2
echo "＊＊＊ノードを建てる為の環境設定が完了しました。＊＊＊"
echo "'exit[ENTER]'と入力して、一旦、このサーバからログアウトして、このサーバに再ログイン後、"
echo "ホームディレクトリから、 'sh ball-u2' と命令して下さい。"
echo "ball-u2では、ノードを建てる作業を行います。"

```
　
　
**シェルスクリプト `ball-u2` の内容**
```
#!/bin/bash

#開始の表示
echo 
echo "＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊"
echo "＊　　　　symbolノード起動スクリプト 'Build-All' ノード起動　　　　 ＊"
echo "＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊"
echo 
#サーバのIPアドレスの取得
ip=$(curl ifconfig.me)

#ノードの名称の設定
echo
echo "＊＊＊symbolノードの作成の為の設定をします。＊＊＊" 
echo "symbolノードに付ける名称 'friendlyName' を入力して下さい。"
read friendlyname
echo "ノード設定の 'friendlyName' 設定には、'"$friendlyname"' を設定します。"

#サーバのIPアドレスの表示
echo 
echo "このサーバの IP は、'"$ip"' です。ノードの 'host' 設定には、この IP '"$ip"' を設定します。"

#ノードの networkの設定
echo 
echo "ノードの network を選択して下さい。networkは、'testnet' と、'mainnet' があります。"
echo "'m' を入力して[ENTER]で、mainnet になります。"
echo "それ以外の文字を入力して[ENTER]で、testnet になります。"
read a

if [ $a = "m" ]; then
        network="mainnet"
else
        network="testnet"
fi
echo "ノードの 'network' 設定には、'"$network"' を設定します。"
echo 
echo "＊＊＊次に、ノードを作成します。＊＊＊"
echo "続けるには、[ENTER]を押して下さい。"
read a

#ノードの動作用ディレクトリ”symbolNode”の作成
echo 
echo "ノード動作用のディレクトリ'symbolNode'を、'"$(pwd)"' ディレクトリに作成しています。"
rm -rf symbolNode
mkdir -p symbolNode
cd symbolNode

#ノード設定ファイル”custom.yml”の作成
echo "ノード設定ファイル 'custom.yml' を、'symbolNode' ディレクトリの中に作成しています。"
cat <<EOF > custom.yml
assembly: dual
preset: $network

nodes:
    -
        host: $ip
        friendlyName: $friendlyname
        #voting: （ﾃﾞﾌｫﾙﾄでは false 有効にする場合は true）
        #beneficiaryAddress: （ﾃﾞﾌｫﾙﾄでは mainAccountのｱﾄﾞﾚｽ）
        #maxUnlockedAccounts: （ﾃﾞﾌｫﾙﾄでは 10）
        #minFeeMultiplier: （ﾃﾞﾌｫﾙﾄでは 100）
        
        #以下の4行はあらかじめﾉｰﾄﾞｱﾄﾞﾚｽを決める時に秘密鍵を設定する
        mainPrivateKey: #mainの秘密鍵
        transportPrivateKey: #transportの秘密鍵
        remotePrivateKey: #remoteの秘密鍵
        vrfPrivateKey: #vrfの秘密鍵

#httpsを有効にする為には以下の3行の"#"を削除して下さい。hostにﾄﾞﾒｲﾝが設定されている事が必要です。       
#httpsProxies:
#    -
#        excludeDockerService: false

EOF

#ノード設定ファイルの表示と説明
echo 
echo "＊＊＊以下に表示するものは、ノード設定ファイル 'custom.yml' の内容です＊＊＊"
echo 
echo "---ノードの設定ファイル 'custom.yml' ここから---"
cat custom.yml
echo "---ノードの設定ファイル 'custom.yml' ここまで---"
echo 
echo "ノードの設定を変更する際には、このファイル 'custom.yml' を変更して下さい。"
echo "このノード設定ファイルは、'symbolNode/custom.yml' にあります。"
echo "'custom.yml' の変更は、"
echo "'cd symbolNode' で、作業ディレクトリ 'symbolNode' に入って、"
echo "'symbol-bootstrap stop' で、ノードを停止させてから、"
echo "'vi custom.yml' で、編集、変更を保存して下さい。"
echo "'symbol-bootstrap start -c custom.yml --upgrade -d' で、変更がノードに反映します。"
echo 
echo "＊＊＊これから、ノードを開始します。続けるには、[ENTER]を押して下さい。＊＊＊"
read a

#一括でノードを開始
echo 
echo "＊＊＊ノードを開始しています。＊＊＊"
echo "ノードを操作する際に入力するパスワードを設定します。パスワードを入力したら、[ENTER]を入力して下さい。"
echo "パスワードを入力せずに[ENTER]でも構いませんが、その際はノードの固有アドレスの秘密鍵は暗号化されません。"
symbol-bootstrap start -c custom.yml -d

#ノードの起動確認
echo 
echo "＊＊＊ノードの起動状態を確認しています。＊＊＊"
symbol-bootstrap healthCheck
echo 
echo "以上は、'cd symbolNode'"
echo "'symbol-bootstrap healthCheck' で、表示出来ます。"
echo 
echo "＊＊＊ノードが正常に動作を始めました。＊＊＊"
echo "次に、ノードの現在のブロック高を表示します。"
echo "続けるには、[ENTER]を押して下さい。"
read a
curl localhost:3000/chain/info|jq
echo
echo "以上は、'curl localhost:3000/chain/info|jq' で、表示出来ます。"
echo "次に、ノードの情報を表示します。"
echo "続けるには、[ENTER]を押して下さい。"
read a
curl localhost:3000/node/info|jq
echo 
echo "以上は、'curl localhost:3000/node/info|jq' で、表示出来ます。"
echo 
echo "＊＊＊ノードは開始しました。＊＊＊"
echo "次に、ノードの固有アドレスを表示します。"
echo "続けるには、[ENTER]を押して下さい。"
read a

#ノードアドレスの表示
echo 
echo "以下に表示するものは、ノードの固有アドレスを記録した、'addresses.yml' の内容です。"
echo "このノード固有アドレスファイルは、'symbolNode/target/addresses.yml' にあります。"
echo "---ノードの固有アドレス 'addresses.yml' ここから---"
cat target/addresses.yml
echo "---ノードの固有アドレス 'addresses.yml' ここまで---"
echo
echo "次に、ノードの状態の確認と、ノードの操作の主な方法を説明します。"
echo "続けるには、[ENTER]を押して下さい。"
read a

#ノードの状態の確認や操作する主な命令の説明
echo 
echo "ノードの状態を確認するには、"
echo "①　ノードの名前等を見るには、"
echo "curl localhost:3000/node/info|jq"
echo 
echo "②　ノードの同期状態を見るには、"
echo "curl localhost:3000/chain/info|jq"
echo 
echo "③　ノードの接続状態を見るには、"
echo "curl localhost:3000/node/peers|jq"
echo 
echo "④　ノードの健康状態を見るには、"
echo "symbol-bootstrap healthCheck"
echo "又は、"
echo "curl localhost:3000/node/health|jq"
echo 
echo "⑤　ノードの委任状態を見るには、"
echo "curl localhost:3000/node/unlockedaccount|jq"
echo 
echo "⑥ ノードを停止するには、"
echo "cd symbolNode"
echo "symbol-bootstrap stop"
echo 
echo "⑦ ノードを開始するには、"
echo "cd symbolNode"
echo "symbol-bootstrap run -d"
echo 
echo "⑧ノードのブロックデータを削除して同期をやり直すには、"
echo "cd symbolNode"
echo "symbol-bootstrap resetData"
echo  
echo "以上のコマンドを命令して下さい。以上が主なノードを扱う方法です。"


#次回以降にログインする際のログイン方法の表示
echo 
echo "＊＊＊これで、ノード作成と起動作業は、完了しました。＊＊＊"
echo "ノードの作業ディレクトリは '/home/"$USER"/symbolNode' にあります"
echo 
echo "おつかれさまでした！これで、ノードの起動スクリプトは、終了します。"
echo 
```