EOS를 build해보자

in #coinkorea7 years ago

안녕하세요.

오랫만에 글로 찾아뵙게 되었습니다. 그동안 강의를 하느라 너무 바빠서 눈팅과 보팅만 하고 글을 전혀 쓰지 못했습니다. 오늘의 주제는 EOS의 build의 입니다. 6월 main net으로 요즘 한창 Hot한 EOS입니다.

EOS는 Dan이 개발자라는 측면에서 bitshare, steemit과 매우 닮아 있고, 그 연장선상에서 steemit의 user들이 쉽게 접근할수 있는 시스템입니다.

아직 EOS는 main net과 public testnet이 없기 때문에 smart contact또는 EOS dapp개발을 위해서는 직접 test net을 돌려야 하고, 그런 면에서 우선은 EOS을 build하고 실행하는 것에 대한 간단한 글을 써보려고 합니다.



서버 준비하기


EOS github에 가보면 아래와 같은 시스템을 지원한다고 되어 있습니다.

Amazon 2017.09 and higher.
Centos 7.
Fedora 25 and higher (Fedora 27 recommended).
Mint 18.
Ubuntu 16.04 (Ubuntu 16.10 recommended).
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended).

(source : https://github.com/EOSIO/eos/wiki/Local-Environment#2-building-eosio)

이 중에서 제일 익숙한 것이 아무래도 Ubuntu입니다. 그런데 서버의 사양이 좀 높아야? 합니다. RAM이 8GByte이상 있는 Ubuntu여야 하는 것이죠. 물론 윈도우에 VMWARE를 설치해서 할수도 있지만, 또 문제는 계속 켜 놓아야 하니 이도 만만치 않습니다.

그래서 초기에 시험을 위한 것이면 AWS와 같은 cloud를 빌려서 쓰는 것이 가장 좋습니다.

일단 서버를 마련하셨다면 1차적인 큰 준비는 끝났습니다.

AWS는 free로 사용할수 있는 것에는 이 사양을 만족하는 것이 없고, 그래서 저는 digital ocean의 것을 임대하였습니다. 여기도 유료이기는 하지만 처음에 가입할때 $100의 credit을 주기 때문에 시험으로 사용하기에는 부담이 없습니다.

그리고 오늘 받은 메일을 보며 Heroku도 드디어 Ubuntu를 지원하기 시작했기 때문에 선택의 폭이 넓어질것 같습니다.

RAM이 8GByte가 없으면 어떻게 되냐구요? Build할때 error가 납니다. Script를 고쳐서 RAM check를 넘어갈수는 있지만 그 성능은 보장하기 힘들어 보입니다.(사실 사용은 해보지 않았습니다.)



빌드와 설치하기


EOS는 github에서 source형태로 제공이 됩니다. 따라서 build후에 실행파일들을 설치하는 과정을 직접 진행해야 합니다. 다만 이 과정은 script로 아주 쉽게 되어 있어서 누구나 따라할수 있습니다.

우선 서버에 로그인해서 아래와 같은 명령어로 github의 source를 받아 옵니다.

git clone https://github.com/EOSIO/eos --recursive

1분정도 기다리면 소스를 모두 받아오게 됩니다.

이제 빌드를 할 차례 입니다.

cd eos
./eosio_build.sh

제일 처음 서버의 사양을 검사하고, 만약 서버에 필요한 library가 없으면 이를 설치할지 물어 봅니다.
당연히 Yes를 눌러서 관련된 library를 설치하면, 이후의 build는 알아서 진행됩니다.

Digital ocean의 서버 기준으로 약 한시간 정도의 build시간이 필요합니다.

빌드가 완료되면 실행파일들을 설치해 줍니다.

cd build
sudo make install

위의 build directory는 build가 완료되어야 생성이 됩니다. 따라서 위의 folder가 없다면 error메시지를 확인하고 이에 따라서 새로 build를 진행해 주어야 합니다.

자 이제 블록을 생성하거나 지갑을 만드는 등의 일을 할수 있는 기반이 갖추어졌습니다.



Testnet 실행하기


위의 과정을 다 마쳤으면 이제 testnet을 실행해서 block을 생성해볼 차례입니다.

block의 생성은 "nodeos"라는 프로그램이 담당을 합니다.

정상적으로 build가 되었다면 build/programs directory에 아래와 같은 파일들이 있어야 합니다.

drwxr-xr-x 3 root root 4096 May 19 12:56 cleos
drwxr-xr-x 2 root root 4096 May 19 12:46 CMakeFiles
-rw-r--r-- 1 root root 1490 May 19 12:46 cmake_install.cmake
-rw-r--r-- 1 root root  374 May 19 12:46 CTestTestfile.cmake
drwxr-xr-x 3 root root 4096 May 19 12:52 eosio-abigen
drwxr-xr-x 3 root root 4096 May 19 12:46 eosio-applesedemo
drwxr-xr-x 3 root root 4096 May 19 12:52 eosio-launcher
drwxr-xr-x 3 root root 4096 May 19 12:55 keosd
-rw-r--r-- 1 root root 6568 May 19 12:46 Makefile
drwxr-xr-x 3 root root 4096 May 19 12:57 nodeos

우린 이중에서 nodeos를 사용할 것입니다.

cd build/programs/nodeos
./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin 

그러면 이렇게 블록이 생성되는 message를 볼수있습니다.

3136500ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000008c13681dcd... #140 @ 2018-05-22T23:52:16.500 signed by eosio [trxs: 0, lib: 139, confirmed: 0]
3137000ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000008da94f7f83... #141 @ 2018-05-22T23:52:17.000 signed by eosio [trxs: 0, lib: 140, confirmed: 0]
3137500ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000008e4ac91a51... #142 @ 2018-05-22T23:52:17.500 signed by eosio [trxs: 0, lib: 141, confirmed: 0]
3138000ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000008f0d823cd9... #143 @ 2018-05-22T23:52:18.000 signed by eosio [trxs: 0, lib: 142, confirmed: 0]
3138501ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 000000903ba375b2... #144 @ 2018-05-22T23:52:18.500 signed by eosio [trxs: 0, lib: 143, confirmed: 0]

여기에서 producer의 이름은 eosio이고, 이후에 multi node를 돌릴때와 비교해보시면 좋을 것 같습니다.



잘 설치 되었는지 확인하기


빌드가 끝나고 나서 선택적으로 잘 설치되었는지 test를 돌려볼수 있습니다.

우선 MongoDB deamon은 background로 실행합니다.

~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &

마지막의 &라는 표시가 background로 실행한다는 의미입니다.

그리고 나서

cd build
make test

이렇게 하면 test가 자동으로 실행되고, 각 test별 실행결과와 시간이 나오게 됩니다.

저 같은 경우에는..

Running tests...
Test project /root/eos/build
      Start  1: test_cypher_suites
 1/29 Test  #1: test_cypher_suites ..................   Passed    0.04 sec
      Start  2: validate_simple.token_abi
 2/29 Test  #2: validate_simple.token_abi ...........   Passed    0.04 sec
      Start  3: validate_eosio.token_abi
 3/29 Test  #3: validate_eosio.token_abi ............   Passed    0.05 sec
      Start  4: validate_eosio.msig_abi
 4/29 Test  #4: validate_eosio.msig_abi .............   Passed    0.03 sec
      Start  5: validate_multi_index_test_abi
 5/29 Test  #5: validate_multi_index_test_abi .......   Passed    0.03 sec
      Start  6: validate_eosio.system_abi
 6/29 Test  #6: validate_eosio.system_abi ...........   Passed    0.04 sec
      Start  7: validate_identity_abi
 7/29 Test  #7: validate_identity_abi ...............   Passed    0.05 sec
      Start  8: validate_identity_test_abi
 8/29 Test  #8: validate_identity_test_abi ..........   Passed    0.04 sec
      Start  9: validate_stltest_abi
 9/29 Test  #9: validate_stltest_abi ................   Passed    0.04 sec
      Start 10: validate_exchange_abi
10/29 Test #10: validate_exchange_abi ...............   Passed    0.04 sec
      Start 11: validate_test.inline_abi
11/29 Test #11: validate_test.inline_abi ............   Passed    0.03 sec
      Start 12: validate_hello_abi
12/29 Test #12: validate_hello_abi ..................   Passed    0.03 sec
      Start 13: validate_asserter_abi
13/29 Test #13: validate_asserter_abi ...............   Passed    0.04 sec
      Start 14: validate_infinite_abi
14/29 Test #14: validate_infinite_abi ...............   Passed    0.04 sec
      Start 15: validate_proxy_abi
15/29 Test #15: validate_proxy_abi ..................   Passed    0.05 sec
      Start 16: validate_test_api_abi
16/29 Test #16: validate_test_api_abi ...............   Passed    0.04 sec
      Start 17: validate_test_api_mem_abi
17/29 Test #17: validate_test_api_mem_abi ...........   Passed    0.04 sec
      Start 18: validate_test_api_db_abi
18/29 Test #18: validate_test_api_db_abi ............   Passed    0.04 sec
      Start 19: validate_test_api_multi_index_abi
19/29 Test #19: validate_test_api_multi_index_abi ...   Passed    0.04 sec
      Start 20: validate_eosio.bios_abi
20/29 Test #20: validate_eosio.bios_abi .............   Passed    0.04 sec
      Start 21: validate_noop_abi
21/29 Test #21: validate_noop_abi ...................   Passed    0.03 sec
      Start 22: validate_dice_abi
22/29 Test #22: validate_dice_abi ...................   Passed    0.04 sec
      Start 23: validate_tic_tac_toe_abi
23/29 Test #23: validate_tic_tac_toe_abi ............   Passed    0.04 sec
      Start 24: validate_payloadless_abi
24/29 Test #24: validate_payloadless_abi ............   Passed    0.04 sec
      Start 25: unit_test_binaryen
25/29 Test #25: unit_test_binaryen ..................   Passed  138.84 sec
      Start 26: unit_test_wavm
26/29 Test #26: unit_test_wavm ......................   Passed  672.88 sec
      Start 27: plugin_test
27/29 Test #27: plugin_test .........................   Passed    0.04 sec
      Start 28: nodeos_run_test
28/29 Test #28: nodeos_run_test .....................   Passed   71.59 sec
      Start 29: nodeos_run_remote_test
29/29 Test #29: nodeos_run_remote_test ..............   Passed   71.80 sec


100% tests passed, 0 tests failed out of 29

Total Test time (real) = 956.10 sec

모두 다 해서 956.10초의 시간이 걸렸고, 각 항목 번호별로 test시간을 확인할 수 있습니다.

제가 이 작업을 하면서 제일 어려웠던 것이, 도대체 서버의 사양이 얼마나 좋아야 하는 것이었고, 어느 정도의 performance가 나오는지 였습니다.

아마도 위의 test를 돌린 시간으로 이를 비교할수 있지 않을까 하는 생각이 들었습니다. 마치 windows에서 benchmark를 돌려서 그 점수를 보는 것 처럼요..

한국에서도 많은BP들이 서버를 준비하고 있다고 들었고, 혹시라도 이런 데이터의 공유가 가능하다면 이 또한 의미있는 일이 아닐까 합니다.

조만간 EOS기반의 smart contact을 개발하시는 분들을 위해서 서버에 user계정을 만들고 서버를 open하도록 하겠습니다.



마치며...


지난 주 토요일 meetup에서 강남에 EOS tower의 건립등 정말로 scale이 크고 대단한 project들이 소개가 되고 있습니다. 그리고 이는 EOS생태계를 건전하게 하는 일이 분명하구요..

주식과 같은 코인의 투자만이 우리가 참여할수 있는 일이 아니라, 새로운 생태계에서 우리가 할수 있는 다른 일들이 너무나 많을 것 같은 생각이 들고, 머지 않은 시점에 우리의 사회를 변혁시키는 큰 기술의 트렌드가 되지 않을까 합니다.

모두 즐거운 하루 보내세요.

  • Upvote와 댓글은 사랑입니다!
Sort:  

도움이되는글 감사합니다.
이오스 개발관련 시간을 투자해보려고하는데. 앞으로 올려주시는내용이 도움많이될것 같네요 ㅎㅎ

감사합니다. 다음에는 multi node와 지갑의 운용에 대해서 글을 써볼까 합니다.

@neogia님께서 이 포스팅에 많은 관심을 가지고 있어요. 리스팀을 해주셨군요~!

@lazfasia님께서 이 포스팅에 많은 관심을 가지고 있어요. 리스팀을 해주셨군요~!

많은 도움이 되었습니다. 감사합니다. ^^b

감사합니다!

짱짱맨 호출에 출동했습니다!!