中々記事がないので、あまりまとまってないけど適当に。
だれか体裁整えて投稿し直していいのよ・・・。
ちなみに対象は、dockerとかよくわかんない人向けです。
(ぼくがdockerとかよく分かってないからね!!)
MacとかにDockerでbitzenydを起動させてみたい
できるようになること
- 自分のパソコンでBitzenyのウォレットが作れる
- がんばれはinsightとか立ち上げてインフラになれる
- 自分でBitzeny送金とか受け取りとかを絡めたサービスが作れるようになるかも(bitzenydにJSON-RPCでデータ投げて云々???)
とにかく、調べてやり方を書いていく。
MacにDocker入れろ
Dockerをインストールするのとか正直苦手。
apt-getとかyumとかnpmとかgemとかhomebrewとかじゃないんでしょ。
大変そうじゃん。
- ココ参照 https://qiita.com/hshimo/items/e24b1fbfbf775ec7c941
- 普通のアプリケーションと同じく、ダウンロードしてApplicationsにコピーとかで行ける
- (ただし、アプリケーション自体めっちゃサイズ大きいので注意)
bitzenydをDockerにインストール(この言い方間違ってそう)
- ココを開くだけ開いて凄い人たちの会話を眺めよう https://bitzeny.info/d/35-bitzenyd-docker/9
- 「おのかちおさんすげぇ!」と唱えよう。これで高校生らしいよ、おじさんついていけないよ・・・・。
- Dockerは起動してね
- イメージを取得する
docker pull onokatio/docker-bitzenyd:alpine
- 終わったら「docker image ls」で確認
REPOSITORY TAG IMAGE ID CREATED SIZE
onokatio/docker-bitzenyd alpine 6601f7fc5e1e 2 months ago 464MB
こんな感じになるはず
bitzenyd起動
おもむろに
$ docker run onokatio/docker-bitzenyd:alpine
Error: To use the "-server" option, you must set a rpcpassword in the configuration file:
/root/.bitzeny/bitzeny.conf
It is recommended you use the following random password:
rpcuser=bitzenyrpc
rpcpassword=(ここは何やらパスワードが表示されたので消しておきます)
(you do not need to remember this password)
The username and password MUST NOT be the same.
If the file does not exist, create it with owner-readable-only file permissions.
It is also recommended to set alertnotify so you are notified of problems;
for example: alertnotify=echo %s | mail -s "BitZeny Alert" admin@foo.com
設定ファイルがないとエラーが出てるような感じがしますね。
試しに、プロセスを調べる的なことをしてみましょう
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
はい、立ち上がってないですね。
ということで、設定ファイルを作って、ついでにdocker-composeで立ち上がるようにしましょう。(コマンドが長くて嫌なので)
#設定ファイルの作り方
https://github.com/BitzenyCoreDevelopers/docker-bitzenyd
やり方は全てGitHubのReadmeに載っておりました。
好きなフォルダに移動
cd (お気に入りのいい感じのフォルダへ移動)
フォルダを作成
mkdir bitzeny-data
bitzeny.confを作る
echo "rpcuser=rpc" > bitzeny-data/bitzeny.conf
echo "rpcpassword=rpcpass" >> bitzeny-data/bitzeny.conf
echo "rpcallowip=localhost" >> bitzeny-data/bitzeny.conf
echo "server=1" >> bitzeny-data/bitzeny.conf
「rpcuser」とか「rpcpass」とかは自分用に変更した方がいいと思われる、多分。
面倒さからdocker-compose.yml作ろうね
echo "# bitzeny" > docker-compose.yml
echo "bitzeny:" >> docker-compose.yml
echo " image: onokatio/docker-bitzenyd:alpine" >> docker-compose.yml
echo " volumes:" >> docker-compose.yml
echo " - $PWD/bitzeny-data:/root/.bitzeny" >> docker-compose.yml
echo " ports:" >> docker-compose.yml
echo " - "9252:9252"" >> docker-compose.yml
docker-composeで実行
$ docker-compose up
Starting bitzeny_1 ... done
Attaching to bitzeny_1
正しく動けば上記のログが出たあとすごい時間待たされると思う
ちなみに
ここで、「volums: ./bitzeny-data:/root/.bitzeny」にしたら、怒られた
docker: Error response from daemon: create ./bitzenydata: "./bitzenydata" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
./とか相対パスあかんらしい。
なので、$PWDを使って絶対パスにしてます。
この部分が動かない人は、docker-compose.ymlを自分でいじって絶対パスに変更してね。
Dockerのコンテナの中に入ってbitzeny-cliしてみる
$docker-compose exec bitzeny /bin/sh
/ # bitzeny-cli getinfo
{
"version" : 1020100,
"protocolversion" : 70006,
"walletversion" : 60000,
"balance" : 0.00000000,
"blocks" : 135014,
"timeoffset" : -4,
"connections" : 8,
"proxy" : "",
"difficulty" : 0.00532161,
"testnet" : false,
"keypoololdest" : 1519238309,
"keypoolsize" : 101,
"paytxfee" : 0.00000000,
"relayfee" : 0.00001000,
"errors" : ""
}
何回か叩くと、「blocks」が変わるので、
無事にブロックをダウンロードしてくれているのが分かる。
ダウンロードしているデータの容量は? HDD大丈夫??
$du -d 2 -h .
918M ./bitzeny-data/blocks
565M ./bitzeny-data/chainstate
1.0M ./bitzeny-data/database
1.5G ./bitzeny-data
1.5G .
これまだ途中ですが、1.5G超え。(2018/02/22現在)
ダウンロード済みが140151ブロックぐらいで、blocksフォルダが918MB・・・・。
今現在、Bitzeny自体ののブロック高#1144096ぐらいまで行ってるんだけど、大丈夫かなぁ・・・・(絶望
HDD(SSD)の空き容量が心配
HDD(SSD)の空き容量が心配になったら、コマンドで空き容量を確認しましょう。
$ df
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk1 779404288 761527232 17365056 98% 5308124 4289659155 0% /
うちのHDDはいつもカチカチです。
JSON-RPCのポートで待ち受けてるかとかを見てみる
$nc -v -w 1 localhost -z 9252
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif lo0
src ::1 port 55825
dst ::1 port 9252
rank info not available
TCP aux info available
Connection to localhost port 9252 [tcp/*] succeeded!
多分何かがListenしてくれてる感じ。
curlでJSON-RPCに接続してみる
$ curl http://rpc:rpcpass@127.0.0.1:9252/ --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -v
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 9252 (#0)
* Server auth using Basic with user 'rpc'
> POST / HTTP/1.1
> Host: 127.0.0.1:9252
> Authorization: Basic cnBjOnJwY3Bhc3M=
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 71
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 71 out of 71 bytes
< HTTP/1.1 403 Forbidden
< Date: Wed, 21 Feb 2018 18:59:53 +0000
< Connection: close
< Content-Length: 0
< Content-Type: application/json
< Server: bitzeny-json-rpc/v1.2.1.0-391f88e-beta
<
* Closing connection 0
dockerの外からのアクセスは、localhost扱いになっていないのか、
403エラーが返ってきています。これも、Bitzenyフォーラムで「satetsu888」さんという方が書いているとおり。
rpcallowipの設定を追加する
bitzeny.confに「rpcallowip=*」の行を新規追加すれば、JSON-RPCにはDockerコンテナの外からでも繋げられるようになる。
(あまり良くないと思うけど)
cntrol+c で docker-compose up してたプロセスを強制終了
$ echo "rpcallowip=*" >> bitzeny-data/bitzeny.conf
$ docker-compose up -d
-d でDetachedモードですって。daemonみたいに、バックグラウンドで動いてくれるそうです。
JSON-RPCに繋いで見る
$ curl http://rpc@127.0.0.1:9252/ --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -v
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 9252 (#0)
* Server auth using Basic with user 'rpc'
> POST / HTTP/1.1
> Host: 127.0.0.1:9252
> Authorization: Basic cnBjOnJwY3Bhc3M=
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 71
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 71 out of 71 bytes
< HTTP/1.1 200 OK
< Date: Wed, 21 Feb 2018 19:44:01 +0000
< Connection: keep-alive
< Content-Length: 327
< Content-Type: application/json
< Server: bitzeny-json-rpc/v1.2.1.0-391f88e-beta
<
{"result":{"version":1020100,"protocolversion":70006,"walletversion":60000,"balance":0.00000000,"blocks":190775,"timeoffset":-6,"connections":8,"proxy":"","difficulty":0.00451063,"testnet":false,"keypoololdest":1519238309,"keypoolsize":101,"paytxfee":0.00000000,"relayfee":0.00001000,"errors":""},"error":null,"id":"curltest"}
* Connection #0 to host 127.0.0.1 left intact
データが、JSONで返ってきました!!
これで、ビットゼニーをやり取りしたりするサービスが作れますねー!
(ブロックのDLが終わった時、果たしてHDDは息をしているだろうか・・・・)
追記 2018/02/22
その後のディスク使用量について
朝起きたら(6時間後ぐらい?)、CPUが落ち着いていました。
MacBookPro2014とかだったかな。放っておけば数時間で同期終わりますね。
$ du -d 2 -h .
1.9G ./bitzeny-data/blocks
625M ./bitzeny-data/chainstate
1.0M ./bitzeny-data/database
2.8G ./bitzeny-data
2.8G .
$ curl http://rpc:rpcpass@127.0.0.1:9252/ --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -v
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 9252 (#0)
* Server auth using Basic with user 'rpc'
> POST / HTTP/1.1
> Host: 127.0.0.1:9252
> Authorization: Basic cnBjOnJwY3Bhc3M=
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 71
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 71 out of 71 bytes
< HTTP/1.1 200 OK
< Date: Thu, 22 Feb 2018 07:13:25 +0000
< Connection: keep-alive
< Content-Length: 380
< Content-Type: application/json
< Server: bitzeny-json-rpc/v1.2.1.0-391f88e-beta
<
{"result":{"version":1020100,"protocolversion":70006,"walletversion":60000,"balance":0.00000000,"blocks":1144561,"timeoffset":-5,"connections":8,"proxy":"","difficulty":0.81899299,"testnet":false,"keypoololdest":1519238309,"keypoolsize":101,"paytxfee":0.00000000,"relayfee":0.00001000,"errors":"Warning: This version is obsolete, upgrade required!"},"error":null,"id":"curltest"}
* Connection #0 to host 127.0.0.1 left intact
ブロックは#1144561まで行ってます。
http://namuyan.dip.jp/MultiLightBlockExplorer/index.php?page=selectcoin&coin=zeny
ココを見る限り、最新ですね。
HDDの必要容量も3GBいかないくらいみたいですね。
しばらくは10GBもなくていいかな。
今後の課題
同じこと、LinuxとかWindowsでもやれるようにしたいね。
追記 2018/03/03
rpcallowipの書き方がわかった
まずはDockerの方でホストのIPを固定する
# bitzeny
version: '2'
services:
bitzeny:
image: onokatio/docker-bitzenyd:alpine
volumes:
- $PWD/bitzeny/bitzeny-data:/root/.bitzeny
ports:
- 9252:9252
networks:
brid:
ipv4_address: 10.2.0.2
networks:
brid:
ipam:
config:
- subnet: 10.2.0.0/16
gateway: 10.2.0.1
これで、dockerのコンテナのIPが10.2.0.2、ホストのIPが中から見ると10.2.0.1になる。
rpcallowipを設定する
rpcuser=rpc
rpcpassword=rpcpass
server=1
rpcallowip=10.2.0.*
#あるいは
rpcallowip=10.2.0.1
「10.2.0.*」という記法は、bitcoindでは廃止されているけど、
bitzenydでは健在みたい。
逆に「10.2.0.0/24」の記法はうまくいかなかった。