---
# System prepended metadata

title: 在 Ubuntu 安裝 Go-Ethereum (Geth)
tags: [' Cryptocurrency', Notes]

---

---
lang: zh-tw
tags: Notes, Cryptocurrency
date: 20220216
robots: noindex, nofollow
license: GPL-3.0
---

在 Ubuntu 安裝 Go-Ethereum (Geth)
===
Environment
---
- Hardware
    - Raspberry Pi 4B + 4GB RAM + 256 GB micro SD card
    - Without overclocking CPU frequency
- Software
    - Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-1050-raspi aarch64)
    - Git 2.25.1
    - 特別注意
        - Go 1.17.7 (linux/arm64)
        - GCC 10.3.0
        - G++ 10.3.0
    - 由於 Ubuntu 預設的 GCC/G++ 可能很老，文末有安裝新版的說明
- 本文撰寫於 2022-02-16，步驟、網址可能會隨實際情形有所改變


方法一：Binary Executable
---
- 直接拿官網上面幫你 build 好的可執行檔來使用
- 「Geth」和「Geth & Tools」的差別是在有沒有包含一些其他的 debug、開發工具

1. 前往 [Go-Ethereum](https://geth.ethereum.org/) 官網，點擊 [Downloads](https://geth.ethereum.org/downloads/) 頁面
2. 選擇適合的作業系統與架構，例如：Linux 分類底下的 ARM64
3. 把檔案下載下來，記得驗證一下 MD5 checksum
    - 假設檔名叫「geth-linux-arm64-1.10.15-8be800ff.tar.gz」，方便後續描述
4. 確定一下有沒有舊版未刪掉，如果有就刪掉整個資料夾
    - `$ sudo rm -r /usr/local/bin/geth`
5. 解壓縮到 `/usr/local/bin`
    - `$ sudo tar -C /usr/local/bin -xzf geth-linux-arm64-1.10.15-8be800ff.tar.gz`
6. 把資料夾名稱改回美美的樣子
    - `$ sudo mv /usr/local/bin/geth-linux-arm64-1.10.15-8be800ff /usr/local/bin/geth`
7. 增加環境變數（第一次安裝才需要）
    - 應用到某使用者帳戶的單次且單個 SSH 視窗
        - `$ export PATH="$PATH:/usr/local/bin/geth"`
    - 應用到某使用者帳戶的全部 SSH 視窗
        - 編輯 `$HOME/.bashrc` 文件，增加一行內容 `export PATH="$PATH:/usr/local/bin/geth"`
        - 在終端機輸入 `$ source $HOME/.bashrc`
        - 重開一個終端機
8. 測試有沒有正確安裝成功
    - `$ geth version`
    - 應該要印出類似這樣的結果
    ```
    Geth
    Version: 1.10.15-stable
    Git commit: ... (以下省略)
    ```
- 附註
    - 修改 `/etc/bashrc` 檔案，可以達成讓整台電腦的所有使用者都受影響
    - 修改 `/etc/bashrc` 檔案結束之後不必 `$ source` 而會自動應用；後悔想改回去的話，則需要把檔案恢復原狀後再搭配重開機


方法二：Build from Source
---
1. 前往 GitHub [頁面](https://github.com/ethereum/go-ethereum)下載 source code release 或直接 git clone 整個軟體庫
    - 假設採取下載 source code 壓縮包，叫做「go-ethereum-1.10.15.tar.gz」，方便後續描述
2. 解壓縮壓縮檔
    - `$ tar -xzf go-ethereum-1.10.15.tar.gz`
3. 進入解壓縮後的資料夾
4. 開始 build 檔案，注意我們要指定 gcc/g++ 版本至少有 10.3.0 以上，所以不能只 make 東西
    - 以下指令擇一執行即可
    - `$ make geth CC=gcc-10 CPP=g++-10 CXX=g++-10 LD=g++-10`
    - `$ make all CC=gcc-10 CPP=g++-10 CXX=g++-10 LD=g++-10`
        - 相當於 build 「Geth & Tools」
5. Build 完成的檔案放在 `./build/bin` 當中
6. 把 binary executable 搬到合適的位置然後必要的話可以改一改環境變數
7. 測試有沒有正確安裝成功
    - `$ geth version`
    - 應該要印出類似這樣的結果
    ```
    Geth
    Version: 1.10.15-stable
    Git commit: ... (以下省略)
    ```


附錄：安裝 Go
---
1. 前往官網下載壓縮檔：[這個](https://go.dev/doc/install)或[這個](https://go.dev/dl/)，記得用 checksum 檢查下載的檔案
    - 假設檔名叫「go1.17.7.linux-arm64.tar.gz」，方便後續描述
2. 解壓縮並搬到適當位置
    - `$ sudo rm -r /usr/local/go && sudo tar -C /usr/local -xzf go1.17.7.linux-arm64.tar.gz`
3. 新增 .go 資料夾，當作 ??? 使用（第一次安裝才需要）
    - 我習慣新增在自己帳戶底下
    1. `$ cd $HOME`
    2. `$ mkdir .go`
5. 增加環境變數（第一次安裝才需要）
    - 應用到某使用者帳戶的單次且單個 SSH 視窗
        - `$ export PATH="$PATH:/usr/local/go/bin"`
        - `$ export GOPATH="$HOME/.go"`
    - 應用到某使用者帳戶的全部 SSH 視窗
        - 編輯 `$HOME/.bashrc` 文件，增加二行內容
            - `$ export PATH="$PATH:/usr/local/go/bin"`
            - `$ export GOPATH="$HOME/.go"`
        - 在終端機輸入 `$ source $HOME/.bashrc`
        - 重開一個終端機
6. 測試有沒有正確安裝成功
    - `$ go version`
    - 應該要印出類似這樣的結果
    ```
    go version go1.17.7 linux/arm64
    ```
    - `$ echo $GOPATH`
    - 應該要印出類似這樣的結果
    ```
    (一個非空的絕對路徑，吻合剛才建立 .go 資料夾的位置)
    ```


附錄：安裝新版 GNU C/C++ Compiler
---
- 經過測試，要使用至少 10.3.0 版的 GCC/G++，才能成功 build geth project
1. 增加 PPA
    - `$ sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa`
2. 更新一下 APT 資料庫
    - `$ sudo apt update`
3. 安裝套件且移除可能已不需要的舊套件
    - `$ sudo apt install gcc-10 g++-10`
    - `$ sudo apt autoremove`
4. 測試一下版本有沒有變成至少 10.3.0 以上
    - `$ gcc-10 --version`