ノード構築(Nix)
リレー・BP とも、ノードの基本構築手順は共通です。
リレーサーバー・BPサーバーの両方で本ページの手順を実施してください。
まずは両ノードともリレーとして起動してチェーンを同期させ、BP は後の手順(BP用キーの生成)でブロック生成モードへ切り替えます。
Nixを使う理由
- Musashi-Testnet は仕様やバージョンが都度変更される可能性があるため、依存関係を含む
cardano-node/cardano-cliをIOGキャッシュから一括導入でき、作業工数を軽減できます。 nix profile installで 固定パスにインストールするため、再現性を保ちつつ systemd で安定稼働させられます。- 当構成はメインネット稼働時に大幅に変更される可能性があります。
1. Nixのインストール
依存パッケージと Nix をインストールします。
sudo apt update && sudo apt upgrade -ysudo apt install curl jq git wget -ycurl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --daemonセッションの再起動
exec $SHELLインストールを確認します。
nix --versionnix (Nix) 2.x.x2. flakesの有効化
echo "experimental-features = nix-command flakes" | sudo tee -a /etc/nix/nix.conf
echo "accept-flake-config = true" | sudo tee -a /etc/nix/nix.conf
echo "trusted-users = $(whoami)" | sudo tee -a /etc/nix/nix.conf
sudo systemctl restart nix-daemon3. cardano-node / cardano-cliの固定インストール
dev-testnet シェルが提供する cardano-node / cardano-cli の Nix store 上の実体パスを取得します。
NODE_STORE=$(nix develop github:input-output-hk/ouroboros-leios#dev-testnet \
--command bash -c 'dirname "$(dirname "$(readlink -f "$(command -v cardano-node)")")"')初回実行時
nixキャッシュダウンロードのため初回実行時は数分かかります
CLI_STORE=$(nix develop github:input-output-hk/ouroboros-leios#dev-testnet \
--command bash -c 'dirname "$(dirname "$(readlink -f "$(command -v cardano-cli)")")"')echo "cardano-node: $NODE_STORE"
echo "cardano-cli : $CLI_STORE"cardano-node: /nix/store/xxxx...-cardano-node-...
cardano-cli : /nix/store/yyyy...-cardano-cli-...取得した store パスを nix profile install でプロファイルに固定インストールします。
nix profile install "$NODE_STORE"
[ "$CLI_STORE" != "$NODE_STORE" ] && nix profile install "$CLI_STORE"このコマンドの効果
~/.nix-profile/bin/cardano-node/~/.nix-profile/bin/cardano-cliという安定したパスが作成されます。- プロファイルには gc-root が張られるため、
nix-collect-garbageでバイナリが削除されません。 - systemd からはこの固定パスを参照します(
nix developを実行時に評価しません)。
バージョンを確認します。
cardano-node --version
cardano-cli --versioncardano-node 11.0.1.164 - linux-x86_64 - ghc-9.6
git rev db5373ea6a6f79b398b468d2e04ce43eafcf90d0
cardano-cli 11.0.0.0 - linux-x86_64 - ghc-9.6
git rev db5373ea6a6f79b398b468d2e04ce43eafcf90d0末尾に
164が含まれていれば Leios プロトタイプ用ビルドです。
4. 作業ディレクトリと環境変数の設定
echo 'export NODE_HOME=$HOME/cnode' >> $HOME/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=164' >> $HOME/.bashrc
echo 'export CARDANO_NODE_SOCKET_PATH=$HOME/cnode/db/socket' >> $HOME/.bashrc
source $HOME/.bashrc
mkdir -p "$NODE_HOME"5. 設定ファイルの取得
設定ファイル(config.json / topology.json / 各ジェネシスファイル)を取得します。
cd "$NODE_HOME"
git clone --depth 1 https://github.com/input-output-hk/ouroboros-leios
cp ouroboros-leios/testnet/config/* "$NODE_HOME"/6. DBスナップショットの復元
ジェネシスからのフル同期には長い時間がかかります。
公開されている DBスナップショット を $NODE_HOME/db に復元することで、同期時間を大幅に短縮できます。
復元はノード起動前に実施してください
DBスナップショットの復元は、ノードを一度も起動していない状態($NODE_HOME/db が空の状態)で行ってください。
既にノードを起動して DB が作成されている場合は、先に停止し db を空にしてから復元します。
zstdを導入します。
sudo apt install zstd -yスナップショットをダウンロードします。
cd "$NODE_HOME"
curl -L -o leios.chain.tar.zst https://leios1-rel-a-1.play.dev.cardano.org/leios.chain.tar.zstcurl -L -o leios.leiosdb.tar.zst https://leios3-rel-c-1.play.dev.cardano.org/leios.leiosdb.tar.zst$NODE_HOMEに展開します。
tar -I zstd -xvf leios.chain.tar.zst -C "$NODE_HOME"
tar -I zstd -xvf leios.leiosdb.tar.zst -C "$NODE_HOME"cd "$NODE_HOME"
mv db-leios db展開後、不要になったアーカイブを削除します。
rm -f "$NODE_HOME"/leios.chain.tar.zst "$NODE_HOME"/leios.leiosdb.tar.zst7. 起動スクリプトの作成
ノードの起動スクリプトを作成します。
(BP の場合、ブロック生成キーは BP用キーの生成 で作成後に追記します)
cat > $NODE_HOME/startNode.sh << EOF
#!/bin/bash
DIRECTORY=${NODE_HOME}
PORT=3010
HOSTADDR=0.0.0.0
TOPOLOGY=\${DIRECTORY}/topology.json
DB_PATH=\${DIRECTORY}/db
SOCKET_PATH=\${DIRECTORY}/db/socket
CONFIG=\${DIRECTORY}/config.json
${HOME}/.nix-profile/bin/cardano-node run --topology \${TOPOLOGY} --database-path \${DB_PATH} --socket-path \${SOCKET_PATH} --host-addr \${HOSTADDR} --port \${PORT} --config \${CONFIG}
EOF
chmod +x $NODE_HOME/startNode.sh8. systemdサービスの作成
ユニットファイルを作成します。
cat > $NODE_HOME/cardano-node.service << EOF
# The Cardano Leios Node Service (part of systemd)
# file: /etc/systemd/system/cardano-node.service
[Unit]
Description = Cardano Leios Node
Wants = network-online.target
After = network-online.target
[Service]
User = ${USER}
Type = simple
WorkingDirectory= ${NODE_HOME}
ExecStart = /bin/bash -c '${NODE_HOME}/startNode.sh'
KillSignal = SIGINT
RestartKillSignal= SIGINT
TimeoutStopSec = 300
LimitNOFILE = 32768
Restart = always
RestartSec = 5
StandardOutput = syslog
StandardError = syslog
SyslogIdentifier= cardano-node
[Install]
WantedBy = multi-user.target
EOFExecStartについて
起動スクリプト内で ~/.nix-profile/bin/cardano-node を絶対パスで呼び出しているため、systemd の最小 PATH 環境でも Nix 導入のバイナリを確実に起動できます。
/etc/systemd/system にユニットファイルをコピーし、権限を付与します。
sudo cp $NODE_HOME/cardano-node.service /etc/systemd/system/cardano-node.servicesudo chmod 644 /etc/systemd/system/cardano-node.serviceサービスを有効化して起動します。
sudo systemctl daemon-reloadsudo systemctl enable --now cardano-node9. 同期確認
ログを確認します。
journalctl -u cardano-node -f同期状況を確認します。
cardano-cli query tip初回起動時はDB検証が入るため表示されるまで少し時間かかります
{
"block": 12345,
"epoch": 42,
"era": "Dijkstra",
"slot": 678910,
"syncProgress": "100.00"
}
syncProgressが100.00になればフル同期完了です。
便利なエイリアス設定
echo "alias cnode='journalctl -u cardano-node -f'" >> $HOME/.bashrc
echo "alias cnstart='sudo systemctl start cardano-node'" >> $HOME/.bashrc
echo "alias cnstop='sudo systemctl stop cardano-node'" >> $HOME/.bashrc
echo "alias cnrestart='sudo systemctl restart cardano-node'" >> $HOME/.bashrc
echo alias cnreload='"pkill -HUP cardano-node"' >> $HOME/.bashrc
source $HOME/.bashrc10. gLiveViewのインストール
cardano-node はログが流れる画面だけでは状態が分かりにくいため、ノードの状態を視覚的に確認できる gLiveView を導入します。
gLiveViewは Guild Operators によるツールで、systemd サービスと連携してノードのステータスを表示します。
必要な依存パッケージをインストールし、スクリプト用ディレクトリを作成します。
mkdir -p $NODE_HOME/scripts
cd $NODE_HOME/scripts
sudo apt install bc tcptraceroute -ygLiveView 本体と env ファイルをダウンロードします。
curl -s -o gLiveView.sh https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/gLiveView.sh
curl -s -o env https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/env
chmod 755 gLiveView.shenv ファイルの定義を、本マニュアルの構成(ポート 3010)に合わせて修正します。
sed -i $NODE_HOME/scripts/env \
-e '1,73s!#CNODE_HOME="/opt/cardano/cnode"!CNODE_HOME="'${NODE_HOME}'"!' \
-e '1,73s!#CNODE_PORT=6000!CNODE_PORT=3010!' \
-e '1,73s!#UPDATE_CHECK="Y"!UPDATE_CHECK="N"!' \
-e '1,73s!#CONFIG="${CNODE_HOME}/files/config.json"!CONFIG="${CNODE_HOME}/config.json"!' \
-e '1,73s!#SOCKET="${CNODE_HOME}/sockets/socket"!SOCKET="${CNODE_HOME}/db/socket"!' \
-e '1,73s!#PROM_HOST=127.0.0.1!PROM_HOST=127.0.0.1!' \
-e '1,73s!#PROM_PORT=12798!PROM_PORT=12798!'修正される定義
| 項目 | 値 |
|---|---|
CNODE_HOME | $NODE_HOME($HOME/cnode) |
CNODE_PORT | 3010 |
CONFIG | ${CNODE_HOME}/config.json |
SOCKET | ${CNODE_HOME}/db/socket |
PROM_PORT | 12798 |
任意の単語で起動できるようエイリアスを登録します。
echo "alias glive='cd $NODE_HOME/scripts; ./gLiveView.sh'" >> $HOME/.bashrc
source $HOME/.bashrcgLiveView を起動します。
glive次のステップ
同期が 100.00 に達したら、
- このマニュアルでBPサーバーをセットアップする
- BP サーバーが完了したら … BP用キーの生成 に進んでください。
Last updated on