开发者指南 · Zikaron

发布

发布物须能由任何人逐字节核对:校验值、签名,以及源码包与标签的一致。本页是维护者发布版本的步骤。

版本号

采用 主.次.修订 三段。读写的文件格式或命令行输出格式变化时升次版本号,并在发布说明中列出;仅修复缺陷时升修订号。法的版本写在法的规格名中,与软件版本相互独立。

发布前

  • 主干全部测试通过,每个发布的系统各运行一遍。
  • 两部法的摘要重算相符。
  • 核与冻结核比对零分歧;链面录制全部回放一致。
  • 合约代码哈希重算无误。
  • 手册中英两份与界面逐句对应。
  • 在一台干净的机器上走完首次启动六步。
  • 用上一版本的数据文件夹与备份,各做一次升级与恢复。
  • 在一个系统上导出的整机备份,到其他每个系统上各恢复一次。

构建

发布包从打了标签的那次提交构建。macOS 的包用打包脚本,带上签名身份:

git tag v0.1.0 packaging/macos/build.sh --identity Kaptonia

脚本以 --locked 构建应用与命令行,把窗口程序 zikaron-desk 和命令行 zikaron 装进 ZIKARON.app,逐个签名并校验,再做成 dist/ZIKARON-<版本>-macos-<架构>.dmg(带一个指向「应用程序」的链接)与 .pkg(应用进 /Applications,命令行进 /usr/local/bin),并写出 SHA256SUMS-macos-<架构>.txt。二进制去除符号表;家目录、源码目录与构建目录的路径在编译时映射掉,产物独立于构建机器。Linux 的 .deb 与 AppImage 用 packaging/linux/build.sh,或在别的主机上用 cross-build.sh。

校验值与 Zikaron 证明

  1. 为每个发布物(各平台的包与源码包)计算 SHA-256,合成一份发布清单 SHA256SUMS.txt。
  2. 提交时用项目的 Zikaron 账本记下这次提交,各发布包的指纹记入同一本账本,一并上链;发布说明写明交易、区块、记录者地址与各项指纹。
  3. 发布页、网站下载页与清单三处的校验值一致;下载页的「Zikaron 证明」一栏填入各文件的上链交易。

用户的核对方法见校验。

系统签名

应用与 dmg 用项目自己的证书签名,证书的公用名为 Kaptonia;这张证书由项目自签,发布包在 Apple 公证之外、由项目直接发出。每个版本用同一张证书、同一个标识符 com.kaptonia.zikaron.app 签名,系统据此把各版本认作同一个应用。pkg 以 SHA-256 核对。

从浏览器下载的文件带着隔离标记,macOS 会拒绝打开;在较新的 macOS 上,「仍要打开」时常失灵。下载页与发布说明写明的做法是:先用 shasum -a 256 核对文件,再在终端里用 xattr 去掉隔离标记。想确认文件来历的用户,可以核对签名者、证书指纹、校验值与 Zikaron 证明,见校验。

发布说明

每个版本写明:新增、变更与修复;文件格式与命令行输出的变化;升级时用户需要做的事。只写现行事实。

合约与网络

应用内置一张已知部署表:链号、登记合约地址、起始区块、默认节点。新增一行之前:

  1. 读取链上代码,核对代码哈希。
  2. 确认起始区块早于该合约上的第一条上链记录。
  3. 默认节点选两个来源相异的,均支持 TLS,且返回的链号正确。

表中的行只增加;已发布的行保持原样,旧账本依靠它们继续核验。

网站

网站随版本更新下载页的文件名、大小、校验值与 Zikaron 证明。页面由仓库中的脚本生成,生成结果一并提交。

发布后

  • 从发布页下载一份,按用户的步骤核对、安装、打开。
  • 确认网站下载页的拖放校验对每个文件都显示「与发布清单一致」。
  • 发现发布包有误时,发布新的修订版本;已发布的文件与校验值保持原样。