在区块链技术波澜壮阔的发展史中,以太坊无疑占据了举足轻重的地位,它不仅仅是一个加密货币,更是一个开创性的、去中心化的全球计算机平台,尽管如今Ubuntu 18.04、20.04乃至22.04已成为主流,但许多经典项目、遗留系统或特定开发环境仍然在稳定可靠的Ubuntu 16.04上运行,本文将为您详细介绍如何在Ubuntu 16.04操作系统上,从零开始搭建一个完整的以太坊经典节点,包括安装依赖、同步区块链以及运行核心客户端。


第一部分:准备工作与系统要求

在开始之前,请确保您的Ubuntu 16.04系统满足基本要求,搭建一个全节点需要消耗大量的系统资源,特别是磁盘空间和网络带宽。

  • 操作系统: Ubuntu 16.04 LTS (64位)
  • 硬件要求:
    • CPU: 双核及以上处理器
    • 内存: 至少 4GB RAM,推荐 8GB 或以上
    • 硬盘: 至少 1TB 可用空间(用于存储区块链数据,并预留增长空间),SSD硬盘能极大提升同步速度。
    • 网络: 稳定、高速的互联网连接,建议带宽在 10Mbps 以上。

第二部分:安装必要依赖

以太坊客户端(如Go-Ethereum)是用Go语言编写的,因此我们需要先安装Go语言环境以及其他一些编译工具。

  1. 更新系统包列表: 打开终端,首先更新您的系统软件包索引。

    sudo apt-get update
    sudo apt-get upgrade -y
  2. 安装编译工具和依赖库: 这些工具是编译Go程序所必需的。

    sudo apt-get install -y build-essential git libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
  3. 安装Go语言环境: 我们将下载并安装Go语言,以Go 1.19.5版本为例(这是一个稳定且广泛使用的版本,兼容性良好)。

    • 下载Go安装包:

      wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
    • 解压并移动到 /usr/local 目录:

      sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
    • 配置环境变量,使系统在任何地方都能识别Go命令,编辑 ~/.profile 文件:

      nano ~/.profile

      在文件末尾添加以下两行:

      export PATH=$PATH:/usr/local/go/bin
      export GOPATH=$HOME/go

      保存并退出(在nano中按 Ctrl X,然后按 Y,最后按 Enter)。

    • 使配置立即生效:

      source ~/.profile
    • 验证Go是否安装成功:

      go version

      如果看到类似 go version go1.19.5 linux/amd64 的输出,说明安装成功。

第三部分:安装与配置以太坊客户端(Go-Ethereum)

Go-Ethereum(简称geth)是以太坊最核心的官方客户端,我们将从源码编译安装它,以确保获得最新的稳定版本。

  1. 克隆geth源码仓库:

    git clone https://github.com/ethereum/go-ethereum.git
  2. 编译geth: 进入源码目录,并执行编译命令。make geth 会编译生成可执行文件。

    cd go-ethereum
    make geth

    这个过程可能需要10-30分钟,具体取决于您的CPU性能。

  3. 将geth添加到系统路径(可选但推荐): 为了方便在任何目录下运行 geth 命令,我们可以创建一个符号链接。

    sudo ln -s $(pwd)/build/bin/geth /usr/local/bin/geth
  4. 验证geth安装:

    geth version

    如果看到版本信息,说明geth已成功安装并可使用。

第四部分:首次运行与同步区块链

最关键的一步来了——同步以太坊主网的数据,这个过程被称为“同步”,节点需要下载并验证自创世区块以来的所有区块和交易数据。

  1. 创建数据目录: 为了不污染主目录,我们可以在 下创建一个 eth 目录来存放区块链数据。

    mkdir ~/eth
  2. 启动geth并开始同步: 在终端中执行以下命令来启动geth客户端,它会自动连接到以太坊网络并开始同步。

    geth --datadir ~/eth --syncmode fast --cache 4096 --rpc --rpcapi eth,net,web3,personal

    命令参数解释:

    • --datadir ~/eth: 指定数据存储目录为 ~/eth
    • --syncmode fast: 快速同步模式,这是目前推荐的方式,它会先下载区块头,然后再下载状态数据,比传统的“完整同步”快得多。
    • --cache 4096: 设置内存缓存大小为4GB,更大的缓存可以加速同步和查询过程,请根据您的内存大小调整。
    • --rpc: 启动JSON-RPC服务,这允许其他应用程序(如MetaMask、MyEtherWallet或通过Web3.js编写的DApp)与您的节点进行交互。
    • --rpcapi eth,net,web3,personal: 指定通过RPC可以调用的API接口。

首次同步的重要提示:

  • 耗时极长: 在普通家庭网络下,完成首次同步可能需要数天甚至数周的时间,请保持网络连接稳定。
  • 资源占用: 在同步过程中,CPU、内存和网络带宽都会被大量占用。
  • 保持终端开启: 在同步完成前,请保持终端窗口开启,如果关闭,geth进程会终止,同步将中断,下次启动时,它会从上次中断的地方继续。

第五部分:管理与控制您的节点

当geth成功启动并开始同步后,您会看到终端不断输出同步进度,如果您想与节点进行交互,可以打开一个新的终端窗口,使用geth attach命令进入其内置的JavaScript控制台。

geth attach ~/eth/geth.ipc

进入控制台后,您可以执行各种命令,

  • eth.blockNumber: 查看当前同步到的最新区块号。
  • eth.syncing: 查看同步状态,当返回 false 时,表示同步已完成。
  • personal.newAccount("your_password"): 创建一个新的以太坊账户。
  • exit: 退出控制台。