--- 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`