正在准备跑一下 Filecoin 的 Calibration 网络,切换分支重新编译。把 Testnet 二期测试网的区块及扇区数据备份了一下,以备后面恢复使用。

为了避免冲突,清空了 .lotus.lotusstorage 目录,创建一个全新的 lotus 节点。但在执行 lotus daemon 时发生了以下错误:

2020-07-22T13:30:25.154Z        INFO    basichost       basic/natmgr.go:96      DiscoverNAT error:no NAT found
2020-07-22T13:30:33.697Z        WARN    main    lotus/main.go:81        initializing node:
    main.glob..func2
        /home/herald/lotus/cmd/lotus/daemon.go:249
  - starting node:
    github.com/filecoin-project/lotus/node.New
        /home/herald/lotus/node/builder.go:512
  - could not build arguments for function "github.com/filecoin-project/lotus/node/modules".RunHello (/home/herald/lotus/node/modules/services.go:31): failed to build *hello.Service: could not build arguments for function "reflect".makeFuncStub (/usr/local/go/src/reflect/asm_amd64.s:12): failed to build *chain.Syncer: could not build arguments for function "reflect".makeFuncStub (/usr/local/go/src/reflect/asm_amd64.s:12): failed to build beacon.RandomBeacon: could not build arguments for function "reflect".makeFuncStub (/usr/local/go/src/reflect/asm_amd64.s:12): failed to build *pubsub.PubSub: could not build arguments for function "reflect".makeFuncStub (/usr/local/go/src/reflect/asm_amd64.s:12): failed to build dtypes.DrandBootstrap: function "reflect".makeFuncStub (/usr/local/go/src/reflect/asm_amd64.s:12) returned a non-nil error: lookup _dnsaddr.pl-sin.testnet.drand.sh on 127.0.0.53:53: read udp 127.0.0.1:33498->127.0.0.53:53: i/o timeout

这里的关键在于错误最后的 timeout,往前面追溯一点就可以发现是因为 127.0.0.53:53 这个 DNS 服务器没有正确解析 pl-sin.testnet.drand.sh 这个域名。所以只要修改系统的 DNS 服务器就可以解决这个问题。

解决方法

我当前的系统是 Ubuntu server 20.04,它默认采用 systemd-resolved 服务管理 DNS,手动修改 /etc/resolve.conf 文件,在系统重启后会自动被复写。

Ubuntu server 20.04 使用 netplan 管理 systemd-resolved 的配置,默认情况下在 /etc/netplan 目录中有一个针对当前网口的初始配置,例如:

/etc/netplan$ ls
00-installer-config.yaml

编辑初始的配置文件,为当前所使用 interface 添加 dns 配置即可,例如:

/etc/netplan$ sudo nano 00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp6s0:
      dhcp4: true
      nameservers:
        addresses: [114.114.114.114, 1.1.1.1]
  version: 2

注意:DNS 配置部分的 nameserversaddresses 都是复数形式

修改完成以后,执行命令上配置生效:

$ sudo netplan apply

查看 dns 配置状态:

$ systemd-resolve --status

Link 2 (enp6s0)
      Current Scopes: DNS            
DefaultRoute setting: yes            
       LLMNR setting: yes            
MulticastDNS setting: no             
  DNSOverTLS setting: no             
      DNSSEC setting: no             
    DNSSEC supported: no             
         DNS Servers: 114.114.114.114
                      1.1.1.1        
                      192.168.1.1    
                      fe80::1