コンテンツにスキップ

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

対応バージョン

このガイドは ノードバージョン1.35.5に対応しています。最終更新日:2023年01月29日

概要

  • 以下、バージョンアップ作業を行う場合、ブロック生成スケジュールがないタイミングで実施してください。
  • 以下手順実施後、ブロック生成確認済みです。
  • RSYNCアップデートを使用しない場合は、 3.RSYNC+SSHアップデート の作業は実施不要

主な変更点と新機能

ノード1.35.5

  • 元帳の内部データ構造の修正

ブロックログ

  • リーダースケジュール取得高速化とメモリリソース使用の抑制
    これに伴い、スケジュール取得の際のノード再起動が不要になりましたので、近日中にブロック生成ステータス通知プログラムに スケジュール自動取得機能を導入します。

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

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

更新フローチャート

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

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

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

Grafanaをインストールしたリレーの場合はこちらを先に実行する

GrafanaのGPGキー更新

古いキーの削除

sudo apt-key del 4E40DDF6D76E284A4A6780E48C8C34C524098CB6

キーの新規追加

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

システムアップデート

sudo apt update -y && sudo apt upgrade -y

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.node-exporterバージョン確認

prometheus-node-exporter --version

戻り値1行目がnode_exporter, version 1.5.0ならOK

node_exporter, version 1.4.1以下だった場合(クリックして開く)

prometheus-node-exporterのパスを取得する

cd $HOME/git
nodeexPath=`which prometheus-node-exporter`

1.5.0をダウンロードする

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

ダウンロードファイルを解凍する

tar xvf node_exporter-1.5.0.linux-amd64.tar.gz

サービスを停止する

sudo systemctl stop prometheus-node-exporter.service

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

cd node_exporter-1.5.0.linux-amd64
sudo cp node_exporter $nodeexPath

バージョン確認

prometheus-node-exporter --version

戻り値1行目がnode_exporter, version 1.5.0ならOK

サービスをスタートする

sudo systemctl start prometheus-node-exporter.service

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

注意

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

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

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

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

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.35.4.sh
cp env env-1.35.4
cp cncli.sh cncli-1.35.4.sh

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

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

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

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}/.local/bin/cardano-cli"!CCLI="/usr/local/bin/cardano-cli"!' \
-e '1,73s!#CNCLI="${HOME}/.local/bin/cncli"!CNCLI="${HOME}/.cargo/bin/cncli"!' \
-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_hex=`cat $NODE_HOME/stakepoolid_hex.txt`
pool_bech32=`cat $NODE_HOME/stakepoolid_bech32.txt`
printf "\nプールID(hex)は \e[32m${pool_hex}\e[m です\n\n"
printf "\nプールID(bech32)は \e[32m${pool_bech32}\e[m です\n\n"

ご自身のプールID 2種類が表示されていることを確認してください
プールIDが表示されていない場合は、こちらの手順を実行してください


cncli.shファイルを修正します。以下のコマンドをすべてコピーして実行してください

sed -i $NODE_HOME/scripts/cncli.sh \
-e '1,73s!#POOL_ID=""!POOL_ID="'${pool_hex}'"!' \
-e '1,73s!#POOL_ID_BECH32=""!POOL_ID_BECH32="'${pool_bech32}'"!' \
-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-5.CNCLIバージョン確認(BPのみ)

CNCLIバージョン確認

cncli --version

以下の戻り値ならOK
cncli 5.3.0

cncli v5.2.0以下だった場合(クリックして開く)

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.3.0になったことを確認する

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.5
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.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

cardano-node 1.35.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

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

exit

ノードをストップする

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.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

cardano-node 1.35.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

2-4.サーバー再起動

サーバーを再起動する

sudo reboot

SSHで再接続し、ノード同期状況を確認する

ヒント

  • 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アップデート

メリット・デメリット

メリット

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

デメリット

  • DBフォルダ転送を行う場合に転送元・転送先サーバーのディスク空き容量が150GB以上必要となります。

事前準備

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

確認

この作業は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.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

cardano-node 1.35.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

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

設定済みの転送先エイリアスを調べる

cat ~/.ssh/config

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

for=xxxx

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

バイナリファイルを転送する

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

転送が完了するまで待つ

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

ノードを停止する

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.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

cardano-node 1.35.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

サーバーを再起動する

sudo reboot

SSH接続してノード起動を確認する

ヒント

  • 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/

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. エアギャップマシンアップデート

SFTP機能ソフト導入

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

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

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

  • /home/usr/cnode/Transfer/cardano-cli

をローカルパソコンにダウンロードします
(エアギャップ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

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

ヒント

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


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

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

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

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

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

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

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

cardano-cli version

以下の戻り値を確認する

cardano-cli 1.35.5 - linux-x86_64 - ghc-8.10
git rev 8762a10efe3f9f97939e3cb05edaf04250456702

確認

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