[개발] 비트코인 코어 설치하기 - 윈도우 + linux(ubuntu)

in #kr-dev6 years ago (edited)

오늘부터 블럭체인과 비트코인을 배우기 위해 첫 과정인 비트코인 코어를 설치하는 과정부터 시작하겠습니다. 하나씩 따라가다보면 좋은 결실을 맺을 수 있겠죠? @yellowboy1010님의 블럭킹 내용중에 참 공감했던 말씀이 생각납니다. 정확하진 않지만 이런 말씀이셨던것 같습니다.

블럭체인에 관심이 있고 진짜 투자를 하시려면 비트코인 지갑도 설치해보고... 불라불라 해봐야 한다.

당연히 해봐야지요. 암요. 해보겠습니다.

올해 소원 중에 하나가 블럭체인 관련 스킬을 얻고 싶은 것이었죠. 명령어를 통해 지갑도 만들어보고 전송도 해보면서 어떤 원리와 스펙으로 움직이는지 익혀봐야겠습니다.

그래서... 비트코인 코어란...? - wiki 내용 참고

비트코인 코어(Bitcoin Core)는 비트코인의 레퍼런스 클라이언트이다. 처음에 이 소프트웨어는 사토시 나카모토에 의해 배급되었으며 "비트코인"이라는 이름으로, 나중에는 "비트코인-Qt"(Bitcoin-Qt)라는 이름으로, 이후에 "비트코인 코어"(Bitcoin Core)로 이름이 변경되었다. 비트코인 네트워크를 만드는 비트코인 노드에 의해 사용되는 풀 클라이언트이다. 비트코인 코어의 변경사항을 통해 개발자들은 기반이 되는 비트코인 프로토콜을 변경한다.


첫번째 윈도우에 설치해보기

우선 https://bitcoin.org/ko/download에 접속합니다. 그리고 자신의 운영체제에 맞는 걸 선택하면 되는데 저는 윈도우 64bit를 사용하고 있으니 64bit를 다운로드 받습니다.

얼마간의 시간이 지나니 다운로드가 되는군요. 설치 파일은 약 130여메가 정도 됩니다. 이제 설치해봅시다.

용량이 크니 커스텀 데이터 폴더를 변경해서 설치해줍시다. ssd 용량은 소중하니까요. 현재 기준으로 약 153GB의 용량이 필요하다고 나오고 있습니다.

이렇게 동기화를 진행하게 되는데 얼마나 오래 걸릴지 모르겠군요. ㅎㅎㅎ

한참 지나니 동기화를 진행하고 있는것 같지만 몇시간이 걸릴것 같습니다. 물론 bootstrap.dat를 다운받을수 있는 링크를 제공하는듯 보였으나... 저를 낚아 버리는 bitcoin.org입니다. ㅋㅋㅋ 토렌트 주소가 404가 나와서 더이상 진행하긴 힘들것 같고 풀노드를 계속 동기화 중입니다.

하루정도 지나니 40% 정도 동기화가 된 모습입니다. 오늘 하루정도 더 놔두면 되긴 할것 같군요.


둘째. 리눅스에 설치하기

자 여기는 이렇게 놔두고요. 개발자를 위한 소스코드를 컴파일 하여 실행하는 방법이 있습니다. Github에서 소스를 받아서 하는 방법인데요. 제 pc중 한대가 개발 연습용으로 우분투가 설치되어있으니 이녀석으로 해보겠습니다.

오랜만에 우분투를 부팅합니다. 처음부터 하나하나 따라가봅시다.

1. github에서 소스코드를 받습니다.

git clone https://github.com/bitcoin/bitcoin.git

2. 이렇게 github에서 소스가 받아진것을 볼수가 있다.

3. ./autogen.sh로 빌드를 합니다.

하려 했더니 아래 메세지와 함께 실행이 되지 않네요.

root@ubuntu:/app/bitcoin# ./autogen.sh
configuration failed, please install autoconf first

autoconf라는 걸 설치해야 되는 모양입니다. ㅎㅎ 설치해줍니다.

apt-get install autoconf

그리고 아까 빌드를 하기 위한 쉘을 다시 수행해봅니다. 이번에는 또 이런 장문의 에러 메세지가 나옵니다. 역시 구글 신님께 문의를 계속해서 드려봅니다. 비나이다~ 비나이다.

root@ubuntu:/app/bitcoin# ./autogen.sh
configure.ac:28: installing 'build-aux/install-sh'
configure.ac:28: installing 'build-aux/missing'
Makefile.am:8: error: Libtool library used but 'LIBTOOL' is undefined
Makefile.am:8: The usual way to define 'LIBTOOL' is to add 'LT_INIT'
Makefile.am:8: to 'configure.ac' and run 'aclocal' and 'autoconf' again.
Makefile.am:8: If 'LT_INIT' is in 'configure.ac', make sure
Makefile.am:8: its definition is in aclocal's search path.
Makefile.am: installing 'build-aux/depcomp'
/usr/share/automake-1.15/am/depend2.am: error: am__fastdepCXX does not appear in AM_CONDITIONAL
/usr/share/automake-1.15/am/depend2.am: The usual way to define 'am__fastdepCXX' is to add 'AC_PROG_CXX'
/usr/share/automake-1.15/am/depend2.am: to 'configure.ac' and run 'aclocal' and 'autoconf' again
/usr/share/automake-1.15/am/depend2.am: error: AMDEP does not appear in AM_CONDITIONAL
/usr/share/automake-1.15/am/depend2.am: The usual way to define 'AMDEP' is to add one of the compiler tests
/usr/share/automake-1.15/am/depend2.am: AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC, AC_PROG_OBJCXX,
/usr/share/automake-1.15/am/depend2.am: AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC
/usr/share/automake-1.15/am/depend2.am: to 'configure.ac' and run 'aclocal' and 'autoconf' again
Makefile.am: error: C++ source seen but 'CXX' is undefined
Makefile.am: The usual way to define 'CXX' is to add 'AC_PROG_CXX'
Makefile.am: to 'configure.ac' and run 'autoconf' again.
parallel-tests: installing 'build-aux/test-driver'
autoreconf: automake failed with exit status: 1

역시 구글신님께서는 모르시는게 없으십니다. libtool이라는걸 설치해줍니다.

apt-get install libtool

그리고 다시 비트코인 코어 빌드 수행.

root@ubuntu:/app/bitcoin# ./autogen.sh

먼가 에러 메세지 없이 끝난걸 보니 다음 스텝을 진행할 수 있을 것 같습니다. 이 autogen을 통해서 자동 설정 스크립트 세트가 생성됩니다. 여기서 생성된 configure 스크립트를 통해서 다시 OS에 맞는 빌드 스크립트를 만들어낸다고 합니다.

./configure

configure: error: PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.

역시나 또 에러에 부딪쳤습니다. 역시나 책이나 자료대로 한번에 되는 일은 없는것 같습니다. 설치해달라는 pkg-config를 설치해봅시다. 그리고 다시 autogen.sh를 수행했습니다. 그리고 다시 ./configure

하지만 역시나 에러를 뱉는군요. 하나 건너 계속 오류....

configure: error: libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)

구글신님이 알려주시는 해결방법으로 다시 libdb를 설치합니다.

sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev

참고 : https://github.com/bitcoin/bitcoin/issues/2998

또 다시 ./configure!! 했지만 역시나 boostlib 가 필요하다고 하면서 에러를 뱉습니다. 쉽지가 않군요. ㅠㅠ

checking for boostlib >= 1.47.0... configure: We could not detect the boost libraries (version 1.47 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.
checking whether the Boost::System library is available... no
checking whether the Boost::Filesystem library is available... no
checking whether the Boost::Program_Options library is available... no
checking whether the Boost::Thread library is available... no
checking whether the Boost::Chrono library is available... no
checking whether the Boost::Unit_Test_Framework library is available... no
checking for dynamic linked boost test... no
checking for mismatched boost c++11 scoped enums... ok
configure: error: No working boost sleep implementation found.

결국 구글신님께 계속 물어보다가 Bitcoin core에 dependency한 라이브러리의 모음 정보를 찾았습니다.

https://www.howtoforge.com/tutorial/how-to-compile-and-install-bitcoin-core-on-debian-wheezy/

sudo apt-get install build-essential autoconf libssl-dev libboost-dev libboost-chrono-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev

이렇게 설치해주었습니다.

configure: error: libevent not found.

또.... libevent를 찾는군요. ㅠㅠ

apt-get install libevent-dev

필요한 libevent를 설치하고 다시 또 다시 ./configure!!

configure: creating ./config.status
config.status: creating Makefile
config.status: creating libsecp256k1.pc
config.status: creating src/libsecp256k1-config.h
config.status: executing depfiles commands
config.status: executing libtool commands

이런 메세지가 나오면서 bitcoind를 컴파일링 할수 있도록 ./configure 명령어가 성공했습니다. 이제 컴파일을 해봅니다.

make

컴파일 중에 몇번의 warning이 있었지만... '치명적이진 않은거겠지?' 하고 넘겼습니다.

다음과 같은 메세지를 보면 컴파일이 끝난 것입니다.

make[2]: Leaving directory '/app/bitcoin/src'
make[1]: Leaving directory '/app/bitcoin/src'
Making all in doc/man
make[1]: Entering directory '/app/bitcoin/doc/man'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/app/bitcoin/doc/man'
make[1]: Entering directory '/app/bitcoin'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/app/bitcoin'

다음은 bitcoind를 설치를 해야합니다.

sudo make install

정상적으로 설치되었다면 아래와 같은 메세지가 나올것입니다.

--- 생략 ---
libtool: install: /usr/bin/install -c bitcoind /usr/local/bin/bitcoind
libtool: install: /usr/bin/install -c bitcoin-cli /usr/local/bin/bitcoin-cli
libtool: install: /usr/bin/install -c bitcoin-tx /usr/local/bin/bitcoin-tx
libtool: install: /usr/bin/install -c test/test_bitcoin /usr/local/bin/test_bitcoin
libtool: install: /usr/bin/install -c bench/bench_bitcoin /usr/local/bin/bench_bitcoin
--- 생략 ---

bitcoind는 '/usr/local/bin/bitcoind'에 bitcoin-cli는 '/usr/local/bin/bitcoin-cli' default로 설치 됩니다.

설치까지 완료했으니 실행해봅시다.

root@ubuntu:/app/bitcoin# bitcoind -daemon
Bitcoin server starting

'Bitcoin server starting'이라는 메세지와 함께 구동 됩니다. bitcoind를 통해 bitcoin-core 를 실행시키고 bitcoin-cli를 통해 bitcoind의 json-rcp 인터페이스를 호출할수 있도록 해줍니다.

어떤 rcp들이 있는지 확인해보겠습니다.

bitcoin-cli help

결과

root@ubuntu:/app/bitcoin# bitcoin-cli help
== Blockchain ==
getbestblockhash
getblock "blockhash" ( verbosity )
getblockchaininfo
getblockcount
--- 생략 ---
sendtoaddress "address" amount ( "comment" "comment_to" subtractfeefromamount replaceable conf_target "estimate_mode")
setaccount "address" "account"
settxfee amount
signmessage "address" "message"
walletlock
walletpassphrase "passphrase" timeout
walletpassphrasechange "oldpassphrase" "newpassphrase"

꽤나 많은 rcp 명령어들이 있습니다. 눈대중으로 봐도 알만한 getnewaddress (새 주소 생성), getbalance( 지갑 잔액 조회) 등이 보입니다. 이런걸 써서 코인 거래소에서도 새 주소를 만들고 입금을 받고 하나 보다 생각을 하고 첫 개시 명령어를 해봅니다.

책에서는 현재 종합정보를 getinfo 명령어로 확인하라고 했는데 지금 보니 없습니다. 0.16 버전부터는 삭제 되었다고 하네요. (웁쓰...) getblockchaininfo라는 명령어로 현재 동기화된 블럭수를 확인해봅니다. 아마도 이틀정도 동기화를 해야 풀노드 정보를 받아올수 있을듯 하니까요.

root@ubuntu:/app/bitcoin# bitcoin-cli getblockchaininfo

{
  "chain": "main",
  "blocks": 274800,
  "headers": 502820,
  "bestblockhash": "00000000000000038f83d10cb3ff234777e369a526a0c01818a6af1113130ff1",
  "difficulty": 908350862.437022,
  "mediantime": 1387003070,
  "verificationprogress": 0.1022812147453171,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000006d8e483ff7534bb4c2e",
  "size_on_disk": 15334078733,
  "pruned": false,
  "softforks": [
    {
      "id": "bip34",
      "version": 2,
      "reject": {
        "status": true
      }
    },
    {
      "id": "bip66",
      "version": 3,
      "reject": {
        "status": false
      }
    },
    {
      "id": "bip65",
      "version": 4,
      "reject": {
        "status": false
      }
    }
  ],
  "bip9_softforks": {
    "csv": {
      "status": "defined",
      "startTime": 1462060800,
      "timeout": 1493596800,
      "since": 0
    },
    "segwit": {
      "status": "defined",
      "startTime": 1479168000,
      "timeout": 1510704000,
      "since": 0
    }
  },
  "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
}

저기에 blocks : 274800 의 숫자가 현재 동기화된 블럭숫자입니다.

https://blockchain.info/ko/blocks

를 확인하면 현재 블록 높이를 알수 있죠. 아직 한참이나 동기화를 더 진행해야되는 것을 알수 있습니다.

우선 오늘은 윈도우와 리눅스 둘다에 비트코인 코어를 설치해봤고 간단한 명령어를 사용해봤습니다. 다음엔 비트코인 코어의 json-rcp 명령어들을 써보며 어떤 기능들이 있는지 이해해보겠습니다.

Sort:  

스스로 홍보하는 프로젝트에서 나왔습니다.
오늘도 좋은글 잘 읽었습니다.
오늘도 화이팅입니다.!

sdd 용량 생각안하고,, 따라하다가, ㅠㅠ "낫~ 이노프 리무벌 디스크..." ㅠㅠ 시작할때, 용량체크에서 부족하다는 메세지가 없기에..쿨하게 무시했더니..ㅋ ㅠㅠ 안되겠습니다..^^;

다시 해보겠습니다.
항상 도전욕구를 만들어 주시는 @nhj12311 님 감사합니다~ ^^

용량이 큰 디스크에 해보시면 좋을것 같습니다. skt1님 리눅스가 있으시죠?

용량이 어마어마 하네요 153GB !!

일찍 일어나셨네요. 그래도 트랜잭션 수에 비해는 적다고 여겨집니다. ^^ 실제 전산시스템에서 몇년간의 거래내역이라면 훨씬 더 많을거에요~

물론 비트코인 거래내역에 저장되는 정보가 얼마 안되서 그런것 같기는 합니다. 금융전산시스템은 한개의 거래내역에도 부가적으로 저장하는게 되게 많거든요. ㅎㅎㅎ

와.. 제 컴은 용량이 안 될 것 같지만..
직접 해봐야 더 잘 이해하게 될 것 같아요
글로나마 따라가겠습니다. 감사합니다! ㅎㅎ

예 맞습니다. 그래서 저도 이론보다 먼저 설치하고 명령어도 써보고 그다음에 책을 폅니다. ㅎㅎㅎ

와! 진짜 대단하십니다! 너무 궁금했던 부분을 대신 해주시니 대리 만족이 가득합니다. 다음 포스팅도 기다려지네요! (저도 개발 공부를 제법 오래 하고 IT회사에서도 일했던 적이 있으나 다시 디자이너로 오니 많이 잊혀지네요. 자극받아 갑니다^^)

감사합니다. 저도 하면서 무척 재미있었습니다. 담 포스팅에 지갑주소를 생성한다거나 하는 것들을 하면 더 재미있을것 같습니다~. ^^

그나저나 개발에서 디자인으로 가시다니... 그... 그럴수가 있나요? 저는 미적감각이라곤 0도 없는 사람이라서;;

진정한 투자자는 직접 시장이어떤지 기술이어떤건지 경험해봐야죠 실체를 ㅎㅎ 이른 시간에 정성들여 쓰셨네요 ㅎㅎ

감사합니다. 제가 원하고 하고 싶은 것을 해보면서 쭉 그대로 정리해봤습니다. 역시 경험이 최고인듯 합니다.

우아 저도 한번 설치해볼까 하다가 먼가 기본 용량이 많이 부족하네요 ㅠㅠ 호곡 일단 글로 보면서 알아 두겠습니다.

용량이 넉넉한 디스크가 있어야겠습니다. ssd말고 hdd도 하나쯤은 구입해서 쓰시는 것도 좋을것 같습니당~ ㅎㅎ

들렸다갑니다.

용량이 크네요~ 다음포스팅도 기대하겠습니다.

대단한 글입니다. 저에게는 아직 채굴은 미지의 영역입니다. 위의 과정을 보면 머리 아파서 따라할 엄두가 안납니다. ^^ 보팅 및 팔로우 하고 갑니다. 맞팔 부탁드립니다. ^^

채굴을 하기 위해 세팅하는건 아니고 풀노드를 세팅해서 이것저것 비트코인에 대해 탐방하기 위함입니다. 감사합니다. 맞팔했습니다.

비트코인 코어는 비트코인만을 담아두는 전자지갑인가요?

풀노드 클라이언트입니다. 그리고 비트코인만 담을수 있는것 같고 지갑 기능을 내포하고 있지만 모든 블럭정보를 동기화 하기에 일반적으로 생각하는 지갑(입/출금)기능외에도 여러가지를 할수 있는듯 합니다. 저도 공부하면서 하는 중이니 혹시 다른것도 가능하다면 추후에 회신 드리겠습니다. :)

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6