【以太坊】搭建测试网络之ubuntu系统安装geth客户端以及同步区块数据

一、前言

      在前两天就开始研究这个geth客户端,奈何中间一直遇到各种各样的问题,最后总算是成功在服务器上安装geth并开始同步区块了。这里记录一下过程。

1、虚拟机配置问题

      博主最开始用的是虚拟机,但是在下载安装geth的时候,就出现了一些问题,那就是虚拟机的配置不够。这里建议大家有自己服务器的就用自己的服务器。用虚拟机的话,内存什么的调大一些,毕竟区块数据文件有20G那么大

2、同步区块链数据的速度很慢。
大家做好等待一天的准备。。用8G内存的服务器,同步了大概6个小时。

3、需要提前准备的工具

//这个的  gcc  g++ ntp都是编译geth时候需要的
apt install git wget vim gcc g++ ntp

二、下载安装geth

此处大家百度一下的话会发现,网上一共有三种安装方式:

1、下载可执行文件

下载地址:https://geth.ethereum.org/downloads/
(这里下载之后,是没有geth命令行的。博主下载之后不太会用,就删掉了采用了其他的方式)

2、采用源码安装

(1)下载源码

1、mkdir -p /data/ethereum/   //新建文件夹用于存放下载的geth文件
2、cd /data/ethereum
3、git clone https://github.com/ethereum/go-ethereum.git  //此处是开始克隆

此处需要注意,因为此项目较大,所以下载的时候可能会报错,一般常见的解决手段:

    1、查看配置    git config -l
    2、增大缓存  git config --global http.postBuffer 524288000  //这是520M,可以考虑再大点
    3、只克隆最近一次的   depth -1  
    4、修改ssl git config --global http.sslVerify false  //这是防止ssl认证的

(2)编译安装

1、git checkout v1.8.12   //切换到目前的稳定版本
2、cd go-ethereum  
    make all   //编译

此处,下载完成之后,一般都是master分支,这个分支不是很稳定,所以建议切换到稳定分支。

git  tag   //列出当前仓库的所有标签
git checkout v1.8.12  //切换到1.8.12标签上去

这里编译报错的话,可能会是go语言的版本问题。建议使用1.9.3版本以上的go语言编译。要保证此处go的环境变量是没问题的。
(PS:此处不知道为什么,我的geth一直编译不了,go的版本也来来回回换了好多次,最后放弃此方式,选择第三中,ubuntu系统安装。)

(3)配置环境变量

echo "export PATH=$PATH:/data/ethereum/go-ethereum/build/bin" >> /etc/profile  
source /etc/profile

此处找到go-ethereum文件下的bin目录,添加到环境变量中,然后同步下环境变量即可。

3、ubuntu 在线安装

$ sudo add-apt-repository -y ppa:ethereum/ethereum   //先添加源文件
$ sudo apt-get update   //更新源
$ sudo apt-get install ethereum   //安装源

      这种安装方式是默认安装在 ~/.ethereum 目录下,只能通过root用户访问。安装无误之后即可开始下面的同步区块。此处同步区块默认是在~/.ethereum/geth/chaindata文件夹中。

三、同步区块

1、如果是采用源码安装的话

(1)新建同步区块的文件夹

mkdir -p /data/ethereum/block_data

(2)同步测试网络(推荐)

geth --testnet --fast --cache=512 --datadir "/data/ethereum/block_data" --rpc --rpcapi db,net,eth,web3,personal --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" console

(3)同步正式网络

geth --fast --cache=512 --datadir "/data/ethereum/block_data" --rpc --rpcapi db,net,eth,web3,personal --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" console

初次同步区块默认开启fast模式,本地已经存在区块时,强制使用full模式继续同步。

上述命令中,–fast指定使用fast模式同步数据,即只同步区块的header和body,在同步到当前区块前不会验证区块,同步到当前区块后开始使用full模式同步新的区块。–full指定使用full模式同步完整区块信息,并从创世块开始验证每一个区块的信息;

--cache指定缓存大小,单位为M;

--datadir指定区块存放目录;

--rpc相关命令指定了其他程序可以通过rpc的方式和geth节点交互;

--maxpeers指定最多可以连接的节点数,默认25;

console指定打开geth控制台;

也可以在命令末尾追加 2>>sync.log 将同步日志输出到文件中。

注意:此处一定要加上rpc的相关参数。 –rpcport 8545 是指定geth的端口号。 127.0.0.1是我们自己的地址。这些都是后续部署智能合约需要用到的参数,谨记。

2、采用ubuntu 在线安装同步区块

mkdir -p /data/ethereum/block_data

geth --testnet --fast --cache=512 --datadir "/data/ethereum/block_data" --rpc --rpcapi db,net,eth,web3,personal --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" console

注意:此处一定要加上rpc的相关参数。 –rpcport 8545 是指定geth的端口号。 127.0.0.1是我们自己的地址。这些都是后续部署智能合约需要用到的参数,谨记。

3、如果同步失败的话

同步失败,可以尝试使用 https://ethfans.org/wikis/星火节点计划介绍

在上述页面上下载static-nodes.json;

把static-nodes.json放到chaindata同一目录下(就是我们创建的/data/ethereum/block_data)即可;

星火节点计划针对国内节点。

四、打开geth客户端

1、打开geth客户端

在geth正在同步区块时,通过attach命令可以连接到正在运行的geth的控制台

geth attach ipc:/data/ethereum/block_data/geth.ipc --datadir "/data/ethereum/block_data"

ipc指定ipc文件位置;
–datadir指定区块文件夹。

在控制台中:

> eth.blockNumber //当前已同步的区块高度。如果结果是0,说明还没有通过fast模式同步完成,还没有追赶上最新的区块并验证通过。
> net.peerCount //已连接的节点数
> eth.syncing //fast模式同步中时,会返回最高区块和当前区块高度。返回false有两种情况:(1)未开始同步(2)已完成同步并验证,正在同步最新区块中。
> admin.peers //显示连接到的节点信息

2、根据文档进行相关操作

https://learnblockchain.cn/2017/12/01/geth_cmd_short/

      这里我们就算是完成geth的安装以及同步区块了。同步区块是比较慢的,如果大家需要在同步区块的同时区进行其他操作,可以试试终端管理工具tmux:

终端复用工具

end

猜你喜欢

转载自blog.csdn.net/LJFPHP/article/details/81084412