EOS를 build해보자

in #coinkorea6 years ago

안녕하세요.

<p dir="auto">오랫만에 글로 찾아뵙게 되었습니다. 그동안 강의를 하느라 너무 바빠서 눈팅과 보팅만 하고 글을 전혀 쓰지 못했습니다. 오늘의 주제는 EOS의 build의 입니다. 6월 main net으로 요즘 한창 Hot한 EOS입니다. <p dir="auto">EOS는 Dan이 개발자라는 측면에서 bitshare, steemit과 매우 닮아 있고, 그 연장선상에서 steemit의 user들이 쉽게 접근할수 있는 시스템입니다. <p dir="auto">아직 EOS는 main net과 public testnet이 없기 때문에 smart contact또는 EOS dapp개발을 위해서는 직접 test net을 돌려야 하고, 그런 면에서 우선은 EOS을 build하고 실행하는 것에 대한 간단한 글을 써보려고 합니다. <p dir="auto"><br /> <hr /> <p dir="auto"><h4>서버 준비하기<br /> EOS github에 가보면 아래와 같은 시스템을 지원한다고 되어 있습니다.<p> <blockquote> <p dir="auto">Amazon 2017.09 and higher.<br /> Centos 7.<br /> Fedora 25 and higher (Fedora 27 recommended).<br /> Mint 18.<br /> Ubuntu 16.04 (Ubuntu 16.10 recommended).<br /> MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended). <p dir="auto"><span>(source : <a href="https://github.com/EOSIO/eos/wiki/Local-Environment#2-building-eosio" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">https://github.com/EOSIO/eos/wiki/Local-Environment#2-building-eosio) <p dir="auto">이 중에서 제일 익숙한 것이 아무래도 Ubuntu입니다. 그런데 서버의 사양이 좀 높아야? 합니다. RAM이 8GByte이상 있는 Ubuntu여야 하는 것이죠. 물론 윈도우에 VMWARE를 설치해서 할수도 있지만, 또 문제는 계속 켜 놓아야 하니 이도 만만치 않습니다. <p dir="auto">그래서 초기에 시험을 위한 것이면 AWS와 같은 cloud를 빌려서 쓰는 것이 가장 좋습니다. <p dir="auto">일단 서버를 마련하셨다면 1차적인 큰 준비는 끝났습니다. <p dir="auto">AWS는 free로 사용할수 있는 것에는 이 사양을 만족하는 것이 없고, 그래서 저는 digital ocean의 것을 임대하였습니다. 여기도 유료이기는 하지만 처음에 가입할때 $100의 credit을 주기 때문에 시험으로 사용하기에는 부담이 없습니다. <p dir="auto">그리고 오늘 받은 메일을 보며 Heroku도 드디어 Ubuntu를 지원하기 시작했기 때문에 선택의 폭이 넓어질것 같습니다. <p dir="auto">RAM이 8GByte가 없으면 어떻게 되냐구요? Build할때 error가 납니다. Script를 고쳐서 RAM check를 넘어갈수는 있지만 그 성능은 보장하기 힘들어 보입니다.(사실 사용은 해보지 않았습니다.) <p dir="auto"><br /> <hr /> <p dir="auto"><h4>빌드와 설치하기<br /> EOS는 github에서 source형태로 제공이 됩니다. 따라서 build후에 실행파일들을 설치하는 과정을 직접 진행해야 합니다. 다만 이 과정은 script로 아주 쉽게 되어 있어서 누구나 따라할수 있습니다.<p> <p dir="auto">우선 서버에 로그인해서 아래와 같은 명령어로 github의 source를 받아 옵니다. <pre><code>git clone https://github.com/EOSIO/eos --recursive <p dir="auto">1분정도 기다리면 소스를 모두 받아오게 됩니다. <p dir="auto">이제 빌드를 할 차례 입니다. <pre><code>cd eos ./eosio_build.sh <p dir="auto">제일 처음 서버의 사양을 검사하고, 만약 서버에 필요한 library가 없으면 이를 설치할지 물어 봅니다.<br /> 당연히 Yes를 눌러서 관련된 library를 설치하면, 이후의 build는 알아서 진행됩니다. <p dir="auto">Digital ocean의 서버 기준으로 약 한시간 정도의 build시간이 필요합니다. <p dir="auto">빌드가 완료되면 실행파일들을 설치해 줍니다. <pre><code>cd build sudo make install <p dir="auto">위의 build directory는 build가 완료되어야 생성이 됩니다. 따라서 위의 folder가 없다면 error메시지를 확인하고 이에 따라서 새로 build를 진행해 주어야 합니다. <p dir="auto">자 이제 블록을 생성하거나 지갑을 만드는 등의 일을 할수 있는 기반이 갖추어졌습니다. <p dir="auto"><br /> <hr /> <p dir="auto"><h4>Testnet 실행하기<br /> 위의 과정을 다 마쳤으면 이제 testnet을 실행해서 block을 생성해볼 차례입니다.<p> <p dir="auto">block의 생성은 "nodeos"라는 프로그램이 담당을 합니다. <p dir="auto">정상적으로 build가 되었다면 build/programs directory에 아래와 같은 파일들이 있어야 합니다. <pre><code>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 <p dir="auto">우린 이중에서 nodeos를 사용할 것입니다. <pre><code>cd build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin <p dir="auto">그러면 이렇게 블록이 생성되는 message를 볼수있습니다. <pre><code>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] <p dir="auto">여기에서 producer의 이름은 eosio이고, 이후에 multi node를 돌릴때와 비교해보시면 좋을 것 같습니다. <p dir="auto"><br /> <hr /> <p dir="auto"><h4>잘 설치 되었는지 확인하기<br /> 빌드가 끝나고 나서 선택적으로 잘 설치되었는지 test를 돌려볼수 있습니다.<p> <p dir="auto">우선 MongoDB deamon은 background로 실행합니다. <pre><code>~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf & <p dir="auto">마지막의 &라는 표시가 background로 실행한다는 의미입니다. <p dir="auto">그리고 나서 <pre><code>cd build make test <p dir="auto">이렇게 하면 test가 자동으로 실행되고, 각 test별 실행결과와 시간이 나오게 됩니다. <p dir="auto">저 같은 경우에는.. <pre><code>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 <p dir="auto">모두 다 해서 956.10초의 시간이 걸렸고, 각 항목 번호별로 test시간을 확인할 수 있습니다. <p dir="auto">제가 이 작업을 하면서 제일 어려웠던 것이, 도대체 서버의 사양이 얼마나 좋아야 하는 것이었고, 어느 정도의 performance가 나오는지 였습니다. <p dir="auto">아마도 위의 test를 돌린 시간으로 이를 비교할수 있지 않을까 하는 생각이 들었습니다. 마치 windows에서 benchmark를 돌려서 그 점수를 보는 것 처럼요.. <p dir="auto">한국에서도 많은BP들이 서버를 준비하고 있다고 들었고, 혹시라도 이런 데이터의 공유가 가능하다면 이 또한 의미있는 일이 아닐까 합니다. <p dir="auto">조만간 EOS기반의 smart contact을 개발하시는 분들을 위해서 서버에 user계정을 만들고 서버를 open하도록 하겠습니다. <p dir="auto"><br /> <hr /> <p dir="auto"><h4>마치며...<br /> 지난 주 토요일 meetup에서 강남에 EOS tower의 건립등 정말로 scale이 크고 대단한 project들이 소개가 되고 있습니다. 그리고 이는 EOS생태계를 건전하게 하는 일이 분명하구요..<p> <p dir="auto">주식과 같은 코인의 투자만이 우리가 참여할수 있는 일이 아니라, 새로운 생태계에서 우리가 할수 있는 다른 일들이 너무나 많을 것 같은 생각이 들고, 머지 않은 시점에 우리의 사회를 변혁시키는 큰 기술의 트렌드가 되지 않을까 합니다. <p dir="auto">모두 즐거운 하루 보내세요. <ul> <li>Upvote와 댓글은 사랑입니다!
Sort:  

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

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

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

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

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

감사합니다!

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