ノードアップデートマニュアル¶
対応バージョン
このガイドは ノードバージョン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
ソースコードダウンロード(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 8762a10efe3f9f97939e3cb05edaf04250456702cardano-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 8762a10efe3f9f97939e3cb05edaf04250456702cardano-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以上必要となります。
事前準備
- RSYNCを使用する場合、最初に事前設定を行ってください
- 転送元サーバーで 2.通常アップデートを実施してください
- 転送先サーバーで 1.依存環境アップデートを実施してください
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 8762a10efe3f9f97939e3cb05edaf04250456702cardano-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 8762a10efe3f9f97939e3cb05edaf04250456702cardano-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です。