9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Build All(ball) サーバを借りたらすぐ SYMBOLノード !

Last updated at Posted at 2024-09-03

※このシェルスクリプトは、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
9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?