次期nemネットワークを担う、絶賛開発中のcatapultはオープンソースなので動作の保証はともかく、
gitリポジトリから最新のコードを手に入れて動かしてみることはできます。
しかし、実際に動作確認をするには結構手間です。
(ノードにそれぞれ役割があるので、1つのネットワークを自分で立てるには諸々手間がかかるという意味です)
そんなcatapultネットワークをdocker-compose up
で立ち上げ、
数分後にはアクセスできるようにしてくれるのが、tech-bureau/catapult-service-bootstrap です。
しかし、このセットアップはある程度安定したバージョンがリリースされないとdockerイメージを更新したものがリリースされません。
今現在リリースされているのはコードネームBison
版ですが、続いてCow
版、Dragon
版、E<禁則事項>
版、
そして<禁則事項>
版がそれぞれの段階でリリースされてからの公開になるでしょう。
この記事は、セットアップが簡単なcatapult-service-bootstrap
を利用しつつ、最新のソースでネットワークを動かす試みです。
大まかな方針
単純ですが、docker-compose.yml
で指定されているイメージを、
自前でビルドしたものと置き換えて、実行します。
とはいえ、いくつかのアプリケーションが組み合わさって動くものなので、
組み合わせによってはまともに動かないかもしれません。
無駄に興味がある人向けです。
catapult-server
luxtagofficial/catapult-server: Dockerfiles to build catapult
LUXTAG公式にCatapultサーバのDockerイメージ化リポジトリがありました。
超便利なのでこれで行きましょう。
catapult-rest
catapult-rest の Dockerfile を書きました。
catapult-service-bootstrap で使われているイメージと中身はちょっと違うかもしれませんが、
同じように動作するようにセットアップしてます。
44uk/catapult-rest at dockerfile
もしかしたらこのブランチが最新のソースに追いついていないということがあるかもしれないので、
その場合はDockerfileをパクるなりしてください。
catapult-block-explorer
エクスプローラのソースも公開されたっぽいので、これを使います。
Dockerfileがあるのでビルドします。
AnthonyLaw/catapult-block-explorer: Catapult Blockchain Explorer
イメージをビルド
もうここから先はDockerの話になりますが、それぞれのイメージをビルドします。
タグ名はmy-*
にしましたが、これは各々お好みでどうぞ。
luxtagofficial/catapult-server
このビルドは結構時間がかかります。
マシンスペックにもよりますが、大体2時間くらいでしょうか。
$ cd server
$ docker build -t my-catapult-server .
ちなみにこの行でcloneしてくるブランチを指定していたので、任意のコミットのcatapult-server
が欲しかったら書き換えるとよさそうです。
44uk/catapult-rest
$ docker build -t my-catapult-rest-server .
* 追記
luxtagofficial/catapult-server
にも catapult-rest
が含まれていました。
こちらをつかってみてもいいかもしれません。
AnthonyLaw/catapult-block-explorer
$ docker build -t my-catapult-block-explorer .
指定イメージの書き換え
イメージがビルドできたら、catapult-service-bootstrap
のdocker-compose.yml
で指定しているイメージを置き換えていきましょう。
rest-gateway:
# image: techbureau/catapult-rest-server:1.0.8
image: my-catapult-rest-server
block-explorer:
# image: techbureau/catapult-block-explorer
image: my-catapult-block-explorer
こちらはDockerfileで指定されているファイルを直接変更してください。
# FROM techbureau/catapult-server:gcc-0.2.0.2
FROM my-catapult-server
# FROM techbureau/catapult-tools:gcc-0.2.0.2
FROM my-catapult-server
bootstrapを起動
イメージとコンテナを再作成させつつ立ち上げます。
$ docker-compose up --build --force-recreate
もしかするとバージョンによってはブロックへの仕様変更で動作しなくなるかもしれないので、
起動する前に ./clean-data
を実行してチェーンを削除したほうが良いと思います。
(./clean/all
は生成した設定やnemesis等も削除します。こっちを実行しないとダメなケースがあるかもしれません)
設定ファイルの修正
設定テンプレートの修正が必要になる場合があるかもしれません。
ruby/catapult-templates
以下に起動時に生成されるファイルの元になるものがあるので、
必要に応じて修正します。
(何をどう修正すればいいかは、catapultやrest-serverの変更を見ないとわかりませんが…)
たとえば、執筆時点では、どうやらcatapult-rest
のnamespace
プラグインがnamespace
とmosaic
プラグインに分離されたようなので、
catapult-service-bootstrap/ruby/catapult-templates/rest_gateway/rest.json.mt
に
mosaic
プラグインの読み込みを書き加えてあげないといけない、なんてことがありました。
*
この方法で一応ブロックが生成されていくところまでは確認しました。
が、細かいところまでは確認していないので、動作不良があるかもしれません。
(上記の方法はなにか問題があるようであれば加筆修正していきます)
とりあえず今やってみたところ、見事に仕様が変わっててcatapult-rest
がエラーを起こして、
レスポンスが得られなかったりしました…。
なんにせよserver
とrest
で機能の実装・公開のタイミングが揃ってなかったりするので、正式リリースを待つほうが懸命です。
エクスプローラなんかは割と新しめでも動くので差し替えてみると面白いかもしれません。
今回はすべてをmaster
ブランチでビルドしていますが、
Dockerfileだけ利用すれば特定のソースを取得してビルドするということもできますね。
catapult-service-bootstrap
は便利ですが、イメージの更新が遅いので
(安定版のイメージでリリースされるっぽい)、
軽微なバグが取りこまれたサーバで動かしたい場合には良いかと思います。
特にcatapult-restの方はブロック情報の取得やトランザクションの送信で
直接やり取りをするサーバなので新しいものに差し替えてみると、
早そうで早くない少し早い実装に触れられるかもしれません。
ぶっちゃけ、手探りせざる負えないのでおとなしく正式リリース待ったほうが良さそうですけどね。
「そんなもんじゃ、憧れは止められねえんだ!」
なんてね。