개인적으로 공부한 내용이므로 틀린 내용이 존재할 수 있습니다.
오류내용은 댓글을 통해 알려주시길 바랍니다.
오늘은 indy SDK의 빌드과정을 분석해보며, 해당 행위가 어떤 의미를 가지는 지 파악해보겠습니다.
indy SDK를 우분투 환경에서 빌드해보겠습니다.
분석 코드 :
https://github.com/hyperledger/indy-sdk/blob/master/docs/build-guides/ubuntu-build.md
1. Rust와 Rustup을 설치
아래의 코드를 통해 rust 설치가 가능합니다.
curl https://sh.rustup.rs -sSf | sh
혹여나 아래와 같은 경고 메시지가 뜬다면 , 다음 코드로 기존 rust 패키지를 삭제 후 다시 설치를 진행하시길 바랍니다.
설치가 성공적으로 된다면, 'Rust is installed now. Great!' 와 같은 메시지가 출력됩니다.
apt-get purge rustc cargo
2. 기본 라이브러리 및 유틸리티 설치
apt-get update && \
apt-get install -y \
build-essential \
pkg-config \
cmake \
libssl-dev \
libsqlite3-dev \
libzmq3-dev \
libncursesw5-dev
빌드를 위한 cmake, 인증서 서버 ssl, libindy가 기본적으로 노드를 저장하기 위해 사용하는 sqlite 등을 설치/업데이트 하게 됩니다.
3. libsodium 코드 빌드
cd /tmp && \
curl https://download.libsodium.org/libsodium/releases/old/unsupported/libsodium-1.0.14.tar.gz | tar -xz && \
cd /tmp/libsodium-1.0.14 && \
./configure --disable-shared && \
make && \
make install && \
rm -rf /tmp/libsodium-1.0.14
암호화에 관련된 라이브러리를 다운로드 한다. (자세한 설명)
Ubuntu 16.04는 apt저장소 에서 최신버전인 1.0.14 설치를 지원하지 않기 때문에 위처럼 다운로드를 한다.
현재 libsodium은 1.0.18버전이 최신 릴리즈 버전으로 혹여나 버전변경이 필요하다면 이곳을 참고바란다.
3. libindy 빌드
git clone https://github.com/hyperledger/indy-sdk.git
cd ./indy-sdk/libindy
cargo build
cd ..
libindy를 빌드하는 과정이다. indy-sdk를 깃허브에서 클론해온 뒤 내부폴더에 있는 libindy를 빌드하였다.
4. 통합테스트 실행
[블록체인] Hyperledger Indy node-pool 분석하기
개인적으로 공부한 내용이므로 틀린 내용이 존재할 수 있습니다. 오류내용은 댓글을 통해 알려주시길 바랍니다. indy-node의 dockerfile 분석 하단의 링크에 작성된 node-pool 관련 분석입니다. dockerfi
mfdo.tistory.com
테스트를 위해 도커를 이용해 node-pool을 구동합니다.
node-pool을 구동하는 방법과 그 행위의 목적은 이전 글에 작성하였습니다.
여기서는 빠르게 테스트를 진행해보겠습니다. 참고
아래의 코드를 실행하여 indy-pool을 구동합니다.
docker build -f ci/indy-pool.dockerfile -t indy_pool .
docker run -itd -p 9701-9708:9701-9708 indy_pool
저처럼 바보같이 오류를 띄우신 분은 없을텐데요. 저는 그랬으니 글을 남깁니다.
1. no such file or directory
ls를 통해 현재 폴더 내의 파일 목록을 확인하시고,
cd를 이용해 폴더를 이동g하여 /tmp/indy-sdk로 위치를 맞추어줍니다.
2. Bind for 0.0.0.0:9708 failed: port is already allocated
포트가 이미 열려있다고 합니다. 이전에 도커 풀을 돌리고 종료를 안 한 제 자신이 보입니다.
'docker ps'를 통해 현재 구동되고 있는 도커의 Container ID를 체크합니다.
'docker stop 자신의 ContainerID'를 입력하여 구동되던 indy-pool 도커의 구동을 종료합니다.
추가적으로 저는 cargo 또한 없다고 하여 'apt install cargo'를 통해 설치도 해주었습니다.
5. 통합테스트 실행
아래 코드를 이용해 libindy 폴더로 이동합니다.
그 후 러스트코드의 테스트 유닛을 하나만 돌릴 수 있도록 설정하여 테스트를 진행합니다.
cd libindy
RUST_TEST_THREADS=1 cargo test
무언가 잔뜩 컴파일 합니다. 통합테스트이므로 DID를 위한 대부분의 서비스가 실행됩니다. 서비스를 수행 후 수행 성공 여부를 출력합니다. 통합테스트에서 실행하는 각각의 컴파일 내용을 읽어본다면, 어떤 것을 실행중 인지 파악할 수 있습니다. 혹여나 세부적으로 돌아가는 동작을 이해하기 위해 코드를 읽어본다면, 몇 가지 정보를 이해해야합니다.
1. 어떤 테스트가 돌아가는가?
테스트를 돌리기 위해 실행하는 코드들은 해당 링크에 있는 rust파일들입니다. 이곳에서 테스트를 위해 DID를 생성하거나 time out 오류 프로세스를 작동을 시키거나 하지요.
2. 어떻게 코드를 작성하는가?
위의 링크로 들어가면 이미 정의되어 있는 함수들을 사용하고는 합니다. 이를 이해하기 위해서는 rust의 미약한 지식이 필요했습니다. 링크에서 현재 필요한 지식을 전수해주고 있습니다. utils의 코드와 tests의 코드를 비교해보면 차이점이 생깁니다.
2-1) utils는 기본적인 함수와 그 구동의 정의만 해놓았습니다.
tests의 코드는 utils의 함수를 가져와 사용합니다. 예를 들면 utils의 pool.rs에는 pool의 이름을 넣으면 해당 pool을 삭제해주는 delete 함수가 존재합니다.
이를 tests의 pool.rs에서는 indy_delete_pool_ledger_config_works_for_closed 함수를 만들고 pool leger를 닫기 위해 / 해당 pool을 정의하고 / 정의된 pool의 핸들러를 닫고 / pool을 삭제 / 하는 과정을 진행하는데, 이 때 pool을 삭제하는 코드가 utils에서 가져온 함수입니다. 예를 들기위해 3가지 동작 중 하나를 가져왔다고 하였지만 물론 다른 함수들도 utils에 정의되어있습니다.
간단하게 말하면 utils에는 숫자의 총합을 구하는 함수가, tests에는 utils의 함수를 이용하여 구현된 평균을 구하는 함수가 구현되어있는 셈이지요.
2-2) 전체적인 구조를 정의한 문서가 있습니다.
생각보다 indy SDK의 문서의 친절함에 놀라면서 스스로의 무지함에 기가 죽고는합니다...
소소한 불평이라면 주석이 조금만 더 달려있으면 좋겠다는 생각입니다.ㅠㅠ
여기에 indy SDK의 전체적인 흐름을 또 한 번 정의해놓은 레퍼런스가 있습니다.
이곳에서 설명하는 코드는 libindy의 incliude 폴더에 작성되어있는 코드입니다.
5. indy-cli 빌드
cd cli/
RUSTFLAGS=" -L ../libindy/target/debug" cargo build
indy cli을 빌드합니다. 이건 추가적인 사항으로 선택적으로 하시면됩니다.
cli을 이용하면, 지갑/pool구성/DID 관리 및 원장을 이용한 트랜젝션 생성 등의 일을 수행할 수 있습니다.
'기술 단어장 > Blockchain' 카테고리의 다른 글
[블록체인] 블록체인과 솔디리티 개요 - 요약지 (0) | 2023.03.29 |
---|---|
[Mist] Mist 브라우저란? + 설치 (MAC) (0) | 2022.05.11 |
[블록체인] Hyperledger Indy node-pool 분석하기 (0) | 2021.08.10 |
[블록체인] DID document는 무엇이고 어떤 내용이 들어갈까? (0) | 2021.08.03 |
[블록체인] 하이퍼레저 인디(Hyperledger indy)플랫폼과 SSI/DID (0) | 2021.07.06 |
댓글