(最終更新2024年10月28日)
目次
Ubuntu Serverの初期設定
Ubuntu Serverをインストールし、SSHなどの初期設定をします。
- サーバーとなるパソコンにUbuntu Serverをインストールします。インストール後は、下記のコマンドでパッケージを最新の状態にします。
sudo apt update && sudo apt upgrade -y
- ethereumというユーザーを作成し、sudoというグループに入れてください。ユーザーが作成できたら下記のコマンドで一度ログアウトし、ethereumでログインし直してください。今後サーバーで作業をするときはこのユーザーを使用してください。
exit
- サーバーにアクセス可能なポートを制限します。他のパソコンから遠隔操作する時に使用する任意のポート番号の他に、30303と8545(実行クライアント)と9000と9001と5052(Lighthouse)と18550(MEV-Boost)を許可してください。
- グーグルのパブリックDNSを使用します。
- 再起動するたびにIPアドレスが変わると、他のパソコンからサーバーを遠隔操作するときに手間になるので、任意のIPアドレスに固定します。
- 他のパソコンからSSHでサーバーを遠隔操作できるようにします。ここからは他のパソコンからSSHで遠隔操作し、記事からコマンドをコピペしていったほうが楽です。
- Ubuntuのセキュリティアップデートが自動で適応されるようにします。
- ミリ秒単位で時刻が合っている必要があるためChronyをインストールします。
- ルーターによっては、ポート転送の設定をする必要があります。30303(実行クライアント)と9000と9001(Lighthouse)が固定したIPアドレスに転送されるように設定してください。
- (32GB以上のメモリを使用している場合のみ)
十分なメモリ容量があるため、スワップ処理は無効化した方が処理スピードが上がります。
- 初期設定完了後は念のためサーバーを再起動してください。
sudo reboot
JSON Web Token の作成
実行クライアントとコンセンサスクライアントが安全に通信するためのJSON Web Token(JWT)のファイルを作成します。
- JWT用のディレクトリを作る。
sudo mkdir -p /var/lib/jwtsecret
- opensslという暗号通信プロトコルで32バイトの16進数ファイルを作る。
openssl rand -hex 32 | sudo tee /var/lib/jwtsecret/jwt.hex > /dev/null
- 作成したファイルを開いて中身が入力されていることを確認する。(Ctrl + X で閉じる)
sudo nano /var/lib/jwtsecret/jwt.hex
実行クライアントの設定
イーサリアムの全トランザクションをダウンロードし、常に最新のトランザクションが同期されるようにします。1TB近くあるのでダウンロードに1日以上かかります。実行クライアントの中でGethが50%以上のシェアを持っているため、ネットワークの障害耐性を上げるためにNethermindを使用することを推奨します。Nethermindの方が初回同期のスピードが早く、データ容量も抑えられます。以下はNethermindの設定方法です。(Gethの設定方法はこちら)
- インストールに必要なパッケージをインストールする。
sudo apt install -y unzip curl libsnappy-dev libc6-dev libc6
- Nethermindの公式GitHubを開き、最新リリースのURLをコピーしてダウンロードする。
cd ~
curl -LO https://github.com/NethermindEth/nethermind/releases/download/X.XX.X/nethermind-X.XX.X-XXXXXXXX-linux-x64.zip
- 解凍して
/usr/local/bin
にコピーし、不要になったファイルを削除する。
unzip nethermind-X.XX.X-XXXXXXXX-linux-x64.zip -d nethermind
sudo cp -a nethermind /usr/local/bin/nethermind
rm nethermind-1.XX.X-XXXXXXXX-linux-x64.zip
rm -r nethermind
- Nethermind実行用のユーザー
nethermind
を作成し、ディレクトリ権限を与える。
sudo useradd --no-create-home --shell /bin/false nethermind
sudo mkdir -p /var/lib/nethermind
sudo chown -R nethermind:nethermind /var/lib/nethermind
- サーバー起動時にNethermindが自動的に開始されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/nethermind.service
- 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=Nethermind
After=network.target
Wants=network.target
[Service]
User=nethermind
Group=nethermind
Type=simple
Restart=always
RestartSec=5
WorkingDirectory=/var/lib/nethermind
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=/var/lib/nethermind"
ExecStart=/usr/local/bin/nethermind/nethermind \
--config mainnet \
--datadir /var/lib/nethermind \
--Sync.SnapSync true \
--Sync.AncientBodiesBarrier 11052984 \
--Sync.AncientReceiptsBarrier 11052984 \
--JsonRpc.JwtSecretFile /var/lib/jwtsecret/jwt.hex \
--JsonRpc.Enabled true \
--JsonRpc.Host 0.0.0.0 \
--Network.ActivePeersMaxCount 30 \
--Pruning.CacheMb 2000
[Install]
WantedBy=default.target
※ --Sync.SnapSync true
で高速同期が可能なsnap syncを有効化しています。
※ --sync.AncientBodiesBarrier
と--sync.AncientReceiptsBarrier
はどのブロックまで同期するか指定しています。11052984はビーコンチェーンが開始したブロックです。
※ --Network.ActivePeersMaxCount 30
を追加すると、通信先のノード数を減らして通信量を抑えることができます。標準は100です。
※ メモリを多く搭載している場合は、Nethermindの利用するメモリ容量を--Pruning.CacheMb 2000
を追加して増やしてあげるといいです。標準は1024です。高くしすぎると、Pruning処理中にAttestationに影響する場合があります。
Holeskyテストネット用
[Unit]
Description=Nethermind
After=network.target
Wants=network.target
[Service]
User=nethermind
Group=nethermind
Type=simple
Restart=always
RestartSec=5
WorkingDirectory=/var/lib/nethermind
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=/var/lib/nethermind"
ExecStart=/usr/local/bin/nethermind/nethermind \
--config holesky \
--datadir /var/lib/nethermind \
--Sync.SnapSync true \
--JsonRpc.JwtSecretFile /var/lib/jwtsecret/jwt.hex \
--JsonRpc.Enabled true \
--JsonRpc.Host 0.0.0.0 \
--Network.ActivePeersMaxCount 30 \
--Pruning.CacheMb 2000
[Install]
WantedBy=default.target
- daemonをリロードし、Nethermindを起動する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
sudo systemctl daemon-reload
sudo systemctl start nethermind
- サーバー再起動時にNethermindが自動的に開始されるようにする。
※サーバーをシャットダウンまたは再起動する際は、必ずsudo systemctl stop nethermind
でnethermindを正常に終了させてからにしてください。
sudo systemctl enable nethermind
- ログで同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu nethermind
※ビーコンノードが設定されていないと同期は開始しません。
※ログにOld Headers
やOld Receipts
が表示されなくなれば同期完了です。
アップデート方法
サーバーのバージョンと公式GitHubのバージョンを確認し、アップデートの必要があるか確認する。
/usr/local/bin/nethermind/nethermind --version
- 最新リリースのURLをコピーしてダウンロードする。
cd ~
curl -LO https://github.com/NethermindEth/nethermind/releases/download/X.XX.X/nethermind-X.XX.X-XXXXXXXX-linux-x64.zip
- 実行中のNethermindを止め、古いバージョンを削除し、最新のバージョンを
/usr/local/bin
にコピーする。
sudo systemctl stop nethermind
sudo rm -r /usr/local/bin/nethermind
unzip nethermind-X.XX.X-XXXXXXXX-linux-x64.zip -d nethermind
sudo cp -a nethermind /usr/local/bin/nethermind
rm nethermind-1.XX.X-XXXXXXXX-linux-x64.zip
rm -r nethermind
- バージョンがアップデートされていることを確認し、Nethermindを起動する。
/usr/local/bin/nethermind/nethermind --version
sudo systemctl start nethermind
- Nethermindが正常に動いていることを確認する。
sudo journalctl -fu nethermind
コンセンサスクライアントの同期
バリデーターに仕事を割り振るためのビーコンチェーンをダウンロードし、常に同期されるようにします。この手順ではビーコンノードとバリデーターに「Lighthouse」というクライアントを採用しています。
- 最新のLighthouseのバイナリをダウンロードする。最新バージョンのURLは公式GitHubから取得してください。
cd ~
curl -LO https://github.com/sigp/lighthouse/releases/download/vX.X.X/lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- 解凍して
/usr/local/bin
にコピーし、不要になったファイルを削除する。
tar xvf lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
sudo cp lighthouse /usr/local/bin
/usr/local/bin/lighthouse --version
rm lighthouse
rm lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- ビーコンノード実行用のユーザー
lighthousebeacon
を作成する。
sudo useradd --no-create-home --shell /bin/false lighthousebeacon
- ビーコンチェーンを保存するディレクトリを作成し、ユーザー
lighthousebeacon
に権限を付与する。
sudo mkdir -p /var/lib/lighthouse/beacon
sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse/beacon
- サーバー起動時にビーコンノードが自動的に開始されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/lighthousebeacon.service
- 以下を入力して、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=Lighthouse Beacon Node
Wants=network-online.target
After=network-online.target
[Service]
User=lighthousebeacon
Group=lighthousebeacon
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse bn \
--network mainnet \
--datadir /var/lib/lighthouse \
--http \
--http-address 0.0.0.0 \
--http-allow-origin "*" \
--execution-endpoint http://localhost:8551 \
--checkpoint-sync-url https://sync-mainnet.beaconcha.in/ \
--execution-jwt /var/lib/jwtsecret/jwt.hex \
--builder http://localhost:18550
[Install]
WantedBy=multi-user.target
Holeskyテストネット用
[Unit]
Description=Lighthouse Beacon Node
Wants=network-online.target
After=network-online.target
[Service]
User=lighthousebeacon
Group=lighthousebeacon
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse bn \
--network holesky \
--datadir /var/lib/lighthouse \
--http \
--http-address 0.0.0.0 \
--http-allow-origin "*" \
--execution-endpoint http://localhost:8551 \
--checkpoint-sync-url https://holesky.beaconstate.info \
--execution-jwt /var/lib/jwtsecret/jwt.hex \
--builder http://localhost:18550
[Install]
WantedBy=multi-user.target
- daemonをリロードし、ビーコンノードを起動する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
sudo systemctl daemon-reload
sudo systemctl start lighthousebeacon
- サーバー再起動時にビーコンノードが自動的に開始されるようにする。
※サーバーをシャットダウンまたは再起動する際は、必ずsudo systemctl stop lighthousebeacon
でビーコンノードを正常に終了させてからにしてください。
sudo systemctl enable lighthousebeacon
- 同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu lighthousebeacon
※ Checkpoint syncをした場合はログでINFO Starting checkpoint sync
が表示されると数分間ログに変化がない状態になります。そのうちINFO Syncing
が表示され、定期的にInfo Synced
が表示されるようになればビーコンノードの最低限の同期が完了しています。実行クライアントが同期されていないとバリデーターが仕事をしてくれないため、両方完全に同期されるまで待ちます。
アップデート方法
- サーバーのバージョンと公式GitHubのバージョンを確認し、アップデートの必要があるか確認する。
/usr/local/bin/lighthouse --version
- 最新のLighthouseをダウンロードする。最新バージョンのURLは公式GitHubから取得してください。
cd ~
curl -LO https://github.com/sigp/lighthouse/releases/download/vX.X.X/lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- ビーコンノードを止める。
sudo systemctl stop lighthousebeacon
# バリデーター設定済みであればバリデーターも
sudo systemctl stop lighthousevalidator
- 解凍して
/usr/local/bin
にコピーし、不要になったファイルを削除する。
tar xvf lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
sudo cp lighthouse /usr/local/bin
rm lighthouse
rm lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- バージョンがアップデートされていることを確認し、ビーコンノードを起動する。
/usr/local/bin/lighthouse --version
sudo systemctl start lighthousebeacon
# バリデーター設定済みであればバリデーターも
sudo systemctl start lighthousevalidator
- ビーコンノードが正常に動いていることを確認する。
sudo journalctl -fu lighthousebeacon
MEV-Boostの設定
ブロック生成時にブロック内に含めるトランザクションを外部に選定してもらう機能です。使用するとブロック生成報酬が上がります。
- 最新のMEV-boostのバイナリをダウンロードする。MEV-boostの最新バージョンのURLは公式サイトから取得してください。
cd ~
curl -LO https://github.com/flashbots/mev-boost/releases/download/vX.X.X/mev-boost_X.X.X_linux_amd64.tar.gz
- 解凍して
/usr/local/bin
にコピーし、不要になったファイルを削除する。
tar xvf mev-boost_X.X.X_linux_amd64.tar.gz
sudo cp ~/mev-boost /usr/local/bin
rm mev-boost_X.X.X_linux_amd64.tar.gz
rm LICENSE
rm README.md
rm mev-boost
- MEV-boost実行用のユーザーを作成する。
sudo useradd --no-create-home --shell /bin/false mev
- サーバー起動時にmev-boostが自動的に実行されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/mev-boost.service
- 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=MEV-boost
Wants=network-online.target
After=network-online.target
[Service]
User=mev
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/mev-boost \
-mainnet \
-addr "0.0.0.0:18550" \
-relay-check \
-relays https://0xa1559ace749633b997cb3fdacffb890aeebdb0f5a3b6aaa7eeeaf1a38af0a8fe88b9e4b1f61f236d2e64d95733327a62@relay.ultrasound.money,https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net,https://0xa7ab7a996c8584251c8f925da3170bdfd6ebc75d50f5ddc4050a6fdc77f2a3b5fce2cc750d0865e05d7228af97d69561@agnostic-relay.net
[Install]
WantedBy=multi-user.target
※より多くの報酬が得られるrelayがブロック生成時に選ばれます。主要なrelayは上記コードにセット済みですが、変更する場合はここに一覧があります。
※ ソロステーキングであれば、-min-bid 0.05
を追加するとrelayからの最高報酬が0.05以下の際にMEV-Boostを使用せずにローカルの実行クライアントでブロックを生成します。報酬をほとんど下げずに、ネットワークの検閲耐性を上げることができます。LSDのバリデーター運用だと-min-bid
を使うと怒られます。
Holeskyテストネット用
[Unit]
Description=MEV-boost
Wants=network-online.target
After=network-online.target
[Service]
User=mev
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/mev-boost \
-holesky \
-addr "0.0.0.0:18550" \
-relay-check \
-relays https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@boost-relay-holesky.flashbots.net
[Install]
WantedBy=multi-user.target
systemd
をリロードし、MEV-boostを起動する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
sudo systemctl daemon-reload
sudo systemctl start mev-boost
- サーバー再起動時にMEV-boostが自動的に開始されるようにする。
sudo systemctl enable mev-boost
アップデート方法
- 実行中のMEV-boostを停止する。
sudo systemctl stop mev-boost
- 最新のMEV-boostのバイナリをダウンロードして置き換える。MEV-boostの最新バージョンのURLは公式サイトから取得してください。
cd ~
curl -LO https://github.com/flashbots/mev-boost/releases/download/vX.X.X/mev-boost_X.X.X_linux_amd64.tar.gz
tar xvf mev-boost_X.X.X_linux_amd64.tar.gz
rm mev-boost_X.X.X_linux_amd64.tar.gz
rm LICENSE
rm README.md
sudo cp ~/mev-boost /usr/local/bin
rm mev-boost
- MEV-boostを再開する。
sudo systemctl start mev-boost