【Bitcoin】UbuntuでBitcoinをビルドする ※install.sh付き

とにかく早くインストールしたい方は、shellを組んだのでこちらからインストールしてみてください。
→ https://github.com/daiki44/bitcoin-install-for-ubuntu/tree/master

# 1．環境
- Ubuntu v16.04.4
- Bitcoin v0.16


# 2．Bitcoinのダウンロード
Bitcoinはオープンソースとして公開されているのでgithubからcloneしてきます。

```bash:bitcoin-download
$ mkdir -p ~/work
$ cd ~/work
$ git clone https://github.com/bitcoin/bitcoin.git
```

# 3．使用パッケージのインストール
続いてBitcoinのビルドに必要な各パッケージをインストールしていきます。

```bash:package-install
$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get -y install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
$ sudo apt-get -y install libboost-all-dev
$ sudo apt-get -y install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
$ sudo apt-get -y install libqrencode-dev autoconf openssl libssl-dev libevent-dev
$ sudo apt-get -y install libminiupnpc-dev
```

WalletがOracleの提供している[Oracle Berkeley DB](http://www.oracle.com/technetwork/jp/database/database-technologies/berkeleydb/overview/index.html)を利用するため、こちらもインストールしていきます。

こちらはソースからインストールしていきます。

```bash:berkeley-db-install
$ export HOME="ご自分のホームディレクトリ"
$ cd $HOME/work/bitcoin
$ mkdir -p db4
$ cd db4
$ wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
$ tar -xzvf db-4.8.30.NC.tar.gz
$ cd db-4.8.30.NC/build_unix/
$ ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$HOME/work/bitcoin/db4/
$ sudo make install
```

# 4．Bitcoinのインストール
必要なパッケージが揃ったので、いよいよBitcoinのビルドとインストールを行っていきます。

```bash:bitcoin-build
$ export HOME="ご自分のホームディレクトリ"
$ cd $HOME/work/bitcoin
$ ./autogen.sh
$ ./configure --without-gui LDFLAGS="-L/$HOME/work/bitcoin/db4/lib/" CPPFLAGS="-I$HOME/work/bitcoin/db4/include/"
$ sudo make -s -j5
$ sudo make install
```

下記のコマンドを叩いて、バージョンが確認できたらインストールは完了です。

```bash:bitcoin-version
# bitcoinの起動に必要
$ bitcoind --version
Bitcoin Core Daemon version v0.16.99.0-048ac83
Copyright (C) 2009-2018 The Bitcoin Core developers

# bitcoinのRPC接続に必要
$ bitcoin-cli --version
Bitcoin Core RPC client version v0.16.99.0-048ac83
```

# 5．Bitcoinの起動
Bitcoinの起動には、`bitcoin.conf`という設定ファイルが必要となりますので、以下のような形で作成していきます。

```config:bitcoin.conf
$ mkdir ~/.bitcoin
$ cd ~/.bitcoin
$ vim bitcoin.conf

# testnetモードで起動する場合、この値を3で設定する
#testnet=3

# regtestモードで起動する場合、この値を1で設定する
regtest=1

# JSON_RPCコマンドを受け付ける場合、この値を1で設定する
server=1

# server=1 とし、RPCコマンドを受け付ける場合、RPCコマンドで利用されるユーザー名とパスワードを設定
rpcuser=user
rpcpassword=password

# 任意でRPC接続を行うポート番号も指定可能
rpcport=18332

# 任意でRPC接続を許可するIPアドレスを指定可能
rpcallowip=127.0.0.1


##### ここからは上級者向けの設定です #####
# SOCKS5プロキシを経由する場合に利用
#proxy=127.0.0.1:9050

# ノード起動時に自動的に接続を行う先
#addnode=111.111.111.111:8333

# ノード起動時に自動的に接続を行い、このノード以外に繋がないようにする
#connect=111.111.111.111:8333

# 他ノードからの接続を許容するかどうか
#listen=1

# 自分のノードに関係のないトランザクションまでを確認できるようにするかどうかの設定 デフォルト0
#txindex=1

# ノードの最大接続数 デフォルト125
#maxconnections=10

# RPC接続のタイムアウト時間 単位は秒
#rpcclienttimeout=60
```

configファイルができたら、いよいよBitcoinを起動していきます。

```bash:bitcoin-start
# デーモン起動
$ bitcoind &

# 起動していた場合、ブロックチェーンの情報が取得できる
$ bitcoin-cli -getinfo
{
  "version": 169900,
  "protocolversion": 70015,
  "walletversion": 159900,
  "balance": 649.99984460,
  "blocks": 113,
  "timeoffset": 0,
  "connections": 0,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1523178221,
  "keypoolsize": 1000,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
}
```


# 6．bitcoin-cliでノードを操作
bitcoinの情報を取得するためには、bitcoinのCUIクライアントツールであるbitcoin-cliを使ってコマンドを叩いていきます。

ここでは代表的なコマンドをいくつかご紹介しますが、こちらの記事によく使うコマンドをまとめてありますので、合わせてご確認ください。
→ [bitcoin-cli でよく使うコマンドまとめ(ver 0.16.0)](https://qiita.com/daiki_44/items/cf6ba7ae9572f34d8b52)

```bash:bitcoin-cli
# ブロック数や残高、他のノードの接続数等の総合的な情報を表示する。
$ bitcoin-cli -getinfo
{
  "version": 169900,
  "protocolversion": 70015,
  "walletversion": 159900,
  "balance": 50.00000000,
  "blocks": 101,
  "timeoffset": 0,
  "connections": 0,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1523178221,
  "keypoolsize": 999,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
}

# ビットコインアドレスを発行する。
$ bitcoin-cli getnewaddress "アカウント名"
2Mz7emapNnRwt4PtFPdBUGdv7sdsvMqbatc

# ノードに存在するアカウントの残高を全てまとめた値を表示する。
$ bitcoin-cli getbalance
50.00000000

# 指定したトランザクションIDを持つトランザクションの中身を表示する。
$ bitcoin-cli gettransaction "トランザクションID"

# 指定したアカウントから指定したアドレスまでコインを送金し、トランザクションIDを返す。
$ bitcoin-cli sendfrom "アカウント名" "宛先ビットコインアドレス" "金額"
7c1b5ae96f71890734792629fc5f1bb708174ac5d04952c45b311f5ab2bef758

```

# 7．インストールシェルをつくりました
※rootユーザーで叩いてください！
※スペックによりますが20分弱かかります

```bash:bitcoin-install.sh
#!/bin/sh

#-------------------------------------
echo "ホームディレクトリの場所を入力してください (ex. /home/ubuntu)"
read HOME_PATH
#-------------------------------------

# インストールされているパッケージを最新のものへアップデート
sudo apt-get update
sudo apt-get upgrade

# 依存関係のあるパッケージのインストール
sudo apt-get -y install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
sudo apt-get -y install libboost-all-dev
sudo apt-get -y install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
sudo apt-get -y install libqrencode-dev autoconf openssl libssl-dev libevent-dev
sudo apt-get -y install libminiupnpc-dev

# githubからBitcoinをclone
cd ${HOME_PATH}
mkdir -p work
cd work
git clone https://github.com/bitcoin/bitcoin.git

# Berkley DBをソースからインストール
cd ${HOME_PATH}
mkdir -p work/bitcoin/db4/
cd work/bitcoin/db4/
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
tar -xzvf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix/
../dist/configure --enable-cxx --disable-shared --with-pic --prefix="${HOME_PATH}/work/bitcoin/db4/"

sudo make install
cd ${HOME_PATH}
cd work/bitcoin/db4/
rm -rf db-4.8.30.NC.tar.gz db-4.8.30.NC

# Bitcoinのビルドとインストール
# スペックによりますが20分弱かかります
cd ${HOME_PATH}
cd work/bitcoin/
./autogen.sh
./configure --without-gui LDFLAGS="-L${HOME_PATH}/work/bitcoin/db4/lib/" CPPFLAGS="-I${HOME_PATH}/work/bitcoin/db4/include/"

sudo make -s -j5
sudo make install
```


# 8．参考文献
- [Compile Bitcoin Core on Ubuntu 16.04 LTS](https://gist.github.com/itoonx/95aec9a3b4da01fd1fd724dffc056963)
- [Running Bitcoin](https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File)
- [設定 - システム管理 - Bitcoin ClockUpMemo](http://bitcoin.clock-up.jp/contents/admin/setting)