본문 바로가기
스터디/블록체인 OJT

블록체인 세미나 5일차 network.sh 분석하기

by 맑은청이 2021. 1. 27.
728x90
반응형

함수

  • clearContainers
  • removeUnwantedImages
  • checkPrereqs
  • createOrgs
  • createConsortium
  • networkUp
  • createChannel
  • deployCC
  • networkDown

 

network.sh 은 하이퍼레저 패브릭 공식 문서에 fabric-samples 에 test-network 안에 있는 네트워크와 관련된 쉘 스크립트입니다. 

 

파일은 주석과 함께 설명이 자세히 되어 있습니다.

 

1. clearContainers

주석 설명 : 컨테이너의 ID를 얻고 제거. network down 에 사용된다.

함수 설명 : 컨테이너 아이디를 찾고 해당 아이디의 길이가 0이거나 빈 문자열일 경우 아래 문자를 출력 

infoln 은 scripts/utils.sh에 있는 파란색으로 출력해주는 출력문.

 

위 함수를 이해하기 위해 알아야 할 쉘 스크립트 문법입니다. 

if 문의 옵션

-z : 문자열의 길이가 0이면 참 

 

[expr1 -o expr2] : expr1 OR expr2 의 결과, 즉 둘 중 하나가 참이면 참 

 

awk 에 대해

awk 는 리눅스에서 레코드를 선택하고 포함하는 값을 조작하거나 데이터화하는 프로그램입니다. 

데이터를 분류한 다음 패턴 매칭 여부를 검사하거나 데이터 조작 및 연산 등의 액션을 수행하고 그 결과를 출력합니다. 

저도 처음 본 거라 아래 블로그들을 확인하면 더 빠르게 이해하실 수 있을 거 같습니다. 

zzsza.github.io/development/2017/12/20/linux-6/

 

리눅스 awk 사용법

awk awk : 데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어입니다. 리눅스에서 사용하는 awk는 GNU 버전의 gawk로 심볼릭 링크되어 있습니다 간단한 연산자를 명령라인에서 사용할 수 있으

zzsza.github.io

docekr rm -f 는 컨테이너 삭제 명령입니다. 

 

2.removeUnwantedImages

주석 설명 : setup 할 때 생성했던 이미지를 삭제 network down 때 사용

함수 설명 : 컨테이너 아이디를 찾고 해당 아이디의 길이가 0이거나 빈 문자열일 경우 아래 문자를 출력 

infoln 은 scripts/utils.sh에 있는 파란색으로 출력해주는 출력문.

 

 

 

3. checkPrereqs

주석 설명 : 적절한 버전의 바이너리/이미지가 깔렸는데 추후에 어떠한 아이템을 더 하고 싶으면 이 곳을 체크하면 됨

함수 설명: 

전체함수

부분적으로 찾아보기 

 

[expr1 -ne expr2] : expr1 != expr2 의 결과, Not Equal 이면 참 

[-d FILE] FILE이 디렉토리이면 참 

피어의 바이너리 파일과 configuration 파일을 못 찾으면 에러

 

 

fabric tools와 도커의 버전이 맞는지 확인하고 맞지 않으면 에러 메시지 출력 

 

4. createOrgs

 

주석 설명 : 네트워크를 올리기 전에 각 조직들은 네트워크를 정의하기 위해  crypto material 이 필요. 하이퍼레저 패브린은 허가형 블록체인이고 네트워크에서 각 노드와 클라이언트는 인증을 사용하고 사인하기 위한 키와 행동 보증이 필요합니다. 게다가 클라이언트들은 조직에 속하기 위해 네트워크의 맴버여야 한다. 그러므로 조직의 crypto material 을 생성하기 위해 cryptogen tool 또는 Fabric CA을 사용할 수 있다. 

 

샘플 네트워크는 보통 cryptogen을 이용한다. cryptogen은 페브릭 네트워크에서 사용할 수 있는 인증과 키를 빠르게 생성하여 개발과 테스트를 할 수 있다. 'organizations/cryptogent' 디렉토리에 있다. Crytogen은 각 조직에 'organizations' 디렉토리안에 crypto material 을 생성한다. 

 

또한 Fabric CA 를 통해서도 crypto material을 생성할 수 있다. CA 각 조직을 위한 믿을 만한 루트를 생성하여 인증과 키를 제공한다. 여기서는 docker compose를 통해서 세개의 CA를 들고 온다. 각 피어 조직과 ordering 조직에.

이 configuration 파일은  'organizations/fabric-ca' 디렉터리에서 사용이 가능하다. 

함수 설명: 

부분적으로 살펴보기 

cryptogen 을 사용하여 crypto material 생성 

 

쉘 스크립트 문법인데 아래 블로그를 참조했습니다. 

blog.naver.com/PostView.nhn?blogId=happy_jhyo&logNo=70146791303&redirect=Dlog&widgetTypeCall=true

 

[쉘옵션설정] set, shopt 명령어 사용 쉘 옵션 정리하기

Set 명령어로 옵션 설정하는 방법 set -o : 목록보기set -o ~ : 설정하기set +o ~ : off 하기 sh...

blog.naver.com

set -x는 xtrace 로 추적 기능이 생겨서 표준 에러로 커맨드 출력 

만약 추적 기능을 쓰지 않으려면 set +x 를 사용 

 

 

쉘 스크립트 > 와 <

>1 은 커맨드의 표준 출력을 다음에 나오는 파일 디스크립터에 전달

>2 쉘 스크립트의 표준 에러를 다음에 나오는 파일 디스크립터에 전달

>&2 모든 출력을 강제로 쉘 스크립트의 표준 에러로 출력

2>&1 : 2>> 의 축약형으로 결과를 로그파일에 저장하고 표준에러의 결과를 파일 디스크립터에 추가 

 

[-f FILE] FILE 이 존재하고 정규파일이면 참

 

 

5. createConsortium

주석 설명 : crypto material 을 생성하면 orderer 시스템 채널의 제네시스 블록(첫 블록)을 생성해야함. 

configtxgen tool을 통해 생성할 수 있다. 'configtx.yaml' 파일은 샘플 네트워크에 대한 정의를 포함함.

피어와 ordering 조직은 'Profiles' 에 정의 되어 있다. 파일은 MSP 위치를 가리킴.

본질적으로 채널 MSP 는 노드와 클라이언트를 네트워크 맴버로 인식하는 것을 허가함.

또한 이 파일은 각 피어 중에 앵커 피어를 정의한다. 

정리하자면 이 함수는 order system channel 에 제네시스 블록을 생성하는 함수.

함수 설명 : 

 

6.networkUP

주석 설명: crypto material 과 system channel 의 제네시스 블록을 만들었으니 피어와 ordering 서비스를 가져올 수 있음. 환경 변수와 파일의 마운팅 포인트가 정의된 'docker-compose-test-net.yaml' 이 네트워크 생성의 기본 파일. 

즉 docker compose을 이용하여 피어와 orderer 노드를 가지고 옴.

함수 설명: checkPrereqs 을 통해 준비가 되어있는지 확인 한다. 디렉토리가 참이 아니면 조직과 컨소시엄을 함수를 통해 생성한다. 

compose 파일 변수를 선언하고 데이터 베이스가 couchdb이면 추가적으로 compose 파일 변수를 선언한다. 

이미지 태그를 설정하고 도커 컨테이너 실행 목록을 출력한다. 

에러가 나면 에러 메세지를 출력한다.

 

7. createChannel

설명 : 스크립트를 호출해서 채널을 생성하고 조직들의 피어들을 join  한다. 그리고 각 조직에 앵커 피어를 업데이트한다. 피어 조직이 비어 있으면 networkup 함수를 통해 네트워크를 구축하고 createChannel.sh 에 변수를 넘겨주면서 실행합니다. 

8. deployCC

설명 : 채널에 체인코드를 쿠현하기 위해 deployCC 스크립트 실행

 

9.networkDown

설명 : 네트워크를 닫음. 컨테이너를 지우고 이미지 또한 삭제한다. 

 

쉘스크립트 shift 는 초기 인자를 없애고 각 인자 번호를 1씩 줄인다. 

shift 이후에는 $3이 $2이가 된다. 

 

 

마지막으로 수행의 모드를 정하고 요청 사항을 출력하는 구문으로 network.sh가 끝난다. 

 

728x90
반응형