- bitcoind : 即為 bitcoin core 不帶 GUI.
- 本案例示範了由 https://github.com/bitcoin/bitcoin 下載所得的 source code 開始,從 source code 開始 build 起。從頭 compile
bitcoind
(包括相關所需 libraries) 直至安裝完成,並且順利帶起執行。 - 於 CentOS Linux 7.4
- 不帶 Qt GUI
- 底下示範,不以 root (除了 libevent) 身分,而是以個人身分安裝
- (因此,您可以看到,東西都是額外 build、額外放;自己獨立 linking,與系統安裝分開)
先安裝 libevent
- $ sudo yum install libevent-devel
-
底下假設 $BITCOIND_ROOT 為您欲安裝的目標主目錄
- 請自行代換成正確、您所希望的目錄 (e.g.,
/home/bitcoind
建議是寫絕對路徑 (absolute path) 為妥,比較不會有不小心弄錯的地方)
- 請自行代換成正確、您所希望的目錄 (e.g.,
- 開始安裝 Berkeley DB v4.8
- $ mkdir -p $BITCOIND_ROOT/downloads
- $ mkdir -p $BITCOIND_ROOT/deps
- $ cd $BITCOIND_ROOT/downloads
-
$BITCOIND_ROOT/downloads$ wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz -
$BITCOIND_ROOT/downloads$ tar zxvf ./db-4.8.30.tar.gz -
$BITCOIND_ROOT/downloads$ cd db-4.8.30/build_unix/ -
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ ../dist/configure --prefix=$BITCOIND_ROOT/deps --enable-cxx -
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ make -
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ make install - 順利完成,檢查一下
-
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ ls -la $BITCOIND_ROOT/deps -
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ ls -la $BITCOIND_ROOT/libs - 應該會看到 (Berkeley DB 相關的) 東西 (例如 libdb*.* 之類的)
-
- Boot v1.55.0
-
$BITCOIND_ROOT/downloads/db-4.8.30/build_unix$ cd $BITCOIND_ROOT/downloads -
$BITCOIND_ROOT/downloads$ wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.bz2/download -O boost_1_55_0.tar.bz2 -
$BITCOIND_ROOT/downloads$ tar jxvf boost_1_55_0.tar.bz2 -
$BITCOIND_ROOT/downloads$ cd boost_1_55_0 -
$BITCOIND_ROOT/downloads/boost_1_55_0$ ./bootstrap.sh -
$BITCOIND_ROOT/downloads/boost_1_55_0$ ./b2 --prefix=$BITCOIND_ROOT/deps link=static runtime-link=static install - 疑難排解
- 如果需要重新執行 b2 以重新 compile / install,暴力法,將整個 boost_1_55_0 砍掉再重新解開 bz2 重做一次就是了
- 假使遇到此 error : relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC... 那... 就加上 -fPIC 吧 :
-
$BITCOIND_ROOT/downloads/boost_1_55_0$ cd .. -
$BITCOIND_ROOT/downloads$ rm -rf ./boost_1_55_0 -
$BITCOIND_ROOT/downloads$ tar jxvf boost_1_55_0.tar.bz2 -
$BITCOIND_ROOT/downloads$ cd boost_1_55_0 -
$BITCOIND_ROOT/downloads/boost_1_55_0$ ./bootstrap.sh -
$BITCOIND_ROOT/downloads/boost_1_55_0$ ./b2 --prefix=$BITCOIND_ROOT/deps cxxflags=-fPIC cflags=-fPIC --without-python link=static runtime-link=static install
-
- 順利完成,檢查一下
-
$BITCOIND_ROOT/downloads/boost_1_55_0$ ls -la $BITCOIND_ROOT/deps -
$BITCOIND_ROOT/downloads/boost_1_55_0$ ls -la $BITCOIND_ROOT/libs - 應該會看到 (Boost library 相關的) 東西 (例如 libboost*.a 之類的)
-
- OpenSSL v1.0.1
-
$BITCOIND_ROOT/downloads/boost_1_55_0$ cd $BITCOIND_ROOT/downloads -
$BITCOIND_ROOT/downloads$ wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz -
$BITCOIND_ROOT/downloads$ tar zxvf openssl-1.0.1g.tar.gz -
$BITCOIND_ROOT/downloads$ cd openssl-1.0.1g -
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ ./config --prefix=$BITCOIND_ROOT//deps --openssldir=$BITCOIND_ROOT/deps/openssl -fPIC shared -
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ make -
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ make install - 疑難排解
- 如果遇到 error 說無法安裝 man page,那... 就跳過他吧 :
-
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ make install_sw
- 一樣,順利完成,檢查一下
-
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ ls -la $BITCOIND_ROOT/deps -
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ ls -la $BITCOIND_ROOT/libs - 應該會看到 (OpenSSL 相關的) 東西 (例如 libcrypto*.a, libssl*.a 之類的)
-
- 恭喜,如果以上您都順利通過了,那就來到最後一步,bitcoind 自己
- 目前 (Aug. 16, 2018) 最新版微 v0.16.1
-
$BITCOIND_ROOT/downloads/openssl-1.0.1g$ cd ../.. -
$BITCOIND_ROOT$ git clone [email protected]:bitcoin/bitcoin.git- (註 : 您可能要用自己的 GitHub account, with SSH / GPG keys installed, of course; 或者是其他方法,總之,請自行想辦法,取得 git repo 就是了,這 trivial,不贅述)
-
$BITCOIND_ROOT$ cd bitcoin -
$BITCOIND_ROOT/bitcoin$ git checkout v0.16.2 -b v0.16.2 -
$BITCOIND_ROOT/bitcoin$ mkdir build -
$BITCOIND_ROOT/bitcoin$ BDB_PREFIX=$(pwd)/build -
$BITCOIND_ROOT/bitcoin$ echo $BDB_PREFIX- $BITCOIND_ROOT/bitcoin/build
-
$BITCOIND_ROOT/bitcoin$ ./autogen.sh -
$BITCOIND_ROOT/bitcoin$ LD_LIBRARY_PATH="$BITCOIND_ROOT/deps/lib" LIBS="-lssl -lcrypto" CPPFLAGS="-I$BITCOIND_ROOT/deps/include -I${BDB_PREFIX}/include -O2" LDFLAGS="-L$BITCOIND_ROOT/deps/lib -L${BDB_PREFIX}/lib/" SSL_CFLAGS="-I$BITCOIND_ROOT/deps/include" SSL_LIBS="-L$BITCOIND_ROOT/deps/lib" CRYPTO_CFLAGS="-I$BITCOIND_ROOT/deps/include" CRYPTO_LIBS="-L$BITCOIND_ROOT/deps/lib" ./configure --prefix=$BITCOIND_ROOT --with-boost=$BITCOIND_ROOT/deps --without-gui - 疑難排解
- 如果出問題 (下錯指令了,是嗎? 😂) 需要清乾淨以重新 compile,那... 就把 build 目錄砍掉再來一次就是了 :
-
$BITCOIND_ROOT/bitcoin$ rm -rf ./build - 然後從上述
$ mkdir build
步驟繼續
-
- 如果出問題 (下錯指令了,是嗎? 😂) 需要清乾淨以重新 compile,那... 就把 build 目錄砍掉再來一次就是了 :
- 順利完成!!! Congratulations!!! 👍 😁 🎉 檢查一下 :
-
$BITCOIND_ROOT/bitcoin$ ls -la ./src/bitcoin* - 應該要有
bitcoin-cli
,bitcoind
等幾個執行檔出現囉~
-
- 恭喜,費盡千辛萬苦,終於完成 compile 😅 可以開始執行了
-
$BITCOIND_ROOT/bitcoin$ mkdir ~/.bitcoind -
$BITCOIND_ROOT/bitcoin$ vim ~/.bitcoind/bicoin.conf- 加入一行
debug=net
即可
- 加入一行
- 接下來,您需要帶起 bitcoind,然後可以透過 bitcoin-cli 對 bitcoind 下指令取得資訊,再來您還會需要看 log 或做其他檢查,so... 建議您分幾個 terminal 執行底下工作,或是使用
screen
指令工具是再好不過 - 第一個 screen :
-
$BITCOIND_ROOT/bitcoin$ LD_LIBRARY_PATH=$BITCOIND_ROOT/bitcoin/deps/lib ./src/bitcoind
-
- 第二個 screen :
-
$BITCOIND_ROOT/bitcoin$ tail -f ~/.bitcoind/debug.log- 應該會看到相關 log,正確在執行了
2018-08-15 19:59:49 Bitcoin Core version v0.16.2 (release build) 2018-08-15 19:59:49 InitParameterInteraction: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1 2018-08-15 19:59:49 Assuming ancestors of block 0000000000000000005214481d2d96f898e3d5416e43359c145944a909d242e0 have valid signatures. 2018-08-15 19:59:49 Setting nMinimumChainWork=000000000000000000000000000000000000000000f91c579d57cad4bc5278cc ...
- 疑難排解 : 如果您看到 test-build, pre-release 的字眼,表示您弄錯了 -- 是不是前面的步驟中,您沒有 checkout 到最 latest release 的 tag 呢? Orz... 請把 build 目錄刪除,然後從上面 checkout 的步驟重新做起吧~ 😅
- 首次會需要執行 Initial Syncrhonization : IBD (Initial Block Download),看到類似底下這樣的 log 就是囉!!! 大約在 150GB 左右。取決於速度,以本案例是 6 小時內完成。透過 tail -f 您會看到相關 log
2018-08-15 20:00:09 got inv: tx e09a4455bb5c3096787470d81c1ce0ccb58af627b5bd73ca67fa71f26b89b251 new peer=6 2018-08-15 20:00:08 got inv: tx 0c339a0d042fdc42cc648c76764dc9ed7208f7a77d0cd5a11cfcd7f6ed701a36 new peer=9 2018-08-15 20:00:08 got inv: tx ac738b44e79d7a2bead8bcbe8837b63111839bcdb693fff58b1cb5368ef6d5c9 new peer=9
-
- 然後第三個 screen 就可以用底下指令看狀況囉 :
-
$BITCOIND_ROOT/bitcoin$ LD_LIBRARY_PATH=$BITCOIND_ROOT/bitcoin/deps/lib ./src/bitcoin-cli getblockchaininfo
-
恭喜!!! Congratulations!!! 👍
Many thanks to https://gist.github.com/janx/10465121 really helps, thanks again.