海外VPSのLinodeにSugarchainのフルノードを立ててみた

Sugarchain How to setup a fullnode of Sugarchain on a VPS

Bitcoinから派生して誕生したSugarchainは、Bitcoinと同様に、「フルノード」(Full Node)と呼ばれる多数のコンピューター同士の結びつきによってネットワークが形成され、ブロックチェーンが維持されています。

フルノードを運用するために特別なコンピューターは必要ありません。自宅や会社のパソコンや安価なレンタルサーバー(VPS)で十分です。

今回のブログでは、レンタルサーバー(VPS)を借りてSugarchainのフルノードを構築、運用するための手順をご紹介します。

フルノードとは?

フルノードの簡単な説明が bitwallet.com にあるので引用します。

ノードにはマイニング・ウォレット・ルーティング・フルブロックチェーンデータという4種類があります。この4種類の機能を全て兼ね備えているノードがフルノードです。また、単にフルブロックチェーンデータを保有しているノードのことをフルノードと呼ぶこともあります。

フルブロックチェーンとは全ての取引情報を保有・管理・共有している状態のことです。基本的に公式ウォレットは全ての取引情報をダウンロード(同期)するので、フルノードと呼べます。Electrumなどの軽量型ウォレットではブロックチェーンの同期は必要ないので、フルノードではありません。

引用 bitwallet.com

…と言われても何のことだかさっぱりわからなかった私は、ネット上の色々な資料を読んで次のように理解ができました。(間違いがあったら指摘してください)

  1. フルノードとは、すべてのブロックチェーン情報を保有しているコンピューター(のプログラム)のこと。
  2. フルノード同士が繋がってブロックチェーン情報を共有することでBitcoinやSugarchainのネットワークができている。
  3. Bitcoinのパソコン版の公式ウォレット「Bitcoin Core」は、すべてのブロックチェーン情報を他のフルノードからダウンロードして保有するので、フルノードになれる。
  4. 「Bitcoin Core」から派生したSugarchainのウォレット「Yumekawa」も同様である。
  5. これらのウォレットは、ブロックチェーン情報をダウンロードするので、同期に時間がかかる。また、ブロックチェーン情報を保存するための、ある程度のストレージを消費する。
  6. これらのウォレットを自宅や会社のコンピューターで動作させても、通常はファイアーウォールの中に置かれていて外部のフルノードから接続できないから、フルノードとしての運用はできない。
  7. ファイアーウォールの設定を変更して外部のフルノードからの接続を許可すれば、フルノードになる。
  8. スマホのウォレットアプリなどはブロックチェーン情報を保有しない(ダウンロードしない)のでフルノードではない。
  9. これらのアプリは、自分でブロックチェーン情報を保有していないので、例えばウォレット運用企業のコンピューターに保有されているブロックチェーンを参照する必要がある。

要するに、ブロックチェーンの全情報を保有するウォレットプログラムを動作させ、他のものとお互いに接続し合えるようにすれば、フルノードとしてネットワークに参加できますよ、ということです。

なお、フルノードはマイニングではありませんので、フルノードを運用してネットワークの維持に貢献しても報酬はありません。完全なボランティアになります。

レンタルサーバー(VPS)を利用

今回も、定評のあるLinodeを使ってみることにします。

Linode Green Image

自宅のパソコンでも良いのですが、24時間電源を入れっぱなしにしたりファイアーウォールの設定を変更するのはどうも面倒で、VPSを借りた方が楽ですし、安心です。

Linodeは、米国ペンシルベニア州で設立された海外VPS企業です。東京にもデータセンターがあり、国内VPSと同じようなレスポンス速度で利用できます。

世界中のどのデータセンターのVPSを利用しても値段は変わりませんが、支払いはUSDになります。

ここからアカウント作成すると60日間 $100 ドル分の無料体験ができます。

MEMO
アカウント作成時にクレジットカードの登録が必要ですが、初めの60日間、最大 $100 ドル分は課金されません。

Linodeでマイニングする手順については別記事を参照してください。

Sugarchain mining on Linode 海外VPSのLinodeにSugarchainマイニング環境を構築する

VPSの構築手順

それでは、実際にLinodeでVPSを立ち上げて、ウォレットのプログラムをインストールし、フルノードとして運用する手順を紹介します。

VPSを立ち上げる

ログイン画面からログインし、VPSの一覧管理画面を表示します。

[Create] > [Linode] または [Create a Linode] を選択します。

新しいVPSインスタンスの作成を開始

VPSのスペックを設定する画面が表示されます。

VPSインスタンスのスペック設定

[Choose a Distribution] で、VPSにインストールするLinuxのディストリビューション(Linuxの種類)を選択します。Ubuntu 20.04 LTS か Ubuntu 18.04 LTS を選択すれば間違いないです。

[Region] は Tokyo か Singapore を選択しましょう。近い場所のほうがレスポンスが速くて使いやすいです。

[Linode Plan] では CPU やメモリ容量を選択します。ここでは一番小さなの「Nanode 1GB」を選ぶことにします。

MEMO
他のプランの名称が「Linode」の中、この最小プランの名称だけが「Nanode」になっていますが、「とても小さい」を意味する「Nano」をかけているだけで、何か特別な仕様になっているわけではありません。

Sugarchainのマニュアルによると、フルノードの運用には1GBのメモリと3GBのスワップが必要です

参考 Running a Sugarchain Node on LinuxGitHub

「Nanode 1GB」で利用できるメモリは1GB、スワップは0.5GBですが、後からスワップを追加できるので、問題ありません。

画面を下へスクロールします。

VPS作成

[Linode Label] 欄でVPSの名前を設定します。ここでは「tokyo2」としました。

[Root Password] には管理者ログイン用のパスワードを入力します。これを紛失するとVPSにログインできなくなるので注意しましょう。

[SSH Keys] では公開鍵暗号方式でログインするための公開鍵を登録できます。公開鍵暗号方式を使うことでセキュリティを高め、さらにログイン時にパスワードを入力する必要がなくなるのですが、説明が長くなるため、ここでは割愛します。

[Create] をクリックすると、指定したスペックや設定でVPSが作成されます。

暫く待つと左上に緑色の丸と「RUNNING」が表示されます。これでVPSが作成と起動が完了です。

VPSの稼働状況やIPアドレスなどを確認

管理者「root」でVPSにログイン

Windows環境では「PowerShell」、Mac環境では「ターミナル」などのアプリを起動します。

上図の [SSH Access] 欄に表示されているコマンドをコピーし、アプリに貼り付け、Enter キーを押して実行します。

SSHでVPSインスタンスへ接続する

初回実行時、本当に接続してよいかどうかの確認メッセージが表示されるので、キーボードから「yes」と入力して Enter キーを押します。

パスワードを求められるので、キーボードから入力して Enter キーを押します。入力するパスワードは画面には表示されません。

rootユーザーでログイン認証

認証に成功すると、WelcomeメッセージやVPSの情報が表示され、コマンドの入力待ちの状態になります。

ログインに成功

以上で、VPSへ管理者「root」でSSHログインできることが確認できました。

一般ユーザーの作成

VPSに管理者のユーザー名「root」とパスワードでログインできましたが、「root」アカウントを多用することはセキュリティ上好ましくないとされています。

Linuxの管理者名は「root」だと広く知られており、残るパスワードを推測されたら簡単にハッキングされてしまうからです。

VPSのセキュリティを高めるには、一般的に次の方法があります。

  1. 「root」アカウントでのログインを禁止し、代わりに一般ユーザーでログインする。
  2. パスワード方式ログインを禁止し、公開鍵認証方式のみを許可する。

1の場合、ハッカーがログインするにはパスワードだけでなくユーザー名も知る必要があります。

2の場合、「鍵」を持つパソコンからしかログインできなくなります。パスワードが漏洩しても大丈夫です。

2の方が遥かに安全なのですが、比較的高度な(?)設定が必要なので、ここでは1の方法を採ることにします。ま、それほど重要なデータを管理運用するわけではないので。

ここでは、adduser コマンドを使って「manabu」という名前の一般ユーザーを作成します。

adduser manabu

パスワード以外は何も入力しないで Enter キーを連打するだけでOKです。

一般ユーザー「manabu」の作成

ユーザー「manabu」が作成できたら、このユーザーを「sudo」と呼ばれる管理者グループに登録します。

usermod -G sudo manabu

次回からは、「root」の代わりに「manabu」でログインし、管理者用のコマンドは常に sudo コマンドを付けて実行するようにします。

「manabu」でログインできるかどうか確認するため、一旦VPSからログアウトします。

exit

一般ユーザー「manabu」でVPSにログイン

次のように、「@」記号の前を一般ユーザー「manabu」に変更し、ログインできるかどうかを確認します。

ssh manabu@139.162.116.58

パスワードを入力して認証されれば、下図のようにWelcomeメッセージが表示されます。

LinodeのVPSでは、一般ユーザーのプロンプト(入力待ちを示すしるし)は緑色で表示されるようですね。

ユーザー「manabu」でVPSインスタンスにログイン

最新の状態に更新

今回VPSにインストールしたのは、Linuxの一種である「Ubuntu」というオペレーティング・システムです。

Windowsに「Windows Update」があるように、Ubuntuにもアプリを更新したりセキュリティを最新の状態に保ったりするための機能「apt」があります。

次のコマンドを実行して、Ubuntuを最新の状態に更新します。

sudo apt update && sudo apt -y upgrade

完了するまでにしばらく待ちましょう。

スワップファイルの増設

最小プランである「Nanode」で利用できるメモリの容量は1GBです。フルノードの運用には1GBのメモリと3GBのスワップが必要とされています。

参考 Running a Sugarchain Node on LinuxGitHub

ここでは余裕を持って6GBのスワップを追加することにします。

ルートディレクトリに6GBの空のファイルを swapfile という名前で作成し、それをスワップに適用します。

sudo fallocate -l 6G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

これでルートディレクトリに swapfile というスワップファイルが作成されました。

ただ、これだけだとVPSを再起動すると無効に戻ってしまいます。再起動しても有効にするには、この swapfile/etc/fstab に登録します。

テキストエディタ「vi」を使って /etc/fstab ファイルを編集します。

sudo vi /etc/fstab

2行目に既存のスワップの記述があるので、これを3行目にコピーし、行頭を /swapfile に書き換え、ファイルを上書き保存します。

/dev/sda / ext4 defaults 0 0
/dev/sdb none swap defaults 0 0
/swapfile none swap defaults 0 0

下図はテキストエディタ「vi」で編集している場面です。

/etc/fstabに追加スワップファイルを登録

これで、VPSが起動するときに /swapfile がスワップとして使用されるようになります。

コマンド free -h を実行し、スワップの容量が6.5GBになったことを確認します。

スワップのサイズを確認

ホスト名(VPSの名称)設定

コマンドの入力待ちの部分には「manabu@localhost」と表示されていますが、これは「localhostという名前のサーバーにmanabuというユーザーでログイン中」という意味です。

複数のVPSを運用する場合、どのVPSにログインしても「manabu@localhost」と表示されるので、自分がどのVPSを操作しているのかわからなくなり、混乱しがちです。

そこで、VPSの名前「localhost」をわかりやすいものに変更しましょう。ここでは「tokyo2」という名前に変更します。

次のコマンドを実行すると、/etc/hostname ファイルに「tokyo2」という名前が記入されます。

echo "tokyo2" | sudo tee /etc/hostname

次のコマンドを実行してVPSを再起動します。実行した瞬間にSSHの接続が強制解除されます。

sudo shutdown -r now

VPSの再起動が完了するまでしばらく待ち、再び手元のPCから ssh コマンドを実行してVPSに接続します。

ssh manabu@139.162.116.58

下図のように、設定した名称が反映されていることを確認します。

VPSのホスト名を変更

SSHの設定

今回は、SSHが使用するポート番号も変更し、セキュリティを高めておきます。

SSHが標準で使用するポート番号が22番であることは、ネットワークの基本中の基本事項。ネットワークを学んだ人なら誰でも知っています。

ハッカーは、まずVPSの22番ポートを叩いて侵入を試みてきます。別のポート番号を使用することで、22番ポートが塞がり、ハッカーは開いているSSHポートを探さなければならなくなり、侵入する難易度が増します。

SSHの設定は /etc/ssh/sshd_config というファイルに記述されています。テキストエディタ「vi」で編集します。

sudo vi /etc/ssh/sshd_config

「Port」と書かれた行頭のシャープ記号を削除し、「22」番ポートを例えば「12222」番に変更します。

# Port 22
    ↓
Port 12222

また、「PermitRootLogin」の設定を「yes」から「no」に変更し、管理者「root」のログインを禁止します。

PermitRootLogin yes
    ↓
PermitRootLogin no

SSHサーバーの設定ファイルを編集

上書き保存して「vi」を終了したら、SSHのサーバープログラムを再起動します。

sudo systemctl restart sshd

一旦ログアウトします。

exit

SSHのポート番号を12222に変更したので、次のように -p 12222 として使用するポート番号を指定します。これでログインできることを確認します。

ssh -p 12222 manabu@139.162.116.58

また、ユーザー「root」のログインを許可しない設定に変更したので、次のようにユーザー「root」でログインを試みると「Permission denied」(権限が許可されていない)エラーとなってログインに失敗します。

manabu@marie ~ % ssh -p 12222 root@172.104.114.162
root@172.104.114.162's password:
Permission denied, please try again.

ファイアーウォール

デフォルトでは、ファイアウォール機能である「UFW」がインストールされています。UFWの状況は、以下の方法で確認できます。

sudo ufw status

デフォルトでは「Status: inactive」というメッセージが表示されます。これは、インストールされているが有効になっていない(無効状態)であることを表しています。

今回のVPSは、SSHとSugarchainのポートを開放します。SSHが使用するのはTCPの12222番、Sugarchainが使用するのは34230番なので、次のようにそれぞれの番号を指定して実行します。

sudo ufw allow 12222/tcp
sudo ufw allow 34230/tcp
sudo ufw enable

これで12222番と34230番ポートだけが開放されたファイアーウォールが設定されました。

再度 sudo ufw status を実行して設定状況を確認します。

manabu@tokyo2:~$ sudo ufw status
Status: active

To Action From
-- ------ ----
12222/tcp ALLOW Anywhere
34230/tcp ALLOW Anywhere
12222/tcp (v6) ALLOW Anywhere (v6)
34230/tcp (v6) ALLOW Anywhere (v6)

ファイアーウォールが正しく設定されているか(自分のパソコンから12222番ポートでSSH接続できるかどうか)を確認します。

VPSから exit でログアウトします。

exit

12222番ポートへのSSH接続が成功すればOKです。

ssh -p 12222 manabu@172.104.114.162

ウォレットのセットアップ手順

仮想通貨の「ウォレット」と言うと、「コインを貯める場所」というイメージがありますが、Sugarchainの「Yumekawa」やBitcoinの「Bitcoin Core」などには、お互いに接続してブロックチェーンの情報を共有し合い、分散型ネットワークを形成する役割があります。

通常、パソコンでウォレットを起動しても、外部からパソコンへのアクセスは防御されているので、「お互いに」ブロックチェーン情報を共有することはできません。

しかし、今回紹介する方法では、ファイアーウォールの34230番ポートを開放しているので、世界中のフルノード達と「お互いに」ブロックチェーン情報を共有します。つまり、自分のVPSがSugarchainのネットワークに参加し、分散化に貢献することになります。

それでは、Sugarchainのウォレット「Yumekawa」をセットアップしましょう。

ダウンロードとインストール

Sugarchainのウォレット「Yumekawa」をGitHubからダウンロードし、インストールします。

wget https://github.com/sugarchain-project/sugarchain/releases/download/v0.16.3.36-payapoya/sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz

Yumekawaのパッケージをダウンロードする

ダウンロードしたファイルを展開(解凍)します。

tar zvxf sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz

ダウンロードしたファイルはもう不要なので削除します。

rm sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz

展開して作成された sugarchain-0.16.3 というディレクトリ(フォルダ)の、サブディレクトリ bincd コマンドを使って移動します。

cd sugarchain-0.16.3/bin

ディレクトリに含まれているファイルを ls -l コマンドを使って表示、確認します。

manabu@tokyo2:~/sugarchain-0.16.3/bin$ ls -l
total 62116
-rwxr-xr-x 1 manabu manabu 2817912 Jan 24 13:27 sugarchain-cli
-rwxr-xr-x 1 manabu manabu 35146800 Jan 24 13:27 sugarchain-qt
-rwxr-xr-x 1 manabu manabu 3145408 Jan 24 13:27 sugarchain-tx
-rwxr-xr-x 1 manabu manabu 9983768 Jan 24 13:27 sugarchaind
-rwxr-xr-x 1 manabu manabu 12507224 Jan 24 13:27 test_sugarchain

sugarchaind がウォレット本体、sugarchain-cli がウォレットに命令を出して操作するプログラムになります。

ウォレットの起動

sugarchaind をデーモンとして起動します。

./sugarchaind -daemon
MEMO
デーモンとは「悪魔」ではなく、バックグラウンドで動作するプログラムのことです。

無事に起動すると「Sugarchain server starting」というメッセージが表示されます。

ウォレットの終了

sugarchaind が無事に起動することを確認できたら、一旦終了します。

次のように pidof コマンドを実行して、sugarchaind のPIDを調べます。PIDとは、プログラムの実行番号のようなものです。

pidof sugarchaind

表示されたPIDを指定して kill コマンドを実行します。例えば、PIDが1234の場合は次のようにします。

kill 1234

数秒待つと sugarchaind が終了します。

設定ファイルの編集

ユーザー「manabu」のhomeディレクトリに .sugarchain という隠しディレクトリが作成され、その中にウォレットのデータが格納されます。

その .sugarchain ディレクトリに sugarchain.conf というファイルを作成し、その中にウォレットの動作パラメーターを記述します。

vi ~/.sugarchain/sugarchain.conf

エディター「vi」の起動直後は閲覧モードになっているので、キーボードの i キーを押して編集モード(挿入モード)に変更します。

次の内容を記述します。

server=1
rpcuser=manabu
rpcpassword=manabuPW

rpsuser=rpcpassword= は適当なものに変更してください。

記述したら、ESC キーを押して閲覧モードに戻り、大文字の Z キーを2回押して上書き保存+終了します。

CPU使用率の抑制

sugarchaindは、CPUパワーを大きく消費することがあり、それが長時間に及ぶとLinodeから警告のメールが届くことがあります💦

CPU使用率を制御するため cpulimit を使います。

標準では cpulimit はインストールされていないため、次のコマンドでインストールします。

sudo apt -y install cpulimit

ウォレットの sugarchaind が起動していない場合はまず起動し、次に -l パラメーターで使用率(パーセント)を、-p パラメーターで sugarchaind のPIDを指定して cpulimit を実行します。

./sugarchaind -daemon
cpulimit -z -l 10 -p `pidof sugarchaind` &
MEMO
バッククォート記号で囲まれた `pidof sugarchaind` は、バッククォート内を実行した結果が反映されます。pidof は指定したプログラムのPIDを調べるコマンドです。つまり、このコマンド全体は、pidof コマンドで sugarchaind のPIDを調べて、その結果があれば -p パラメーターで cpulimit コマンドに渡す、という動作になります。

ログファイルの更新

sugarchaind の動作状況は、ユーザー「manabu」のhomeディレクトリにある .sugarchain という隠しディレクトリの中の debug.log というファイルにどんどん記録されていきます。

どんどん流れていくログの内容を確認するには tail -f コマンドを使うと便利です。

tail -f ~/.sugarchain/debug.log

終了するには Ctrl + C キーを押します。

このファイルには sugarchaind の動作状況がどんどん書き込まれ、どんどん肥大化していきます。ファイルがストレージを圧迫する前に、ある程度大きくなった時点でリセット(更新)する必要があるでしょう。

それを実現するのが logrotate で、毎日、毎週、決められた間隔で特定のファイルをリセットしてくれます。

/etc/logrotate.d ディレクトリの中に「sugarchaind のログを毎日リセットし、4世代まで保存しなさい」という設定ファイル sugarchaind_log を設置します。

sudo vi /etc/logrotate.d/sugarchaind_log

次の内容を記述します。

/home/manabu/.sugarchain/debug.log
{
  missingok
  daily
  copytruncate
  rotate 4
  maxage 4
  notifempty
}

テキストエディタ「vi」の終了は、ESC キーを押して閲覧モードに戻り、大文字の Z キーを2回押す、ですね。

動作テストは次のコマンドで。

sudo logrotate -fv /etc/logrotate.conf

~/.sugarchain ディレクトリの中で、既存の debug.logdebug.log.1 debug.log.2 … という名前に変更されていくことを確認します。

ログファイルのローテーション

フルノードの地図

世界中に設置されているフルノードのおおよその場所は、下記のページの地図に描かれています。

参考 Sugarchain Node Maphttps://map.okoto.xyz/sugar

それほど頻繁に更新されるわけではないようなので、自分の設置したVPSが出現するまで気長に待ちましょう。

日本近辺のSugarchainフルノードの地図

2021/04/18 追記

ようやく地図が更新され、私のフルノードが地図に出現しました!皇居のど真ん中です!

東京のど真ん中にSugarchainのフルノードが出現

まとめ

以上、海外VPSのLinodeにSugarchainのフルノードを立ち上げる手順を紹介しました。

マイニング用プログラム(マイナー)を設置して実行するだけで良かった前回に比べて、ウォレットの設置や設定の手間が増えるため、ちょっと難しく感じるかもしれませんね。

フルノードを設置してネットワークの維持に貢献しても金銭的なメリットはありませんので、Linodeの無料体験を利用するか、すでに別の用途で運用しているVPS(あれば)を使うなど、負担のかからないやり方で参加してみるのが良いと思います。

この記事がお役に立てば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です