[Hyperledger Fabric] 윈도우10에서 Docker를 이용한 fabric-samples 실행

Windows10에 docker를 이용한 Hyperledger Fabric Samples를 구동하는 방법을 포스팅합니다.

6개월 전에..

설치 시도했다가 오류로 인해 실패했습니다.. ㅜㅜ
현재 개발을 Windows에서 진행하고 있는데 체인코드 개발을 Fabric 네트워크가 설치된 장비에 FTP로 올리고 명령어로 실행하고..
오류 부분 확인해서 수정후 또 FTP로 올리고 명령어로 실행하고 이런 귀찮음을 방지하고 Windows에서 간단한 Fabric 네트워크를 구성하고 FTP로 올리는 귀찮음을 덜면 정말 좋겠다라고 생각했습니다.
6개월 전에 실패한 설치기를 다시 시도해보고 성공 결과를 올립니다.

Docker 설치

https://www.docker.com/products/docker-desktop
windows stable 버전으로 다운로드합니다.
설치 진행중 [윈도우의 Hyper-V 기능 사용]에 체크 후 설치 합니다.

Hyper-V 설정

제어판 > Windows 기능 켜기/끄기 > Hyper-V 체크 > 컴퓨터 재부팅

Docker 실행

설치한 Docker를 실행합니다.
이때 앞선 단계에서 Hyper-V를 설정했음에도 불구하고 Hyper-V를 사용할 수 없다는 팝업과 함께 Docker가 실행되지 않는다면 BIOS에서 가상화 기능이 켜져있는지 확인해야합니다.
가상화 기능 enable/disable는 메인보드 제조사마다 조금 상이하니 확인바랍니다.
Docker 실행에 성공하면 작업표시줄 트레이에 고래가 컨테이너를 싣고있는 아이콘 트레이가 생깁니다.

Go언어 설치

https://golang.org/dl/
1.14.3 버전을 설치했습니다.
큰 문제 없이 Next만 누르면 설치 가능합니다.

GO 환경설정

시작 > 시스템 환경 변수 편집(검색하면 쉽게 찾을 수 있음) > 하단의 환경변수 > {사용자 이름}에 대한 사용자 변수 > GOPATH 확인

GOPATH가 없다면 [새로만들기]를 이용해 추가합니다.
변수 : GOPATH
값 : C:\Users{사용자 이름}\go

1.14.3을 설치하니 자동으로 등록이 돼있었습니다.

Node.js 설치

https://nodejs.org/ko/
12.17.0 LTS 버전을 설치했습니다.
마찬가지로 Next만 누르면 설치 가능합니다.

Git 설치

https://git-scm.com/
Windows에서는 cmd(커맨드)창에서 명령어를 실행하는게 아닌 Git Bash를 이용해 아래의 명령어를 실행합니다.
따라서 Git Bash를 설치하기 위해 git을 설치합니다.
2.26.2 버전을 설치했고 옵션은 따로 건드리지 않고 기본옵션을 사용했습니다.

git 환경설정

1
2
$ git config --global core.autocrlf false
$ git config --global core.longpaths true

Linux와 Windows의 개행문자와 긴 경로에 대한 설정인데 이해하지 않고 명령어 실행후 잘 설정되었는지 확인만 하고 넘어가도 무방합니다.

컴퓨터 재부팅

설정들이 적용될 수 있도록 재부팅을 한번 합니다.

Git Bash 실행

시작 > Git Bash > 우클릭 > 자세히 > 관리자 권한으로 실행
아래의 순서들은 모두 Git Bash에서 실행합니다.

windows-build-tools 설치

1
$ npm install --global windows-build-tools

windows-build-tools를 설치합니다.

이때 Successfully installed Python 2.7 이라는 메세지가 나오고 프로세스는 끝나지 않는데 강제종료했습니다.

grpc 설치

1
$ npm install --global grpc

grpc를 설치합니다.

fabric-samples 설치

1
$ curl -sSL https://bit.ly/2ysbOFE | bash -s

version을 명시하면 원하는 버전의 fabric을 받을 수 있습니다.

curl -sSL https://bit.ly/2ysbOFE | bash -s 1.4.3

실행

설치가 완료되었으니 basic-network를 실행해봅시다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ cd fabric-samples/basic-network
$ ./start.sh

# don't rewrite paths for Windows Git Bash users
export MSYS_NO_PATHCONV=1

docker-compose -f docker-compose.yml down
Removing network net_basic
Network net_basic not found.

docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb
Creating network "net_basic" with the default driver
Creating couchdb ... done
Creating ca.example.com ... done
Creating orderer.example.com ... done
Creating peer0.org1.example.com ... done
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ca1a7ca4131 hyperledger/fabric-peer "peer node start" Less than a second ago Up Less than a second 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
c3065525760f hyperledger/fabric-orderer "orderer" 2 seconds ago Up 2 seconds 0.0.0.0:7050->7050/tcp orderer.example.com
756f03161e5f hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 10 seconds ago Up 10 seconds 0.0.0.0:7054->7054/tcp ca.example.com
e4dc3f6c1e35 hyperledger/fabric-couchdb "tini -- /docker-ent…" 19 seconds ago Up 19 seconds 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb

# wait for Hyperledger Fabric to start
# incase of errors when running later commands, issue export FABRIC_START_TIMEOUT=<larger number>
export FABRIC_START_TIMEOUT=10
#echo ${FABRIC_START_TIMEOUT}
sleep ${FABRIC_START_TIMEOUT}

# Create the channel
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
2020-05-30 00:28:15.276 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-05-30 00:28:15.300 UTC [cli.common] readBlock -> INFO 002 Received block: 0
# Join peer0.org1.example.com to the channel.
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block
2020-05-30 00:28:15.621 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-05-30 00:28:15.723 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel

채널 조인까지 완료되는 것을 볼 수 있습니다.

마무리

정리하고 보니 생각보다 이것저것 설치해야 할 것들이 많네요.
확실한건 Mac이나 Linux가 개발자들에게는 이런 불편함들을 어느정도 해소해줄 수 있는 OS이지 않을까 싶습니다.
이 포스트는 정말 Windows에서 환경구축이 필요해 임시적으로 쓰는 분들에게는 도움이 될 수 있을것 같습니다.