monacoindサーバをLightsail上でビルドする

monacoindをAWSのVPSサービスLightsail上で動作させます。今回はGitHub上にあるMonacoinの公式リポジトリからソースコードを入手してコンパイルを行うのですが、最近はyumで簡単に入ることを知ったのは全てが終わった後でした…(;´∀`)

時々Ubuntuがどうこう書いてあるのは普段CentOSを使用しているため、自分用のメモになります。

インスタンスの準備

インスタンスの作成

Lightsailにサインインし、「インスタンスの作成」ボタンを押下します。

リージョン
ご自由に。今回は東京リージョン(ap-northeast-1)にしました。
プラットフォームと設計図
「Linux/Unix」で「OSのみ」、「Ubuntu」を選択。
インスタンスプラン
予算が許せば$10〜$20あたりが良いのですが、試しに自分だけで使う程度であれば最安の$5でもかまいません。初月無料ですしね。最近はスナップショットからかんたんに新しいインスタンスを作成できるのでお気軽に。

作成ボタンを押してしばらく(数分程度)待つと「保留中」と表示されていた箇所が、「実行中」に変われば作成完了です

IPアドレスを固定する

こちらの設定はお好みで。第三者へ公開するなどの予定がないならしなくても良いです。

  1. ホーム画面で作成したインスタンスをクリック
  2. 「ネットワーキング」タブをクリック
  3. 「静的IPの作成」ボタンをクリックし、画面が遷移したら下にある「作成」ボタンをクリックで完了

Ubuntuへ最低限の設定

ブラウザからSSHでログイン

インスタンス名の横にあるTerminalみたいなアイコンをクリックすると、ブラウザ上からSSHで接続することが可能です。可能なんですが、コピペするのにテキストエリアを介さないとならず非常に面倒なので必要最低限の設定が終わったら、以降は自分のPCから直接つなげることにします。

アップデート

ひとまず諸々のアップデート。

$ sudo apt-get update
$ sudo apt-get dist-upgrade

ユーザー作成

作業用のユーザーkatsubeと、monacoidを動作させるmonacoinを作成しています。wsという名前のグループを作成していますが、名称はお好みで。

$ sudo groupadd ws
$ sudo useradd -m -g ws katsube
$ sudo passwd katsubes
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

# sudoユーザーに追加 (ubuntuはwheelではなくsudoグループに追加)
$ sudo gpasswd -a katsube sudo

# monacoindを動作させるユーザー
$ sudo useradd -m -g ws monacoin

sshdの設定変更

sshdの設定を行います。 Portは22番以外に設定しておくと安心ですが、Lightsailの場合、Webの管理画面の「ネットワーキング」→「ファイアウォール」から設定が必要なので忘れないように。またrootでのSSH経由のログインは問答無用でNGにします。

# 最低限の設定
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
$ sudo vi /etc/ssh/sshd_config
Port 22
PermitRootLogin no

# 公開鍵を貼り付ける
$ sudo su - katsube
$ ssh-keygen
$ vi .ssh/authorized_keys
  (自分のPCの公開鍵を貼り付ける)
$ chmod 0600 .ssh/authorized_keys

# 再起動
$ sudo service sshd restart

自分のPC内のTerminal的なソフトから接続できるか確認し、実際に接続できた後にWebのSSH画面を閉じましょう。

シェルの変更

デフォルトのシェルが/bin/shになるのでbashに変更します。最後まで打ったらログインし直します。

$ cat /etc/shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

$ sudo chsh -s /bin/bash katsube

スワップ領域を用意する

$5〜$10のプランを選んだ方はmonacoindのコンパイル途中でメモリが足りなくなってコケる可能性が高いです。特に$5プラン。Lightsail(EC2もだけど)はOSを裸のまま入れるとスワップ領域がデフォルトで作成されていないのでこのタイミングで準備します。

$ sudo mkdir /var/swap/
$ sudo dd if=/dev/zero of=/var/swap/swap0 bs=1M count=1024
$ sudo chmod 600 /var/swap/swap0
$ sudo mkswap /var/swap/swap0
$ sudo swapon /var/swap/swap0

# 末尾に記述
$ sudo vi /etc/fstab
/var/swap/swap0 swap swap defaults 0 0

monacoindのインストール

お待たせしました。ここからが本番です。公式のドキュメントに沿ってインストールを進めていきます。

依存関係にあるパッケージを入れる

必要な物をまるっと入れます。途中でaptのリポジトリを追加していますが、気にせずがんがんコマンドを叩いてください。

$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
$ sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
$ sudo apt-get install libminiupnpc-dev
$ sudo apt-get install libzmq3-dev

monacoindのコンパイル

GitHubからソースコードを取得しコンパイルします。コマンドはよく見かける物なので気楽に実行しましょう。makeコマンドが一番長いのですが20〜30分程度です。コーヒーでも飲んで一息ついてください。

$ mkdir work; cd work
$ git clone https://github.com/monacoinproject/monacoin.git
$ cd monacoin

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

正常にインストールが終わっているか確認します。

$ monacoind --version
Monacoin Core Daemon version v0.14.2.0-eb5383a
(以下略)

monacoindの起動

いよいよmonacoindを起動してみます。まずはmonacoindを実行するユーザーに切り替え、設定ファイルを用意します。rpcuserとrpcpassword、必要があればポート番号も適宜変更してください。

$ sudo su - monacoin
$ mkdir -m 700 .monacoin
$ touch .monacoin/monacoin.conf
$ chmod 0600 .monacoin/monacoin.conf
$ vi .monacoin/monacoin.conf
server=1
rpcallowip=127.0.0.1 
rpcuser=username
rpcpassword=xxxxxxxxxxxxxxxxxxxxxxxx
rpcport=19402

設定ファイルの準備が終わったら、起動です。まずはデーモンとして動かしてみましょう。ちなみに起動するとすごい勢いで同期が始まります。CPUやメモリを目一杯使いますので他の作業は諦めた方が賢明です。またこの記事を書いている時点でディスク領域を2.5G程度消費します。

$ monacoind -daemon
Monacoin server starting

CLI用のツールが用意されているので、これを使って動作確認をしてみましょう。以下のコマンドを打つとJSON形式で現在のステータスが返ってきます。

$ monacoin-cli getinfo
{
  "version": 140200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 0,
  "timeoffset": 0,
  "connections": 0,
  "proxy": "",
  "difficulty": 0.000244140625,
  "testnet": false,
  "keypoololdest": 1513101761,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00100000,
  "errors": ""
}

あとは同期が完了するまで半日程度待てば実際に利用が可能になります。

Supervisorの導入

デーモンやサーバとして動かしているといつの間にか死んでいることがあります。困った、困った。そこで、もしプロセスが死んだら自動的に立ち上げてくれる非常に便利なSupervisorと呼ばれるツールを導入してみましょう。

まずはいったんmonacoindを止めます。CLIからstopさせることができます。

$ sudo su - monacoin
$ sudo monacoin-cli stop

Supervisorはaptで一瞬で入ります。

$ sudo apt-get install supervisor

$ supervisord --version
3.2.0
$ sudo supervisorctl version
3.2.0

Supervisorの設定ファイルを準備します。

$ sudo touch /etc/supervisor/conf.d/monacoin.conf
$ sudo chmod 0700 /etc/supervisor/conf.d/monacoin.conf
$ sudo vi /etc/supervisor/conf.d/monacoin.conf
[program:monacoin]
command=/usr/local/bin/monacoind -server -datadir=/home/monacoin/.monacoin -conf=/home/monacoin/.monacoin/monacoin.conf
numprocs=1
autostart=true
autorestart=true
user=monacoin
redirect_stderr=true
stdout_logfile=/var/log/supervisor/monacoin.log

Supervisorに設定を反映しつつmonacoindを起動します。

$ sudo supervisorctl reload
$ sudo supervisorctl status
monacoin                         RUNNING   pid 20213, uptime 0:04:24

# 起動していなければ以下を打つ
$ sudo supervisorctl start monacoin

ついでにサーバが起動した時にSupervisorが自動で起動するかも確認しておきましょう。CentOSでいうchkconfig的な物をついでに入れています。

# chkconfig的な物を入れる
$ sudo apt-get install sysv-rc-conf
$ sudo sysv-rc-conf
(supervisorのRunレベルなど確認しておく)

お疲れ様でした! 以上で最低限の設定で動作させるところまでできたと思います。

yumで入れればもっと簡単だと知った後にこの記事を書くのは中々辛いものがありましたが、どなたかの参考になれば幸いですw