ノードのアップグレード
はじめに
IntersectMBOは、cardano-nodeをGitHubリポジトリを通じて、Cardano Nodeの新しいバージョンを定期的にリリースしています。
リポジトリで入手可能なリリースノートをよく読んで、新しい機能、構成、既知の問題、技術仕様、関連ダウンロード、ドキュメント、変更ログ、アセット、および各新しいリリースのその他の詳細を確認してください。
ノードのアップグレードのトピックでは、Cardano Nodeを最新バージョンにアップグレードする方法について説明します。
アップグレードを完了するには、必要に応じて、ステークプールを構成する各ブロックプロデューサーとリレーノードで次の手順を完了します。
ステークプールを以前のCardano バージョンにダウングレードする手順については、アーカイブを参照してください。
トラブルシューティング アップグレードが失敗した場合は、必要に応じて、破損したブロックチェーンの修正とインストールのリセットを試してください。
GHCとCabal等のバージョン確認
各Cardano Nodeのリリースでは、IntersectMBOは、、特定のバージョンのGHCとCabalを使用してバイナリをコンパイルすることを推奨しています。
たとえば、Cardano開発者ポータルのソースからのcardano-nodeとcardano-cliのインストールを参照して、現在のCardano Nodeのリリースに必要なGHCとCabalのバージョンを確認してください。
表1は、現在のCardano NodeのリリースのGHCとCabalのバージョン要件を示しています。
表1 : 現在の Cardano ノード バージョン要件
| リリース日 | Cardano ノード バージョン | Cardano CLI バージョン | GHC バージョン | Cabal バージョン | CNCLI バージョン |
|---|---|---|---|---|---|
| 2026 年 3 月 | 10.7.0 | 10.15.1.0 | 9.6.7 | 3.12.1.0 | 6.7.0 |
パッケージの最新化
- パッケージを最新化します。
sudo apt update && sudo apt upgrade -y
各種バージョン確認
GHCのバージョン確認
ghc --version
The Glorious Glasgow Haskell Compilation System, version 9.6.7
※リリースノートを確認し、ghcup tuiコマンドで推奨を確認すること
- cabalのPATH確認
which cabal
/home/USER-NAME/.ghcup/bin/cabal
cabalのバージョン確認
cabal --version
cabal-install version 3.12.1.0 compiled using version 3.12.1.0 of the Cabal library
※リリースノートを確認し、ghcup tuiコマンドで推奨を確認すること
- libsodiumのコミット値確認
cd $HOME/git/libsodium
git rev-parse --short=8 HEAD
dbb48cce
- libsecp256k1のバージョン確認
cd $HOME/git/secp256k1
git tag --points-at HEAD
v0.3.2
- blstライブラリのバージョン確認
cat /usr/local/lib/pkgconfig/libblst.pc | grep Version
Version: 0.3.14
上記、バージョンが違う場合はGlasgow Haskell コンパイラと Cabal のインストールをしてください。
新しい設定ファイルのダウンロード
必要に応じて構成ファイルの再取得
新しいCardano Nodeのリリースには、更新された構成ファイルが含まれている場合があります。
リリース用の構成ファイルが更新された場合は、ノードをアップグレードするときに新しい構成ファイルをダウンロードしてインストールする必要があります。
-
新しいCardano Nodeの構成ファイルをダウンロードしてインストールします。
-
Cardano Nodeを停止するには、ターミナルウィンドウに次のコマンドを入力します。
sudo systemctl stop cardano-node.service
- ノードが現在使用している構成ファイルをバックアップするには、必要に応じて次のコマン ドを入力します。
- Mainnet
- Preview
- PreProd
- SanchoNet
cd $NODE_HOME
mkdir -p backup
mv mainnet-config.json $NODE_HOME/backup/${NODE_CONFIG}-config.bak
mv mainnet-byron-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-byron-genesis.bak
mv mainnet-shelley-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-shelley-genesis.bak
mv mainnet-alonzo-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-alonzo-genesis.bak
mv mainnet-conway-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-conway-genesis.bak
mv mainnet-topology.json $NODE_HOME/backup/${NODE_CONFIG}-topology.bak
cd $NODE_HOME
mkdir -p backup
mv preview-config.json $NODE_HOME/backup/${NODE_CONFIG}-config.bak
mv preview-byron-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-byron-genesis.bak
mv preview-shelley-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-shelley-genesis.bak
mv preview-alonzo-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-alonzo-genesis.bak
mv preview-conway-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-conway-genesis.bak
mv preview-topology.json $NODE_HOME/backup/${NODE_CONFIG}-topology.bak
cd $NODE_HOME
mkdir -p backup
mv preprod-config.json $NODE_HOME/backup/${NODE_CONFIG}-config.bak
mv preprod-byron-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-byron-genesis.bak
mv preprod-shelley-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-shelley-genesis.bak
mv preprod-alonzo-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-alonzo-genesis.bak
mv preprod-conway-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-conway-genesis.bak
mv preprod-topology.json $NODE_HOME/backup/${NODE_CONFIG}-topology.bak
cd $NODE_HOME
mkdir -p backup
mv sanchonet-config.json $NODE_HOME/backup/${NODE_CONFIG}-config.bak
mv sanchonet-byron-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-byron-genesis.bak
mv sanchonet-shelley-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-shelley-genesis.bak
mv sanchonet-alonzo-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-alonzo-genesis.bak
mv sanchonet-conway-genesis.json $NODE_HOME/backup/${NODE_CONFIG}-conway-genesis.bak
mv sanchonet-topology.json $NODE_HOME/backup/${NODE_CONFIG}-topology.bak
- バックアップを取得したら、全ノードで設定ファイルのダウンロードをすべて実行し、トポロジーの構成を実行します。
新しいCardanoバイナリのインストール
Cardano NodeのGitHubリポジトリからダウンロード可能なビルド済みのCardano Nodeバイナリをインストールすることも、ソースコードをダウンロードして自分 でバイナリをコンパイルすることもできます。
ビルド済みバイナリの使用
ビルド済みのCardano Nodeバイナリをインストールします。
- 旧バイナリの削除
rm -rf $HOME/git/cardano-node-old-binaries
- ビルド済みのバイナリを保存するための一時ディレクトリを作成し、移動します。
mkdir -p $HOME/git/cardano-node-temporary
cd $HOME/git/cardano-node-temporary
- バイナリをダウンロードします。
バージョンについては以下で確認してください。
Cardano Nodeのリリースページ
Cardano CLIのリリースページ
release_tag=$(curl -s https://api.github.com/repos/IntersectMBO/cardano-node/releases/latest | jq -r .tag_name)
echo "Release tag : ${release_tag}"
wget https://github.com/IntersectMBO/cardano-node/releases/download/${release_tag}/cardano-node-${release_tag}-linux-amd64.tar.gz
- 解凍します。
tar zxvf cardano-node-${release_tag}-linux-amd64.tar.gz ./bin/cardano-node ./bin/cardano-cli ./bin/snapshot-converter ./bin/db-truncater
- バージョンの確認をします。
$(find $HOME/git/cardano-node-temporary -type f -name "cardano-node") version
$(find $HOME/git/cardano-node-temporary -type f -name "cardano-cli") version
以下の戻り値を確認する
cardano-node 10.7.0 - linux-x86_64 - ghc-9.6
git rev 1e6d8228693ab2aa4e1d7305e7bdcc57cdd278e4
cardano-cli 10.15.1.0 - linux-x86_64 - ghc-9.6
git rev 1e6d8228693ab2aa4e1d7305e7bdcc57cdd278e4
- ノードを停止します。
sudo systemctl stop cardano-node
- 新しいノードとCLIバイナリをインストールするには、次のように入力します。
sudo cp $(find $HOME/git/cardano-node-temporary -type f -name "cardano-node") /usr/local/bin/cardano-node
sudo cp $(find $HOME/git/cardano-node-temporary -type f -name "cardano-cli") /usr/local/bin/cardano-cli
- システムに反映されたバージョンの確認をします。
cardano-node version
cardano-cli version
以下の戻り値を確認する
cardano-node 10.7.0 - linux-x86_64 - ghc-9.6
git rev 1e6d8228693ab2aa4e1d7305e7bdcc57cdd278e4
cardano-cli 10.15.1.0 - linux-x86_64 - ghc-9.6
git rev 1e6d8228693ab2aa4e1d7305e7bdcc57cdd278e4
Mithril-Clientを使用する場合
- Mithril-Clientのインストール
cd $HOME/git
mithril_release="$(curl -s https://api.github.com/repos/input-output-hk/mithril/releases/latest | jq -r '.tag_name')"
echo "Mithril : ${mithril_release}"
リリースノートで利用可能な最新バージョンを確認してください。
wget https://github.com/input-output-hk/mithril/releases/download/${mithril_release}/mithril-${mithril_release}-linux-x64.tar.gz -O mithril.tar.gz
tar zxvf mithril.tar.gz mithril-client
- システ ムフォルダにコピーします。
sudo cp mithril-client /usr/local/bin/mithril-client
- パーミッションを変更します。
sudo chmod +x /usr/local/bin/mithril-client
- ダウンロードファイルの削除
rm mithril.tar.gz mithril-client
- バージョンの確認
mithril-client -V
- 最新のスナップショットをダウンロードするため作業用セッションを展開
tmux new -s mithril
- 変数を設定
export NETWORK=mainnet
export AGGREGATOR_ENDPOINT=https://aggregator.release-mainnet.api.mithril.network/aggregator
export GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey)
export ANCILLARY_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/ancillary.vkey)
export SNAPSHOT_DIGEST=latest
- 既存のDBを削除し、最新のスナップショットのダウンロードおよび解凍
rm -rf $NODE_HOME/db
mithril-client cardano-db download \
--network "${NETWORK}" \
--aggregator-endpoint "${AGGREGATOR_ENDPOINT}" \
--genesis-verification-key "${GENESIS_VERIFICATION_KEY}" \
--ancillary-verification-key "${ANCILLARY_VERIFICATION_KEY}" \
--include-ancillary \
--download-dir "${NODE_HOME}" \
"${SNAPSHOT_DIGEST}"
1/5~5/5が終了するまで待機
- 完了後、Tmuxを閉じます。
exit
- snapshot-converterを用いて、DB同期を短縮するため、スナップショットを変換します。
cp -rf $NODE_HOME/db/ledger $NODE_HOME/db/ledgerbackup
sleep 1
cd $NODE_HOME/db/ledgerbackup
sleep 1
latest_snapshot=$(ls -1 | grep -E '^[0-9]+$' | sort -n | tail -n 1)
sleep 1
$HOME/git/cardano-node-temporary/bin/snapshot-converter Legacy ${latest_snapshot} Mem ${latest_snapshot}_mem cardano --config $NODE_HOME/${NODE_CONFIG}-config.json
rm -rf $NODE_HOME/db/ledger/*
cp -r ${latest_snapshot}_mem $NODE_HOME/db/ledger/${latest_snapshot}
- 作業ディレクトリ名を変更し、サーバーの再起動
cd $HOME/git
mv cardano-node/ cardano-node-old-binaries/
mv cardano-node-temporary/ cardano-node/
sudo reboot
- ノードの同期確認
sudo journalctl --unit=cardano-node --follow | grep -e 'Progress:' -e 'Chain extended, new tip:'
Chain extended, new tip: xxxxxxxx at slot xxxxxx
Guild LiveView
Guild Operatorsは、Guild LiveViewを含む、Cardanoステークプールの操作を簡素化する一連のツールを維持しています。
gLiveViewスクリプトを使用する場合は、Cardano Nodeをアップグレードする前に、最新バージョンを使用していることを確認してください。
Guild Operatorスクリプトの共通envファイルでは、デフォルトでUPDATE_CHECKがユーザー変数に設定されており、gLiveView.shの起動時にスク リプトの更新をチェックします。
実装でgLiveViewの起動時に「スクリプトの更新を確認しています」というメッセージが表示されたら利用可能な更新がインストールされます。
- Guild LiveViewツールを手動でアップグレードします。
sed -i $NODE_HOME/scripts/env \
-e '1,40s!UPDATE_CHECK="N"!UPDATE_CHECK="Y"!' \
-e '1,73s!#PROM_HOST=127.0.0.1!PROM_HOST=127.0.0.1!' \
-e '1,73s!#PROM_PORT=12798!PROM_PORT=12798!'
- gliveを起動します。
glive
更新メッセージが表示されるので
yes→enterを押下
env script update(s) detected, do you want to download the latest version? (yes/no): yesgLiveView.shの更新完了のメッセージが表示されたらenterを押下
gLiveView.sh update successfully applied!press any key to proceed ..
UPDATE_CHECKをNに変更します。
sed -i $NODE_HOME/scripts/env \
-e '1,40s!UPDATE_CHECK="Y"!UPDATE_CHECK="N"!'
Koios gLiveView v1.32.0
サードパーティ製ソフトウェアのアップグレード
CNCLI
Cardanoコミュニティによって開発されたCNCLIコマンドラインユーティリティを使用する場合は、新しいバージョンが利用可能な場合は最新バージョンにアップグレードしてください。
Cardano コミュニティのCNCLIユーティリティと、Guild Operatorsが管理するステークプールオペレーター向けのcncli.shコンパニオンスクリプトを混同しないでください。
CardanoコミュニティのCNCLIバイナリをアップグレードします。
- BP
- ターミナルウィンドウで、次のコマンドを入力します。
cd $HOME
release_tag=$(curl -s https://api.github.com/repos/cardano-community/cncli/releases/latest | jq -r .tag_name)
version=$(echo ${release_tag} | cut -c 2-)
echo "Release tag : ${release_tag}"
echo "Release version : ${version}"
curl -sLJ https://github.com/cardano-community/cncli/releases/download/${release_tag}/cncli-${version}-ubuntu22-x86_64-unknown-linux-gnu.tar.gz -o $HOME/cncli-${version}-ubuntu22-x86_64-unknown-linux-gnu.tar.gz
tar xzvf $HOME/cncli-${version}-ubuntu22-x86_64-unknown-linux-gnu.tar.gz -C $HOME/.cargo/bin/
rm $HOME/cncli-${version}-ubuntu22-x86_64-unknown-linux-gnu.tar.gz
- CNCLIのバージョン確認
cncli -V
- BP
- 変数
node_portにBPのノードポート番号を代入します。
port=`grep "PORT=" $NODE_HOME/startCardanoNodeBP.sh`
node_port=${port#"PORT="}
echo "BPポート : ${node_port}"
- 変数
pool_hexとpool_bech32にpool-hex.idとpool-bech32.idの内容を代入します。
pool_hex=`cat $NODE_HOME/pool-hex.id`
pool_bech32=`cat $NODE_HOME/pool-bech32.id`
printf "\nPoolID-hex : \e[32m${pool_hex}\e[m \n\n"
printf "\nPoolID-bech32 : \e[32m${pool_bech32}\e[m \n\n"
- 変数
pt_api_keyにPoolToolのAPI KEYを代入します。
pt_api=$(grep "PT_API_KEY=" $NODE_HOME/scripts/cncli.sh)
pt_api_key=$(echo "${pt_api}" | sed -E 's/^PT_API_KEY="([^"]+)".*/\1/')
echo "PoolTool API Key : ${pt_api_key}"
- ライブラリの更新
cd $NODE_HOME/scripts
wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cntools.library -O cntools.library
- cncli.shの更新
cd $NODE_HOME/scripts
wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cncli.sh -O ./cncli.sh
cncli.shファイルの修正
sed -i $NODE_HOME/scripts/cncli.sh \
-e '1,30s!#POOL_ID=""!POOL_ID="'${pool_hex}'"!' \
-e '1,30s!#POOL_ID_BECH32=""!POOL_ID_BECH32="'${pool_bech32}'"!' \
-e '1,30s!#POOL_VRF_SKEY=""!POOL_VRF_SKEY="${CNODE_HOME}/vrf.skey"!' \
-e '1,30s!#POOL_VRF_VKEY=""!POOL_VRF_VKEY="${CNODE_HOME}/vrf.vkey"!' \
-e '1,73s!#PT_API_KEY=""!PT_API_KEY="'${pt_api_key}'"!' \
-e '1,73s!#POOL_TICKER=""!POOL_TICKER="'$(echo `jq -r '.ticker' $NODE_HOME/pool-metadata.json`)'"!' \
-e '1,73s!#PT_HOST="127.0.0.1"!PT_HOST="127.0.0.1"!' \
-e '1,73s!#PT_PORT="${CNODE_PORT}"!PT_PORT="'${node_port}'"!' \
-e '1,73s!#PT_SENDSLOTS_START=30!PT_SENDSLOTS_START=30!' \
-e '1,73s!#PT_SENDSLOTS_STOP=60!PT_SENDSLOTS_STOP=60!' \
-e '1,73s!#SLEEP_RATE=60!SLEEP_RATE=60!'
- ブロックログサービスの再起動
sudo systemctl restart cnode-cncli-sync.service
エラー対処法:Missing eta_v for block xxxxxx
cncliの再同期を実施します。
sudo systemctl stop cnode-cncli-sync.service
rm $NODE_HOME/guild-db/cncli/*
sudo systemctl restart cnode-cncli-sync.service
cnclilog
100%になるまで待機
エアギャップのアップデート
- Relayにて次のコマンドを実行します。
sudo cp $(find $HOME/git/cardano-node -type f -name "cardano-cli") ~/cardano-cli
- Filezillaを用いて
cardano-cliを共有フォルダにダウンロードします。
- エアギャップ
- フォルダ作成
mkdir -p $HOME/git/cardano-node-temporary
-
cardano-node-temporaryにcardano-cliを移動します。 -
システムフォルダにコピーします。
sudo cp $(find $HOME/git/cardano-node-temporary -type f -name "cardano-cli") /usr/local/bin/cardano-cli
sudo chmod +x /usr/local/bin/cardano-cli
- バージョンを確認します。
cardano-cli version
cardano-cli 10.15.1.0 - linux-x86_64 - ghc-9.6
git rev 1e6d8228693ab2aa4e1d7305e7bdcc57cdd278e4