Linux以太坊私有链的搭建及遇到的一些问题

Linux以太坊私有链的搭建及遇到的一些问题:

1.操作系统准备:

VMware 15搭建虚拟机安装CentOS 6.5。

注:更新后的win10会有VMware12等其他版本的不兼容,换成最新版的VMware 15就没有问题。

2.golang安装

方法一:下载tar(推荐)

https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz

上传至Linux系统并解压

tar -zxvf go1.13.5.linux-amd64.tar.gz

修改profile文件

vim /etc/profile
// 在最后一行添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
// wq保存退出后source一下
source /etc/profile

执行go version,如果现实版本号,则Go环境安装成功。

方法二:yum源安装
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm

yum install golang

也需要配置profile文件

golang位置可用命令查询:

whereis golang

注:这种方法安转文件位置没有解压版清晰,推荐第一种方法。

3.下载并安装以太坊

方法一:官网下载最新版本

https://geth.ethereum.org/downloads/

注:网站可能出现加载问题

 Retrieving packages from release server...

解决方案:

F12开发这模式查看下载链接

附最新下载链接:

Linux:https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.9.9-01744997.tar.gz
Windows:https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.9.9-01744997.exe
MacOS:https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.9.9-01744997.tar.gz

下载完成后上传至Linux系统并解压。

tar -zxvf geth-linux-amd64-1.9.9-01744997.tar.gz

这种方法解压后不需要安装,跳过第四步安装,打开文件

cd geth-linux-amd64-1.9.9-01744997

有如下文件即可:

-rw-rw-r--. 1 2000 2000    32397 Dec  6 18:38 COPYING
-rwxrwxr-x. 1 2000 2000 34886664 Dec  6 18:40 geth
方法二:下载的zip压缩格式的源代码:(版本号为1.4.12)

https://github.com/ethereum/go-ethereum/releases/tag/v1.4.12

备用库:

http://www.huiyanghua.com/js/go-ethereum-1.4.12.zip

下载完成后上传至Linux系统并解压。

unzip go-ethereum-1.4.12.zip

cd go-ethereum-1.4.12

make

可能会出现问题,

unexpected directory layout:

安装以太坊的go-ethereum-1.4.12版本失败,下载最新版即可,即使用方法一。

4.创世区块文件的准备

创建init.json的文本文件,内容如下:

{
  "config": {
    "chainId": 666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
  },
  "nonce": "0x0",
  "timestamp": "0x5ddf8f3e",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x00002",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": { },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

5.创世区块初始化

./geth  --datadir "./chain" init init.json

注:可能出现的报错一:

/lib64/libc.so.6: version `GLIBC_2.14' not found

代码在Centos6和Centos7之间编译运行 经常遇到/lib64/libc.so.6: version `GLIBC_2.14’ not found的问题,原因是glibc库版本不一致

ll /lib64/libc.so.6 

lrwxrwxrwx 1 root root 19 Sep 23 08:29 /lib64/libc.so.6 -> /lib64/libc-2.12.so 

libc.so.6是一个软连接,当前的glibc是2.12版本,我遇到的事GLIBC_2.15找不到的问题,所以需至少升级到2.15

首先,从网上下载glibc 2.15的rpm安装包,但这个不容易,因为.rpm针对的是centOS和redhat,高版本安装包很少见。也可以直接从其他系统上好一个编译好的文件

libc.so.6(对应glibc 2.15或者更高的),不过最保险的方式就是下载源代码在本地编译一次(有的人实在编译不成功,那也只能从别的地方找一份了)

各个版本的glibc可以从http://ftp.gnu.org/gnu/glibc/找,包括其插件glibc-port

最新到2.20,我保守的选择2.15

对于低版本glibc,还有glibc-linuxthreads-2.x需要编译,可参考很多网上文档,但2.15没有,所以不用了

wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz  
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz  

tar -xvf  glibc-2.15.tar.gz  
tar -xvf  glibc-ports-2.15.tar.gz  

mv glibc-ports-2.15 glibc-2.15/ports  

mkdir glibc-build-2.15   

cd glibc-build-2.15  

../glibc-2.15/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin  

make 

make install  

如果提示install成功,去看glibc所在的共享库:

ll /lib64/libc* 

可以看到2.12的旧库文件还在,多了2.15版本的库文件,而且软链接文件全部指向了2.15版本。

-rwxr-xr-x  1 root root 1921096 Aug 30 02:16 /lib64/libc-2.12.so  
-rwxr-xr-x  1 root root 9801632 Sep 25 13:46 /lib64/libc-2.15.so  
lrwxrwxrwx. 1 root root      18 May 19 18:51 /lib64/libcap-ng.so.0 -> libcap-ng.so.0.0.0 
-rwxr-xr-x. 1 root root   18672 Jun 25  2011 /lib64/libcap-ng.so.0.0.0  
lrwxrwxrwx. 1 root root      14 May 19 18:51 /lib64/libcap.so.2 -> libcap.so.2.16  
-rwxr-xr-x  1 root root   19016 Dec  8  2011 /lib64/libcap.so.2.16  
lrwxrwxrwx. 1 root root      19 May 19 18:57 /lib64/libcgroup.so.1 -> libcgroup.so.1.0.40 
-rwxr-xr-x  1 root root   97016 Dec  9  2013 /lib64/libcgroup.so.1.0.40  
-rwxr-xr-x  1 root root  197064 Aug 30 02:16 /lib64/libcidn-2.12.so  
-rwxr-xr-x  1 root root  267972 Sep 25 13:46 /lib64/libcidn-2.15.so  
lrwxrwxrwx  1 root root      15 Sep 25 13:52 /lib64/libcidn.so.1 -> libcidn-2.15.so  
lrwxrwxrwx. 1 root root      17 May 19 18:51 /lib64/libcom_err.so.2 -> libcom_err.so.2.1 
-rwxr-xr-x  1 root root   17256 Nov 22  2013 /lib64/libcom_err.so.2.1  
-rwxr-xr-x  1 root root   40400 Aug 30 02:16 /lib64/libcrypt-2.12.so  
-rwxr-xr-x  1 root root  142947 Sep 25 13:46 /lib64/libcrypt-2.15.so  
lrwxrwxrwx. 1 root root      22 May 19 18:57 /lib64/libcryptsetup.so.1 -> libcryptsetup.so.1.1.0  
-rwxr-xr-x  1 root root   97072 Jun 22  2012 /lib64/libcryptsetup.so.1.1.0  
lrwxrwxrwx  1 root root      16 Sep 25 13:52 /lib64/libcrypt.so.1 -> libcrypt-2.15.so  
lrwxrwxrwx  1 root root      12 Sep 25 13:52 /lib64/libc.so.6 -> libc-2.15.so  

有些人会在make install后出现error。这儿error我没去细究,经过网友提醒,可能是因为没有sudo造成的,因为make install就是把文件拷贝到几个受保护的系统目录下。

如果还是不行,可以查看一下系统此时的GLIBC版本,参考一开始的做法。如果版本未升级,我们只能手动安装一下:

首先make是成功了,那么我们会发现build目录下编译出了一个新的libc.so.6 (/glibc-build-2.15/libc.so.6, 我们会发现这实际上也是一个软连接,真实的lib文件时libc.so, 输出

ll  libc.so.6  
lrwxrwxrwx 1 root root 7 Sep 23 07:41 libc.so.6 -> libc.so  
[usr@linux glibc-build-2.15]$ strings libc.so | grep GLIBC

可以看到:

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_PRIVATE

这是我们需要的lib了,然后去更新系统的库。

这里要注意,更新系统里的链接(我的是/lib64/libc.so.6) 很容易出错,我不清楚有没有更好的办法,一般都是删除旧链接,建立新链接

但删除旧链接后,很多命令直接不能用了,因为此时中不到glibc的库了。这个时候就需要临时指定一个glibc库,方法如下(libc.so改个名以便好以后更新的其他版本区分):

[usr@linux cp /****/glibc-build-2.15/libc.so /lib64/libc-2.15.so
rm -f /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.15.so ln -s /lib64/libc-2.15.so  lib64/libc.so.6

更新连接完毕,然后:

strings /lib64/libc.so.6 | grep GLIBC

可以看到:

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_PRIVATE

说明连接更新成功,再编译的话,GLIBC_2.15及以下版本的依赖问题就不会出现了。

可能出现的报错二:谁

如果json文件为:

{  
    "config": {  
          "chainId": 22,  
          "homesteadBlock": 0,  
          "eip155Block": 0,  
          "eip158Block": 0  
      },  
    "alloc"      : {},  
    "coinbase"   : "0x0000000000000000000000000000000000000000",  
    "difficulty" : "0x20000",  
    "extraData"  : "",  
    "gasLimit"   : "0x2fefd8",  
    "nonce"      : "0x0000000000000042",  
    "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",  
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",  
    "timestamp"  : "0x00"  
  } 

用这个创世块的描述文件初始化时,出现错误:

Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0

解决方法:换成4.创世快准备的文件

6.以太坊启动

./geth --rpc --rpcport "8545" --rpccorsdomain "*" --datadir "./chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 100000 console

你可能感兴趣的:(区块链,以太坊,数字货币)