Hyperledger Fabric v1.1 Installation
Hyperledger에서 튜토리얼로 제공해주는 BYFN(Building Your First Network) 스크립트를 사용해 Hyperledger Fabric Network를 구축해보겠습니다.
# 설치 환경
# VirtualBox, Host: Windows 10, Guest: Ubuntu 16.04 LTS Server
이 스크립트는 Orderer Node 1개와 Peer Node 4개로 구성된 네트워크를 간단하게 구축해볼 수 있습니다.
각각의 노드의 역할은 다음 글에서 자세히 살펴보기로 하고 이번 글에서는 설치에 집중하겠습니다.
우선 몇가지 준비사항이 있습니다. 사용하고 있는 윈도우 버전이 프로가 아니라서 가상머신에 우분투 16.04버전을 올려서 진행했습니다(도커때문에).
특이사항이라면, npm을 깔면 node.js도 같이 깔리는데 node.js의 버전 체크를 해줘야합니다.
Hyperledger Fabric은 8.9.x대 버전까지 지원하고 있다고 합니다. 의존성에 의해 설치된 nodejs의 버전을 확인해보니 v4.2.6버전이네요 ㅎㅎ..
네트워크 구성에 필요한 패키지들을 설치하고 Go 언어를 설치합니다(Hyperledger Fabric은 Go언어 기반입니다). Go 언어는 1.8.x 버전대는 지원하지 않으니 1.9.x 이상으로 설치해주시면 됩니다.
sudo apt-get install curl docker docker-compose npm git
wget https://dl.google.com/go/go1.9.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.5.linux-amd64.tar.gz
~/.bashrc에 몇가지 경로를 export해줍니다.
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export한후 아래 명령을 사용해 Shell에 바로 적용합니다.
source ~/.bashrc
Hpyerledger fabric은 python 2.7버전을 권장합니다(npm과의 호환때문에).
이 튜토리얼대로 하면 의존성때문에 python 2.7 버전이 자동으로 설치될 것이지만 확인은 아래 명령으로 가능합니다.
python --version
이제 hyperledger fabric sample을 github에서 가져옵니다.
git clone -b release-1.1 https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git tag
git tag 명령으로 TAG를 확인하시고 설치하는 버전과 일치하는 TAG로 체크아웃하시면 됩니다.
git checkout v1.1.0
이제 스크립트 구동에 필요한 바이너리들을 다운로드 받습니다.
curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0
이 명령어를 실행하면 bin 디렉토리에 cryptogen, configtxgen, configtxlator, peer, orderer, fabric-ca-client 바이너리가 설치됩니다.
이때 우분투에서는 root 계정이 아닌 계정으로 docker를 실행할 때 에러가 발생할 수 있습니다. 에러가 발생한다면 아래와 같은 명령어로 해결가능합니다.
sudo usermod -a -G docker $USERNAME
sudo service docker restart
이 명령을 실행한 후 로그아웃 또는 재시작 후 curl 명령을 다시 실행하면 제대로 실행될 것입니다. 제대로 도커 이미지를 다운받으면 어떤 이미지를 다운 받았는지 알 수 있는데 ca, tools, orderer, peer, javaenv, ccenv, zookeeper, kafka, couchdb 이미지를 받은 걸 알 수 있습니다.
github에서 소스를 살펴보면 아직 Hyperledger Fabric v1.1에는 PBFT 기반 합의 알고리즘이 구현되어 있지 않습니다. 해당 합의 알고리즘은 Pending되어 있는 상태이고, 개발자의 말로는 v1.4 정도에 release될 거라고 Comment를 남겼습니다. 물론 v0.6에 SBFT라고해서 간단하게 구현한 PBFT기반 합의 알고리즘이 있는데 1버전대로 넘어와서는 아직 Release되지 않은 상태고 현재는 Kafka를 사용하고 있습니다.
PBFT 기반 합의 알고리즘과 Kafka를 사용하는 것의 차이점은 비잔틴 장애 허용 여부 차이입니다. 현재 Hyperledger Fabric은 Kafka를 Product Case에 추천하고 있습니다(Single, Kafka, PBFT). 사실 그래서 블록체인이라고 할 수 있는지 고민이 되었는데 Hyperledger Fabric은 기본적으로 Permissioned Blockchain으로 설계되었고 이 환경에서는 비잔틴 장군 문제가 발생할 확률이 높지 않다고 생각했을 때는 이해가 되는 결정입니다.
하지만 이 솔루션은 Private Blcokchain일 때나 와닿을 것이고, 컨소시움 블록체인을 구성할 때는 비잔틴 장군 문제를 생각해봐야할 수 있기 때문에 아직까지는 컨소시움 블록체인이라고 부르기엔 무리가 있어보입니다.
아무튼 설치한 바이너리들을 편하게 사용하기 위해 이 바이너리가 포함된 폴더도 PATH에 추가해줍니다.
~/.bashrc에 아래처럼 경로를 추가합니다.
export PATH=$PATH:$HOME/fabric-samples/bin
본격적인 스크립트 구동
이제 준비과정은 모두 끝났습니다. 바로 스크립트 구동해보겠습니다.
cd first-network
./byfn.sh -m generate
./byfn.sh -m up
스마트 컨트랙트에 해당하는 chaincode 작성이 기본은 Go언어인데 아래처럼 설정하면 Node.js로 변경 가능합니다.
./byfn.sh -m up -l node
byfn.sh 스크립트가 제대로 성공하면 All GOOD, BYFN execution completed라는 메시지를 확인할 수 있습니다.
./byfn.sh -m down
처음에 이 부분에서 해맷는데 다음 과정을 진행하기 위해서는 우선 네트워크를 다운시켜야 합니다. 다운시키지 않고 진행했다가 여러번 다시 해봤다는...
이제 아까 다운받았던 바이너리들로 환경설정을 해주면 네트워크 구축이 끝납니다.
../bin/cryptogen generate --config=./crypto-config.yaml
export FABRIC_CFG_PATH=$PWD
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
export CHANNEL_NAME=mychannel
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
이제 진짜로 네트워크를 활성화합니다.
docker-compose -f docker-compose-cli.yaml up -d
docker start cli
Hyperledger Fabric에서 스마트 컨트랙트 작성은 Chaincode를 이용해서 합니다. byfn.sh로 구축한 Hyperledger Fabric Network에서 Chaincode를 구동하는 것은 다음 포스트에서 이어가도록 하겠습니다.
부족한 점이 있으면 많이 알려주세요!
감사합니다.
Hyperledger fabric 공부중인데 잘 정리해 주셔서 감사히 보고 갑니다 ^^
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @sung-il! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit