Instalar o Hyperledger Fabric no Ubuntu — Parte 2

Marison Souza
Trubr
Published in
5 min readJan 24, 2018

Na parte 1 vimos como fazer a instalação de todos os pré-requisitos do Hyperledger Fabric em um servidor Ubuntu, baixar as imagens e deixar em execução os componentes no docker container.

Update 27/01/2018: Com o lançamento do Hyperledger Fabric 1.1 talvez alguns comandos ou instruções não façam sentido ou nem sejam necessários. Se você usa o 1.0 e quer migrar para o 1.1, segue o guia no link abaixo.
http://hyperledger-fabric.readthedocs.io/en/v1.1.0-alpha/upgrade_to_one_point_one.html

Agora vamos efetivamente fazer uso da Blockchain utilizando o exemplo “e2e_cli” que vem no fabric.

cd $GOPATH/src/github.com/hyperledger/fabric/

Para garantir que toda a instalação esteja 100%, execute o comando “make”, que deve realizar além da compilação do fabric e geração dos binários de execução, também a execução de todos os testes unitários da plataforma — Isso pode levar bastante tempo (60 a 120 minutos) e ocupar mais 3Gb, mas garante que o build está 100% compatível.

Executando a Blockchain e2e_cli

Antes de configurarmos uma rede do zero, vamos executar o exemplo pronto que o Fabric baixou para você executar alguns comandos básicos e testar.

cd examples/e2e_cli

O E2E_CLI é um script que executa uma blockchain configurada da seguinte forma:

  • 2 autoridades certificadoras — “Fabric CA”
  • 2 empresas diferentes — “Organization” chamadas org1 e org2
  • 4 nós da rede — “Peers” sendo 2 para cada empresa (peer0 e peer1)
  • 1 serviço de ordenação da blockchain — “Orderer” único para toda a cadeia — Lembrando que não é centralizado, você pode ter vários orderer na sua rede.

Objetivo: A ideia é realizar a simulação de um cenário de blockchain real onde se tem 2 empresas distintas com sua base de usuários e permissões separadas, 2 nós executando em cada empresa e um servidor responsável pelo ‘orderer’ (receber as transações assinadas pelos peers, agrupar em blocos e distribuir na rede para todos os nós). Isso pode ser facilmente visto nos arquivos de configuração do docker-compose que vamos ver mais adiante.

As portas padrões dos peers dofabric vão de 7050 até 7054. Como estamos executando toda a rede simulada em uma mesma máquina via docker então é feito o mapeamento das portas para localhost da seguinte forma:

  • Orderer — Porta 7050
  • Peer 0 da empresa1 = 7051, 7052, 7053
  • Peer 1 da empresa 1 = 8051, 8052, 8053
  • Peer 0 da empresa 2 = 9051, 9052, 9053
  • Peer 1 da empresa 2 = 10051, 10052, 10053
  • CA da empresa 1 = 7054
  • CA da empresa 2 = 8054

Ok, vamos executar.

chmod +x *.sh
./generateArtifacts.sh trubr
./network_setup.sh up trubr 1000

Troque o ‘trubr’ pelo ID do seu canal, livre escolha, não use espaços nem caracteres especiais, acentuação etc… O 1000 é tempo de timeout, você pode trocar também.

Nesta etapa ele vai gerar o genesis block da blockchain, o canal para as transações e vai vincular as duas empresas no mesmo canal. Ele vai inicializar a blockchain, todos os nós, instalar e executar queries e chaincodes e todo o fluxo de validação, consenso e commit das transações.

A execução do fluxo completo do teste deve levar entre 5 a 12 minutos, dependendo da configuração da sua máquina.

Ao final deve aparecer a imagem mais abaixo — Se aparece é porque tudo funcionou! Ufa!

Desejada mensagem END-E2E — É porque sua network funcionou!

Testando e experimentando a Blockchain

Vamos brincar um pouco com essa blockchain de teste que está no ar antes de desinstala-la para criar uma nossa?

Execute o comando “docker ps” e veja que todos os componentes estão em execução no docker. Isso está simulando uma rede completa como se estivesse distribuído em duas empresas. O total da instalação até este ponto ficou com 6.2Gb.

Imagens do hyperledger fabric em execução no docker
  • Para obter o ID do container faça “docker ps” e veja o valor alfanumérico de aproximadamente 12 caracteres ao lado de cada processo. Ex: 9198d6760faf
  • Iniciando todas as imagens: docker start $(docker ps -aq)
  • Parando todas as imagens: docker stop $(docker ps -aq)
  • Parando um container específico “docker stop <ID DO CONTAINER>
  • Reiniciando todas as imagens: docker restart $(docker ps -aq)
  • Removendo todos os containers parados(exit): docker rm $(docker ps -q -f status=exited)
  • Para sair de um container e deixar executando: CTRL+P e depois CTRL+Q
  • Para ver os logs do container faça “docke logs <ID DO CONTAINER>
  • Executando o container: docker exec -it <ID DO CONTAINER> /bin/bash
  • Salvar mudanças que você fez em um container: docker commit <ID DO CONTAINER>
  • Para obter o IP de um container específico faça: docker inspect <ID DO CONTAINER>| grep IPAddress

Desativando a rede simulada

Para interromper a execução basta trocar o ‘up’ por ‘down’ e toda a rede será desativada:

./network_setup.sh down trubr

Ao final execute “docker ps” para verificar. Não pode ter nenhuma imagem em execução..

Limpar todas as imagens do Docker

Se quiser fazer uma limpeza no docker para reinstalar tudo, execute o comando abaixo.

docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -q)
docker network prune

Até a próxima parte!

Nessa parte do tutorial você aprendeu a executar uma simulação da network completa usando docker em um servidor Ubuntu. Na próxima e última parte que envolve a “Instalação” devo mostrar como instalar uma blockchain do zero usando o Hyperledger Fabric, sem usar os exemplos prontos, configurar os peers e comitar versões de imagens no Fabric. Na quarta e última parte devo mostrar como utilizar as ferramentas de gestão como hyperledger cello, explorer e vamos iniciar os tutoriais de programação com hyperledger composer, desenvolvimento e deploy de chaincodes com o SDK do java.

Se tiverem sugestões de tópicos deixem nos comentários ;)

Resolução de problemas comuns

  1. Makefile:111: recipe for target ‘license’ failed

Dependendo da sua versão dos componentes esse erro pode acontecer. Provavelmente será ajustado muito em breve, mas enquanto isso o workaround é editar o arquivo “.go” que o erro indica e adicionar nos comentários, logo nas primeiras linhas, o texto abaixo.

SPDX-License-Identifier: Apache-2.0

2. ‘behave: not found’ ou ‘Makefile:177: recipe for target ‘behave’ failed’

Neste caso é porque você está tentando executar os testes unitários e não tem o behave do python instalado. Para corrigir isso execute:

sudo pip install behave nose docker-compose
sudo pip install -I flask==0.10.1 python-dateutil==2.2 pytz==2014.3 pyyaml==3.10 couchdb==1.0 flask-cors==2.0.1 requests==2.4.3 pyOpenSSL==16.2.0 pysha3==1.0b1 grpcio==1.0.4
sudo pip install urllib3 ndg-httpsclient pyasn1 ecdsa python-slugify grpcio-tools jinja2 b3j0f.aop six
pip install requests==2.6.0

Em caso de problemas veja os logs com

cd $GOPATH/src/github.com/hyperledger/fabric/bddtests
behave -D logs=Y

3. AttributeError: ‘module’ object has no attribute ‘PROTOCOL_SSLv3’

Dependendo da versão que você estiver usando do Python pode não ter o protocolo SSLv3, necessário para a configuração da network da blockchain. Para corrigir isso basta fixar a versão do pip em 2.6.0 com o comando abaixo.

pip install requests==2.6.0

4. Erros com o ltdl.h

Valide se você instalou corretamente as bibliotecas iniciais de desenvolvimento da parte 1 desse tutorial.

sudo apt-get install libtool
sudo apt-get install libltdl-dev

--

--

Marison Souza
Trubr
Editor for

Digital Publishing | Data Protection | Blockchain