红联Linux门户
Linux帮助

在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事

发布时间:2017-05-20 15:43:13来源:简书作者:forest21000
今年2月份以来,开始正式进入区块链行业,但开始时只是碎片化地看一些公众号和新闻,但对于区块链的运行原理并没有深入理解。思来想去,我应该好好学习区块链的鼻祖比特币的原理与源码,这样才能让我有资格站在区块链资产的背后,坚定长期持有的信心。
于是在4月份,我利用笑来老师推荐的“碎片化时间法”看完了《精通比特币》这本书,看这本书的过程中我是带着问题去看的,比如交易是如何传播的、交易是如何打包到块中的、数字签名是怎么来的以及挖矿难度是怎么产生的等问题,通过这种方式的阅读让我对比特币的原理有了较清晰的认识,并且越来越佩服中本聪以及比特币团队技术能力,还有比特币网络运行的智能性,越看越过瘾,发现里面的逻辑很缜密,考虑到了各种可能性!近期准备再详细读一遍,力求深刻理解其原理还有概念,同时想着自己理解后能把里面的概念分享出来,与大家一起探讨学习!
上周末(2017年5月13日)在家想着自己刚好有Ubuntu的安装包,同时想着自己既然在研究区块链技术,自身也是搞研发的,而且又刚看完《精通比特币》这本书,所以觉得应该开始研究比特币的源码了!想着就开始行动了,在安装的过程中虽然是按照网上其他人分享的帖子,有可能是系统版本的问题吧,安装过程并不是那么顺利,这期间也碰到过一些问题!为帮助大家在安装过程中如碰到与我一样问题能快速解决问题,特把我自己的安装过程分享出来,希望对大家有益。
 
第一步:安装Ubuntu
比特币(Bitcoin)客户端为开源软件,所以其在Linux下的安装相比Windows的安装过程会方便很多,所以,我选择使用较多的Ubuntu操作系统,版本为16.04 LTS。因为我电脑为Windows操作系统,所以选择通过VMware虚拟机完成Ubuntu的安装。虚拟机中安装Ubunt的教程已经很多了,所以本文不详细描述了。
 
第二步:安装三方库
Ubuntu系统安装完成后,想着肯定有很多前辈编译过比特币(Bitcoin)客户端源码,也肯定会有很多热心人分享出来,于是搜索之后发现果然有很多相关的帖子,经过筛选后找到两篇中文与一篇英文的编译参考网页:
比特币源码的编译及环境搭建
http://www.linuxdiyf.com/linux/30941.html
ubuntu下从源码编译比特币(Bitcoin)客户端
在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事
Installingbitcoin in ubuntu
在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事
最开始搜索的就是中文帖子,所以,按照第一篇文章中列举的步骤开始下载编译比特币源码所需的三方库。当时的步骤是这样的:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libtoolautotools-dev autoconf pkg-config libssl-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libqt5gui5 libqt5core5a
libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
sudo apt-get install libqrencode-dev
sudo apt-get install libminiupnpc-dev
我一开始就按照这个步骤挨个命令地执行,发现很快就执行完了,想想不对吧,怎么可能这么快!于是回过头去看了执行命令给出的信息,发现是有错误提示的,而且提示的错误是一样的:
Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise-updates/main/binary-i386/PackagesSomething wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)
提示无法获取所需要安装包,完成的搜索再一次帮助了我,我把这类问题在百度里搜索后发现笑来老师说的那句“相信我,你并不孤独”再次应验了,有很多文章介绍遇到过这个问题,并给出了解决方案。这个问题最简单的解决方案是:
修改/etc/resolv.conf文件:
nameserver=8.8.8.8
在修改resolv.conf文件后,执行开始的那些命令后发现开始运行正常了,没有再出任何问题了。运行效果如下:
在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事
命令执行过程较长,但看着执行语句的顺利执行,心情是相当舒畅的!其实在解决这个问题时,也尝试过别的文章介绍的方法,但由于系统配置不同或作者描述不清楚的原因,试了都没效果,但还好自己坚持下来继续查找解决方法,才顺利完成了更新任务!坚持就是胜利!心中要永存希望,希望之火不能被灭!
 
第三步:下载比特币源码
比特币源码存放于github中,在Ubuntu操作系统下可以直接使用git命令完成github上源码的下载。其下载命令如下:
cd ~
git clone https://github.com/bitcoin/bitcoin.git
当时我的系统中没有安装git软件,所以提示未找到git,所以,需要安装,其安装命令如下:
sudo apt-get install git
安装完成后,再输入之前的命令即可完成bitcoin源码的下载。
 
第四步:安装比特币(Bitcoin)客户端
安装比特币软件之前,需要先完成berkeley-db的安装,首先在bitcoin源码目录中创建db4目录
###Download and compile Berkley DB 4.8
cd ~
mkdir bitcoin/db4/
下载berkeley-db安装包
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
大部分文章都是让下载db-4.8.30.NC.tar.gz,但该版本在官网已经无法下载了,官网只有db-6.2.32.NC.gz,所以,我将其修改下面的命令,可完成该数据库源码的下载。
wget 'http://download.oracle.com/berkeley-db/db-6.2.32.NC.gz'
随后是完成berkeley-db的安装:
tar -xzvf db-6.2.32.NC.tar.gz
cd db-6.2.32.NC/build_unix/
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=/home/theusername/bitcoin/db4/
make install
剩下的就是完成比特币(Bitcoin)客户端的安装了。
cd ~/bitcoin/
./autogen.sh
./configure LDFLAGS="-L/home/theusername/bitcoin/db4/lib/" CPPFLAGS="-I/home/theusername/bitcoin/db4/include/"
make
make install
在运行./configure时遇到了错误提示
Found Berkeley DB other than 4.8, required for portable wallets (–with-incompatible-bdb to ignore)
根据提示信息了解到是我Berkeley DB的安装版本为6.2.32,不同于软件默认要求的4.8,所以提示错误信息,经百度发现需在./configure中添加--with-incompatible-bdb参数才可以,添加该参数的目的可以保证转账的正常进行:
run the following command instead. You can always send your bitcoins to another wallet.
其他过程均运行正常,经过后面的make与make install命令执行后,比特币软件安装完成。
在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事
 
第五步:测试安装结果
根据《精通比特币》第3章介绍的,我们可以通过询问系统下面2个可执行文件的路径,来确认bitcoin是否安装成功。
$ which bitcoind
/usr/local/bin/bitcoind
$ which bitcoin-cli
/usr/local/bin/bitcoin-cli
如果命令执行结果如图所示,则表明比特币软件安装成功。
在Ubuntu 16.04下聊聊比特币(Bitcoin)客户端源码编译那些事
 
以上就是我安装比特币(Bitcoin)客户端的全部过程,后续将继续研究该节点下区块链存放目录、bitcoind与bitcoin-cli命令的参数使用方法,甚至是开发提币后的转账功能,想想都有点小激动了!
如果大家有安装上的问题可以留言,我将尽力帮助大家解决问题,也欢迎大家把安装过程中解决的问题也贴出来,让后面的人可以少走很多弯路!
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30942.html