跳转到内容
你正在查看尚未发布的 main 分支的文档,其中可能包含尚未进入任何发布版本的变更。

安装程序与 App Bootstrap

Niobium 部署文件和操作系统集成;凡是取决于应用自身含义的事情都归你的应用负责。迁移数据库 schema、转换设置或向许可证服务器注册都属于应用语义,它们通过 App Bootstrap(应用引导)在你的应用自己的进程中运行,而不是在安装程序的钩子中运行。

安装程序负责 应用在 App Bootstrap 中负责
下载、验证并解包发布 从上一个版本迁移数据
放置文件并切换生效版本 初始化每个用户的状态
创建快捷方式、文件关联、服务和注册信息 在卸载时为移除做准备
恢复被中断的事务 让自己的工作幂等且可重新开始

这让安装程序保持小巧、可审计,也让产品特有的逻辑留在可以与产品一起测试的地方。

在安装、更新或修复提交之后,setup 运行清单中 bootstrap.entrypoint 所指的入口点,只传入一个参数 --installer-bootstrap-v1,并在标准输入上以 JSON 发送一个 activate 请求。在卸载删除文件之前,它发送 deactivate。应用在标准输出上用一行 JSON 回答。

该进程以启动安装的用户身份运行,即使是整机范围的安装也是如此,环境变量最少,时间上限为 120 秒。它没有 shell,也没有提升的权限;任何需要机器级变更的事情都必须在清单中声明。

  • activate 失败:新版本保持生效,因为提交已经发生。setup 以退出码 8 退出,安装把引导记录为待执行;之后的运行会重试。
  • deactivate 失败:记录一条警告,卸载继续进行。

由于崩溃后的重试可能重复同一个事务,引导必须是幂等的,并清楚自己从哪个版本迁移到哪个版本。

协议的实现方法见实现 App Bootstrap。