Skip to content

Instantly share code, notes, and snippets.

@kFTY
Last active June 21, 2023 06:20
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save kFTY/fd80ac98e70345f113463f72adfd823c to your computer and use it in GitHub Desktop.
Save kFTY/fd80ac98e70345f113463f72adfd823c to your computer and use it in GitHub Desktop.

这是一个用树莓派做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是用户名

如果有哪里没讲清楚的,欢迎评论讨论。

估计也没人打赏,不留地址了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment