パッケージファイルからインストール

/etc/apt/sources.listにPPAリポジトリを追加します。

$ sudo apt-add-repository ppa:bitcoin/bitcoin
[sudo] password for username:

passwordを求められたので打ちます。

 Stable Channel of bitcoin-qt and bitcoind for Ubuntu, and their dependencies

Note that you should prefer to use the official binaries, where possible, to limit trust in Launchpad/the PPA owner.

No longer supports precise, due to its ancient gcc and Boost versions.
 More info: https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin
Press [ENTER] to continue or ctrl-c to cancel adding it

Enterを押します。
gpg : ~~~~という行が出て最終的にOKと出ます。

次に、パッケージリストの入手とインストールをします。

$ sudo apt-get update

apt-get installコマンドでbitcoinのパッケージをインストールします。

$ sudo apt-get install bitcoind bitcoin-qt

※パッケージ詳細は以下から確認できます。

ソースコードからコンパイル

gitをインストールします。

$ sudo apt-get install git

ビルドの準備として依存パッケージをダウンロードします。

$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config

Ubuntu 14.04以上であればboost開発パッケージがあります。
必要な部分のみインストールします。

$ sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev

※上記がうまくいかない場合はこちらを実行するといいようです。

$ sudo apt-get install libboost-all-dev

BerkeleyDBが必要になるためlibdbをインストールします。
BerkeleyDB 4.8 ベースのライブラリが必要となります。

$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev

※GUIを利用する場合は下記パッケージをインストールする必要があります。

$ sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

※QRコードを生成したい場合は下記パッケージをインストールする必要があります。

$ sudo apt-get install libqrencode-dev

※UPnPをサポートする場合は下記パッケージをインストールする必要があります。

$ sudo apt-get install libminiupnpc-dev

※UPnPに関するコンパイルオプション

--without-miniupnpc UPnP  : サポート無し
--disable-upnp-default    : (デフォルト)起動時にUPnPサポートをオフ
--enable-upnp-default     : 起動時にUPnPサポートをオン

ソースコードのクローン

クローンしたいディレクトリに移動し、下記を実行します。

$ git clone https://github.com/bitcoin/bitcoin.git

bitcoinディレクトリに移動し、同期できるタグを確認します。

$ cd bitcoin
$ git tag

末尾にrcがついていないタグの中で最新バージョンをcheckoutします。

$ git checkout -b 0.16.0 refs/tags/v0.16.0

コンパイル

ビルドには数十分ほどかかります。また、メモリが1.5GBほど必要です。

$ ./autogen.sh
$ ./configure
$ make
$ make install

makeのオプションで同時に処理するジョブ数を指定し、処理時間を短縮することもできます。

$ make -j4

ビルド後、bitcoindコマンド、bitcoin-cliコマンドの配置を確認することによって、インストール結果を確認できます。

$ which bitcoind
$ which bitcoin-cli

私の環境で出たエラー

こいつ実行したらエラー出た

$ ./configure

解決策

$ sudo apt-get install libssl-dev     : openssl not found
$ sudo apt-get install libevent-dev   : libevent not found

makeは通ったけどmake installが通らない場合

$ make install

root権限でいけました。passwordを打って再びbitcoinディレクトリに移動

$ sudo su -

bitcoind起動の前準備

~/.bitcoinフォルダが生成されるので
ディレクトリ内にbitcoin.confをつくる

# use mainnet

mainnet=1
#testnet=3

# make index -> you can get all tx

txindex=1
# accept JSON-RPC command

server=1
# enable REST interface

rest=1
# user name for JSON-RPC

rpcuser=Yorita
# user password for JSON-RPC

rpcpassword=password
# RPC port for JSON-RPC (mainnet)

rpcport=8332
# RPC port for JSON-RPC (testnet)

#rpcport=18332

bitcoind起動

GUIを利用する場合

$ bitcoin-qt &

daemonのみを利用する場合

$ bitcoind -daemon

regtestモードで起動する場合

$ bitcoind -regtest -daemon

bitcoindの停止

$ bitcoin-cli -stop

正しく動いているか確認

$ bitcoind -daemon
$ bitcoin-cli getblockchaininfo
{
  "chain": "main",
  "blocks": 230638,
  "headers": 513183,
  "bestblockhash": "0000000000000002c6b4f14b646415c3cd9b56625758a30e3234beced0fd1201",
  "difficulty": 7672999.920164138,
  "mediantime": 1365589925,
  "verificationprogress": 0.05134597987837782,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000000358413e6d33ff3b8b4",
  "size_on_disk": 8139229399,
  "pruned": false,
  "softforks": [
    {
      "id": "bip34",
      "version": 2,
      "reject": {
        "status": true
      }
    },
    {
      "id": "bip66",
      "version": 3,
      "reject": {
        "status": false
      }
    },
    {
      "id": "bip65",
      "version": 4,
      "reject": {
        "status": false
      }
    }
  ],
  "bip9_softforks": {
    "csv": {
      "status": "defined",
      "startTime": 1462060800,
      "timeout": 1493596800,
      "since": 0
    },
    "segwit": {
      "status": "defined",
      "startTime": 1479168000,
      "timeout": 1510704000,
      "since": 0
    }
  },
  "warnings": ""
}

これでビルドできていることが確認できました!