首次构建
本指南会创建、验证、构建并检查一个自定义镜像。已验证的配方是配置检查,不能证明 ISO 已构建,也不能证明每项请求行为都通过了 VM 测试。
开始之前
- 登录,使对话与构建保留在你的账户下。
- 从单一操作系统和少量包或服务开始。
- 明确何种证据能证明请求已满足。包是否存在、服务状态、监听端口与 GUI 行为是不同的 assertion。
首次运行不要在聊天中写入凭据或私有仓库 URL。稍后通过支持的凭据工作流添加密钥,不要烘焙进镜像。
1. 说明目标及其检查项
示例:
Build a Debian 13 server image with OpenSSH and curl.
Create a password-locked deploy user in the sudo group.
Verify that the image boots, the deploy user exists, the ssh service is
enabled, and curl is installed. Do not add Docker or a desktop.明确排除项有助于区分有意做的最小镜像与 planner 单纯遗漏的请求。
2. 检查配方预览
至少确认:
base_image与请求的发行版及版本一致;- 请求的包出现在
os.packages下,或由显式 feature 提供; - 用户、组、服务、网络、installer、desktop 选择与请求一致;
scenarios包含你真正需要的检查;- 未引入未请求的包、desktop、installer、凭据或外部仓库。
在同一对话中要求修改。后续请求会应用到当前活动配方。使用 Validate Recipe 时,后端会保留前一条实质性聊天请求;若仍缺少明确要求则阻止配方;生成的控制句不得抹掉对话意图。
验证仍可能漏掉不可用包、上游故障、发行版特定构建失败或没有测试的行为。将预览视为一份 proposed contract。
3. 只启动一次构建
在已验证预览上选择 Start Build。成功点击会创建 build ID。报告问题时保留该 ID,比百分比或截图更可靠。
构建面板可能显示 queued、planning、configured、building、finalizing、completed、failed 或 cancelled 等状态。queued 的构建可能在等待 worker 容量或启动恢复。显示的百分比是进度估计,不是截止时间;部分打包与文件系统步骤耗时差异很大。
离开原聊天视图后,仍可在 live build panel 中跟踪构建。刷新应通过持久构建状态与 event stream 重新连接。除非 UI 报告未创建 build ID,或先前构建已达 terminal 状态,否则不要重复点击 Start Build。
4. 区分镜像完成与测试完成
镜像可能在所选 VM 验证到达 terminal 状态之前就已完成。请同时查看:
- build status: 是否已组装并 finalize 持久 artifact;
- test status:
not_run、running、passed、failed或error; - certification status(如有): 已配置 evidence 策略的结果,不是通用安全或硬件认证。
打开测试详情。确认每项请求的 assertion 在预期 guest 上运行,并检查失败或跳过的项。通过启动测试不能证明应用会打开;包记录不能证明其服务健康。
5. 检查并下载 artifact
下载前,将最终配方与包/测试证据同请求对照。记录显示的 build ID、artifact 文件名、大小与 checksum。
仅在 artifact finalization 完成后使用构建的下载操作。下载包可能包含 ISO 及相关证据。若下载返回 Failed to create download package、not found 或其他 JSON 错误:
- 确认以构建所有者身份登录;
- 打开确切构建,而非旧对话卡片;
- 确认 artifact finalization 已完成且 ISO 已列出;
- 重试一次;
- 报告 build ID、时间戳、显示的 build/test/finalization 状态及完整错误文本。
不要仅为规避所有权或打包错误而重建;那会丢弃有用诊断状态并占用另一个构建槽位。
6. 在预期环境中测试 ISO
在 OpenFactory VM 中启动仅验证已配置的虚拟环境。若需可安装 desktop,还应在 disposable disk 上测试 installer 路径。物理部署时,请在代表性硬件上分别测试 firmware 模式、存储、显卡、网络、休眠、输入设备、更新与 recovery。
常见恢复路径
| 现象 | 操作 |
|---|---|
| 配方验证通过但遗漏请求 | 不要构建;明确缺失要求并再次验证 |
| 构建处于 queued | 保留 build ID 并查看 queue/recovery 状态;避免重复启动 |
| 进度似乎不变 | 在判定卡住前先查看当前阶段与近期日志活动 |
| 构建失败 | 阅读首个 causal 错误,而非仅看最终摘要;理解原因后再修改或重试 |
| 测试失败 | 区分产品缺陷、assertion 缺陷、guest 启动问题与 infrastructure 错误 |
| 下载缺失或遭拒绝 | 重建前确认所有者会话、finalization 状态与确切 build ID |