【Hyperledger Fabric v1.4.11】動作環境の構築①

# 目的
仮想ソフトウェア（VirtualBox）を使用して、Linux ゲスト OS（Ubuntu）を導入し、その上に Hyperledger Fabric v1.4.11 の動作環境を構築します。
本ページでは、Hyperledger Fabric v1.4.11 のインストールに必要な準備までを記載しています。


# 必要なツールおよびソフトウェア

* 仮想化ソフトウェア（執筆時の最新）
    * VirtualBox 6.1（ https://www.virtualbox.org/ ）
    * vagrant 2.2.15（ https://www.vagrantup.com/ ）
* LinuxゲストOS（Hyperledger Fabricを構築するOS環境）
    * Ubuntu 16.04.7 LTS x86/64bit（ https://ubuntu.com/ ）
* 必要なツールおよびソフトウェア（ゲストOS上にインストール）
    * Docker Community Edition(CE) 17.06.2-ce 以上（ https://www.docker.com/ ）
    * Docker Compose 1.14.0 以上
    * Python 2.7（ https://www.python.org/ ）
    * Go言語 1.12.x（ https://golang.org/ ）
    * Node.js（ https://nodejs.org/ja/ ）
        * version 8：8.9.4 以上
        * version 10：10.15.3 以上
    * npm （Node.js と一緒にインストール）
    * GNU make、gcc/g++、libtool


# 作業ステップ
本ページでは、太字のステップのみ記載しています。

* **ステップ①：Ubuntu Linux ゲストOSのインストールと初期設定**
* **ステップ②：必要なツールおよびソフトウェアのインストール**
* ステップ③：Hyperledger Fabric のインストールと動作確認


# ステップ①：Ubuntu Linux ゲストOSのインストールと初期設定
以下の手順に従って、Ubuntu Linux ゲストOSのインストール（VirtualBox と Vagrant のインストールを含みます）と初期設定をします。

https://qiita.com/kbys7367/items/3b344638e56608ae8859

ここでは、ゲスト OS のメモリをデフォルトの1024MBから4096MBへします。

* コメントの解除（#の削除）
* vb.memory の設定値を変更

```
$ cp -p Vagrantfile Vagrantfile.bak
$ vi Vagrantfile
$ diff Vagrantfile.bak Vagrantfile
52c52
<   # config.vm.provider "virtualbox" do |vb|
---
>    config.vm.provider "virtualbox" do |vb|
57,58c57,58
<   #   vb.memory = "1024"
<   # end
---
>      vb.memory = "4096"
>    end

```


# ステップ②：必要なツールおよびソフトウェアのインストール

## Docker CE と Docker Compose のインストール

### Docker CE のインストール
```
~$ sudo apt update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit:2 http://archive.ubuntu.com/ubuntu xenial InRelease
 （中略）
Reading state information... Done
9 packages can be upgraded. Run 'apt list --upgradable' to see them.

~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
 （中略）
Found initrd image: /boot/initrd.img-4.4.0-206-generic
done

~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK

~$ sudo add-apt-repository \
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
> $(lsb_release -cs) stable"

~$ sudo apt update
Hit:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Get:2 https://download.docker.com/linux/ubuntu xenial InRelease [66.2 kB]
 （中略）
Reading state information... Done
All packages are up to date.

~$ sudo apt-get install docker-ce
Reading package lists... Done
Building dependency tree
 （中略）
Processing triggers for systemd (229-4ubuntu21.29) ...
Processing triggers for libc-bin (2.23-0ubuntu11.2) ...

~$ sudo docker version
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:47:12 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:45:24 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

### docker グループへの追加（任意）

```
~$ sudo usermod -aG docker vagrant
~$ exit
logout
Connection to 127.0.0.1 closed.

$ vagrant ssh
 （中略）
~$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
```

### Docker Compose のインストール

```
~$ sudo apt -y install docker-compose
Reading package lists... Done
Building dependency tree
 （中略）
Processing triggers for ureadahead (0.100.0-19.1) ...
Processing triggers for systemd (229-4ubuntu21.29) ...

~$ docker-compose version
docker-compose version 1.8.0, build unknown
docker-py version: 1.9.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
```

apt コマンドでインストールされたバージョンが古かったので、公式サイト（ https://docs.docker.jp/compose/install.html#linux ）に記載されている手順で最新版をインストールしました。

```
~$ sudo curl -L https://github.com/docker/compose/releases/download/1.29.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0    742      0 --:--:-- --:--:-- --:--:--   741
100 12.1M  100 12.1M    0     0  5507k      0  0:00:02  0:00:02 --:--:-- 12.8M

~$ sudo chmod +x /usr/local/bin/docker-compose
~$ ls -l /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 12750072 Apr 14 08:59 /usr/local/bin/docker-compose

~$ docker-compose version
docker-compose version 1.29.0, build 07737305
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
```

## Python のインストール
Docker Compose の依存ソフトウェアとしてインストールされます。
ここでは、バージョンの確認のみ行います。

```
~$ python -V
Python 2.7.12
```

## Go 言語のインストール
スマートコントラクト（チェーンコード）の開発向けに、Go 言語をインストールします。

```
~$ wget https://golang.org/dl/go1.16.3.linux-amd64.tar.gz
--2021-04-14 09:10:54--  https://golang.org/dl/go1.16.3.linux-amd64.tar.gz
Resolving golang.org (golang.org)... 216.58.220.113, 2404:6800:4004:812::2011
 （中略）
go1.16.3.linux-amd64.tar 100%[==================================>] 123.04M  27.6MB/s    in 5.6s

2021-04-14 09:11:01 (22.0 MB/s) - ‘go1.16.3.linux-amd64.tar.gz’ saved [129021323/129021323]

~$ sudo tar -C /usr/local -xzf go1.16.3.linux-amd64.tar.gz
~$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
~$ . ~/.profile

~$ go version
go version go1.16.3 linux/amd64
```

## Node.js と npm のインストール
Hyperledger Fabric SDK for Node.js を使用するために、Node.js をインストールします。

```
~$ curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -

## Installing the NodeSource Node.js 10.x repo...
 （中略）
## Run `sudo apt-get install -y nodejs` to install Node.js 10.x and npm
## You may also need development tools to build native addons:
     sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
     curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
     echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
     sudo apt-get update && sudo apt-get install yarn


~$ sudo apt install nodejs
Reading package lists... Done
Building dependency tree
 （中略）
Processing triggers for man-db (2.7.5-1) ...
Setting up nodejs (10.24.1-1nodesource1) ...

~$ node -v
v10.24.1

~$ npm -v
6.14.12
```
## make、gcc/g++、libtool のインストール
ネイティブコードを含んだモジュールをビルドするために必要なソフトウェアをインストールします。

```
~$ sudo apt -y install make gcc g++ libtool
Reading package lists... Done
Building dependency tree
 （中略）
Setting up libltdl-dev:amd64 (2.4.6-0.1) ...
Setting up libtool (2.4.6-0.1) ...
```


# ステップ③：Hyperledger Fabric のインストールと動作確認
以下に続きます。

https://qiita.com/kbys7367/items/53793c7077171b8e3673

# 参考文献

https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatsnew.html