ノードセットアップ
インストールバージョン
| Node | CLI | GHC | Cabal | CNCLI |
|---|---|---|---|---|
| 11.1.3 | 11.2.3.0 | 9.6.7 | 3.12.1.0 | 6.8.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 -4 libtool autoconf liblmdb-dev liburing-dev libsnappy-dev -y新しいTMUXセッションを開きます。
tmux new -s buildLibsodiumインストール
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 checkmakeコマンド実行後半に出現する
warningは無視して大丈夫です。
戻り値確認
Testsuite summary for libsodium 1.0.18
============================================================================
# TOTAL: 82
# PASS: 82
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================インストールコマンドの実行
sudo make installSecp256k1ライブラリインストール
cd $HOME/git
git clone https://github.com/bitcoin-core/secp256k1.gitcd 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 installblstインストール
1.blstダウンロード
cd $HOME/git
git clone https://github.com/supranational/blst
cd blst
git checkout v0.3.14
./build.sh2.設定ファイル作成
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
EOF3.設定ファイルコピー
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/libsudo 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 VersionVersion: 0.3.14GHCUPインストール
インストール変数設定
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 | bashCabal/GHCバージョンについて
最新バージョンはcardano-node/cliのビルドに失敗するため必ず以下で指定されたバージョンをインストールしてください。
cabalインストール
source ~/.bashrc
ghcup upgrade
ghcup install cabal 3.12.1.0
ghcup set cabal 3.12.1.0GHCインストール
ghcup install ghc 9.6.7
ghcup set ghc 9.6.7バージョン確認
cabal updatecabal --version
ghc --versioncabal-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.1.3Cabalのビルドオプションを構成します。
cabal clean
cabal update
cabal configure --with-compiler=ghc-9.6.7Cardanoノードをビルドします。
cabal build all cardano-cliサーバスペックによって、ビルド完了までに数分から数時間かかる場合があります。
cardano-node、cardano-cli、cardano-tracerバイナリをbinディレクトリにコピーします。
cd $HOME/git/cardano-node
sudo cp -p "$(./scripts/bin-path.sh cardano-node)" "$(./scripts/bin-path.sh cardano-cli)" "$(./scripts/bin-path.sh cardano-tracer)" /usr/local/bin/cardano-node、cardano-cli、cardano-tracerのバージョンが最新Gitタグバージョンであることを確認してください。
cardano-node version
cardano-cli version
cardano-tracer --versioncardano-node 11.1.3 - linux-x86_64 - ghc-9.6
git rev 938cba990357ae7c4b7f95c8f75dd9d31174bbeb
cardano-cli 11.2.3.0 - linux-x86_64 - ghc-9.6
git rev 938cba990357ae7c4b7f95c8f75dd9d31174bbeb
0.5.0TMUXセッションを閉じます。
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/.bashrcbashrcを再読み込みします。
source $HOME/.bashrc3. ノード設定ファイルの修正
ノード構成に必要な設定ファイルをダウンロードします。
mkdir -p $NODE_HOME
cd $NODE_HOMEファイルをダウンロードします。
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-byron-genesis.json -O ${NODE_CONFIG}-byron-genesis.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-shelley-genesis.json -O ${NODE_CONFIG}-shelley-genesis.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-alonzo-genesis.json -O ${NODE_CONFIG}-alonzo-genesis.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-conway-genesis.json -O ${NODE_CONFIG}-conway-genesis.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-config.json -O ${NODE_CONFIG}-config.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-topology.json -O ${NODE_CONFIG}-topology.json
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-checkpoints.json -O ${NODE_CONFIG}-checkpoints.jsonpeer-snapshot.jsonのダウンロード
wget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-peer-snapshot.json -O ${NODE_CONFIG}-peer-snapshot.json環境変数を設定します。
echo export CARDANO_NODE_SOCKET_PATH="$NODE_HOME/db/socket" >> $HOME/.bashrc
source $HOME/.bashrcconfig.jsonのTraceOptionNodeNameを、各ノードを識別するためのNode名に変更します。
TraceOptionNodeNameを${NODE_CONFIG}-relay-1に変更します。
sed -i "s/\"TraceOptionNodeName\": \"\"/\"TraceOptionNodeName\": \"${NODE_CONFIG}-relay-1\"/" ${NODE_CONFIG}-config.jsonTraceOptionNodeNameを${NODE_CONFIG}-relay-2に変更します。
sed -i "s/\"TraceOptionNodeName\": \"\"/\"TraceOptionNodeName\": \"${NODE_CONFIG}-relay-2\"/" ${NODE_CONFIG}-config.jsonTraceOptionNodeNameを${NODE_CONFIG}-bpに変更します。
sed -i "s/\"TraceOptionNodeName\": \"\"/\"TraceOptionNodeName\": \"${NODE_CONFIG}-bp\"/" ${NODE_CONFIG}-config.json設定したNode名を確認します。
jq -r '.TraceOptionNodeName' $NODE_HOME/${NODE_CONFIG}-config.json4. cardano-tracerの設定
Cardano Nodeから転送されるtrace(ログ)およびmetricsを受信するため、各Cardano Node稼働サーバーでcardano-tracerを設定します。
cardano-tracerの確認
cardano-tracerがインストールされていることを確認します。
cardano-tracer --versionTracer用ディレクトリの作成
Tracer用のディレクトリとログ保存用のディレクトリを作成します。
mkdir -p ${NODE_HOME}/tracer
mkdir -p ${NODE_HOME}/logstracer-config.jsonの取得
Tracer用の設定ファイルを取得します。
cd ${NODE_HOME}/tracerwget -4 --no-use-server-timestamps https://download.spojapanguild.net/node_config/11.1.3/${NODE_CONFIG}-tracer-config.json -O ${NODE_CONFIG}-tracer-config.jsontracer-config.jsonの設定
tracer-config.jsonのログ保存先、Unix SocketのPATH、Network Magicを環境に合わせて変更します。
NETWORK_MAGIC=$(jq -r '.networkMagic' $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json)
sed -i \
-e "s|\"logRoot\": \"\"|\"logRoot\": \"${NODE_HOME}/logs\"|" \
-e "s|\"contents\": \"\"|\"contents\": \"${NODE_HOME}/tracer/socket\"|" \
-e "s|\"networkMagic\": 0|\"networkMagic\": ${NETWORK_MAGIC}|" \
${NODE_CONFIG}-tracer-config.jsoncardano-tracerのsystemd service作成
cardano-tracerのsystemd serviceファイルを作成します。
cat > ${NODE_HOME}/tracer/cardano-tracer.service << EOF
[Unit]
Description=Cardano Tracer Service
Wants=network-online.target
After=network-online.target
Before=cardano-node.service
PartOf=cardano-node.service
StartLimitIntervalSec=0
[Service]
User=${USER}
Type=simple
WorkingDirectory=${NODE_HOME}
ExecStart=/usr/local/bin/cardano-tracer --config ${NODE_HOME}/tracer/${NODE_CONFIG}-tracer-config.json
Restart=always
RestartSec=5
LimitNOFILE=32768
[Install]
WantedBy=cardano-node.service
EOFsystemdへ配置します。
sudo cp ${NODE_HOME}/tracer/cardano-tracer.service /etc/systemd/system/cardano-tracer.service権限を設定します。
sudo chmod 644 /etc/systemd/system/cardano-tracer.servicesystemdへ設定を反映します。
sudo systemctl daemon-reloadTracerをcardano-node.serviceの従属サービスとして有効化し、起動します。
cardano-node.serviceを起動するとTracerが先に起動し、Nodeを停止・再起動するとTracerにも同じ操作が伝播します。
sudo systemctl enable --now cardano-tracer.servicecardano-tracerの動作確認
cardano-tracerが正常に起動していることを確認します。
sudo systemctl status cardano-tracer --no-pageractive (running)Tracer用のUnix Socketが作成されていることを確認します。
ls -la ${NODE_HOME}/tracer/
socketが表示されれば問題ありません。
TracerがPrometheus用の12808ポートをListenしていることを確認します。
sudo ss -lntp | grep ':12808'
cardano-tracerが0.0.0.0:12808でListenしていることを確認します。
5. ノード起動スクリプトの作成
起動スクリプトには、ディレクトリ、ポート番号、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
TRACER_SOCKET_PATH=\${DIRECTORY}/tracer/socket
/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} --tracer-socket-path-connect \${TRACER_SOCKET_PATH}
EOF注意
- BPノードポートはセキュリティを高めるために、
49513~65535までの任意番号を設定してください。
ここで設定する番号は、SSHポート番号とは別の番号を設定してください。
BPノードで使用するポート番号を設定します。
PORT=xxxxx
xxxxxには、49513~65535までの任意番号を設定してください。
起動スクリプトファイルを作成します。
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
TRACER_SOCKET_PATH=\${DIRECTORY}/tracer/socket
/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} --tracer-socket-path-connect \${TRACER_SOCKET_PATH}
EOF6. ノード起動
起動スクリプトに実行権限を付与し、ブロックチェーンの同期を開始します。
リレーから実施してください。
cd $NODE_HOME
chmod +x startRelayNode1.sh
./startRelayNode1.shcd $NODE_HOME
chmod +x startBlockProducingNode.sh
./startBlockProducingNode.shログ内に
Chain extended, new tip: xxxxのログが流れていれば、正常です。
一旦ノードを停止します。
Ctrl+C7. 自動起動の設定(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
[Install]
WantedBy = multi-user.target
EOFcat > $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
[Install]
WantedBy = multi-user.target
EOF/etc/systemd/systemにユニットファイルをコピーし、権限を付与します。
sudo cp $NODE_HOME/cardano-node.service /etc/systemd/system/cardano-node.servicesudo chmod 644 /etc/systemd/system/cardano-node.serviceOS起動時にサービスの自動起動を有効にします。
sudo systemctl daemon-reloadsudo systemctl enable --now cardano-nodecardano-node.serviceとcardano-tracer.serviceの連動設定を確認します。
systemctl show cardano-tracer.service -p PartOf --value
systemctl list-dependencies cardano-node.service --plain | grep cardano-tracer.service以下のように両方のコマンドでcardano-node.service、cardano-tracer.serviceがそれぞれ表示されれば問題ありません。
cardano-node.service
cardano-tracer.service以降はcardano-node.serviceを操作するだけで、Tracerも連動して起動・停止・再起動します。
システム起動後にログモニターを表示します。
journalctl -q -u cardano-node -f -o cat | jq -cC --unbuffered .コマンド入力に戻る場合は「
Ctrl+C」(この場合ノードは終了しません)
便利なエイリアス設定
エイリアス設定
スクリプトへのパスを通し、任意の単語で起動出来るようにします。
echo alias cnode='"journalctl -q -u cardano-node -f -o cat | jq -cC --unbuffered ."' >> $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 ・・・ノード停止8. gLiveViewのインストール
cardano-nodeはログが流れる画面だけでは何が表示されているのかよくわかりません。
それを視覚的に確認できるツールがgLiveViewです。
gLiveViewは重要なノードステータス情報を表示し、systemdサービスとうまく連携します。
このツールを作成した Guild Operatorsの功績によるものです。
gLiveViewをインストールします。
mkdir -p $NODE_HOME/scripts
cd $NODE_HOME/scripts
sudo apt install bc tcptraceroute -ygLiveViewのバイナリファイルをダウンロードします。
curl -o gLiveView.sh https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/gLiveView.sh
curl -o env https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/env
chmod 755 gLiveView.shenv ファイル内の定義を修正します。
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.shGliveView起動ショートカットコード登録
スクリプトへのパスを通し、任意の単語で起動出来るようにします。
echo alias glive="'cd $NODE_HOME/scripts; ./gLiveView.sh'" >> $HOME/.bashrc
source $HOME/.bashrcgLiveViewの役割
- ノードは起動しない — 監視用です。
cardano-nodeは systemd などで別途動かした状態で開いてください。 - リレー — 基本情報に加え、トポロジー接続状況を確認できます。
- BP — 基本情報に加え、KES 有効期限とブロック生成状況を確認できます。
初回のチェーン同期
ジェネシスからフル同期するまで 目安で約1.5〜2日かかります。同期が完了するまで エアギャップの手順等には進めません。
短縮する場合: Mithril による DB 同期 で、初回を 目安30分以内 にできます。
9. エアギャップのセットアップ
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