更新备忘 Cardano Node 8.1.1
大活来了,从 1.35.*
升级到 8.*.*
一边操作一边备忘
概述
参考 247大佬的文章,做前置准备(链接在文末),主要是安装一些新的依赖,以及关键的两个
ghc要更新到 8.10.7 (在1.35.7版本已经升级满足)
cabal 需要更新到 3.8.1.0 (比较矛盾的一点,要升级到这个版本,需要ghc升级到 9.2.8)
因此,一个奇怪的顺序是
1 需要先升级ghc到 9.2.8,
2 然后升级cabal到 3.8.1.0
3 再次设置默认版本ghc为 8.10.7(降级)
最简单最理想的情况下,如无意外。做完前置准备。用官方已经编译好的bin文件直接替换就升级完了
需要自行编译的要进一步获取源码和配置
cntools是否需要配套更新待确认。
最优先目标是先把节点运行平顺过渡上 8.*
版本, stakepool 的管理工具功能的验证可以滞后。
流水账
确认自己机器上都已经具有哪些版本相关组件:
ghcup list
其他主要的命令,参考文末的文档。主要是 install / upgrade / set 这几个操作用于安装和版本的切换
如果没有 928版本ghc的,安装
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
国内机器可能因为DNS污染或各种网络原因,从github上下载安装包的时候可能提示类似错误
curl: (7) failed to connect to raw.githubusercontent.com port 443: connection refused
解决办法略,网上一搜就有了。通过指定国际DNS或全局科学上网,推荐后者。
脚本执行过程会下载若干安装包,其中ghc-9.2.8-x86_64-ubuntu20.04-linux.tar.xz
较大,223M,可以提前手动下载
上传到 /root/.ghcup/cache/
路径下。
用github-release的bin文件解压复制替换 /root/.cabal/bin/ 目录下,检查
cardano-cli version
cardano-node version
均为正确目标版本
此时尝试启动节点,几秒钟后异常退出
查看错误原因:
journalctl -u cnode.service -f -o cat
Error in $: key "ConwayGenesisFile" not found
cnode.service: Main process exited, code=exited, status=1/FAILURE
cnode.service: Failed with result 'exit-code'.
cnode.service: Scheduled restart job, restart counter is at 4.
Stopped Cardano Node.
发现是 8.0.0
版本开始 配置文件 /opt/cardano/cnode/files/config.json
需要新增 ConwayGenesisFile 相关参数
在 下载 bin 的压缩包中寻找 configuration\cardano\mainnet-config.json
和原来的文件进行比对
在json中新增以下内容(默认添加在 Shelly 或 Alonzo 参数后即可)
"ConwayGenesisFile": "mainnet-conway-genesis.json",
"ConwayGenesisHash": "f28f1c1280ea0d32f8cd3143e268650d6c1a8e221522ce4a7d20d62fc09783e1",
相应地,也要把压缩包同路径下 mainnet-conway-genesis.json
也一并复制到配置文件路径下 /opt/cardano/cnode/files/
不过此时 conway
的 genesis 是空的,打开内容如下。是为将来准备的
{
"genDelegs": {}
}
一切就绪后,再次启动节点
systemctl start cnode
看到久违的gLiveView界面,升级成功....了吗?
若干分钟之后,进城exit。但比较诡异的是提示是 GHC的错误
cardano-node: internal error: evacuate: strange closure type 33685856
(GHC version 8.10.7 for x86_64_unknown_linux)
Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug
Aborted (core dumped)
不确定是否之前安装 prerequest的时候,编译未完成。虽说不对劲,但还是决定重新编译安装 GHC
(因为 1.35.x 的时候一直就在使用这个版本指定要求的 8.10.7)
安装命令倒也简单, 记得加 --force
强制重新安装
ghcup upgrade
ghcup install ghc --force 8.10.7
ghcup set ghc 8.10.7
国际互联网互联互通是个头痛的问题,只能熬半夜网络比较通畅的时候操作了。繁忙时段出口线路拥堵非常厉害,200M的安装包下载N次都被连接中断,那逗比安装脚本又不允许使用离线cache。。烦死了
(未完待续)
plan B.
万一搞不定。保底方案是备份目前的配置文件和私钥,重新部署一台全新的。大概影响个半天左右时间。
确实,没什么值得纠结的。
(未完待续)
相关链接:
《cardano node release(github)》
https://github.com/input-output-hk/cardano-node/releases
《升级8.11的前置准备》
https://cardano-node-installation.stakepool247.eu/cardano-node-prerequisites
《ghc文档》
https://www.haskell.org/ghcup/guide/
