在区块链技术波澜壮阔的发展史中,以太坊无疑占据了举足轻重的地位,它不仅仅是一个加密货币,更是一个开创性的、去中心化的全球计算机平台,尽管如今Ubuntu 18.04、20.04乃至22.04已成为主流,但许多经典项目、遗留系统或特定开发环境仍然在稳定可靠的Ubuntu 16.04上运行,本文将为您详细介绍如何在Ubuntu 16.04操作系统上,从零开始搭建一个完整的以太坊经典节点,包括安装依赖、同步区块链以及运行核心客户端。
在开始之前,请确保您的Ubuntu 16.04系统满足基本要求,搭建一个全节点需要消耗大量的系统资源,特别是磁盘空间和网络带宽。
以太坊客户端(如Go-Ethereum)是用Go语言编写的,因此我们需要先安装Go语言环境以及其他一些编译工具。

更新系统包列表: 打开终端,首先更新您的系统软件包索引。
sudo apt-get update sudo apt-get upgrade -y
安装编译工具和依赖库: 这些工具是编译Go程序所必需的。
sudo apt-get install -y build-essential git libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
安装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(简称geth)是以太坊最核心的官方客户端,我们将从源码编译安装它,以确保获得最新的稳定版本。

克隆geth源码仓库:
git clone https://github.com/ethereum/go-ethereum.git
编译geth: 进入源码目录,并执行编译命令。make geth 会编译生成可执行文件。
cd go-ethereum make geth
这个过程可能需要10-30分钟,具体取决于您的CPU性能。
将geth添加到系统路径(可选但推荐): 为了方便在任何目录下运行 geth 命令,我们可以创建一个符号链接。
sudo ln -s $(pwd)/build/bin/geth /usr/local/bin/geth
验证geth安装:
geth version
如果看到版本信息,说明geth已成功安装并可使用。
最关键的一步来了——同步以太坊主网的数据,这个过程被称为“同步”,节点需要下载并验证自创世区块以来的所有区块和交易数据。
创建数据目录: 为了不污染主目录,我们可以在 下创建一个 eth 目录来存放区块链数据。
mkdir ~/eth
启动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接口。首次同步的重要提示:
当geth成功启动并开始同步后,您会看到终端不断输出同步进度,如果您想与节点进行交互,可以打开一个新的终端窗口,使用geth attach命令进入其内置的JavaScript控制台。
geth attach ~/eth/geth.ipc
进入控制台后,您可以执行各种命令,
eth.blockNumber: 查看当前同步到的最新区块号。eth.syncing: 查看同步状态,当返回 false 时,表示同步已完成。personal.newAccount("your_password"): 创建一个新的以太坊账户。exit: 退出控制台。