BitZenyをコンパイルしてみる

# はじめに

bitcoin0.9系からの派生コインbitzenyを試してみた
centosでのコンパイルはめんどくさいです

centosでcryptocurrencyをコンパイルする環境を作るansibleをまとめたのでそれを基板に手順を書いてみます（この手順で一部をbitcoinに読みかえればbitcoin0.9系もコンパイルできると思います）

※bitzenyとはビットコインをforkして作られた暗号通貨です。
http://bitzeny.org/

※debianでコンパイルしたい方はこちら
http://zakki.mona-digest.net/?p=20

※ubuntuは公式に書いてあります
https://github.com/bitzeny/bitzeny/blob/z1.1.x/README.md

## ansibleをインストールする

epelリポジトリを入れることでyumでansibleが入ります

```
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install -y libyaml PyYAML ansible
```

## gitをインストールする

gitがないと始まらないのでyumでgitを入れます

```
yum install git
```

## 暗号通貨用のビルド環境を作る

gitで環境構築用の定義ファイルをダウンロードしてきてansibleにやらせます

```
git clone https://github.com/you21979-storage/ansible-develop.git
cd ansible-develop
echo "[all]" > hosts
echo "localhost" >> hosts
ansible-playbook devel-cryptocurrency.yml -i hosts -k -c local
```

この定義ファイルでやってることは以下のライブラリをダウンロード～コンパイル～インストールするということをやってます

- boost: boost_1_55_0
- zlib: zlib-1.2.8
- bzip2: bzip2-1.0.6
- openssl: openssl-1.0.1j
- bdb: db-4.8.30
- miniupnpc: miniupnpc-1.9.20140401

yumで以下のパッケージもインストールしてます

- git
- gcc
- gcc-c++
- python-devel


ansibleの動作が正常終了したら暗号通貨のビルド環境の完成です
/usr/localの下にビルドに必要なライブラリ郡がインストールされています

## bitzenyのビルド

githubからダウンロードしてきます。ブランチがリリースバージョンになっているのでブランチ指定を忘れずに。

bitcoin0.9系はconfigureが使えるようになってるのでビルドが楽になってます
configureを使うにはautoconf一式を入れます。
ツールが揃っていれば./autogen.shを実行することでconfigureが生成されます。
configureのオプションには/usr/localの下を明示的に指定します。
ライブラリ-lrtと-ldlの指定も必要です。忘れるとリンク時に失敗します。

make -j2の2のところにはCPUの数を指定してください。
CPUが8コア使えれば-j8とやると同時に8ファイルコンパイルされます

```
yum install automake autoconf libtool
git clone https://github.com/bitzeny/bitzeny.git -b z1.1.x
cd bitzeny
./autogen.sh
./configure LDFLAGS="-L /usr/local/lib64 -lrt -ldl" CXXFLAGS="-I /usr/local/include"
make -j2
```

## 起動

起動するにはbitzeny.confを作成します

```
# RPCを使うときのユーザー名
rpcuser=bitzenyrpc
# RPCを使うときのパスワード
rpcpassword=nagaipassword
# RPCを利用できるIPアドレス
rpcallowip=192.168.*
# RPCを受け付けるポート番号
rpcport=10000
# RPCを同時に受け付ける数
rpcthreads=10
# マイニングするかどうか。0でしない
gen=0
# P2Pのコネクション数
maxconnections=200
```

ファイルをコピーします

```
mkdir -p /opt/bitzeny/bin
mkdir -p /opt/bitzeny/etc
mkdir -p /opt/bitzeny/data
cp bitzeny.conf /opt/bitzeny/etc
cp bitzenyd /opt/bitzeny/bin
```

準備ができたら起動します

```
/opt/bitzeny/bin/bitzenyd -conf=/opt/bitzeny/etc/bitzeny.conf -datadir=/opt/bitzeny/data -daemon
```

正常に起動したらコマンドをうって情報を確認しよう

```
/opt/bitzeny/bin/bitzenyd -conf=/opt/bitzeny/etc/bitzeny.conf getinfo
```

| コマンド                                | 内容        |
|:---------------------------------------|:------------|
| getinfo                                | ネットワークの情報と自分のプログラムの状態を表示 |
| getaccountaddress account              | 受信用のアドレスを取得する。accountには識別できる文字（ハンドル名とか）|
| sendfrom account bitzenyaddress amount | 指定したアカウントから指定したアドレスに送金する。|
| listtransactions account               | 指定したアカウントの送受信したトランザクションを確認する |

## おまけ
デーモン起動用のシェルです
/etc/init.d/bitzenyd start
/etc/init.d/bitzenyd stop

```/etc/init.d/bitzenyd
#!/bin/sh
#
# bitzenyd      Start bitzenyd
#
# chkconfig: 2345 08 92
# description:  Starts, stops
#

# Source function library.
. /etc/init.d/functions
#
COINDIR=/opt/bitzeny
DAEMON=$COINDIR/bin/bitzenyd
CONF=$COINDIR/etc/bitzeny.conf
DATA=$COINDIR/data
start() {
        $DAEMON -conf=$CONF -datadir=$DATA -daemon
}
stop() {
        $DAEMON -conf=$CONF stop
}
restart() {
    stop
    sleep 3
    start
}
getinfo() {
    $DAEMON -conf=$CONF getinfo
    $DAEMON -conf=$CONF getmininginfo
    $DAEMON -conf=$CONF getdifficulty
}
case "$1" in
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    restart|force-reload)
        restart
        RETVAL=$?
        ;;
    getinfo)
        getinfo
        RETVAL=$?
        ;;
    *)
        echo $"Usage: {start|stop|restart|getinfo}"
        RETVAL=2
        ;;
esac

exit $RETVAL
```
## Donation

参考になったら投げ銭してみてください。
bitzeny: ZeW6dp1ZSACLNyQAPDguZzfgKnaxFpwQee
![bitzeny](https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=bitzeny:ZeW6dp1ZSACLNyQAPDguZzfgKnaxFpwQee "bitzeny")

monacoin: MCEp2NWSFc352uaDc6nQYv45qUChnKRsKK
![monacoin](https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=monacoin:MCEp2NWSFc352uaDc6nQYv45qUChnKRsKK "monacoin")