> 준비과정
1. 우분투 20.04 설치
2.패키지 업데이트
sudo apt-get update && sudo apt-get upgrade
3. 도커 & 도커컴포즈 설치(나는 20.10.7 버전 설치함)
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io sudo usermod -a -G docker $USER sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; sudo chmod +x /usr/local/bin/docker-compose; sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose;
4. Go언어(나는 1.12 버전 설치함) 설치
curl -LO https://dl.google.com/go/go1.12.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.12.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin echo 'export GOPATH=$HOME/go' >> ~/.bash_profile sed '$!N; /^\(export GOPATH=.*\) \1$/!P; D' -i ~/.bash_profile source ~/.bash_profile
5. Nodejs & NPM 설치
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install build-essential sudo apt-get install -y nodejs sudo npm install npm@5.6.0 -g
6. 파이썬 2.7 설치
sudo apt-get install python
하이퍼레저 패브릭 1.4 설치
1. 소스 다운로드
curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.12 1.4.9 0.4.22 export PATH=/home/hyperledger/fabric-samples/bin:$PATH필요한 도커이미지 자동으로 pull함
2. 네트워크 구조 변경
변경 전 구조
변경 후 구조
2.1 fabric-samples/first-network/docker-compose-cli.yaml파일 변경
2.2 fabric-samples/first-network/base/docker-compose-base.yaml파일 변경
2.3 fabric-samples/first-network/crypto-config.yaml파일 변경
3. 네트워크 시작
3-1. byfn 스크립트를 이용한 시작
./byfn.sh generate ./byfn.sh up3-2. 사용자가 수동으로 네트워크 시작
- 필요조건
- crypto-config 디렉터리가 존재하지 않아야 함
- channel-artifacts 디렉터리가 비어있어야 함
- 실행중인 하이퍼레저 관련 컨테이너가 없어야 함rm -rf crypto-config/ rm -rf channel-artifacts && mkdir channel-artifacts docker kill $(docker ps -aq) docker rm $(docker ps -aq)
- 각 노드에 필요한 서명키와 인증서 생성(./byfn.sh generate와 동일)
../bin/cryptogen generate --config=./crypto-config.yaml
- 설정 트랜잭션 생성
- 오더러 제네시스 블록(genesis.block) 생성
- 채널 설정 트랜잭션(channel.tx) 생성
- 조직별 앵커피어 업데이트 트랜잭션(Org1MSPanchors.tx, Org2MSPanchors.tx) 생성
제네시스블록 생성 export FABRIC_DFG_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
결과물은 모두 channel-artifacts 디렉터리에 저장됨
- 노드 실행
docker-compose -f docker-compose-cli.yaml up -d
- 채널 가입
cli 컨테이너 접속 docker exec -it cli bash채널 생성 export CHANNEL_NAME=mychannel peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer0.org1 (기본값으로 설정되 있음) 채널 가입 peer channel join -b mychannel.block
peer1.org 채널 가입 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp CORE_PEER_ADDRESS=peer1.org1.example.com:8051 CORE_PEER_LOCALMSPID="Org1MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt peer channel join -b mychannel.block peer channel list
peer2.org1 채널 가입 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp CORE_PEER_ADDRESS=peer2.org1.example.com:18051 CORE_PEER_LOCALMSPID="Org1MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/tls/ca.crt peer channel join -b mychannel.block peer channel list
peer0.org2 채널 가입 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join -b mychannel.block peer channel list
peer1.org2 채널 가입 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer1.org2.example.com:10051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt peer channel join -b mychannel.block peer channel list
peer2.org2 채널 가입 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer2.org2.example.com:11051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer2.org2.example.com/tls/ca.crt peer channel join -b mychannel.block peer channel list
- 조직별 앵커피어 업데이트
org1의 앵커피어 업데이트 export CHANNEL_NAME=mychannel peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
org2의 앵커피어 업데이트 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
↓↓↓ 실행된 피어 & 오더러 & cli ↓↓↓

잘 배우고 갑니다.