bitcoreの起動いろは

## 動作環境
### ハードウェア
- host OS: windows7
- guest OS: Ubuntu 16.4.1

- Ubuntuの容量: 100GB
- UbuntuのRAM: 1924MB

### ソフトウェア
- Node.js v4.7.0
- Bitcore v4.1.0
- Bitcore-node v3.1.3

## install手順
### 事前準備
node.jsをまずは導入します。

```
$ apt-get install build-essential libtool autotools-dev automake autoconf pkg-config libssl-dev git
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
$ nvm install v4
```

bitcoreをinstallするにあたって、
bitcoreでは、zeroMQを使うことから、これも別途installする必要があります。

また、versionの問題があるので、
libzmq-devではなく、libzmq3-devをinstallすることに注意します。
libzmq-devがすでにinstallされてしまっている場合は、一旦uninstallしてから、libzmq3-devをinstallします。

```
$ apt-get install libzmq3-dev
```

---
### bitcoreのinstall
次に、bitcoreをnpmを使ってdownload。

```
$ npm install -g bitcore
```
詳細を把握しきれていないですが、おそらく、bitcore-nodeをinstallしても、ほとんど変わらないと思われます。
（両者をinstallして、起動のプロセスを見る限り、ほぼ違いが見受けられなかったので）

```
$ npm install -g bitcore-node
```
とやっていっても、特に問題はなさそうです。

## bitcoreを起動させる
### 方法①
bitcore自体はinstallされたので、実はこの段階で使えるといえば使えるのです。

```
$ bitcored
```
とすると、これは、

```
~/.nvm/versions/v4.7.0/bin/bitcored
```
を実行することとなり、

```
~/.nvm/versions/v4.7.0/lib/node_modules/bitcore
```
にinstall済のライブラリたちを使って、

```
~/.bitcore
```
というフォルダが生成され、その中にdataが入ることで、すぐに使える状態になります。

（insight-api, insight-uiは

```
$ npm install -g bitcore
```
でインストールしたためか、

```
~/.nvm/versions/v4.7.0/lib/node_modules/bitcore
```
の中にすでに存在しました）

---
### 方法②
グローバルのディレクトリを直接使って、汚してしまうのが嫌な場合、
新たにbitcore用のディレクトリを作って、その中で完結させる方法もあります。

```
$ bitcore create --testnet mynode
```
こうすると、コマンドを入力したディレクトリの直下にmynodeというディレクトリが作成されます。
--testnetというオプションをつけておくと、testnet用の設定ファイルになってくれるのですが、これは後から自分で簡単に変更できるので、あんまり重要ではないです。

このコマンドの入力後のディレクトリ構成は、

```
mynode
  |-- data
  |-- node_modules
  |-- bitcore-node.json
  |-- package.json
```
となっていて、bitcore-node.jsonの設定を見ると、

```
{
  "network": "testnet",
  "port": 3001,
  "services": [
    "bitcoind",
    "web"
  ],
  "servicesConfig": {
    "bitcoind": {
      "spawn": {
        "datadir": "./data",
        "exec": "/home/(user name)/.nvm/versions/node/v4.7.0/lib/node_modules/bitcore/node_modules/bitcore-node/bin/bitcoind"
      }
    }
  }
}
```
となっていて、insight-api, insight-uiがまだinstallされていないことがわかります。
また、testnetとして設定されていて、このtestnetをlivenetと書き換えたりすれば（datadirを一度削除する必要はあるでしょうが）、
後からでも、変更可能です。

また、datadirというのがbitcoinの情報がすべて格納されるディレクトリのpathになっています。

そして、insight-api, insight-uiは後から、bitcoreのアドオンとしてinstallする形式となっており、

```
$ cd mynode
$ bitcore install insight-api insight-ui
```
というコマンドを実行することで、installされてくれて、
bitcore-node.jsonの方も、

```
{
  "network": "testnet",
  "port": 3001,
  "services": [
    "bitcoind",
    "insight-api",
    "insight-ui",
    "web"
  ],
  ...
```
という中身に書き換わってくれています。

---
#### datadirは任意に設定可能なのか
設定ファイルを見て思うことの一つとして、
datadirを自分で任意に設定できるのか、というのが気になるポイントです。

方法②のやり方の一つとして、以下のものもあります。

```
$ bitcore create -d ~/.bitcoin --testnet mynode2
```
この -d というオプションは、参照するdatadirのpathを最初の段階で設定するというものです。
この場合、

```
mynode2
  |-- node_modules
  |-- bitcore-node.json
  |-- package.json
```
というディレクトリ構成になり、
bitcore-node.jsonはというと、

```
{
  "network": "testnet",
  "port": 3001,
  "services": [
    "bitcoind",
    "web"
  ],
  "servicesConfig": {
    "bitcoind": {
      "spawn": {
        "datadir": "~/.bitcoin",
        "exec": "/home/(user name)/.nvm/versions/node/v4.7.0/lib/node_modules/bitcore/node_modules/bitcore-node/bin/bitcoind"
      }
    }
  }
}
```
というように、datadirのpathが設定した通りになってくれています。

ただ、これで実行したときに、エラーが起きてしまうケースがあります。
この点は、次の実行の説明の時に捕捉します。

## 起動
さて、insight-api, insight-uiまでinstallまで完了すれば（datadirが ./data の場合）即座にinsight画面を表示することができます。

コマンドは、

```
$ bitcore start
```
のみです。
これを実行すると、

```
Using config: ...
Using network: testnet
Starting bitcoind
Using bitcoin config file: ...
...
```
といったように起動が進んでいきます。
そして、何かしらのブラウザ上で、
localhost:3001/insight
と入力すれば、すぐに

![insight.PNG](https://qiita-image-store.s3.amazonaws.com/0/68689/88b834d1-f971-67c0-297b-f0ebc005f2bc.png)


このような画面を確認することができると思います。
ただ、latest transactionsなどのデータは、データが完全に同期し終えないと表示されないっぽいので、
ちゃんと動いているか確認したい場合には、Blocksなどの画面から遷移していって、

![bitcore.png](https://qiita-image-store.s3.amazonaws.com/0/68689/c0a47186-8589-d14d-77df-1ed32d7000f7.png)


上記のようなページを見ることをおススメします。

また、起動の際に

```
$ bitcore start --daemon
```
というオプションをつけて起動することも可能です。
この場合、サーバーは立たないので、localhostなどからの確認はできませんが、

```
tail -f mynode/data/testnet3/debug.log
```
とすることで、データの同期が進んでくれていることを確認できます。

どれくらいデータの同期が進んでくれているかというのは、
testnetの場合は、
http://tbtc.blockr.io/
のサイトなどのblock heightを見て、確認するといいと思います。

ただ、daemonで起動した際、bitcoinの止め方がよくわからず、一度Ubuntuを再起動させた覚えが自分にはあります。
どうしたらいいのだろうか。。

---
### 別のdatadirを使おうとした時の注意点
~~自分は、最初bitcoindを別途installし、
そちらでデータを同期した別ディレクトリをdatadirとして使おうとしていました。
しかし、それをやろうとすると、~~

```
$ bitcore start
Starting ...
...
Cannot obtain a lock on data directory ...... Bitcoin Core is probably already running.
```
~~というようなエラーが発生する問題にぶち当たりました。~~

~~http://bitcoin.stackexchange.com/questions/38303/bitcoin-core-cannot-obtain-lock
https://bitcointalk.org/index.php?topic=54737.0
いろいろ調べてはいるものの、今のところ、解決策というのは見つかりきっていません。。orz~~

~~これは追って調べて、解決できればまた載せたいと思います。~~

---
#### 16/12/09 13:45追記
解決っぽいところまでいったので、記載します。

まず、別のdatadirを使うための準備手順です。

https://bitcoin.org/en/version-history
こちらのBitcoin Coreのversion historyから、for Ubuntu 64bitの圧縮データをダウンロードしてきます。
この時、versionを<b>0.12.1</b>にしなければなりません。

これは、bitcoreが使っているbitcoindのversionとの兼ね合いです。
bitcoreのinstall時に、

```
$ bitcore create mynode
...
Downloading bitcoin: https://.../bitcoin/.../v0.12.1-...
...
```
となっているのを確認できます。
なので、
たとえば、PPAを使ってbitcoind, bitcoin-qtをUbuntuにinstallしてしまうと、
最新版をinstallしてしまうため（現段階では、0.13.1）、そうするとゆくゆくエラーが発生してしまうわけです。

なので、Bicoin Coreのversion historyページで、v0.12.1を見つけ、
その、tar.gzファイルをまずはdownloadします。

次に、

```
$ tar zxvf bitcoin-0.12.1-linux64.tar.gz
```
として、ファイルを解凍し、

```
$ cd bitcoin-0.12.1
$ cd bin/
$ ls
bitcoin-cli bitcoin-qt bitcoin-tx bitcoind test_bitcoin
$ ./bitcoind
```
とコマンド入力を進んでいきます。
最後の、 ./bitcoind を入力すると、 ~/.bitcoin というディレクトリが作成されます。
そして、 ~/.bitcoin/bitcoin.conf に適当な設定を記入し、

```
$ cd mynode
$ bitcore start
```
してあげると、別datadirを参照して localhost:3001/insight での表示を実現してくれます！！