在前两天就开始研究这个geth客户端,奈何中间一直遇到各种各样的问题,最后总算是成功在服务器上安装geth并开始同步区块了。这里记录一下过程。
1、虚拟机配置问题
博主最开始用的是虚拟机,但是在下载安装geth的时候,就出现了一些问题,那就是虚拟机的配置不够。这里建议大家有自己服务器的就用自己的服务器。用虚拟机的话,内存什么的调大一些,毕竟区块数据文件有20G那么大
2、同步区块链数据的速度很慢。
大家做好等待一天的准备。。用8G内存的服务器,同步了大概6个小时。
3、需要提前准备的工具
//这个的 gcc g++ ntp都是编译geth时候需要的
apt install git wget vim gcc g++ ntp
此处大家百度一下的话会发现,网上一共有三种安装方式:
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)即可;
星火节点计划针对国内节点。
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