[EOS] Smart Contract 개발 준비 2 - 설치 확인, 환경설정 그리고 노드 실행
안녕하세요. 개발자 모도리입니다.
지난 글([EOS] Smart Contract 개발 준비 1 - EOS 노드 설치)에 이어서 2탄을 준비했습니다. 이번에는 EOS 노드 설치가 완료된 상태에서 정상적으로 설치가 되었는지 확인하고 노드 실행 전에 환경설정을 해 보겠습니다.
설치 확인
우선 지난 번에 빌드 시켜놓고 잤던 것이 정상적으로 완료되었는지 확인하겠습니다.
위와 같은 화면이 보이셨다면 일단 안심하셔도 됩니다.
현재 경로 /home/계정명/eos/ 에서 ls
명령을 쳤을 때 build 디렉터리가 생성 되어있는 것을 확인할 수 있습니다.
build 디렉터리 안에 있는 programs, tools 디렉터리에 우리가 원하는 실행 파일들이 들어 있습니다.
programs 디렉터리에는 eosioc, eosiod, eosio-walletd, launcher 등이 있고, tools 디렉터리에는 eoscpp 들어 있습니다.
각각의 파일(명령어)들은 아래와 같은 기능을 합니다.
- eosiod - server-side blockchain node component
- eosioc - command line interface to interact with the blockchain
- eosio-walletd - EOS wallet
- launcher - application for nodes network composing and deployment; more on eosio-launcher
- eosiod - blockchain 네트워크를 구성하는 서버-사이드 프로세스
- eosioc - blockchain과 명령을 주고 받으며 상호 작용하는 CLI 인터페이스
- eosio-walletd - EOS 지갑
- launcher - 노드(들)의 네트워크 구성과 배포를 도와주는 응용프로그램
* 아직은 저도 정확히 이해하고 있지 못하는 부분이라서 추후에 더 자세히 안내드리겠습니다.
디렉터리 속에 숨어 있기 때문에 실행을 할 때 마다 긴 경로를 입력해야 되는 불편함이 있습니다. 이를 편리하게 변경해 보겠습니다.
실행 파일 PATH 설정
다시 /home/계정명/eos/build 디렉터리로 돌아옵니다.
* 참고로 /home/계정명 으로 이동하는 명령은 cd ~
입니다.
그러면
cd ~/eos/build
를 입력하면 원하는 경로에 도착합니다.
여기에서 make install
명령을 실행합니다. 그러면 아래 처럼 퍼센트가 올라가면서 무엇인가가 진행됩니다.
완료되고 난 후 ls
로 디렉터리 안을 확인해 보면 install
이라는 디렉터리가 생긴 것을 확인할 수 있습니다. 안에 있는 내용은 살펴보면 아래와 같습니다.
아까 programs, tools 디렉터리에 있던 실행 파일들이 한 곳에 모여졌습니다. 그럼 이제 실행하기 훨씬 수월해졌죠!
여기서 조금 더 쉽게 실행하실 수 있도록 (어느 경로에서나 긴경로 입력 필요없이 실행파일 이름만 입력하면 되도록) 설정을 해보겠습니다.
vi ~/.bashrc
를 실행해서 맨 아래 줄에 아래처럼 입력 합니다.
#EOS
export EOS_HOME=$HOME/eos
export EOS_BIN=$EOS_HOME/build/install/bin
export PATH=$EOS_BIN:$PATH
그리고 저장 후 나와서 source ~/.bashrc
를 입력해 줍니다. 그리고 eos
만 입력한 상태에서 Tab키를 눌러보면 실행할 수 있는 명령어 리스트가 나열되는데, 우리가 원하는 명령어들이 나열되어 있습니다.
이걸로 EOS 노드 실행 전 우분투 환경 설정은 마무리 되었습니다.
EOS 노드 실행
노드 실행 전 실행 시 생성되는 파일들을 저장 할 디렉터리를 하나 생성합니다.
홈 디렉터리로 이동해서 testnode라는 디렉터리를 생성하고, 디렉터리 안으로 들어갑니다.
cd ~
mkdir testnode
cd testnode
여기서에서 드디어 eos 노드를 실행할 겁니다.
blockchain 네트워크를 구성하는 eosiod를 실행합니다.
eosiod
윽... 실행 하자마자 웬 빨간 글씨야?? 라고 생각하셨을 텐데요. 에러가 맞긴한데 이건 지극히 정상적인(?) 에러입니다.
에러의 내용은 genesis 파일을 찾을 수 없다는 내용입니다. 이 genesis 파일은 eos 디렉터리의 루트에 있습니다. genesis 파일에는 최초의 Block Producer에 대한 정보가 담겨 있습니다.(혹시 제가 잘못 알고 있는 것이라면 지적 부탁드립니다.)
genesis 파일을 지금 디렉터리로 복사해 오겠습니다.
cp ~/eos/genesis.json ./
디렉터리에 잘 복사되었나 확인해 보겠습니다.
ls
그런데 못 보던 data-dir 이라는 디렉터리가 하나 생겨났습니다.
이 디렉터리에 blockchain 네트워크 유지에 필요한 데이터들이 저장됩니다. data-dir 안에 있는 config.ini 파일을 설정해 줘야 합니다.
vi ./data-dir/config.ini
아래 내용을 파일 맨 아래 추가해 주셔도 되고, 해당 부분은 찾아서 주석(#)을 제거한 후 수정해 주셔도 됩니다.
# Load the testnet genesis state, which creates some initial block producers with the default key
# genesis 파일의 위치를 지정합니다.
genesis-json = /home/계정명/testnode/genesis.json
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
# 최신의 block 정보가 아니더라도 block을 생성한다. single-node에서는 정보를 가져올 수 있는 다른 node와 연결되어 있지 않기 때문에 최신 정보를 유지할 수 없습니다.
enable-stale-production = true
# Enable block production with the testnet producers
# 테스트로 지정되어 있는 Block Producer를 지정합니다.
producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
# Load the block producer plugin, so you can produce blocks
# block 생성 시 필요한 플러그인을 지정합니다.
plugin = eosio::producer_plugin
# Wallet plugin
plugin = eosio::wallet_api_plugin
# As well as API and HTTP plugins
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
수정 된 내용을 저장하고 나옵니다.
다시 eosiod를 실행해 보겠습니다.
위와 같이 열심히 BP들이 block을 생성하고 있는 화면이 나온다면 정상적으로 동작하고 있는 것입니다.
ctrl + c
를 눌러서 종료합니다.
이번 편은 노드가 local testnet에서 정상적으로 동작하는 것을 확인했습니다.
다음 편에는 예제 스마트 컨트랙트를 실행을 해 보겠습니다.
퇴근 후에 공부하며 프로그램 실행해 보고 에러 잡아가면서 글까지 쓰다 보니 속도가 더딥니다.
이 점 양해 부탁드립니다. 부족한 점 있으면 편하게 댓글 부탁드리겠습니다. 감사합니다.
나중에 프로그래밍 공부하고 봐야겠네요 ㅎㅎ
미리 보팅 하고 가겠습니다 :)
감사합니다~! 나중에 보셔도 전혀 문제 없을 만큼 꼼꼼히 잘 써놔야겠네요! ㅋ