SPO JAPAN GUILD
Leiosテストネット(SPO)

ノード構築(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 -y
sudo apt install curl jq git wget -y
curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --daemon

セッションの再起動

exec $SHELL

インストールを確認します。

nix --version
期待される表示例:
nix (Nix) 2.x.x

2. 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-daemon

3. cardano-node / cardano-cliの固定インストール

dev-testnet シェルが提供する cardano-node / cardano-cliNix 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 --version
期待される表示例:
cardano-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.zst
curl -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.zst

7. 起動スクリプトの作成

ノードの起動スクリプトを作成します。
(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.sh

8. 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
EOF

ExecStartについて

起動スクリプト内で ~/.nix-profile/bin/cardano-node絶対パスで呼び出しているため、systemd の最小 PATH 環境でも Nix 導入のバイナリを確実に起動できます。

/etc/systemd/system にユニットファイルをコピーし、権限を付与します。

sudo cp $NODE_HOME/cardano-node.service /etc/systemd/system/cardano-node.service
sudo chmod 644 /etc/systemd/system/cardano-node.service

サービスを有効化して起動します。

sudo systemctl daemon-reload
sudo systemctl enable --now cardano-node

9. 同期確認

ログを確認します。

journalctl -u cardano-node -f

同期状況を確認します。

cardano-cli query tip

初回起動時はDB検証が入るため表示されるまで少し時間かかります

期待される表示例:
{
  "block": 12345,
  "epoch": 42,
  "era": "Dijkstra",
  "slot": 678910,
  "syncProgress": "100.00"
}

syncProgress100.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/.bashrc

10. gLiveViewのインストール

cardano-node はログが流れる画面だけでは状態が分かりにくいため、ノードの状態を視覚的に確認できる gLiveView を導入します。

gLiveViewGuild Operators によるツールで、systemd サービスと連携してノードのステータスを表示します。

必要な依存パッケージをインストールし、スクリプト用ディレクトリを作成します。

mkdir -p $NODE_HOME/scripts
cd $NODE_HOME/scripts
sudo apt install bc tcptraceroute -y

gLiveView 本体と 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.sh

env ファイルの定義を、本マニュアルの構成(ポート 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_PORT3010
CONFIG${CNODE_HOME}/config.json
SOCKET${CNODE_HOME}/db/socket
PROM_PORT12798

任意の単語で起動できるようエイリアスを登録します。

echo "alias glive='cd $NODE_HOME/scripts; ./gLiveView.sh'" >> $HOME/.bashrc
source $HOME/.bashrc

gLiveView を起動します。

glive

次のステップ

同期が 100.00 に達したら、

  • このマニュアルでBPサーバーをセットアップする
  • BP サーバーが完了したらBP用キーの生成 に進んでください。

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。