블록체인

<삽질중> 대충 시작하는 Hyperledger Fabric v 1.0

늘근이 2017. 11. 5. 21:04

하이퍼레저가 공식적으로 쓰이는곳은 많이는 없지만,

1.0부터는 상당히 변화해버린모습으로 기존의 튜토리얼을 당황케 한다. 목표는 실제로 서버와 비동기통신까지 하는 놈을 빌드해보는것이다.

일단 하이퍼레저는 기업환경을 타겟으로 하기때문에, 열정많은 개발자가 집에서 장난감으로 가지고 노는 경우가 많이 없기때문에 일단 레퍼런스가 없는 편.

풀 리퀘스트를 하나 올렸는데 뭐라뭐라 절차도 상당히 복잡하다.

이 포스팅은 그래서, 조금씩 조금씩 삽질하는 것들을 계속 업데이트 할 예정이다.

일단 환경은 기업친화적인 윈도우즈 64비트에, docker기반으로 진행한다. ARM계열 설치는 까다로우니 포기하면된다.


Docker 설치

Prerequisites

Docker version 17.06.2 

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 귀찮게 계속해서 OS를 설치하면서 가상화하려면 짜증이 나니, 실행환경등을 컨테이너로 추상화한 후에 호스트 OS위의 프로세스만 격리해서 마치 다른 가상머신을 이용하는것처럼 해준다.

$ docker --version 

으로 정상적으로 설치되었는지 확인할 수 있다.

docker에대한 이해

http://gorakgarak.tistory.com/1116?category=246220


아래와 같이 일단 샘플을 받고,

$ git clone https://github.com/hyperledger/fabric-samples.git
$ cd fabric-samples


실제로 fabric image들을 docker에서 설치하기 위해 다운로드를 해야하는데, 

curl -sSL https://goo.gl/fMh2s3 | bash

위와같이 홈페이지에서는 가이드하고있는데, 아래의 리스트 말고는 지원되지 않는다.

darwin amd64

linux amd64

linux ppc64le

linux s390x

windows amd64

즉, 라즈베리 파이와같은 ARM프로세서로 튜토리얼처럼 바로 돌아갈수는 없다. 누군가가 열심히 빌드해놓은게 깃헙에 있지만, 버전이 예전이라 하지않는것을 추천한다. 

혹여나 curl관련해서 에러가 난다면, 그냥 아래와 같은 sh파일을 직접 돌리는것을 추천한다. windows에서는 그냥 클릭해서 실행시키든지, 혹은 명령창에서 실행하면 된다. https://goo.gl/fMh2s3 내용을 그대로 실행시키는 스크립트다. 깃 클론한 scripts에도 fabric-preload라는 이름으로도 존재한다.


script.sh


도 존재한다.


./byfn.sh -m generate


Generating certs and genesis block for with channel 'mychannel' and CLI timeout of '10000'
Continue (y/n)?y
proceeding ...
/Users/xxx/dev/fabric-samples/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
2017-06-12 21:01:37.334 EDT [bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP.
...

/Users/xxx/dev/fabric-samples/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2017-06-12 21:01:37.558 EDT [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-12 21:01:37.562 EDT [msp] getMspConfig -> INFO 002 intermediate certs folder not found at [/Users/xxx/dev/byfn/crypto-config/ordererOrganizations/example.com/msp/intermediatecerts]. Skipping.: [stat /Users/xxx/dev/byfn/crypto-config/ordererOrganizations/example.com/msp/intermediatecerts: no such file or directory]
...
2017-06-12 21:01:37.588 EDT [common/configtx/tool] doOutputBlock -> INFO 00b Generating genesis block
2017-06-12 21:01:37.590 EDT [common/configtx/tool] doOutputBlock -> INFO 00c Writing genesis block

#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
2017-06-12 21:01:37.634 EDT [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-12 21:01:37.644 EDT [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2017-06-12 21:01:37.645 EDT [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2017-06-12 21:01:37.674 EDT [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-12 21:01:37.678 EDT [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-06-12 21:01:37.679 EDT [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2017-06-12 21:01:37.700 EDT [common/configtx/tool] main -> INFO 001 Loading configuration
2017-06-12 21:01:37.704 EDT [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-06-12 21:01:37.704 EDT [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

위와같은 명령어를 보게된다면 어느정도 성공했다고 보고 한숨자고와도 된다. 만약 crytogen관련해서 에러메시지를 보게된다면, 메인 폴더 bin안에 해당 실행파일이 존재하고 있는데 bin자체를 first-network 디렉터리 안에다가 비치시키면 일단은돌아간다.



./byfn.sh -m up

위의 명령어로 아래와 같은 화면을 보면 성공이다. 잘 안돌아간다면, 

1) docker가 정상적으로 작동하는지 확인하고,

2) generate를 다시한번 돌려준다.


./byfn.sh -m down

으로 작동을 중지시키면 세팅된 내역이 죄다 클리어된다.


- 구조 -

Build Your First Network를 실행시켜서 하이퍼레저 구조를 살짝 봐볼수있는데, 최상위 구조인 ORG1 / ORG2 가 있고, 그에 각각 한개씩의 피어 노드 PEER0 / PEER1 이 각각 붙어있다. 그리고 내부적으로 돌아가는 DB 도 네개나 되는데, 이는 각각의 피어노드에 붙어있는 COUCH DB다.

실제는 Org를 2개 이후에도 계속 늘여가야 할 필요성이 생기는데, 일단 세팅파일이 상당히 많은 편으로 보인다.

일단 이것은 정답이 아닌, 세팅에서 만져야할곳 같은곳을 죄다 고친것밖에는 안되는데 일단 아래와 같은 화면에서 머물러있다.



base / docker-compose-base.yaml

configtx.yaml

crypto-config.yaml

docker-compose-cli.yaml

docker-compose-couch.yaml

docker-compose-e2e.yaml