コンテンツにスキップ

ノードアップデートマニュアル

対応バージョン

2022年8月24日時点でこのガイドは v.1.35.3に対応しています

概要

  • 以下、バージョンアップ作業を行う場合、ブロック生成スケジュールがないタイミングで実施してください。
  • 以下手順実施後、ブロック生成確認済みです。
  • 1.35.3初回起動時に2~4時間以上のDBの再検証処理が行われますので時間に余裕を持った作業をお願いします。
  • RSYNCアップデートを使用しない場合は、 3.RSYNC+SSHアップデート の作業は実施不要

v.1.35.3主な変更点と新機能

  • KES更新時の証明書カウンター番号を直近で自プールが生成したブロックに刻まれてる番号の「+1した数字」である必要があります。

よくお読みになって進めてください

ご自身のアップデートスタイルによって手順が異なります。
更新フローチャートとアップデートマニュアルを照らし合わせながら、アップデート作業を進めてください。

更新フローチャート

更新フローチャートは、画像をクリックすると別ウィンドウで開きます。

1.依存環境アップデート

1-1. システムアップデート

sudo apt update -y
sudo apt upgrade -y
ノードをストップする
sudo systemctl stop cardano-node
サーバーを再起動する
sudo reboot

SSHで再接続する

1-2. cabal/GHCバージョン確認

cabalパス確認

which cabal

/home/user/.ghcup/bin/cabal なら正常

戻り値が[/home/user/.local/bin/cabal]だった場合(クリックして開く)

戻り値が[/home/user/.local/bin/cabal]だった場合のみ以下を実行

パスを追加する

echo PATH=$PATH:$HOME/.ghcup/bin >> $HOME/.bashrc
source $HOME/.bashrc

旧cabalリネーム

cd $HOME/.local/bin/
mv cabal cabal_bk

cabalバージョン確認

cabal --version

以下の戻り値ならOK
cabal-install version 3.6.2.0
compiled using version 3.6.2.0 of the Cabal library

cabal 3.6.1.0以下だった場合(クリックして開く)

cabal 3.6.1.0以下だった場合のみ実行 cabalバージョンアップ

ghcup upgrade
ghcup install cabal 3.6.2.0
ghcup set cabal 3.6.2.0

GHCバージョン確認

ghc --version

GHCのバージョンは「8.10.7」であることを確認してください。

GHC 8.10.4以下だった場合(クリックして開く)

GHC 8.10.4以下だった場合のみ実行

ghcup upgrade
ghcup install ghc 8.10.7
ghcup set ghc 8.10.7
ghc --version

GHCのバージョンは「8.10.7」であればOK

1-3.Secp256k1のインストール

cd $HOME/git
git clone https://github.com/bitcoin-core/secp256k1.git
cd secp256k1/
git reset --hard ac83be33d0956faf6b7f61a60ab524ef7d6a473a
./autogen.sh
./configure --prefix=/usr --enable-module-schnorrsig --enable-experimental
make
make check

確認

以下の戻り値であることを確認する

Testsuite summary for libsecp256k1 0.1.0-pre
============================================================================
# TOTAL: 2
# PASS:  2
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

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

sudo make install

1-4.環境変数追加

echo export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $HOME/.bashrc
echo export NODE_NETWORK="--mainnet" >> $HOME/.bashrc
source $HOME/.bashrc

1-5.Guildスクリプト再取得

注意

  • リレーとBPでコマンドが異なりますので、タブを切り替えてください。

スクリプトをバックアップ

cd $NODE_HOME/scripts
cp gLiveView.sh gLiveView-1.34.1.sh
cp env env-1.34.1

スクリプトをダウンロードする(上書き)

wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/gLiveView.sh -O ./gLiveView.sh
wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/env -O ./env

ノードポート番号を確認する

PORT=`grep "PORT=" $NODE_HOME/startRelayNode1.sh`
b_PORT=${PORT#"PORT="}
echo "リレーポートは${b_PORT}です"

↑そのまま実行し、リレーのポート番号が表示されることを確認する

envファイルを修正します

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/node0.socket"!SOCKET="${CNODE_HOME}/db/socket"!'

確認

各ファイル名を変更している場合はご自身の環境に合わせて修正してください

サービスを止める

sudo systemctl stop cnode-cncli-sync.service

スクリプトをバックアップ

cd $NODE_HOME/scripts
cp gLiveView.sh gLiveView-1.34.1.sh
cp env env-1.34.1
cp cncli.sh cncli-1.34.1.sh
cp cntools.library cntools-1.34.1.library
cp cntools.config cntools-1.34.1.config

スクリプトをダウンロードする(上書き)

wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cncli.sh -q -O ./cncli.sh
wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/env -q -O ./env
wget https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/gLiveView.sh -q -O ./gLiveView.sh
wget https://raw.githubusercontent.com/btbf/spojapanguild/master/scripts/cntools.library -q -O ./cntools.library
wget https://raw.githubusercontent.com/btbf/spojapanguild/master/scripts/blocks.sh -q -O ./blocks.sh
wget https://raw.githubusercontent.com/btbf/spojapanguild/master/scripts/logMonitor.sh -q -O ./logMonitor.sh
rm cntools.config

ノードポート番号を確認する

PORT=`grep "PORT=" $NODE_HOME/startBlockProducingNode.sh`
b_PORT=${PORT#"PORT="}
echo "BPポートは${b_PORT}です"

↑そのまま実行し、BPのポート番号が表示されることを確認する

envファイルを修正します

sed -i $NODE_HOME/scripts/env \
-e '1,73s!#CCLI="${HOME}/.cabal/bin/cardano-cli"!CCLI="/usr/local/bin/cardano-cli"!' \
-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!#TOPOLOGY="${CNODE_HOME}/files/topology.json"!TOPOLOGY="${CNODE_HOME}/'${NODE_CONFIG}'-topology.json"!' \
-e '1,73s!#SOCKET="${CNODE_HOME}/sockets/node0.socket"!SOCKET="${CNODE_HOME}/db/socket"!' \
-e '1,73s!#BLOCKLOG_TZ="UTC"!BLOCKLOG_TZ="Asia/Tokyo"!' \
-e '1,73s!#WALLET_PAY_ADDR_FILENAME="payment.addr"!WALLET_PAY_ADDR_FILENAME="payment.addr"!' \
-e '1,73s!#WALLET_STAKE_ADDR_FILENAME="reward.addr"!WALLET_STAKE_ADDR_FILENAME="stake.addr"!' \
-e '1,73s!#POOL_HOTKEY_VK_FILENAME="hot.vkey"!POOL_HOTKEY_VK_FILENAME="kes.vkey"!' \
-e '1,73s!#POOL_HOTKEY_SK_FILENAME="hot.skey"!POOL_HOTKEY_SK_FILENAME="kes.skey"!' \
-e '1,73s!#POOL_COLDKEY_VK_FILENAME="cold.vkey"!POOL_COLDKEY_VK_FILENAME="node.vkey"!' \
-e '1,73s!#POOL_COLDKEY_SK_FILENAME="cold.skey"!POOL_COLDKEY_SK_FILENAME="node.skey"!' \
-e '1,73s!#POOL_OPCERT_COUNTER_FILENAME="cold.counter"!POOL_OPCERT_COUNTER_FILENAME="node.counter"!' \
-e '1,73s!#POOL_OPCERT_FILENAME="op.cert"!POOL_OPCERT_FILENAME="node.cert"!' \
-e '1,73s!#POOL_VRF_SK_FILENAME="vrf.skey"!POOL_VRF_SK_FILENAME="vrf.skey"!'

プールIDを確認する

pool_ID=`cat $NODE_HOME/stakepoolid_hex.txt`
echo "プールIDは${pool_ID}です"
ご自身のプールIDが表示されていることを確認してください
プールIDが表示されていない場合は、こちらの手順を実行してください


cncli.shファイルを修正します

sed -i $NODE_HOME/scripts/cncli.sh \
-e '1,73s!#POOL_ID=""!POOL_ID='${pool_ID}'!' \
-e '1,73s!#POOL_VRF_SKEY=""!POOL_VRF_SKEY="${CNODE_HOME}/vrf.skey"!' \
-e '1,73s!#POOL_VRF_VKEY=""!POOL_VRF_VKEY="${CNODE_HOME}/vrf.vkey"!'

1-6.CNCLIバージョンアップ(BPのみ)

確認

  • BPのみで実施します
  • CNCLI4→5へバージョンアップします。

CNCLIリポジトリを再構築する

cd $HOME/git
rm -rf cncli
git clone --recurse-submodules https://github.com/cardano-community/cncli

CNCLIをアップデートする

rustup update
cd $HOME/git/cncli
git fetch --all --prune
git checkout $(curl -s https://api.github.com/repos/cardano-community/cncli/releases/latest | jq -r .tag_name)
cargo install --path . --force

バージョン確認

cncli --version

cncli 5.1.2になったことを確認する

cncli.dbを初期化する

cd $NODE_HOME/guild-db/
rm -rf cncli

ここではまだサービスを再起動しない

2.通常アップデート

2-1.ビルド準備

新しいTMUXセッションを開く

tmux new -s build
TMUXセッション内(緑帯が表示されてる状態)で
ソースコードダウンロード(2-2)及びビルド(2-3)を実行します

2-2.ソースコードダウンロード

cd $HOME/git
rm -rf cardano-node-old/
git clone https://github.com/input-output-hk/cardano-node.git cardano-node2
cd cardano-node2/

ヒント

  • SSH接続が途中で切断されても処理が止まりません。
  • ビルド中にデタッチ(Ctrl+B D)してバックグラウンド処理へ切り替えられます。

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

cabal clean
cabal update
git fetch --all --recurse-submodules --tags
git checkout tags/1.35.3
cabal configure -O0 -w ghc-8.10.7

echo -e "package cardano-crypto-praos\n flags: -external-libsodium-vrf" > cabal.project.local
cabal build cardano-node cardano-cli

ビルド完了までに数十分ほどかかります。

バージョン確認

$(find $HOME/git/cardano-node2/dist-newstyle/build -type f -name "cardano-cli") version  
$(find $HOME/git/cardano-node2/dist-newstyle/build -type f -name "cardano-node") version  
以下の戻り値を確認する

cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

cardano-node 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

ノードをストップする

sudo systemctl stop cardano-node

バイナリーファイルをシステムフォルダーへコピーする

sudo cp $(find $HOME/git/cardano-node2/dist-newstyle/build -type f -name "cardano-cli") /usr/local/bin/cardano-cli
sudo cp $(find $HOME/git/cardano-node2/dist-newstyle/build -type f -name "cardano-node") /usr/local/bin/cardano-node

システムに反映されたノードバージョンを確認する

cardano-cli version
cardano-node version

以下の戻り値を確認する

cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

cardano-node 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

ビルド用TMUXセッションを終了する

exit

2-4.ノード起動

sudo systemctl start cardano-node

DB再構築処理状況確認する

journalctl -u cardano-node -f
Progressが100%になるまで待ちます

ヒント

  • 1.35.3初回起動時に2~4時間以上のDBの再検証処理が行われます。
  • ノードログの進捗状況%を確認し、通常ログが流れ出したらGliveViewでノード状況を確認する
  • Syncing 100%がTip(diff): ** :)となるまで待つ

2-5.作業フォルダリネーム

前バージョンで使用していたバイナリフォルダをリネームし、バックアップとして保持します。最新バージョンを構築したフォルダをcardano-nodeとして使用します。

cd $HOME/git
mv cardano-node/ cardano-node-old/
mv cardano-node2/ cardano-node/

3.RSYNC+SSHアップデート

メリット

複数台のサーバーがある場合に、以下の処理を行うことでビルド時間の短縮やノードのダウンタイムを抑えることが出来ます。

デメリット

  • RSYNC+SSHを利用したアップデート方法は、転送元・転送先サーバーのディスク空き容量が150GB以上必要となります。

はじめに

3-1.容量確認

転送元・転送先サーバー両方で確認してください

df -h /usr
Availが150GB以上あることを確認してください。

3-2.転送元サーバー作業

確認

この作業(3-2)は1回で大丈夫です。

バイナリーファイルを転送フォルダ用にコピーする

mkdir $NODE_HOME/Transfer
cp $(find $HOME/git/cardano-node/dist-newstyle/build -type f -name "cardano-cli") $NODE_HOME/Transfer/cardano-cli
cp $(find $HOME/git/cardano-node/dist-newstyle/build -type f -name "cardano-node") $NODE_HOME/Transfer/cardano-node

バージョン確認

$NODE_HOME/Transfer/cardano-cli version
$NODE_HOME/Transfer/cardano-node version
以下の戻り値を確認する

cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

cardano-node 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

ノードを停止する

sudo systemctl stop cardano-node

DBフォルダを圧縮する

新しいTMUXセッションを開く

tmux new -s tar

tar cvzf $NODE_HOME/Transfer/1.35.3-db.tar.gz -C $NODE_HOME db

圧縮が終了したらTMUXを閉じる

exit

ノードをスタートする

sudo systemctl start cardano-node

3-3.転送元から転送先へ転送する

変数forに転送先エイリアスを代入する

新しいTMUXセッションを開く

tmux new -s rsync

転送先エイリアスを指定する

for=xxxx

転送先エイリアスは、事前設定の 1-2.SSH設定ファイル作成 で設定した転送先Host名(エイリアス)を指定します。

ファイルを転送する

rsync -P --rsh=ssh $NODE_HOME/Transfer/1.35.3-db.tar.gz $for::Server/1.35.3-db.tar.gz

転送が完了するまで待つ

rsync -P --rsh=ssh $NODE_HOME/Transfer/cardano-cli $for::Server/cardano-cli

転送が完了するまで待つ

rsync -P --rsh=ssh $NODE_HOME/Transfer/cardano-node $for::Server/cardano-node

転送が完了するまで待つ

転送が終了したらTMUXを閉じる

exit

3-4.転送先サーバー作業

新しいTMUXセッションを開く

tmux new -s tar

SSDの空き容量を再確認する

df -h /usr
Availが90GB以上あることを確認してください。

DBを解凍する

mkdir $NODE_HOME/temp
tar -xzvf $NODE_HOME/1.35.3-db.tar.gz -C $NODE_HOME/temp/

DBの解凍が終わるまで待ちます

解凍が終わったらTMUXを閉じる

exit

ノードを停止する

sudo systemctl stop cardano-node

バイナリーファイルをシステムフォルダーへコピーする

sudo cp $NODE_HOME/cardano-cli /usr/local/bin/cardano-cli
sudo cp $NODE_HOME/cardano-node /usr/local/bin/cardano-node
バージョン確認
cardano-cli version
cardano-node version
以下の戻り値を確認する

cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

cardano-node 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

DBフォルダを入れ替える

mv $NODE_HOME/db $NODE_HOME/db_134
mv $NODE_HOME/temp/db $NODE_HOME/db

ノードを起動する

sudo systemctl start cardano-node

ヒント

  • GliveViewでノード状況を確認する
  • Syncing 100%がTip(diff): ** :)となるまで待つ

バイナリーファイルを移動する

cd $HOME/git
rm -rf cardano-node-old/
mv $HOME/git/cardano-node/ $HOME/git/cardano-node-old/
mkdir cardano-node
mv $NODE_HOME/cardano-cli $HOME/git/cardano-node/
mv $NODE_HOME/cardano-node $HOME/git/cardano-node/

確認

ノードの同期が成功しブロック生成に成功し数エポック様子を見たあと、転送用ファイル・バックアップDBを削除してください

rm -rf $NODE_HOME/Transfer
rm -rf $NODE_HOME/db_134
rm $NODE_HOME/1.35.3-db.tar.gz

4. サービス起動を確認する(BPのみ)

BPノードが完全に同期した後、サービス起動状態を確認する

tmux ls

ヒント

ノードを再起動してから、約20秒後に5プログラムがバックグラウンドで起動中であればOKです

  • cncli
  • leaderlog
  • validate
  • logmonitor
  • blockcheck(ブロック生成ステータス通知を導入している場合)
tmux a -t cncli

「100.00% synced」になるまで待ちます。 100%になったら、Ctrl+bを押した後に d を押し元の画面に戻ります (バックグラウンド実行に切り替え)

5. KESカウンターを確認する(BP)

SJG Tool を起動する 未導入の場合はこちらから導入してください

gtool

  • [2] ブロック生成状態チェックを選択する
  • [プール運用証明書チェック]に、以下の警告が表示されている場合はKESを更新する
     「NG カウンター番号がチェーンより2以上大きいです」

KESを更新する場合

SJGToolのホームに戻り、[3] KES更新を選択し、画面に表示された手順に沿ってKESを更新する

6. エアギャップマシンアップデート

SFTP機能ソフト導入

ファイル転送に便利なSFTP機能ソフトの導入手順はこちら

6-1.エアギャップマシン用にバイナリファイルをコピーする

SFTP機能ソフト(Filezillaなど)で転送元サーバーに接続し以下をダウンロードする

  • /home/usr/cnode/Transfer/cardano-cli
  • /home/usr/git/secp256k1 (フォルダごと)

をローカルパソコンにダウンロードします
(エアギャップUbuntuとの共有フォルダ)

2.通常アップデートを終えたBPかリレーサーバーで以下を実行する

sudo cp $(find $HOME/git/cardano-node/dist-newstyle/build -type f -name "cardano-cli") ~/cardano-cli

SFTP機能ソフト(Filezillaなど)で転送元サーバーに接続し、以下をダウンロードする

  • /home/usr/cardano-cli
  • /home/usr/git/secp256k1 (フォルダごと)

をローカルパソコンにダウンロードします
(エアギャップUbuntuとの共有フォルダ)

ヒント

R-loginの転送機能が遅いので、大容量ファイルをダウン・アップロードする場合は、SFTP接続可能なソフトを使用すると効率的です。(FileZilaなど)


2.エアギャップマシンにファイルを入れる

  • $HOME/git/cardano-node2/ にcardano-cliを入れる
    (cardano-node2が無ければ作成する)
  • $HOME/git/ に secp256k1フォルダを入れる

6-2.エアギャップマシンにインストールする

エアギャップマシンで以下を実行する

cardano-cliをシステムフォルダへコピーする

sudo cp $(find $HOME/git/cardano-node2 -type f -name "cardano-cli") /usr/local/bin/cardano-cli

makeがインストールされていることを確認する

apt list make
以下の戻り値を確認する

make/focal,now 4.2.1-1.2 amd64 [インストール済み]
make/focal 4.2.1-1.2 i386

secp256k1をインストールする

cd $HOME/git/secp256k1/
chmod +x autogen.sh
./autogen.sh
./configure --prefix=/usr --enable-module-schnorrsig --enable-experimental
make
make check

確認

以下の戻り値であることを確認する

Testsuite summary for libsecp256k1 0.1.0-pre
============================================================================
# TOTAL: 2
# PASS:  2
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

インストールコマンドを実行する

sudo make install

環境変数を設定する

echo export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $HOME/.bashrc
echo export NODE_NETWORK="--mainnet" >> $HOME/.bashrc
source $HOME/.bashrc

6-3.システムに反映されたノードバージョンを確認する

cardano-cli version

以下の戻り値を確認する

cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

確認

エアギャップではcardano-nodeは使用しないため転送してもしなくてもOKです。