SPO JAPAN GUILD
ステークプール構築

ノードセットアップ

インストールバージョン

NodeCLIGHCCabalCNCLI
11.0.111.0.0.09.6.73.12.1.06.7.0

1. 依存関係インストール

パッケージを更新し、Ubuntuを最新の状態に保ちます。

sudo apt update && sudo apt upgrade -y

依存関係をインストールします。

sudo apt install bc curl htop nano needrestart protobuf-compiler rsync ufw zstd automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libncurses-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libtool autoconf liblmdb-dev liburing-dev libsnappy-dev -y

新しいTMUXセッションを開きます。

tmux new -s build

Libsodiumインストール

mkdir -p $HOME/git
cd $HOME/git
git clone https://github.com/IntersectMBO/libsodium
cd libsodium
git checkout dbb48cc
./autogen.sh
sleep 1
./configure
make
make check

makeコマンド実行後半に出現する warning は無視して大丈夫です。

戻り値確認

期待される表示例:
Testsuite summary for libsodium 1.0.18
============================================================================
# TOTAL: 82
# PASS:  82
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

インストールコマンドの実行

sudo make install

Secp256k1ライブラリインストール

cd $HOME/git
git clone https://github.com/bitcoin-core/secp256k1.git
cd secp256k1/
git checkout acf5c55
./autogen.sh
sleep 1
./configure --prefix=/usr --enable-module-schnorrsig --enable-experimental
make
make check

戻り値確認

期待される表示例:
Testsuite summary for libsecp256k1 0.3.2
============================================================================
# TOTAL: 3
# PASS:  3
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

PASS:3であることを確認する

インストールコマンドの実行

sudo make install

blstインストール

1.blstダウンロード

cd $HOME/git
git clone https://github.com/supranational/blst
cd blst
git checkout v0.3.14
./build.sh

2.設定ファイル作成

cat > libblst.pc << EOF
prefix=/usr/local
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libblst
Description: Multilingual BLS12-381 signature library
URL: https://github.com/supranational/blst
Version: 0.3.14
Cflags: -I\${includedir}
Libs: -L\${libdir} -lblst
EOF

3.設定ファイルコピー

sudo cp libblst.pc /usr/local/lib/pkgconfig/
sudo cp bindings/blst_aux.h bindings/blst.h bindings/blst.hpp /usr/local/include/
sudo cp libblst.a /usr/local/lib
sudo chmod u=rw,go=r /usr/local/{lib/{libblst.a,pkgconfig/libblst.pc},include/{blst.{h,hpp},blst_aux.h}}

バージョン確認

cat /usr/local/lib/pkgconfig/libblst.pc | grep Version
期待される表示例:
Version: 0.3.14

GHCUPインストール

インストール変数設定

cd $HOME
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
export BOOTSTRAP_HASKELL_NO_UPGRADE=1
export BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes
export BOOTSTRAP_HASKELL_ADJUST_BASHRC=1
unset BOOTSTRAP_HASKELL_INSTALL_HLS

インストール

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | bash

Cabal/GHCバージョンについて

最新バージョンはcardano-node/cliのビルドに失敗するため必ず以下で指定されたバージョンをインストールしてください。

cabalインストール

source ~/.bashrc
ghcup upgrade
ghcup install cabal 3.12.1.0
ghcup set cabal 3.12.1.0

GHCインストール

ghcup install ghc 9.6.7
ghcup set ghc 9.6.7

バージョン確認

cabal update
cabal --version
ghc --version
期待される表示例:
cabal-install version 3.12.1.0
compiled using version 3.12.1.0 of the Cabal library 
期待される表示例:
The Glorious Glasgow Haskell Compilation System, version 9.6.7

確認

Cabalバージョン:3.12.1.0
GHCバージョン:9.6.7
であることを確認してください。

2. ソースコードからビルド

Gitからソースコードをダウンロードし、最新のタグに切り替えます。

cd $HOME/git
git clone https://github.com/IntersectMBO/cardano-node.git
cd cardano-node
git fetch --all --recurse-submodules --tags
git checkout tags/11.0.1

Cabalのビルドオプションを構成します。

cabal clean
cabal update
cabal configure --with-compiler=ghc-9.6.7

Cardanoノードをビルドします。

cabal build all cardano-cli

サーバスペックによって、ビルド完了までに数分から数時間かかる場合があります。

cardano-cliファイルと cardano-nodeファイルをbinディレクトリにコピーします。

cd $HOME/git/cardano-node
sudo cp $(./scripts/bin-path.sh cardano-cli) /usr/local/bin/cardano-cli
sudo cp $(./scripts/bin-path.sh cardano-node) /usr/local/bin/cardano-node

cardano-clicardano-nodeのバージョンが最新Gitタグバージョンであることを確認してください。

cardano-node version
cardano-cli version
期待される表示例:
cardano-node 11.0.1 - linux-x86_64 - ghc-9.6
git rev 97036a66bcf8c89f687ae57a048eecc0389977ef

cardano-cli 11.0.0.0 - linux-x86_64 - ghc-9.6
git rev 97036a66bcf8c89f687ae57a048eecc0389977ef

TMUXセッションを閉じます。

exit

環境変数を設定し、パスを通します。

ノード設定ファイルは $NODE_HOME(例:/home/user/cnode) に設定されます。

echo PATH="$HOME/.local/bin:$PATH" >> $HOME/.bashrc
echo export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" >> $HOME/.bashrc
echo export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $HOME/.bashrc
echo export NODE_HOME=$HOME/cnode >> $HOME/.bashrc

環境変数に接続ネットワークを設定します。

echo export NODE_CONFIG=mainnet >> $HOME/.bashrc
echo export NODE_NETWORK='"--mainnet"' >> $HOME/.bashrc
echo export CARDANO_NODE_NETWORK_ID=mainnet >> $HOME/.bashrc

bashrcを再読み込みします。

source $HOME/.bashrc

3. ノード設定ファイルの修正

ノード構成に必要な設定ファイルをダウンロードします。

mkdir -p $NODE_HOME
cd $NODE_HOME

ファイルをダウンロードします。

wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-byron-genesis.json -O ${NODE_CONFIG}-byron-genesis.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-shelley-genesis.json -O ${NODE_CONFIG}-shelley-genesis.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-alonzo-genesis.json -O ${NODE_CONFIG}-alonzo-genesis.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-conway-genesis.json -O ${NODE_CONFIG}-conway-genesis.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-config.json -O ${NODE_CONFIG}-config.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-topology.json -O ${NODE_CONFIG}-topology.json
wget --no-use-server-timestamps -q https://spojapanguild.net/node_config/11.0.1/${NODE_CONFIG}-checkpoints.json -O ${NODE_CONFIG}-checkpoints.json

環境変数を設定します。

echo export CARDANO_NODE_SOCKET_PATH="$NODE_HOME/db/socket" >> $HOME/.bashrc
source $HOME/.bashrc

4. ノード起動スクリプトの作成

起動スクリプトには、ディレクトリ、ポート番号、DBパス、構成ファイルパス、トポロジーファイルパスなど、Cardanoノードを実行するために必要な変数が含まれています。

リレーで使用するポート番号を指定してターミナルで実行します。

PORT=6000

起動スクリプトファイルを作成する

cat > $NODE_HOME/startRelayNode1.sh << EOF 
#!/bin/bash
DIRECTORY=$NODE_HOME
PORT=${PORT}
HOSTADDR=0.0.0.0
TOPOLOGY=\${DIRECTORY}/${NODE_CONFIG}-topology.json
DB_PATH=\${DIRECTORY}/db
SOCKET_PATH=\${DIRECTORY}/db/socket
CONFIG=\${DIRECTORY}/${NODE_CONFIG}-config.json
/usr/local/bin/cardano-node run +RTS -N --disable-delayed-os-memory-return -I0.1 -Iw300 -A16m -F1.5 -H2500M -RTS --topology \${TOPOLOGY} --database-path \${DB_PATH} --socket-path \${SOCKET_PATH} --host-addr \${HOSTADDR} --port \${PORT} --config \${CONFIG}
EOF

注意

  • BPノードポートはセキュリティを高めるために、4951365535までの任意番号を設定してください。
    ここで設定する番号は、SSHポート番号とは別の番号を設定してください。

BPノードで使用するポート番号を設定します。

PORT=xxxxx

xxxxxには、4951365535までの任意番号を設定してください。

起動スクリプトファイルを作成します。

cat > $NODE_HOME/startBlockProducingNode.sh << EOF 
#!/bin/bash
DIRECTORY=$NODE_HOME
PORT=${PORT}
HOSTADDR=0.0.0.0
TOPOLOGY=\${DIRECTORY}/${NODE_CONFIG}-topology.json
DB_PATH=\${DIRECTORY}/db
SOCKET_PATH=\${DIRECTORY}/db/socket
CONFIG=\${DIRECTORY}/${NODE_CONFIG}-config.json
/usr/local/bin/cardano-node run +RTS -N --disable-delayed-os-memory-return -I0.1 -Iw300 -A16m -F1.5 -H2500M -RTS --topology \${TOPOLOGY} --database-path \${DB_PATH} --socket-path \${SOCKET_PATH} --host-addr \${HOSTADDR} --port \${PORT} --config \${CONFIG}
EOF

5. ノード起動

起動スクリプトに実行権限を付与し、ブロックチェーンの同期を開始します。

リレーから実施してください。

cd $NODE_HOME
chmod +x startRelayNode1.sh
./startRelayNode1.sh
cd $NODE_HOME
chmod +x startBlockProducingNode.sh
./startBlockProducingNode.sh

ログ内にChain extended, new tip: xxxxのログが流れていれば、正常です。

一旦ノードを停止します。

期待される表示例:
Ctrl+C

6. 自動起動の設定(systemd)

先程のスクリプトだけでは、ターミナル画面を閉じるとノードが終了してしまうので、スクリプトをサービスとして登録し、自動起動するように設定します。

ノード起動にsystemdを使う理由

  • サーバー再起動後もノードが自動起動
  • プロセスが異常終了したときに自動で再起動(ユニットの Restart 設定に従う)

ユニットファイルを作成します。

cat > $NODE_HOME/cardano-node.service << EOF 
# The Cardano Node Service (part of systemd)
# file: /etc/systemd/system/cardano-node.service 

[Unit]
Description     = Cardano Node Service
Wants           = network-online.target
After           = network-online.target 

[Service]
User            = ${USER}
Type            = simple
WorkingDirectory= ${NODE_HOME}
ExecStart       = /bin/bash -c '${NODE_HOME}/startRelayNode1.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
cat > $NODE_HOME/cardano-node.service << EOF 
# The Cardano Node Service (part of systemd)
# file: /etc/systemd/system/cardano-node.service 

[Unit]
Description     = Cardano Node Service
Wants           = network-online.target
After           = network-online.target 

[Service]
User            = ${USER}
Type            = simple
WorkingDirectory= ${NODE_HOME}
ExecStart       = /bin/bash -c '${NODE_HOME}/startBlockProducingNode.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

/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

OS起動時にサービスの自動起動を有効にします。

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

システム起動後にログモニターを表示します。

journalctl -u cardano-node -f

コマンド入力に戻る場合は「Ctrl+C」(この場合ノードは終了しません)

便利なエイリアス設定

エイリアス設定

スクリプトへのパスを通し、任意の単語で起動出来るようにします。

echo alias cnode='"journalctl -u cardano-node -f"' >> $HOME/.bashrc
echo alias cnstart='"sudo systemctl start cardano-node"' >> $HOME/.bashrc
echo alias cnrestart='"sudo systemctl reload-or-restart cardano-node"' >> $HOME/.bashrc
echo alias cnstop='"sudo systemctl stop cardano-node"' >> $HOME/.bashrc
echo alias cnreload='"pkill -HUP cardano-node"' >> $HOME/.bashrc
source $HOME/.bashrc

単語を入力するだけで、ノードの起動状態(ログ)を確認できます。

期待される表示例:
cnode ・・・ログ表示
cnstart ・・・ノード起動
cnrestart ・・・ノード再起動
cnreload ・・・設定再読み込み
cnstop ・・・ノード停止

7. gLiveViewのインストール

cardano-nodeはログが流れる画面だけでは何が表示されているのかよくわかりません。
それを視覚的に確認できるツールがgLiveViewです。

gLiveViewは重要なノードステータス情報を表示し、systemdサービスとうまく連携します。
このツールを作成した Guild Operatorsの功績によるものです。

gLiveViewをインストールします。

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

gLiveViewのバイナリファイルをダウンロードします。

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 ファイル内の定義を修正します。

PORT=`grep "PORT=" $NODE_HOME/startRelayNode1.sh`
b_PORT=${PORT#"PORT="}
echo "リレーポートは${b_PORT}です"
PORT=`grep "PORT=" $NODE_HOME/startBlockProducingNode.sh`
b_PORT=${PORT#"PORT="}
echo "BPポートは${b_PORT}です"
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='${b_PORT}'!' \
    -e '1,73s!#UPDATE_CHECK="Y"!UPDATE_CHECK="N"!' \
    -e '1,73s!#CONFIG="${CNODE_HOME}/files/config.json"!CONFIG="${CNODE_HOME}/'${NODE_CONFIG}'-config.json"!' \
    -e '1,73s!#SOCKET="${CNODE_HOME}/sockets/node.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!'

gLiveViewを起動します。

./gLiveView.sh

GliveView起動ショートカットコード登録

スクリプトへのパスを通し、任意の単語で起動出来るようにします。

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

gLiveViewの役割

  • ノードは起動しない — 監視用です。cardano-node は systemd などで別途動かした状態で開いてください。
  • リレー — 基本情報に加え、トポロジー接続状況を確認できます。
  • BP — 基本情報に加え、KES 有効期限とブロック生成状況を確認できます。

初回のチェーン同期

ジェネシスからフル同期するまで 目安で約1.5〜2日かかります。同期が完了するまで エアギャップの手順等には進めません。

短縮する場合: Mithril による DB 同期 で、初回を 目安30分以内 にできます。

8. エアギャップのセットアップ

cardano-cli バイナリをコピー

リレーサーバーでバイナリファイルをコピーを実施します。

環境変数を設定

echo 'export NODE_HOME="$HOME/cnode"' >> ~/.bashrc
echo 'export NODE_NETWORK="--mainnet"' >> ~/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=mainnet' >> ~/.bashrc
echo alias airgap="'cd $HOME/cnode && [ -f airgap-set.tar.gz ] && tar -xOzf airgap-set.tar.gz airgap_script | bash -s verify || echo "airgap-set.tar.gz が見つかりません"'" >> $HOME/.bashrc

source ~/.bashrc
mkdir -p ${NODE_HOME}

環境変数の反映確認

echo "NODE_HOME=${NODE_HOME}"
echo "NODE_NETWORK=${NODE_NETWORK}"
echo "CARDANO_NODE_NETWORK_ID=${CARDANO_NODE_NETWORK_ID}"

Last updated on

Cookieの使用について

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

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