【Hyperledger Fabric v2.4.1】動作環境の構築①

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


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

* 仮想化ソフトウェア
    * VirtualBox 6.1（ https://www.virtualbox.org/ ）
    * vagrant 2.2.15（ https://www.vagrantup.com/ ）
* LinuxゲストOS（Hyperledger Fabricを構築するOS環境）
    * Ubuntu 20.04.3 LTS x86/64bit（ https://ubuntu.com/ ）
* 必要なツールおよびソフトウェア（ゲストOS上にインストール）
    * Git 2.25.1（OSインストール版を使用）
    * curl 7.68.0 （OSインストール版を使用）
    * Docker 20.10.8（ https://www.docker.com/ ）
    * Docker Compose 1.25.5
    * Go言語 1.17.6（ https://golang.org/ ）
    * Node.js 16.13.2（ https://nodejs.org/ja/ ）
    * npm 8.1.2
    * GNU make、gcc/g++、libtool


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

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


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

https://qiita.com/kbys7367/items/5cc95c46941f25537d31

ここでは、ゲスト 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 と Docker Compose のインストール

### Dockerのインストール
```
~$ sudo snap install docker
docker 20.10.8 from Canonical✓ installed
~$ docker --version
Docker version 20.10.8, build 3967b7d28e
```

### Dockerの起動確認
```
~$ snap services
Service         Startup  Current   Notes
docker.dockerd  enabled  active    -
lxd.activate    enabled  inactive  -
lxd.daemon      enabled  inactive  socket-activated
```

### docker グループへの追加（任意）
```
~$ sudo addgroup --system docker
Adding group `docker' (GID 119) ...
Done.
~$ sudo adduser $USER docker
Adding user `vagrant' to group `docker' ...
Adding user vagrant to group docker
Done.
~$ newgrp docker
vagrant@ubuntu-focal:~$ sudo snap disable docker
docker disabled
vagrant@ubuntu-focal:~$ sudo snap enable docker
docker enabled
vagrant@ubuntu-focal:~$ exit
exit
~$ exit
logout
Connection to 127.0.0.1 closed.

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

### バージョン確認
```
~$ docker --version
Docker version 20.10.8, build 3967b7d28e
~$
~$ docker-compose --version
docker-compose version 1.25.5, build unknown
```


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

```
~$ wget https://go.dev/dl/go1.17.6.linux-amd64.tar.gz
--2022-01-29 16:46:22--  https://go.dev/dl/go1.17.6.linux-amd64.tar.gz
Resolving go.dev (go.dev)... 216.239.34.21, 216.239.32.21, 216.239.38.21, ...
 （中略）
go1.17.6.linux-amd64.tar 100%[==================================>] 128.58M  21.0MB/s    in 6.5s

2022-01-29 16:46:29 (19.9 MB/s) - ‘go1.17.6.linux-amd64.tar.gz’ saved [134830580/134830580]

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

## Node.js と npm のインストール
Hyperledger Fabric SDK for Node.js を使用するために、Node.js をインストールします。
インストールはnコマンドで行っています。

### Node.js , npm と n のインストール
```
~/$ sudo apt install nodejs npm
Reading package lists... Done
 （中略）
Setting up node-libnpx (10.2.1-2) ...
Setting up npm (6.14.4+ds-1ubuntu2) ...
Setting up libwww-perl (6.43-1) ...
Setting up liblwp-protocol-https-perl (6.07-2ubuntu2) ...
Setting up libxml-parser-perl (2.46-1) ...
Setting up libxml-twig-perl (1:3.50-2) ...
Setting up libnet-dbus-perl (1.2.0-1) ...
Processing triggers for systemd (245.4-4ubuntu3.15) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

~$ sudo npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
+ n@8.0.2
added 1 package from 2 contributors in 1.101s
```

### Nodeのバージョンアップ
```
~$ sudo n lts
  installing : node-v16.13.2
       mkdir : /usr/local/n/versions/node/16.13.2
       fetch : https://nodejs.org/dist/v16.13.2/node-v16.13.2-linux-x64.tar.xz
   installed : v16.13.2 (with npm 8.1.2)

Note: the node command changed location and the old location may be remembered in your current shell.
         old : /usr/bin/node
         new : /usr/local/bin/node
If "node --version" shows the old version then start a new shell, or reset the location hash with:
hash -r  (for bash, zsh, ash, dash, and ksh)
rehash   (for csh and tcsh)

~/work$ hash -r
```

### バージョン確認
```
~$ node --version
v16.13.2
~$ npm -v
8.1.2
```

### 古いバージョンを削除
```
~$ sudo apt purge nodejs npm
Reading package lists... Done
Building dependency tree
 （中略）
Removing nodejs (10.19.0~dfsg-3ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
(Reading database ... 71721 files and directories currently installed.)
Purging configuration files for npm (6.14.4+ds-1ubuntu2) ...
Purging configuration files for node-duplexer3 (0.1.4-5) ...
```

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

```
~$ sudo apt -y install make gcc g++ libtool
Reading package lists... Done
Building dependency tree
 （中略）
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for install-info (6.7.0.dfsg.2-5) ...
```


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

https://qiita.com/kbys7367/items/4fc9be4ed5bbf8ea9463


# 参考文献
https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html