安装程序与 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。