[Hyperledger] Fabric 튜토리얼(1) - First Network 실행하기

Hyperledger Fabric 튜토리얼(1) - First Network 실행하기

공식 사이트를 참고로 진행할 시리즈. 기껏 Composer 실습 끝냈더니 Fabric이 남아 있었다. 백날 공식 사이트 살피면 뭐 하나~ 한 번에 되는 실습 하나 없는데! 복잡하고 문제가 많아 분명 또 잊을 게 분명하니까 잘 적어 둬야지. 오늘 오전 시간은 이 포스팅으로 마무리해 보자! (1시간도 안 남음)

sudo를 광적으로 붙이는 경향이 있다. 빼도 되는 명령이 몇 가지 있긴 한데, 괜한 삽질하기 싫어서 웬만하면 다 붙인다. 특히 docker 명령을 실행할 때에는 무조건 붙여야 한다. sudo 빼고 실행할 수 있도록 설치 과정에서 설정해 주었는데 외않돼지? -_-


0. 필수 구성 요소 설치 확인

필수 구성 요소는 이 링크에서 확인하면 된다. 설치 과정은 이전 시리즈에 정리해 두었다. 누락된 것이 있다면 이전 시리즈 참고해 주세요.

- curl, git, go 설치하기
- docker, docker-compose 설치하기


1. Hyperledger Fabric Sample Code 다운로드

오늘은 Fabric Sample 중 first-network를 실습해 볼 예정이다. 먼저 샘플 코드를 받아 보자. 샘플 코드는 원하는 디렉토리에 받으면 되는데, 나는 홈 디렉토리에서 다음의 명령어를 실행했다.

1
2
3
4
# fabric-samples 다운로드
git clone -b master https://github.com/hyperledger/fabric-samples.git
# fabric-samples로 directory 이동
cd fabric-samples

다음으로 바이너리 파일을 다운한다.

1
sudo curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0

여기까지 다운로드는 끝!


2. 어떻게 실행하지?

fabric-samples/first-network 디렉토리에 접근하면 byfn.sh 파일이 있을 것이다. sudo ./byfn.sh --help 명령을 실행해 보자. 다음과 같은 설명이 출력될 것!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Usage:
byfn.sh up|down|restart|generate [-c <channel name>] [-t <timeout>] [-d <delay>] [-f <docker-compose-file>] [-s <dbtype>]
byfn.sh -h|--help (print this message)
-m <mode> - one of 'up', 'down', 'restart' or 'generate'
- 'up' - bring up the network with docker-compose up
- 'down' - clear the network with docker-compose down
- 'restart' - restart the network
- 'generate' - generate required certificates and genesis block
-c <channel name> - channel name to use (defaults to "mychannel")
-t <timeout> - CLI timeout duration in seconds (defaults to 10)
-d <delay> - delay duration in seconds (defaults to 3)
-f <docker-compose-file> - specify which docker-compose file use (defaults to docker-compose-cli.yaml)
-s <dbtype> - the database backend to use: goleveldb (default) or couchdb
-l <language> - the chaincode language: golang (default) or node
-a - don't ask for confirmation before proceeding

Typically, one would first generate the required certificates and
genesis block, then bring up the network. e.g.:

byfn.sh -m generate -c mychannel
byfn.sh -m up -c mychannel -s couchdb

요까지는 아마 순조롭게 실행됐을 것이다.


3. 네트워크 생성

네트워크 생성은 간단히 해결된다. 다음의 명령을 실행하시오.

1
sudo ./byfn.sh -m generate

만약 cryptogen tool not found. exiting 에러를 뿜는다면 쉽게 해결할 수 있다. Fabric Sample 코드만 다운하고 바이너리 파일을 다운하지 않았기 때문에 생기는 문제. 스크롤 위로 올려서 sudo curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0 명령 실행해 주세요. ^^


4. 네트워크 구축

자, 지금부터 시작이다. 일단 명령어는 간단하다. 다음의 명령을 실행해 보시지요. 튜토리얼에서는 이 순서로 하라고 함.

1
sudo ./byfn.sh -m up

아마 바로 실행되지 않을걸? 😦 정말 불친절!

ERROR: manifest for hyperledger/fabric-orderer:latest not found

docker에서 pull을 해 줘야 한다. fabric-orderer가 최신 버전이 아니거나, 태그가 달라서 생기는 문제인 듯하다. 다음의 명령어를 실행하자.

1
2
3
4
# fabric-tools 최신 버전으로 pull
sudo docker pull hyperledger/fabric-orderer:x86_64-1.1.0-rc1
# tag 수정
sudo docker tag hyperledger/fabric-orderer:x86_64-1.1.0-rc1 hyperledger/fabric-tools:latest

아래의 명령을 실행하자.

1
sudo ./byfn.sh -m up

아마 여전히 안 될 것이다. ㅋㅋㅋㅋㅋ

ERROR: manifest for hyperledger/fabric-tools:latest not found

에러 로그가 비슷하다. 위와 동일한 문제겠지? 이번에는 fabric-orderer가 아닌 fabric-tools가 최신 버전이 아니거나, tag가 달라서 생기는 문제일 것이다.

1
2
3
4
# fabric-tools 최신 버전으로 pull
sudo docker pull hyperledger/fabric-tools:x86_64-1.1.0-rc1
# tag 수정
sudo docker tag hyperledger/fabric-tools:x86_64-1.1.0-rc1 hyperledger/fabric-tools:latest

아래의 명령을 실행하자.

1
sudo ./byfn.sh -m up

또 안 될 수도 있다. 마지막으로 해결할 게 하나 남았지요.

ERROR: manifest for hyperledger/fabric-peer:latest not found

이번에도 같은 문제겠네요. 명령어 실행 고고!

1
2
3
4
# fabric-peer 최신 버전으로 pull
sudo docker pull hyperledger/fabric-peer:x86_64-1.1.0-rc1
# tag 수정
sudo docker tag hyperledger/fabric-peer:x86_64-1.1.0-rc1 hyperledger/fabric-peer:latest

자, 이제 아래의 명령을 실행해 보시지요.

1
sudo ./byfn.sh -m up

아마 이제야 비로소 실행될 것이다! 마지막 로그는,

1
2
3
4
5
6
7
8
9
10
11
12
Query Result: 90
2017-05-16 17:08:15.158 UTC [main] main -> INFO 008 Exiting.....
===================== Query on peer1.org2 on channel 'mychannel' is successful =====================

===================== All GOOD, BYFN execution completed =====================


_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/

이거겠죠? 네! 드디어 네트워크 구축에 성공하셨습니다! 짝짝짝~

아, fabric의 최신 버전은 이 링크에서 확인 가능하다. 접속 후 보고 싶은 repo의 detail에서 tag로 들어가 살펴보면 언제 무엇으로 업데이트 되었는지 알 수 있다. not found 에러를 만난다면 docker 명령의 일부만 수정해서 모두 대응 가능하다.

엥? 그래도 안 되는데요?

./btfn.sh -m up 명령어를 실행하다가 새로운 오류 친구를 만났다. docker-compose가 설치되어 있는데 못 찾는다지 뭐야.

1
2
3
4
5
UTC [main] main -> INFO 001 Exiting.....
LOCAL_VERSION=1.1.0
DOCKER_IMAGE_VERSION=1.1.0
./byfn.sh: line 159: docker-compose: command not found
ERROR !!!! Unable to start network

이게 말이나 되는 소리?

도커 이미지 다 지우고 다시 받았는데도 저런다. 혹시나 싶어서 아래의 명령어로 네트워크를 내려 보았는데,

1
sudo ./byfn.sh -m down

그 이후 다시 올려 보니

1
sudo ./byfn.sh -m up

잘 된다. ^^


5. 네트워크 다운시키기

네트워크를 구축했으면 내릴 수도 있어야겠지? 내려 봅시다!

1
sudo ./byfn.sh -m down

키키. 놀랍게도 한 번에 내려갔다~! 나이스!


Share