hyperledger/fabricをEC2で動かす

[ブログ](mizukisonoko.hatenablog.com)にも書いたが
[hyperledger/fabric](https://github.com/hyperledger/fabric)をEC2で動かそうとして結構はまったのでセットアップをまとめた。


# Docment
[Docs](https://github.com/hyperledger/fabric/tree/master/docs)
[prerequisites](https://github.com/hyperledger/fabric/blob/master/docs/dev-setup/devenv.md#prerequisites)

# Environment
- AWS EC2 t2.micro
- Ubuntu Server 14.04 LTS (HVM)
- Storage 50GB  
環境に19GBほど使うのでデフォルトだと動かない
  
# Foundation
基本的なもの。

```shell-session 
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install git 
sudo apt-get -y install gcc
sudo apt-get -y install g++
sudo apt-get -y install make
sudo apt-get -y install unzip
```

# Add required library
Fabricで使うライブラリ  

```shell-session 
sudo apt-get -y install zlib1g-dev
sudo apt-get -y install libsnappy-dev
sudo apt-get -y install libbz2-dev
```
  
# Install go 
goの環境を作る。今回は1.6.2を使用した
  
```shell-session
cd /tmp
wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.6.2.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >>  $HOME/.bash_profile

mkdir $HOME/go
mkdir $HOME/work

echo 'export GOROOT=$HOME/go' >> $HOME/.profile
echo 'export PATH=$PATH:$GOROOT/bin' >>  ~/.profile
echo 'export GOPATH=$HOME/work' >> $HOME/.bash_profile
. $HOME/.bash_profile
```

# Install rocksdb
### "virtual memory exhausted: Cannot allocate memory"を回避するための設定
  
```shell-session
sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c 'echo "/swapfile       none    swap    sw      0       0 " >> /etc/fstab'
echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile 
```

### rocksdbをインストール
masterを使うと互換性がなくエラーを吐く[内容](https://github.com/tecbot/gorocksdb/issues/50)
ので一つ前のもの(v4.5.1)を入れる

```shell-session
cd /tmp
wget https://github.com/facebook/rocksdb/archive/v4.5.1.tar.gz
tar xzvf v4.5.1.tar.gz
cd rocksdb-4.5.1
make
sudo make install
```
  
# Install docker
dockerをインストールする

```shell-session

sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo sh -c "echo 'deb https://apt.dockerproject.org/repo ubuntu-trusty main' >> /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install -y linux-image-extra-$(uname -r)
sudo apt-get purge lxc-docker
sudo apt-cache policy docker-engine
sudo apt-get -y install apparmor
sudo apt-get -y install docker-engine
```

# dockerの権限を変更
一度ログアウトしてもう一度ログインする。  
  
```shell-session
sudo gpasswd -a $USER docker
exit
```

# Prevent ```[java] <defunct>```
デフォルトだとストレージドライバーがaufsで上のエラーが出てしまうので([Issues]( https://github.com/docker/docker/issues/18180))  ストレージドライバーをdevicemapperに変更する
  
```shell-session
sudo service docker stop
sudo docker daemon --storage-driver=devicemapper &
sudo docker run hello-world
```


# Fabric

```shell-session
cd $GOPATH/src
mkdir -p github.com/hyperledger
cd github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
cd work/src/github.com/hyperledger/fabric
sudo chown -R $USER:$USER /var/hyperledger
```

# Sample
 
```shell-session
make peer
cd build/bin
./peer node start
```