Fabric (NVM-Docker)

The Hyperledger Fabric Composer environment requires a few prerequisites, that are listed hereunder:

  • Docker Engine: Version 1.12.x
  • Docker-Compose: Version 1.8.x
  • Node: 6.x (note version 7 is not supported)
  • npm: 4.0.x
  • git: 2.9.x

Starting from a Debian 8(.7.1) template, we'll try to configure a suited environment following Fabric Composer's site recommendations.

Having experienced weird “permission denied” installation errors using the root user, we'll try to proceed to installation as sysadmin when possible.

Install NVM

> sudo apt-get install build-essential libssl-dev curl
> curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh -o install_nvm.sh
> bash install_nvm.sh
> export NVM_DIR="/home/sysadmin/.nvm"
> [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

Install Node.js

> nvm ls-remote
...
         v6.9.3   (LTS: Boron)
         v6.9.4   (LTS: Boron)
         v6.9.5   (LTS: Boron)
         v6.10.0  (Latest LTS: Boron)
         v7.0.0  
...

Since Fabric Composer requires Node.js 6.x, and doesn't support 7, let's go for v6.10.0:

> nvm install 6.10.0
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v6.10.0 (npm v3.10.10)
Creating default alias: default -> 6.10.0 (-> v6.10.0)

We are supposed to use npm 4.0.x, 3.10.10 was installed, let's upgrade it as explained on the npmjs.com website:

> npm show npm@* version
...
npm@4.0.3 '4.0.3'
npm@4.0.5 '4.0.5'
npm@4.1.0 '4.1.0'
...
> npm install -g npm@4.0.5

Docker Engine

Repository version

> sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
> curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
OK

> sudo nano /etc/apt/sources.list.d/docker.list
ADD
deb https://apt.dockerproject.org/repo debian-jessie main

> sudo apt-get update
> apt-cache madison docker-engine
...
 docker-engine | 1.13.0-0~debian-jessie | https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
docker-engine | 1.12.6-0~debian-jessie | https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
docker-engine | 1.12.5-0~debian-jessie | https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
...
> sudo apt-get install docker-engine=1.12.6-0~debian-jessie

Complementary actions

Now, as we do not want to automatically upgrade the docker-engine package when using apt-get upgrade, we'll put the package on hold:

> sudo apt-mark hold docker-engine

To remove the hold:

> sudo apt-mark unhold docker-engine

Start and Autostart Docker:

> sudo systemctl start docker
> sudo systemctl enable docker
Synchronizing state for docker.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d docker defaults
Executing /usr/sbin/update-rc.d docker enable

Docker status:

> systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled)
   Active: active (running) since Fri 2017-03-17 02:03:28 CET; 11min ago
     Docs: https://docs.docker.com
 Main PID: 10340 (dockerd)
   CGroup: /system.slice/docker.service
           ├─10340 /usr/bin/dockerd -H fd://
           └─10344 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-interval=0 -...

Check Docker is functioning

> sudo docker run hello-world
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker Compose

From linuxable.com.
For a list of Docker-compose versions, see this GitHub page.

> su
> curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
> chmod +x /usr/local/bin/docker-compose
> docker-compose --version
docker-compose version 1.8.1, build 878cff1
> exit

GIT

> sudo apt-get install git-core

Command line tools

> npm install -g composer-cli

There was a problem with this install command: hashtable blocked the process.
A suggested solution on the Fabric Chat:

So … the root cause of my installation issues with `node-gyp` was the self-signed certificate in the chain

`node-gyp` doesn't honour the `strict-ssl=false` setting in `.npmrc`

The workaround to get composer-cli to install was to run the following:
export NODE_TLS_REJECT_UNAUTHORIZED=0

before

npm install -g composer-cli

Clone and install the Sample Applications

> git clone https://github.com/fabric-composer/sample-applications.git
> cd sample-applications/packages/getting-started
> npm install

Had to run the npm-install command as root, otherwise couldn't connect to docker deamon:

docker pull hyperledger/fabric-baseimage:x86_64-0.1.0
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

This required to add the following in /root/.bashrc:

export NVM_DIR="/home/sysadmin/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Also had to run a few commands manually before I got it running (root in /home/sysadmin/sample-applications/packages/getting-started):

> docker pull hyperledger/fabric-baseimage:x86_64-0.1.0
> scripts/download-hyperledger.sh
> scripts/start-hyperledger.sh
> npm run deployNetwork /home/sysadmin/sample-applications/packages/getting-started