gethというイーサリアムの実行クライアントの使い方を記載しています。
初回設定
- コンパイル済ファイルのダウンロードに必要なパッケージをインストールする。
sudo apt install curl
- Gethの公式サイトを開き、「Geth X.XX.XX for Linux」のボタンを右クリックし、URLをコピーする。
- Go Ethereumをダウンロードする。上記で取得した最新のURLを使用してください。
cd ~
curl -LO https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz
- 解凍して
/usr/local/bin
にコピーし、不要になったファイルを削除する。
tar xvf geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz
cd geth-linux-amd64-X.XX.XX-XXXXXXXX
sudo cp geth /usr/local/bin
cd /usr/local/bin
./geth version
cd ~
rm -r geth-linux-amd64-X.XX.XX-XXXXXXXX
rm geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz
- Go Ethereum実行用のユーザー
goeth
を作成する。
sudo useradd --no-create-home --shell /bin/false goeth
- ノードを保存するディレクトリを作成し、ユーザー
goeth
にアクセス許可を与える。
sudo mkdir -p /var/lib/goethereum
sudo chown -R goeth:goeth /var/lib/goethereum
- サーバー起動時にGo Ethereumが自動的に開始されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/geth.service
- 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=Go Ethereum
After=network.target
Wants=network.target
[Service]
User=goeth
Group=goeth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/geth \
--datadir /var/lib/goethereum \
--authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex
[Install]
WantedBy=default.target
※ExecStart=
のパラメータに--maxpeers 20
を追加すればデータの送受信を抑えられます。デフォルトは50に設定されています。低くしすぎると同期に支障をきたす場合があります。
- daemonをリロードし、Go Ethereumがちゃんと動くか確認する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
(active (running)
と緑で表示されれば OK、Q で閉じる)
sudo systemctl daemon-reload
sudo systemctl start geth
sudo systemctl status geth
- サーバー起動時にGo Ethereumが自動的に開始されるようにする。
sudo systemctl enable geth
- 同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu geth
※ビーコンチェーンが設定されていないと同期は開始しません。
※全ての取引データがダウンロードされ、同期が完了するまで1日程度かかります。ログにImported new chain segment
が表示されるようになれば同期完了です。同期完了までは次の手順に進まないでください。
バージョン更新
- サーバーのバージョンと公式サイトのバージョンを確認し、アップデートの必要があるか確認する。
cd /usr/local/bin
./geth version
- 実行中のgethを止め、止まっていることを確認する。
sudo systemctl stop geth
sudo systemctl status geth
- 初回設定の2~4を実施する。
- gethを起動する。
sudo systemctl start geth
- gethがちゃんと動いていることを確認する。
sudo journalctl -fu geth
プルーニング
gethの容量は時間とともに肥大化していきます。1か月に30GBほど増えていきますが殆どが不要なデータなので、定期的にそぎ落とし(プルーニング)が必要です。コンセンサスクライアントと連携しているgethをプルーニングする場合は、一時的に予備サーバーのgethと連携してください。
- 実行中のgethを止め、プルーニングを開始する。パソコンの処理性能によりますが3時間くらいかかります。
sudo systemctl stop geth
sudo geth snapshot prune-state --datadir /var/lib/goethereum
- ディレクトリ権限をserviceファイルに記載のユーザーに戻し、gethを起動する。
sudo chown -R goeth:goeth /var/lib/goethereum
sudo systemctl start geth
- gethが最新ブロックまで問題なく同期するか確認する。
(Imported new chain segment
でage=
が出なくなるまで)
sudo journalctl -fu geth