大活来了,从 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/

标签: none

添加新评论