这是一个用树莓派做Bitcoin Unlimited全节点的示例。对于没用使用过全节点钱包,也不熟悉命令行操作的朋友,建议先看这篇教程,尝试在PC或Mac上安装和同步区块链,这样更容易理解这个示例。
为什么要用树莓派做全节点?
树莓派体积小,耗电小,无噪音,非常适合24小时工作。比特币节点对系统性能要求不高,专门24小时开着一台电脑,耗电和噪音都是很不环保的,且性能有极大的浪费。树莓派耗电仅和手机充电器相当,也没有风扇。你甚至不需要为树莓派安排地方,随便塞在哪里就行了,操作可以在其他的电脑上,通过SSH进行。用树莓派搭建节点,也可以学习到基本的Linux系统操作知识。搭建节点之后,树莓派上可以继续搭建其他服务,比如做个人云盘,BT挂机下载等等。
准备工作
需要准备如下几样东西。此例使用树莓派3B,这版有1GB内存,也有wifi,性能是目前树莓派家族最好的。512MB内存的树莓派2或者zero也是可以用的。清单如下:
– 树莓派 3B(配盒子,电源)
– 16GB的SD卡Class 10 microSDHC
– 外置硬盘或U盘
– 网线(可选,wifi也行,但用网线会更稳定一点)
– 键盘,鼠标,显示器,HDMI线(不用买,仅在安装时临时用一下,安装好以后可以远程SSH接入树莓派)
树莓派系统安装
下载Ubuntu系统镜像
树莓派原生的系统是Rasbian,出于个人偏好,此例使用Ubuntu-mate的ARM版。首先下载系统的镜像文件 Ubuntu Mate 16.04.2 LTS 的 RaspberryPi 版本 https://ubuntu-mate.org/raspberry-pi
把镜像文件导入SD卡
- Windows系统:可以使用7-zip解压下载到的文件,用Win32 Disk Imager把img文件装载到SD卡里
- Macbook:把下载的img文件解压到桌面;插上SD卡后,在Terminal里使用diskutil查看SD卡到情况
diskutil list
输出里可以看到
/dev/disk0
之类的盘,根据他们的大小,可以判断出来哪个是我们的SD卡。此例中是/dev/disk2
,大小15G。用dd命令来把镜像文件写入(本例是ubuntu.img)sudo dd if=~/Desktop/ubuntu.img of=/dev/rdisk2 bs=1m
这里
/dev/disk2
写成/dev/rdisk2
,速度会较快。等待几分钟后显示完成。
给树莓派按照系统
下面,把做好的SD卡装到树莓派上,给树莓派连上显示器,键盘鼠标,接上电,应该就会看见树莓派启动,并开始安装UbuntuMate系统。和装其他系统一样,顺着引导一路next就行。这个阶段我们要做的是给Ubuntu设置好用户名和密码,打开SSH。用户名在此例中是pi,如果你设置的不一样,那么在接下来的一些指令中要把pi替换成你的用户名。如果你使用wifi,在这里把wifi连一下。
在Ubuntu里进入Terminal命令行,使用
sudo raspi-config
sudo是以管理员身份运行的意思,接下来也是常用的。进入raspi-config界面后看到几个选项,我们要做的是:
1,改密码;
2,在BootOptions里把开机选项由Desktop GUI改为Text console,这样禁用了图形界面,节省系统资源,反正我们不打算接着显示器用树莓派,而SSH也不支持图形界面。
3,在Interfacing里面把SSH打开,
4,在AdvancedOption里面进行Expand Filesystem,
5,在AdvancedOption里面把Memory Split改为16,即只留16MB内存给显示。因为我们没有开图形界面,这样可以尽量多把内存给程序用。
设置完毕,重启树莓派。现在可以把键盘鼠标和显示器拔掉了,接下来的步骤,我们会通过SSH进行。
设置路由器
用电脑进入路由器的设置页面,此例中是https://192.168.1.1/。在这里,我们要做两件事,1,给树莓派固定一个内网ip,2,给树莓派设置端口映射
不同品牌的路由器设置方法大同小异,必要的话可以搜一下说明书。查看已经连接的设备,给树莓派设置一个固定的ip比如192.168.1.2。也许你需要重启路由器才能生效。找到端口映射的设置,外网端口范围8333到8333,内网端口一样,目标指向192.168.1.2 。端口映射的目的是叫外网向你的路由器8333端口发送请求的时候,路由器把数据转给树莓派,这样别人才能访问到你的节点。
设置成功后,即可通过SSH控制树莓派。Windows系统推荐Putty,Mac推荐vSSH,填上地址192.168.1.2,端口22,链接后输入用户名pi,密码,即进入远程命令行。
设置树莓派
mount 外置硬盘或U盘
我们在电脑上准备区块链数据。树莓派的性能不适合从头同步区块链,很容易在中途出错。推荐在电脑上把区块链同步好。如果运行裁剪节点,也先在电脑上完成裁剪。
区块链数据是如下这些目录和文件:
banlist.dat
blocks
chainstate
db.log
debug.log
fee_estimates.dat
peers.dat
wallet.dat
裁剪节点:prune模式可以删除旧的交易细节,仅保留交易结果(余额)。裁剪后,你的节点不能为网络提供旧的区块数据,仍然能帮助网络验证转发新的区块和交易。
在本例中,电脑是Win10系统,节点程序安装在c:\BitcoinUnlimted\bitcoin-qt.exe,区块链数据在c:\BlockData, 新建一个bitcoin-qt的快捷方式,右键进属性,在目标栏的bitcoin-qt.exe 后面加上
-datadir=c:\BlockData -prune=3000
然后用这个快捷方式启动一次,即可看见c:\BlockData明显缩小了。prune=3000意思是保留3000MB的新区块。裁剪下来,体积大约是4G,因为里面还有旧区块的交易结果。将来继续带着prune=3000这个参数运行,区块链体积不会再明显增大。裁剪后的区块链数据,找一个U盘就可以装下了。你可以根据情况选择这个参数,最小是550,再低就失效了。
把外置硬盘(完整数据)或U盘(裁剪数据)格式化成FAT32格式,然后把电脑上已经准备好的区块链数据拷贝进来。
把外置硬盘或U盘插上树莓派,通过SSH运行
sudo fdisk -l
可以根据容量判断,找到新插上的硬盘或U盘的代号,应该是/dev/sda1之类。
SSH进来的目录是/home/pi,我们在这里建一个文件夹blkdata来装载
mkdir blkdata
把硬盘或U盘加载到这个目录里
sudo mount /dev/sda1 /home/pi/blkdata
自动装载:
如上的装载,重启后要运行mount。我们可以通过fstab表来实现开机后自动装载。
sudo blkid
可以看到设备的信息,这里我们需要知道的是UUID号,本例是AE7F-E97A。编辑fstab表:
sudo nano /etc/fstab
在里面加上一行(中间是用Tab键分隔)
UUID=AE7F-E97A /home/pi/blkdata vfat auto,user 0 0
然后ctrl+x退出nano编辑器,打Y确认保存。
装载成功的话,进入这个目录:
cd blkdata
列出文件:
ls -l
应该可以看到我们放进来的区块链数据。在用一次cd命令,退回到原来的目录里。
设置虚拟内存
我们要为树莓派布置一些虚拟内存
首先看一下内存的情况:
free -h
看到有1GB内存(树莓派3),虚拟内存swap是0。建立一个swap 文件,此例中是swapfile,大小2GB。
sudo dd if=/dev/zero of=/home/pi/swapfile bs=1m count=2000
稍等几分钟完成。
给swap文件设置一下属性
sudo chmod 600 /home/pi/swapfile
sudo mkswap /home/pi/swapfile
加载上虚拟内存
sudo swapon /home/pi/swapfile
再试试
free -h
现在应该显示有2G的虚拟内存了。同样,这个设置会在重启后失效,我们得把他加到fstab里自动加载才行。
sudo nano /etc/fstab
加一行
/home/pi/swap/swapfile none swap sw 0 0
安装节点
现在,我们开始安装节点(终于。。。)
先设置好BU的PPA服务器
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:bitcoin-unlimited/bu-ppa
更新一下列表
sudo apt-get update
开始安装
sudo apt-get install bitcoind
bitcoin.conf的设置
启动节点以前,先写一个bitcoin.conf,作为参数的设置。
nano bitcoin.conf
用nano编辑器写一些参数设置,本例中使用:
prune = 3000
checklevel = 0
mempoolexpiry = 24
disablewallet = 1
maxconnections = 30
maxmempool = 144
minlimitertxfee = 1
server=1
rpcuser=C9dWYgs6
rpcpassword=oXVZ4x2yQuxSGTqATiAkLPpsWCQBr
rpcclienttimeout=60
rpcport=8332
rpcconnect=127.0.0.1
如果修剪的话,prune参数要和之前在电脑上设置的一样。如果是不修剪的节点,这里设置为0或不写。rpcuser 和 rpcpassword随便设。
终于,我们可以启动节点了。启动时要加上数据目录的位置,和conf文件的位置,还有-daemon让节点后台运行
sudo bitcoind -daemon -datadir=/home/pi/blkdata -conf=/home/pi/bitcoin.conf
检查节点是不是在工作了
bitcoin-cli getinfo
能看见version
等信息就是OK了。再用电脑去bitnodes.21.co,下面Check Node那里填上自己的IP地址(自动识别填好了的),如果能Check出来你的节点版本那就是通了。
设置自动启动bitcoind
把自动启动的服务打开
sudo systemctl enable rc-local.service
编辑/etc/rc.local
sudo nano /etc/rc.local
在exit 0
上方写:
sleep 10
sudo bitcoind -daemon -datadir=/home/pi/blkdata -conf=/home/pi/bitcoin.conf
一些可能出现的问题
想到什么写什么吧:
移动硬盘不稳定
树莓派都USB口供电不行,如果移动硬盘是不带电源的,可能会不稳定。解决方法:
sudo nano /boot/config.txt
找到max_usb_current
,设置为1,可以调高USB口的电流。
sudo每次都要打密码特别烦
进visudo
sudo visudo
最底下加入一行
pi ALL=(ALL) NOPASSWD: ALL
pi是用户名