以太坊作为全球领先的智能合约平台,吸引了无数开发者和爱好者,在Ubuntu 20.04 LTS这一稳定且

系统准备与更新
在开始配置之前,确保你的Ubuntu 20.04系统处于最新状态,这有助于避免潜在的兼容性问题并安装必要的软件包。
-
更新系统包列表:
sudo apt update
-
升级已安装的包(可选,但推荐):
sudo apt upgrade -y
-
安装必要的工具: 我们需要一些基础工具,如
curl(下载文件)、wget(备用下载工具)、git(版本控制,有时需要)以及build-essential(编译工具,如果从源码编译)。sudo apt install -y curl wget git build-essential
安装Go语言环境(Geth编译与运行依赖)
虽然许多预编译的Geth二进制文件可以直接下载,但了解如何从源码编译Geth(或者运行其他Go开发的以太坊工具)是非常有用的,我们首先安装Go语言环境。
-
下载Go最新版本(请访问Go官方下载页面获取最新版本号,此处以1.19.5为例):
wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
-
解压Go安装包到/usr/local:
sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
-
配置Go环境变量: 编辑
~/.profile文件(或~/.bashrc,取决于你的shell配置):nano ~/.profile
在文件末尾添加以下内容:
export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
保存并退出(在nano中按
Ctrl+X,然后Y,回车)。 -
使环境变量生效:
source ~/.profile
-
验证Go安装:
go version
如果显示Go版本号,则表示安装成功。
安装并配置以太坊客户端(以Geth为例)
Geth是以太坊官方的Go语言实现客户端,功能强大,常用作全节点、矿工或开发工具。
-
下载Geth预编译二进制文件(推荐方式): 访问Geth GitHub Releases页面,选择适合Ubuntu 20.04 (Linux AMD64)的最新稳定版本下载,或者直接使用
curl:# 请替换为最新的版本号 curl -LO https://github.com/ethereum/go-ethereum/releases/download/v1.13.6/geth-alltools-linux-amd64-1.13.6-4e868c5e.tar.gz
如果你希望只下载
geth本身,可以单独下载:# 示例,版本号请自行更新 curl -LO https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.6-4e868c5e.tar.gz
-
解压下载的文件:
# 假设下载的是alltools版本 tar -xzf geth-alltools-linux-amd64-1.13.6-4e868c5e.tar.gz
-
将Geth添加到系统PATH: 解压后,你会得到一个
geth-alltools-linux-amd64-1.13.6-4e868c5e(或类似名称)的目录,里面有geth等可执行文件。# 进入解压目录 cd geth-alltools-linux-amd64-1.13.6-4e868c5e # 将可执行文件复制到/usr/local/bin sudo cp geth /usr/local/bin/ # (可选)如果你下载的是alltools,其他工具如`abigen`, `bootnode`, `evm`, `rlpdump`等也可以一并复制 sudo cp abigen bootnode evm rlpdump /usr/local/bin/
-
验证Geth安装:
geth version
如果显示Geth的版本号和commit信息,则安装成功。
初始化以太坊节点(创世区块)
运行一个全节点需要一个创世区块配置文件,你可以使用官方的创世配置,或者创建自己的。
-
创建一个目录用于存放以太坊数据:
mkdir -p ~/ethereum/data
-
获取官方创世配置文件(主网): Geth已经内置了主网的创世配置,我们可以直接使用一个默认的配置来初始化,或者从一个JSON文件初始化,这里我们使用一个通用的方法,直接运行
geth init并指定一个创世文件,如果你没有自定义创世文件,Geth会使用默认的。更常见的做法是如果你要连接到测试网(如Ropsten, Goerli)或私有链,才需要特定的创世JSON文件,对于主网,可以跳过手动创世文件步骤,直接启动节点时会自动处理。
但为了演示,我们创建一个简单的创世文件(例如用于私有链):
# 创建一个名为genesis.json的文件 nano ~/ethereum/genesis.json
输入以下内容(这是一个非常基础的创世配置示例):
{ "config": { "chainId": 15, // 私有链ID,自定义 "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x4000", "extraData": "", "gasLimit": "0xffffffff", "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }保存并退出。
-
使用创世文件初始化节点:
geth --datadir ~/ethereum/data init ~/ethereum/genesis.json
如果看到"Successfully initialized new genesis chain"等提示,则表示初始化成功。
启动以太坊节点
根据你的需求,可以以不同模式启动Geth节点。
-
启动全同步节点(主网): 这会下载并同步整个以太坊主网区块链,需要大量的存储空间(几百GB)和时间。
geth --datadir ~/ethereum/data --syncmode full --http --http.addr "0.0.0.0" --http.port 8545 --http.api eth,net,web3,personal
--datadir: 指定数据存储目录。--syncmode full: 完整同步模式。--http: 启动HTTP-RPC服务。--http.addr "0.0.0.0": 允许任何IP连接。--http.port 8545: HTTP-RPC服务端口。--http.api: 暴露的API接口。
-
启动快速同步节点(主网,推荐): 快速同步模式只下载区块头和状态数据,速度更快。
geth --datadir ~/ethereum/data --syncmode snap --http --http.addr "0.0.0.0" --http.port 8545 --http.api eth,net,web3,personal
--syncmode snap: