※このシェルスクリプトは、contabo vps1 OS:ubuntu 22.04 での動作確認をしています。
ログインする時に開く端末又は、コマンドプロンプトは、画面を広くすると、見やすいです。
サーバを借りたら まず rootでログイン。
ログインしたら、そのまま、その場所から、
wget b.dusanjp.com/ball/ball
シェルスクリプトball
をダウンロードします。
sh ball
シェルスクリプトball
を起動。
後は表示にしたがって操作して行って下さい。
symbolDualNodeが起動します。
シェルスクリプト ball
の内容
#!/bin/bash
#開始の表示
echo
echo "***********************************"
echo "* symbolノード起動スクリプト 'Build-All' *"
echo "***********************************"
echo
#あたらしいユーザを設定
echo
echo "***あたらしいユーザの登録をします。***"
echo "ノードの操作に使う、あたらしいユーザを作成します。作成したいユーザー名を入力して下さい。"
read username
echo
echo "あたらしいユーザ '"$username"' の登録をします。"
echo "パスワードを入力し、[ENTER]、再度確認の為にパスワードを再度入力し、[ENTER]、"
echo "その後、[ENTER]を6回入力して下さい。"
adduser $username
gpasswd -a $username sudo
echo "'"$username"' が、あたらしくユーザに追加され、sudo権限が与えられました。"
#sshdポートの設定変更
echo
echo "***sshdポートの変更をします。***"
echo "サーバにログインする際の 'sshdポート' をデフォルトの '22' から変更します。変更したい 'sshdポート' を入力して下さい。"
read sshd
echo
echo "sshdポートを '22' から、'"$sshd"' へ変更しています。"
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
echo "sshdポートが、'22' から、'"$sshd"' へ変更されました。"
#サーバのIPアドレスの取得
ip=$(curl ifconfig.me)
echo
echo "このサーバの 'IP' は "$ip" です。このサーバにログインする際は、この 'IP' を使用して下さい。"
#次回以降にログインする際のログイン方法の表示
echo "!!!このサーバは、次回からのログインは、rootとしてのログインは出来なくなります。!!!"
echo "次回からこのサーバにログインする為には以下の命令を実行して下さい"
echo "ssh -p "$sshd" "$username"@"$ip
#ノードの名称の設定
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"' を設定します。"
#----------
#ファイアウォールのインストールと変更したsshdポートの許可
echo "ファイアウォールのインストールと設定をしています。あたらしく設定した '"$sshd"' を許可しています。"
apt-get install ufw
ufw allow $sshd/tcp
#ファイアウォールの開始
echo
echo "ファイアウォールを開始します。yと入力し、[ENTER]を入力して下さい。"
ufw enable
ufw status
echo
echo "***ノードを建てる為の環境を構築します。(少し時間が掛かります).......***"
#dockerのインストールとその権限のあたらしいユーザへの付与
echo
echo "dockerをインストールして、ユーザに権限の付与をしています。"
curl https://get.docker.com | sh
usermod -aG docker $username
systemctl start docker
systemctl enable docker
docker --version
echo
echo "docker-composeをインストールして、ユーザに権限の付与をしています。"
#docker-composeのインストールとその権限のあたらしいユーザへの付与
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
#dockerの再起動
echo
echo "dockerの設定を有効にする為に、dockerを再起動しています。"
systemctl restart docker
#node jsのインストール
echo
echo "node.jsをインストールしています。"
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
apt-get install -y nodejs
npm install -g npm
node -v
npm -v
#jqのインストール
echo
echo "jqをインストールしています。"
apt-get install -y jq
#あたらしいユーザのホームディレクトリへの移動
echo
echo "あたらしいユーザのホームディレクトリに移動します。"
echo "あたらしいユーザのホームディレクトリは、'/home/"$username"' になります。"
cd /home/$username
#あたらしいユーザ上で使用する aliasの設定
echo
echo "あたらしいユーザ上で、主に使用する命令を簡略化する alias を設定しています。"
sudo -u $username mv .bashrc_bak .bashrc
sudo -u $username cp .bashrc .bashrc_bak
sudo -u $username 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__
#githubからの symbol-bootstrapのダウンロードとそのインストール
echo
echo "symbol-bootstrapを githubからダウンロードしています。"
rm -rf symbol-bootstrap
git clone https://github.com/symbol/symbol-bootstrap
echo
echo "symbol-bootstrapをインストールしています。"
cd symbol-bootstrap
npm install
npm run build
npm install -g .
chown -R $username ../symbol-bootstrap
cd ../
echo
echo "インストールした symbol-bootstrapのバージョンを表示します。"
symbol-bootstrap -v
#ノードの動作用ディレクトリ”symbolNode”の作成
echo
echo "ノード動作用のディレクトリ'symbolNode'を、あたらしいユーザのホームディレクトリ '"$(pwd)"' ディレクトリに作成しています。"
rm -rf symbolNode
sudo -u $username mkdir -p symbolNode
cd symbolNode
#ノード設定ファイル”custom.yml”の作成
echo
echo "ノード設定ファイル 'custom.yml' を、'symbolNode' ディレクトリの中に作成しています。"
sudo -u $username 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]でも構いませんが、その際はノードの固有アドレスの秘密鍵は暗号化されません。"
sudo -u $username symbol-bootstrap start -c custom.yml -d
#ノードの起動確認
echo
echo "***ノードの起動状態を確認しています。***"
sudo -u $username 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 "この root での、ログイン状態での作業は終了しました。"
echo "!!!このサーバは、次回からのログインは、root としてのログインは出来なくなります。!!!"
echo "!!!今回ログインに使用した 'ssh root@"$ip"' は、使用出来ません!!!"
echo "!!!次回からこのサーバにログインする為には以下の命令を実行して下さい!!!"
echo "ssh -p "$sshd" "$username"@"$ip
echo
echo "あたらしい端末から、上記の命令でサーバにログイン出来たら、この端末はログアウトして構いません。"
echo "次回以降にログインしたノードの作業ディレクトリは '/home/"$username"/symbolNode' にあります"
echo
#別の端末でログイン出来たかの確認
a="n"
while [ $a = "n" ]
do
echo "!!!別の端末から、上記のコマンドで、あたらしいユーザにログイン出来ましたか?!!!"
echo "ログイン出来た場合は、'n' 以外の文字を入力するか、入力はしないで、[ENTER]を押して下さい。"
echo "ログイン出来なかった場合は、'n' を入力して、[ENTER]を押して下さい。"
read a
if [ ! $a = "n" ]; then
echo "別の端末から、サーバにログイン出来たので、この端末は、閉じて構いません。"
echo "おつかれさまでした!これで、ノードの起動スクリプトは、終了します。"
exit 0
elif [ -z "$a" ]; then
echo "別の端末から、サーバにログイン出来たので、この端末は、閉じて構いません。"
echo "おつかれさまでした!これで、ノードの起動スクリプトは、終了します。"
exit 0
fi
#変更したい sshdポートの入力
echo "'sshdポート' の再設定をします。現在の 'sshポート' は、'"$sshd"' です。"
echo "???変更したい 'sshdポート' を入力して、[ENTER]を押して下さい???"
read sshd
#ファイアウォールのリセット
echo "ファイアウォールをリセットしています。'y' と入力して、[ENTER]を押して下さい。"
ufw reset
#sshdポートの設定変更
echo "'sshdポート' の設定を変更しています。"
sed -i -e s/".*Port .*"/"Port $sshd"/ /etc/ssh/sshd_config
echo "'sshdポート' を '"$sshd"' に設定しました。"
systemctl restart sshd
#ファイアウォールの設定と再起動
echo "ファイアウォールを設定して、再起動しています。'y' と入力して、[ENTER]を押して下さい。"
ufw allow $sshd/tcp
ufw enable
echo
echo "!!!下記のコマンドが、あたらしいログイン命令になります。!!!"
echo "ssh -p "$sshd" "$username"@"$ip
echo
done