fix(axvisor): correct cargo commands and update image layout in scripts and docs - #1607
Conversation
261b766 to
65825a6
Compare
There was a problem hiding this comment.
审查总结
该 PR 修复了在 tg-xtask 统一重构和镜像注册表重组后 AxVisor QEMU 快速启动脚本和文档中的失效命令与路径。变更范围仅限脚本(bash)、文档(markdown)、CI 配置(YAML)和 Cargo 别名,无 Rust 代码变更。
变更分析
1. 删除过时的本地 xtask 别名(os/axvisor/.cargo/config.toml)
- 移除了
[alias] xtask = "run --bin xtask --",该别名指向不存在的本地 xtask 二进制,并遮蔽了正确的仓库根级别cargo xtask别名。变更正确。
2. 修复脚本中的 cargo 命令和镜像路径(setup_qemu.sh、quick-start.sh)
cargo xtask qemu→cargo xtask axvisor qemu:经确认axvisor是 axbuild 中的顶层子命令,变更正确。cargo axvisor image pull→cargo xtask image pull:经确认image是 axbuild 中的顶层子命令(Commands::Image),不在axvisor子命令下,变更正确。- 镜像名称更新:旧格式
qemu_aarch64_arceos→ 新格式qemu-aarch64,与统一后的镜像注册表一致。 - 存储根路径:
/tmp/.axvisor-images→/tmp/.tgos-images(可通过AXVISOR_IMAGE_LOCAL_STORAGE覆盖),与重构后的命名一致。 - 路径解析修复:
VMCONFIG_TMP_DIR和ROOTFS_TARGET从${REPO_ROOT}/tmp/...(即os/axvisor/tmp/...)改为${WORKSPACE_ROOT}/tmp/...(仓库根目录),解决了仓库根目录与成员目录路径混淆的问题。 - 注册表版本:从硬编码的
v0.0.25改为通过default.toml的[[includes]]指令动态解析,新增resolve_registry_url()函数实现。 - 新增
ROOTFS_IMAGE_NAME字段到 CFG 配置(第 9 个字段),将 rootfs 下载与内核镜像下载分离,NimbOS 除外(其 rootfs 已包含在 tgosimages 归档中)。
3. CI 修复(.github/workflows/ci.yml)
- 将
cd ../..移到grep命令之前,使 grep 在仓库根目录下执行。这是必需的,因为setup_qemu.sh现在将生成的 VM 配置写入${WORKSPACE_ROOT}/tmp/vmconfigs/(仓库根目录),而非${REPO_ROOT}/tmp/vmconfigs/(os/axvisor/)。变更正确。
4. 文档更新(qemu-quickstart.md、qemu-quickstart_cn.md)
- 所有示例命令已更新为匹配新的
cargo xtask axvisor qemu和路径约定。 - 新增提示:命令需从仓库根目录执行。
- 与脚本变更保持一致。
验证结果
本地验证
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ 通过 |
shellcheck setup_qemu.sh |
✅ 无警告 |
shellcheck quick-start.sh |
✅ 无新增问题(所有 SC2016/SC2145 均为已有问题) |
| xtask 命令结构确认 | ✅ cargo xtask image pull 和 cargo xtask axvisor qemu 均为有效子命令 |
CI 状态
| 检查项 | 结论 |
|---|---|
| Check formatting / run_host | ✅ success |
| Run clippy / run_host | ✅ success |
| Run spin-lint / run_container | ✅ success |
| Run sync-lint / run_container | ✅ success |
| Detect changed paths | ✅ success |
| 其他 QEMU/板级测试 | ⏭️ skipped(预期内:路径过滤未触发) |
| Test axvisor aarch64 qemu / run_host | 🔄 in_progress |
CI 中 mergeable_state: blocked 是因为部分 axvisor 测试作业仍在运行中,lint 检查均已通过,无失败项。
重复/重叠分析
- 在
os/axvisor/scripts/、os/axvisor/doc/、os/axvisor/.cargo/config.toml路径下没有发现其他开放的 PR 存在重叠。 - PR #1606(fix(axvisor): correct shell filesystem command handling)涉及不同的区域(shell 命令实现 vs 脚本/文档),无冲突。
结论
该 PR 是一次目标明确、范围可控的修复,所有命令、路径和文档更新均与 axbuild 重构后的实际子命令结构和镜像注册表布局一致。没有引入新的 shellcheck 问题,没有 Rust 代码变更需要 clippy/test 覆盖,CI lint 检查全部通过。
批准合并。
Powered by deepseek-v4-pro
65825a6 to
a3fca0f
Compare
There was a problem hiding this comment.
审查总结
该 PR 修复了 tg-xtask 统一重构和镜像注册表重组后 AxVisor QEMU 快速启动脚本和文档中的失效命令与路径。变更范围仅限脚本(bash)、文档(markdown)和 Cargo 别名配置,无 Rust 代码变更。所有修改均正确且必要。
变更分析
1. 删除过时的本地 xtask 别名(os/axvisor/.cargo/config.toml)
移除了 [alias] xtask = "run --bin xtask --",该别名指向已无法编译的本地 xtask 二进制,并遮蔽了正确的仓库根级别 cargo xtask 别名。变更正确。
2. 修复脚本中的 cargo 命令和镜像路径(setup_qemu.sh、quick-start.sh)
cargo xtask qemu→cargo xtask axvisor qemu:经确认axvisor是 axbuild 中的顶层子命令 ✅cargo axvisor image pull→cargo xtask image pull:经确认image是 tg-xtask 的顶层子命令 ✅- 镜像名称更新:旧格式
qemu_aarch64_arceos→ 新格式qemu-aarch64,与统一后的镜像注册表一致 ✅ - 存储根路径:
/tmp/.axvisor-images→/tmp/.tgos-images(可通过AXVISOR_IMAGE_LOCAL_STORAGE覆盖)✅ - 注册表版本:从硬编码的
v0.0.25改为通过default.toml的[[includes]]指令动态解析,新增resolve_registry_url()函数 ✅ - rootfs 下载与内核镜像下载分离,新增
ROOTFS_IMAGE_NAME字段到 CFG 配置 ✅
3. 文档更新(qemu-quickstart.md、qemu-quickstart_cn.md)
所有示例命令已更新为匹配新的 cargo xtask axvisor qemu 和路径约定,新增提示要求从仓库根目录执行命令。与脚本变更保持一致。✅
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ 通过 |
shellcheck os/axvisor/scripts/setup_qemu.sh |
✅ 无警告 |
shellcheck os/axvisor/scripts/quick-start.sh |
✅ 无新增问题(SC2145/SC2016 均为已有问题) |
cargo xtask image pull --help |
✅ 子命令存在且可用 |
cargo xtask axvisor qemu --help |
✅ 子命令存在且可用 |
CI 状态
| 检查项 | 结论 |
|---|---|
| Cancel stale CI runs | ✅ success |
| Detect changed paths | ✅ success |
| Check formatting / run_host | ✅ success |
| Run spin-lint / run_container | ✅ success |
| Run sync-lint / run_container | ✅ success |
| Test axvisor loongarch64 qemu / run_container | ✅ success |
| Test axvisor aarch64/riscv64 qemu | ⏭️ skipped(预期:路径过滤) |
| Test starry x86_64 qemu / run_container | ❌ failure(与本 PR 无关:PR 仅修改 os/axvisor/ 下的脚本和文档,未触及任何 StarryOS 代码) |
| Self-hosted board 测试 | ⏭️ cancelled(基础设施问题:所有 self-hosted runner 同时被取消) |
重复/重叠分析
- 在
os/axvisor/scripts/、os/axvisor/doc/、os/axvisor/.cargo/config.toml路径下没有发现其他开放 PR 存在重叠。 - PR #1606(
fix(axvisor): correct shell filesystem command handling)涉及 AxVisor shell 命令实现,与本 PR 的脚本/文档修复无冲突。
先前审查
该 PR 上一个 commit(65825a6)有一份来自 bot 的 APPROVE 审查。当前 head(a3fca0fcd)新增了文档修复 commit,bot 审查的结论仍然有效。
结论
该 PR 是一次目标明确、范围可控的修复,所有命令、路径和文档更新均与 axbuild 重构后的实际子命令结构和镜像注册表布局一致。没有引入新的 shellcheck 问题,没有 Rust 代码变更需要 clippy/test 覆盖,CI lint 检查全部通过。
批准合并。
Powered by deepseek-v4-pro
ZR233
left a comment
There was a problem hiding this comment.
CI 的 x86_64 Starry 失败来自 OVMF 解包时 runner 磁盘耗尽,与本 PR 无关;脚本语法和 registry image 名也正确。但 README 声明的实际工作流仍不可用:我从仓库根运行 ./os/axvisor/scripts/setup_qemu.sh arceos,两个 cargo xtask image pull 成功并把资产放到 workspace 的 tmp/axbuild/rootfs,随后脚本仍到 /tmp/.tgos-images 查找并报 kernel image not found。必须让 xtask 的 local storage 与脚本查找路径使用同一来源,并用 README 命令端到端验证生成配置。
1dad77e to
f062d12
Compare
There was a problem hiding this comment.
审查总结
该 PR 修复了 tg-xtask 统一重构和镜像注册表重组后 AxVisor QEMU 快速启动脚本和文档中失效的命令与路径。变更范围仅限于脚本(bash)、文档(markdown)和 Cargo 别名配置(5 个文件),无 Rust 代码变更。所有修改均正确,与 xtask/axbuild 实际子命令结构一致。
变更分析
1. 删除过时的本地 xtask 别名(os/axvisor/.cargo/config.toml)
移除了 [alias] xtask = "run --bin xtask --",该别名指向已无法编译的本地 xtask 二进制,并会遮蔽仓库根级别的正确别名。变更正确。
2. 修复脚本中的 cargo 命令和镜像路径(setup_qemu.sh、quick-start.sh)
cargo xtask qemu→cargo xtask axvisor qemu:经确认axvisor是 axbuild 中的顶层子命令 ✅cargo axvisor image pull→cargo xtask image pull:经确认image是 tg-xtask 的顶层子命令 ✅- 镜像名称更新:旧格式
qemu_aarch64_arceos→ 新格式qemu-aarch64,与统一后的镜像注册表一致 ✅ - 存储根路径:
IMAGE_STORAGE_ROOT现在默认使用${WORKSPACE_ROOT}/tmp/axbuild/rootfs,与cargo xtask image pull的默认路径一致 ✅ - 脚本通过
export TGOS_IMAGE_LOCAL_STORAGE将路径传递给 xtask,确保子进程使用相同路径 ✅ - 脚本同步
.image.toml持久化配置文件,确保脚本退出后 xtask 仍能找到正确的存储路径 ✅ - 注册表版本:从硬编码
v0.0.25改为通过default.toml的[[includes]]指令动态解析,新增resolve_registry_url()函数 ✅ - rootfs 下载与内核镜像下载分离,新增
ROOTFS_IMAGE_NAME字段到 CFG 配置 ✅
3. 文档更新(qemu-quickstart.md、qemu-quickstart_cn.md)
所有示例命令已更新为匹配新的 cargo xtask axvisor qemu 和路径约定,新增提示要求从仓库根目录执行命令。与脚本变更保持一致。✅
验证结果
| 检查项 | 结果 |
|---|---|
bash -n setup_qemu.sh |
✅ 通过 |
bash -n quick-start.sh |
✅ 通过 |
cargo fmt --check |
✅ 通过(无 Rust 代码变更) |
无 [patch.crates-io] |
✅ 未引入 |
CI 状态
| 检查项 | 结论 |
|---|---|
| Cancel stale CI runs | ✅ success |
| Detect changed paths | ✅ success |
| Check formatting / run_host | ✅ success |
| Run sync-lint / run_container | ✅ success |
| Run spin-lint / run_container | ✅ success |
| Test with std / run_host | ✅ success |
| Test axvisor riscv64 qemu / run_host | ✅ success |
| Test axvisor loongarch64 qemu / run_container | ✅ success |
| Test starry x86_64 qemu / run_container | ❌ failure(与本 PR 无关:PR 仅修改 os/axvisor/ 下的脚本和文档,未触及任何 StarryOS 代码。该失败疑似 runner 环境问题,如 OVMF 解包磁盘耗尽) |
| Self-hosted board 测试 | ⏭️ cancelled(基础设施问题:多个 self-hosted runner 作业被同时取消) |
| 其他跳过项 | ⏭️ skipped(预期内:路径过滤器未触发非 axvisor 相关测试) |
先前审查意见处理
ZR233 在上一个 commit(a3fca0fcd)提交了 CHANGES_REQUESTED,指出脚本查找镜像的路径与 cargo xtask image pull 放置镜像的路径不一致,导致 kernel image not found 错误。
在当前 head(f062d126)中,该问题已通过以下机制解决:
IMAGE_STORAGE_ROOT默认值${WORKSPACE_ROOT}/tmp/axbuild/rootfs与ImageConfig::new_default()的默认值一致(crate::context::axbuild_tmp_dir(base_dir).join("rootfs"))- 脚本通过
export TGOS_IMAGE_LOCAL_STORAGE将路径传递给 xtask 子进程 - 脚本同步
.image.toml配置文件,确保持久化路径一致 ImageConfig::read_config()优先读取TGOS_IMAGE_LOCAL_STORAGE环境变量
ZR233 提到的 /tmp/.tgos-images 路径可能是测试代码中的默认值(axvisor/rootfs.rs:278、starry/test/tests.rs:245),但生产路径已统一为 tmp/axbuild/rootfs。当前代码逻辑上路径一致。
重复/重叠分析
- 在
os/axvisor/scripts/、os/axvisor/doc/、os/axvisor/.cargo/config.toml路径下无其他开放 PR 存在重叠 - PR #1606(
fix(axvisor): correct shell filesystem command handling)涉及 AxVisor shell 命令实现,与本 PR 的脚本/文档修复无冲突
结论
该 PR 是一次目标明确、范围可控的修复。所有命令和路径更新均与 axbuild 重构后的实际子命令结构和镜像注册表布局一致。axvisor 相关 CI 测试(loongarch64、riscv64)全部通过,格式化和 lint 检查通过。镜像存储路径与 xtask 默认路径已统一。
批准合并。
已知情况
Test starry x86_64 qemu / run_container失败与 PR 无关(PR 仅修改os/axvisor/下的文件)- 多个 self-hosted board 测试被取消,属于基础设施问题
- 由于本环境无 QEMU/KVM,未能进行端到端 QEMU 工作流验证;CI 中 axvisor loongarch64 和 riscv64 QEMU 测试通过提供了远程验证证据
Powered by deepseek-v4-pro
ZCShou
left a comment
There was a problem hiding this comment.
- 更彻底的方式是清理冗余的脚步文档等,axvisor 中同样保持其自身的 cargo xtask xxx 的命令,当前 axvisor 中 xtask 应该是直接服用的 参仓库根目录的 axbuild,以确保统一,但实际可能由于axbuild 的改动导致不兼容了
- axvisor 中文档不应该引用仓库根目录,因为 axvisor 是独立发布个crate,作为独立crate,别人获取到后看不到tgoskits 根目录
ZR233
left a comment
There was a problem hiding this comment.
结论:需要修改。
- 上次阻塞项已修复:setup 与
cargo xtask image pull现在使用同一TGOS_IMAGE_LOCAL_STORAGE,我在当前 head 上运行./os/axvisor/scripts/setup_qemu.sh linux已成功下载并准备镜像;原线程已确认关闭。 - 当前仍有两个工作流阻塞:默认 registry 失败时 fallback 分支会被
set -e提前截断;文档给出的 Linux 命令实跑后进入~ #交互 shell,未产生声明的test pass!,只能手动退出。详见两条行内意见。 - CI:当前 head 的 fmt、clippy、std 以及 Axvisor AArch64/RISC-V/LoongArch/SVM 相关检查成功。唯一失败的 Starry x86_64 job 是 runner 在复制 rootfs 时磁盘耗尽(
No space left on device),与本 PR 的 Axvisor 脚本/文档范围无关,已单独记录为 #1618;其后的取消项是该失败的级联结果。 - 合并/重叠:PR 可干净合并,未发现其他开放 PR 实现同一 Axvisor setup/quickstart 修复。
git diff --check仅报告.cargo/config.toml文件末尾新增空行,请顺手清理。 - 非代码项:PR 描述末尾的生成工具署名不符合仓库对项目提交说明的要求,请移除。
The local xtask alias `xtask = "run --bin xtask --"` in os/axvisor/.cargo/config.toml pointed to the axvisor-local xtask binary which no longer compiles after the unified tg-xtask refactor (the import `axbuild::axvisor::image` does not exist). This local alias shadowed the correct workspace-root alias `xtask = "run -p tg-xtask --"`, so any `cargo xtask` invocation from os/axvisor/ would hit a compile error instead of using tg-xtask. Changes: - Remove the stale [alias] section from os/axvisor/.cargo/config.toml
After the unified tg-xtask refactor, the cargo command patterns and image
registry layout changed, but the setup and quick-start scripts were never
updated. This fixes the following:
- Cargo commands: `cargo axvisor image pull` → `cargo xtask image pull`
(image is a top-level subcommand under tg-xtask, not under axvisor),
`cargo xtask qemu` → `cargo xtask axvisor qemu`,
`cargo xtask uboot` → `cargo xtask axvisor uboot`
- Image registry layout: storage root default changed to align with
`cargo xtask image pull` (TGOS_IMAGE_LOCAL_STORAGE, default
$WORKSPACE_ROOT/tmp/axbuild/rootfs), image names changed from
qemu_{arch}_{guest} (per-guest) to qemu-{arch} (unified per-arch
bundle with subdirs like arceos/arceos-qemu, linux/linux-qemu), and
rootfs images are now separate registry entries
- Registry resolution: replace hardcoded BUILTIN_FALLBACK_REGISTRY_URL
with resolve_registry_url() which follows the include directive from
the default registry; handle set -e so the fallback path is not cut
off when the default registry is unreachable
- .image.toml sync: update local_storage in xtask's persistent config so
that `cargo xtask axvisor qemu` finds images even after this script
exits and the TGOS_IMAGE_LOCAL_STORAGE env var is gone
- Success indicator: change Linux guest indicator from "test pass!"
(only produced by the test runner) to the actual BusyBox shell prompt
Changes:
- setup_qemu.sh: update image download, paths, registry bootstrap, and
success messages
- quick-start.sh: update QEMU setup functions (aarch64, riscv64,
x86_64 linux) to use new image names and bundle subdirectory paths
f062d12 to
8d95365
Compare
There was a problem hiding this comment.
审查总结
该 PR 修复了 tg-xtask 统一重构和镜像注册表重组后 AxVisor QEMU 快速启动脚本和文档中失效的命令与路径。变更范围仅限脚本(bash)、文档(markdown)和 Cargo 别名配置(5 个文件),无 Rust 代码变更。
变更分析
1. 删除过时的本地 xtask 别名(os/axvisor/.cargo/config.toml)
移除了 [alias] xtask = "run --bin xtask --",该别名指向已无法编译的本地 xtask 二进制,并会遮蔽仓库根级别的正确别名。变更正确。
2. 修复脚本中的 cargo 命令和镜像路径(setup_qemu.sh、quick-start.sh)
cargo xtask qemu→cargo xtask axvisor qemu:确认axvisor是 axbuild 中的顶层子命令 ✅cargo axvisor image pull→cargo xtask image pull:确认image是 tg-xtask 的顶层子命令 ✅- 镜像名称更新:旧格式
qemu_aarch64_arceos→ 新格式qemu-aarch64,与统一后的镜像注册表一致 ✅ - 存储根路径:
IMAGE_STORAGE_ROOT默认使用${WORKSPACE_ROOT}/tmp/axbuild/rootfs,与cargo xtask image pull的默认路径一致;通过export TGOS_IMAGE_LOCAL_STORAGE将路径传递给 xtask 子进程 ✅ - 注册表版本:从硬编码
v0.0.25改为通过default.toml的[[includes]]指令动态解析 ✅ resolve_registry_url()在失败时返回空字符串而非非零退出码,与set -e兼容,调用方通过[ -z "${registry_url}" ]检测失败并尝试 fallback ✅- rootfs 下载与内核镜像下载分离,新增
ROOTFS_IMAGE_NAME字段到 CFG 配置 ✅
3. 文档更新(qemu-quickstart.md、qemu-quickstart_cn.md)
所有示例命令已更新为匹配新的 cargo xtask axvisor qemu 和路径约定。Linux 文档现在正确描述 BusyBox 交互 shell 行为(不再错误声称 test pass!),NimbOS 也明确标注分步执行方式。最新 commit 将路径改为 axvisor 目录相对路径,解决了独立 crate 文档不应引用仓库根目录的问题。✅
先前审查意见处理
ZR233 于 commit f062d126 提交了两条阻塞意见:
-
set -e与resolve_registry_url返回值冲突:当前 head 中resolve_registry_url()失败时 echo 空字符串并返回 0,不会触发set -e退出。调用方使用[ -z "${registry_url}" ]检测失败后依次尝试AXVISOR_REGISTRY_FALLBACK_URL和 xtask 内置同步。✅ 已解决。 -
Linux 文档声称
test pass!但实际行为是 BusyBox shell:当前英文和中文文档均正确描述 Linux guest 启动后进入~ #BusyBox 交互 shell,须手动退出。不再错误声称test pass!。✅ 已解决。
ZCShou 的评论指出文档不应引用仓库根目录:最新 commit 已将路径改为 axvisor 目录相对路径,符合独立 crate 文档的要求。✅ 已解决。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ 通过(无 Rust 代码变更) |
bash -n setup_qemu.sh |
✅ 语法正确 |
bash -n quick-start.sh |
✅ 语法正确 |
git diff --check |
✅ 无空白问题 |
[patch.crates-io] 检查 |
✅ 未引入任何 patch |
CI 状态
当前 head (8d95365d) 的 CI workflow 运行成功(conclusion: success)。fmt、clippy、spin-lint、sync-lint 等 lint 检查全部通过。axvisor 相关测试(loongarch64 qemu)通过。大多数 QEMU/board 测试因路径过滤正确跳过(PR 仅修改 os/axvisor/ 下的脚本和文档)。
CI 中 mergeable_state: blocked 为正常状态,并非本 PR 导致。
重复/重叠分析
- 在
os/axvisor/scripts/、os/axvisor/doc/路径下无其他开放 PR 存在重叠 - PR #1616(
fix(axvisor): correct shell filesystem command handling)涉及 AxVisor shell 命令实现(Rust 代码),与本 PR 的脚本/文档修复无冲突 - base 分支中无等效功能的已有实现
结论
该 PR 是一次目标明确、范围可控的修复。所有命令、路径和文档更新均与 axbuild 重构后的实际子命令结构和镜像注册表布局一致。ZR233 的两条阻塞意见已在当前 head 中解决,ZCShou 的文档独立性建议也已采纳。无 [patch.crates-io],无 Rust 代码变更需要 clippy/test 覆盖,CI lint 检查全部通过,git diff --check 无空白问题。
批准合并。
已知限制
- 本审查环境无 QEMU/KVM,未能进行端到端 QEMU 工作流验证;CI 中 axvisor loongarch64 qemu 测试通过以及 PR 作者声明的端到端验证(ArceOS AArch64、Linux AArch64、NimbOS x86_64)提供了远程验证证据。
Powered by deepseek-v4-pro
ZR233
left a comment
There was a problem hiding this comment.
当前 head 已修正文档中的交互式终态,bash -n os/axvisor/scripts/{setup_qemu.sh,quick-start.sh} 通过,cargo xtask axvisor qemu --help 也确认文档参数存在;CI 为 pass=30、skipped=29。开放 PR 搜索没有发现等价脚本迁移,和 #1620 的变更文件也无交集。
但 registry 失败控制流仍未闭环:resolve_registry_url 现在确实不会因 set -e 提前退出,然而无 fallback 时 bootstrap_image_registry 在声称“交给 xtask”后返回 1;调用点未捕获该状态,仍会被 set -e 终止,第二次 cargo xtask image pull 不会执行。旧线程还要求的 mock-curl 确定性回归也未接入,因此保持打开并请求修改。
最新改动 (3cf433b)修复内容
新增测试
验证已知遗留(后续 PR)README 中的 config 相对路径(如 |
ZR233
left a comment
There was a problem hiding this comment.
基于 current head 3cf433b9a5469e1f0e11ecf893982036a407f2c7 复核,上一轮指出的生产控制流已经修正:bootstrap_image_registry 的非致命路径现在返回 0,第二次 cargo xtask image pull 可以继续执行;Linux 交互式终态文档也已修正,对应旧线程已解决。
当前仍有两项阻塞:
- 新增的 mock-curl 测试没有调用
setup_qemu.sh中的生产函数,而是在测试文件中手工复制resolve_registry_url、bootstrap_image_registry和调用链。当前 12 项断言虽然通过,但只验证副本;生产实现即使恢复为return 1,这组测试仍会通过,不能满足确定性回归要求。 - README 仅把 QEMU 示例改为
cargo xtask axvisor qemu,同一节中的config ls、defconfig、build、uboot仍错误地放在顶层。实际cargo xtask --help只有axvisor顶层入口,而这些子命令都位于cargo xtask axvisor --help下;英文和中文文档需要同步改为cargo xtask axvisor ...。
本地验证:git diff --check origin/dev...HEAD 通过;三个 shell 脚本 bash -n 通过;现有回归脚本报告 12/12 通过,但因上述测试隔离问题不能证明生产实现;实际 CLI help 已确认顶层 cargo xtask build 返回 “unrecognized subcommand”。current-head CI 暂无失败,当前为 pass=16、skipping=29、pending=14,已完成的 Axvisor aarch64、loongarch64、riscv64、SVM 和 VMX UEFI 路径均通过。
开放 PR 搜索没有发现等价的 setup_qemu/registry 修复;与已合并 #1620 的变更文件也无重叠。请让回归测试直接执行生产实现,并修正双语 README 的完整命令组后再复核。
最新改动 (3e48c3e)针对上一轮 ZR233 的两项阻塞意见: 1. 测试现在通过
|
There was a problem hiding this comment.
审查总结
该 PR 修复了 tg-xtask 统一重构和镜像注册表重组后 AxVisor QEMU 快速启动脚本和文档中失效的命令与路径。变更范围仅限脚本(bash)、文档(markdown)和 Cargo 别名配置(8 个文件),无 Rust 代码变更。
ZR233 之前阻塞意见处理
上一轮 ZR233 针对 commit 3cf433b 的两项阻塞意见在当前 head 3e48c3e 均已解决:
1. ✅ 测试现在通过 source 直接加载生产函数
test_bootstrap_registry.sh 不再使用 sed+eval 文本快照,而是直接 source setup_qemu.sh 加载真实的生产函数定义。setup_qemu.sh 末尾添加了 source guard([[ "${BASH_SOURCE[0]}" == "${0}" ]]),被 source 时只加载函数和变量定义,不执行主逻辑。mock curl 在 source 之前定义,生产函数解析到 mock。Case 5(regression guard)故意将路径改为 return 1,验证测试能检测到回归。
2. ✅ README 全部子命令加上 axvisor 前缀
中英文 README 的 config ls、defconfig、build、qemu、uboot 全部改为 cargo xtask axvisor ...。grep 残留验证全部 CLEAN。
变更分析
删除过时的本地 xtask 别名(.cargo/config.toml)
- 移除了
[alias] xtask = "run --bin xtask --",该别名指向不可编译的本地 xtask 二进制,会遮蔽仓库根级别的正确别名。变更正确。
修复脚本中的 cargo 命令和镜像路径(setup_qemu.sh、quick-start.sh)
cargo xtask qemu→cargo xtask axvisor qemu:axvisor是 axbuild 中的顶层子命令 ✅cargo axvisor image pull→cargo xtask image pull:image是 tg-xtask 的顶层子命令 ✅- 镜像名称更新:旧格式
qemu_aarch64_arceos→ 新格式qemu-aarch64,与统一镜像注册表一致 ✅ - 存储路径:
IMAGE_STORAGE_ROOT默认使用${WORKSPACE_ROOT}/tmp/axbuild/rootfs,通过export TGOS_IMAGE_LOCAL_STORAGE传递给 xtask 子进程,路径一致 ✅ resolve_registry_url()失败时返回空字符串(非return 1),不会触发set -e退出 ✅bootstrap_image_registry()无 registry URL 时返回return 0(非return 1),fallback 可达 ✅- rootfs 下载与内核镜像下载分离,新增
ROOTFS_IMAGE_NAME字段 ✅
文档更新(qemu-quickstart.md、qemu-quickstart_cn.md)
- 所有示例命令更新为匹配
cargo xtask axvisor qemu和 axvisor 目录相对路径 ✅ - Linux 文档正确描述 BusyBox 交互 shell 行为(不再错误声称
test pass!)✅ - NimbOS 明确标注分步执行方式 ✅
验证结果
| 检查项 | 结果 |
|---|---|
bash -n setup_qemu.sh |
✅ 通过 |
bash -n quick-start.sh |
✅ 通过 |
bash -n test_bootstrap_registry.sh |
✅ 通过 |
test_bootstrap_registry.sh (11/11) |
✅ 全部通过(含 regression guard) |
[patch.crates-io] 检查 |
✅ 无 |
git diff --check |
✅ 无空白问题 |
| README grep 残留验证 | ✅ CLEAN |
CI 状态
当前 head CI:大部分 axvisor 相关测试因路径过滤正确跳过。Lint 检查(fmt、clippy、spin-lint、sync-lint)通过。无 PR 相关失败。
⚠️ 阻塞:合并冲突
当前 PR 与 origin/dev 存在合并冲突(mergeable_state: dirty),涉及:
os/axvisor/scripts/setup_qemu.sh:CFG case 语句冲突,PR 侧使用新命名格式(带ROOTFS_IMAGE_NAME字段),base 侧使用旧格式os/axvisor/scripts/quick-start.sh:x86_64 Linux setup 部分冲突,PR 侧使用新模板路径和内核路径
冲突解决方向:保留 PR 侧(HEAD)的更改(新命名格式),因为 PR 是本轮重构的目标。同时注意 base 已将 linux-vmx-smp1.toml 重命名为 linux-smp1.toml,脚本引用需同步更新。
合并后需重新运行:
bash -n os/axvisor/scripts/{setup_qemu.sh,quick-start.sh}
bash os/axvisor/scripts/test_bootstrap_registry.sh重复/重叠分析
- 在
os/axvisor/scripts/、os/axvisor/doc/路径下无其他开放 PR 存在重叠 - PR #1620(已合并)涉及 CI workflow 修复,与本 PR 的 Axvisor 脚本/文档修复无冲突
结论
该 PR 的代码变更全部正确,ZR233 之前的两项阻塞意见已解决。11 项回归测试全部通过,脚本语法正确,文档命令已完整更新。唯一的阻塞项是合并冲突,需要在 push 合并冲突修复后重新验证。
Powered by deepseek-v4-pro
ZCShou
left a comment
There was a problem hiding this comment.
scripts 下面的脚本完善本身没啥问题,但是这个PR应可以更进一步,因为我们主要使用 cargo xtask 来统一处理,应该确保 cargo xtask 与tgoskits 一致,脚本这些后续可能直接清理掉就行了,否者脚本与 cargo xtask 在功能上有重叠,完全不必要
… in setup_qemu.sh
setup_qemu.sh 仅通过 export TGOS_IMAGE_LOCAL_STORAGE 隐式控制
cargo xtask image pull 的输出目录,缺少显式的 CLI override。
虽然 env var 在 ImageConfig::read_config() 中被消费且机械上正确,
但该机制对代码读者不可见,reviewer 明确提出应使用显式的 -S flag。
改为在每次 pull 调用时传递 -S "${IMAGE_STORAGE_ROOT}",使用
xtask 最高优先级的 local-storage override 机制。
Changes:
- 4 处 cargo xtask image pull 调用全部加上 -S "${IMAGE_STORAGE_ROOT}" 参数
There was a problem hiding this comment.
审查结论
此 PR 将 AxVisor 快速启动相关的旧本地 xtask 别名、镜像名/缓存布局和命令层级迁移到统一的 cargo xtask 接口,并同步更新中英文 README 与 QEMU 指南;同时为 registry fallback 增加了 source 生产脚本的回归测试。命令修正和 registry/rootfs 分离的总体方向与当前 tg-xtask 的 image 顶层命令、axvisor qemu 子命令一致。
变更主要限于脚本、文档和 Cargo 配置,但并非完全隔离:setup_qemu.sh 会修改工作区持久化的 tmp/axbuild/.image.toml,该文件决定后续(没有环境变量时)cargo xtask axvisor qemu 的镜像缓存位置。新增测试触发了这个跨调用契约的回归。
阻塞问题
见内联评论:source 生产脚本的测试会将已有 .image.toml 的 local_storage 改为临时测试目录,随后清理该目录却不恢复配置。这样测试虽通过,后续 QEMU 命令会读取一个已删除的缓存路径。请将持久配置同步移入仅直接执行的主流程,或让测试完整保存/恢复文件(包括原本不存在的情况),并增加该不变量的回归断言。
已核查的既有反馈
此前关于 cargo xtask axvisor ... 子命令、registry fallback 在 set -e 下不可达、测试未加载生产函数,以及 image pull 缺少显式 storage override 的意见,当前 head 分别通过命令更新、受控 return 0、source guard/真实函数调用和 -S/--local-storage 得到处理。Linux 文档也改为说明 BusyBox 交互终态,而不再声称会自动输出 test pass!。当前遗留的是上述测试副作用;新增脚本目前也没有被 CI/workflow 发现或执行的引用,修复时应补齐可持续执行的覆盖方式。
验证
python3 /tmp/review_pr_helper.py test:7/7 通过;prepare-review已确认 workspace/head 为f9f30b7744d5ba4315df7658afd9ab419bde3991。cargo fmt --all --check:通过。bash -n检查三个改动 shell 脚本、bash os/axvisor/scripts/test_bootstrap_registry.sh:通过,测试报告 11/11;另外的隔离复现确认该测试会把一个预置.image.toml改为/tmp/test_bootstrap_registry_*/images,cleanup 后该路径不存在。- 从
os/axvisor执行的cargo xtask image pull --help和cargo xtask axvisor qemu --help确认-S/--local-storage及目标命令存在。 - helper 建议的
cargo clippy --manifest-path os/axvisor/Cargo.toml --all-features -- -D warnings和对应cargo test未通过:构建在未改动的 AxVisor 本地xtask/kernel feature 组合处失败(例如axbuild::axvisor::image不存在、ax_std/axvm未链接),未能进入 QEMU 验证;这是当前环境中记录的额外限制。 - 当前 head 的 Checks 为 59 个已完成项(29 success、29 skipped、1 cancelled),未见 failure;取消/跳过的矩阵项没有证据表明由此 PR 造成。
重叠与风险
按 AxVisor 脚本路径和命令迁移关键词搜索未发现同一改动面的开放 PR;此前提及的 #1606 涉及不同的 shell 实现区域。请先修复持久配置污染并验证修复后的脚本测试不会改变调用者的 image 配置,再重新审查。
Powered by gpt-5.6-terra
There was a problem hiding this comment.
本 PR 将 AxVisor QEMU 快速启动流程迁移到统一的 cargo xtask 命令和新的镜像布局:移除遮蔽 workspace alias 的本地 xtask alias,更新 setup_qemu.sh/quick-start.sh、中英文 README 与 QEMU 指南,并新增 registry bootstrap 回归脚本。显式 -S/--local-storage、set -e 下的 registry fallback 以及 README 子命令问题已按既有反馈修复。
变更并非完全隔离:setup_qemu.sh 修改工作区持久化的 tmp/axbuild/.image.toml,其 local_storage 会影响后续未设置环境变量的 cargo xtask axvisor qemu。新增 source-based 测试触发了这个跨调用契约的回归,见内联评论;测试完成后会遗留指向已删除临时目录的配置,使后续 QEMU 工作流失效。
历史 review 已逐项核查:镜像下载/查找不一致已通过每次 pull 的 -S 解决;registry fallback 现在是受控非致命路径;测试已改为 source 真实生产函数;README 的 axvisor 子命令和 Linux BusyBox 交互终态也已更新。上述持久配置污染在当前 head 仍未解决。
验证:prepare-review 已确认 HEAD 为 f9f30b7744d5ba4315df7658afd9ab419bde3991;git diff --check、三个改动脚本的 bash -n、bash os/axvisor/scripts/test_bootstrap_registry.sh(11/11)和 cargo fmt --check 通过。我额外以预置 .image.toml 复现:执行该测试后 local_storage 被改写为 /tmp/test_bootstrap_registry_*/images,而 cleanup 删除了该目录。cargo xtask image pull --help 与 cargo xtask axvisor qemu --help 确认目标命令及 -S 可用。helper 建议的 AxVisor cargo clippy/cargo test 在未改动的本地 AxVisor xtask 与 bare-metal feature 组合处失败(例如已删除的 axbuild::axvisor::image import、缺失 ax_std/axvm 链接),因此不能作为本 PR 的 QEMU 成功证据。
当前 head 的 59 个 checks 均已完成(29 success、29 skipped、1 cancelled),未见由本 PR 引起的 failure;跳过/取消矩阵不替代本地脚本验证。按 AxVisor script/command 关键词搜索,未发现同一改动面的重叠开放 PR。请先消除这一副作用并增加配置不变的回归断言后再审。
Powered by gpt-5.6-terra
ZR233
left a comment
There was a problem hiding this comment.
本轮复审确认,上次 ZR233 提出的 registry fallback、生产函数回归测试和 README 子命令问题已经在当前 head 修复:resolve_registry_url 保证失败时返回空字符串而不触发 set -e,bootstrap_image_registry 的无 URL/下载失败路径成为非致命回退;测试现在直接 source 生产脚本并执行真实函数;中英文示例均使用 cargo xtask axvisor ...。镜像 pull 也统一显式传递 -S ${IMAGE_STORAGE_ROOT}。
当前仍有一个阻塞副作用:setup_qemu.sh 被 test_bootstrap_registry.sh source 时,line 28 的顶层 sed 仍会改写 workspace 持久化 tmp/axbuild/.image.toml。测试在 source 前把 TGOS_IMAGE_LOCAL_STORAGE 指向 /tmp/test_bootstrap_registry_*/images,11/11 断言结束后 cleanup 删除临时目录,却不恢复配置。使用有效配置实测,local_storage 被改成已不存在的测试路径,文件哈希也发生变化;随后未设置环境变量的 cargo xtask axvisor qemu 会读取悬空缓存位置。该问题已有两条当前 line 28 的未解决线程,本轮不重复创建第三条行内线程。请把持久配置同步移到只在脚本直接执行时运行的主流程,或在测试中完整保存/恢复 .image.toml(包括原文件不存在的情况),并增加配置字节不变的回归断言。
验证:git diff --check origin/dev...HEAD 与三个脚本 bash -n 通过;test_bootstrap_registry.sh 11/11 通过但稳定产生上述配置污染;cargo xtask image pull --help 确认 -S/--local-storage 可用;README 中 axvisor config ls/defconfig/build/qemu/uboot help 均可用。CI 未覆盖 setup_qemu.sh 和 standalone shell regression,因此实际执行 ./scripts/setup_qemu.sh arceos 完成镜像准备和 VM config 生成,随后脚本给出的完整 cargo xtask axvisor qemu ... 成功启动 AArch64 Axvisor/ArceOS,guest 输出 Hello, world!。宽泛 fmt/clippy/普通 Axvisor 矩阵已由 current-head CI 覆盖,未重复。
唯一取消的 SG2002 job 长时间等待板卡租约/上电,未进入本 PR 逻辑,与改动无关,已补充到 #1666。base 和开放 PR 多关键词搜索未发现等价 setup_qemu/image bootstrap 实现;相关 PR #1665/#1596/#1451 检查后不重叠。当前无 merge conflict。已修复的五个旧线程可关闭;line 28 的两个持久配置副作用线程保持打开。
Move the persistent image config sync inside the BASH_SOURCE guard so that sourcing setup_qemu.sh (e.g. from test_bootstrap_registry.sh) does not mutate the caller's tmp/axbuild/.image.toml. Add a regression test asserting byte-level config invariance after source. Merge upstream/dev: accept HEAD deletion of local [alias] section in .cargo/config.toml — workspace root alias 'xtask = run -p tg-xtask --' already covers all axvisor subcommands.
There was a problem hiding this comment.
审核结论
本 PR 修正了 AxVisor 快速启动脚本、README 与 QEMU 指南中因 xtask/镜像注册表重构而失效的命令和镜像布局,并新增 registry bootstrap 的脚本回归测试。变更是 AxVisor 开发工作流修复,不新增公共接口或平台能力;feature-development.md 的新功能设计门槛不适用。
实现总体隔离在 os/axvisor 的脚本与文档中;已有 registry fallback、README 子命令和测试直接 source 生产函数等历史审查意见已在当前 head 中处理。此次仍发现一个首运行自定义镜像缓存会使脚本输出的第二步命令失效的问题,详见行内评论。
验证与 CI
- 本地:
bash -n os/axvisor/scripts/{setup_qemu.sh,quick-start.sh,test_bootstrap_registry.sh通过;bash os/axvisor/scripts/test_bootstrap_registry.sh为 12 passed、0 failed;git diff --check origin/dev...HEAD通过。 - 当前 head 的组织 CI:61 个 check 均已完成,31 success、30 skipped、0 failure;跳过项为矩阵/路径筛选项,未见本 PR 导致的失败。CI 已覆盖 AxVisor 相关路径,因此未重复执行耗时 QEMU 运行。
- 本地尝试查看 xtask help 时环境需要下载 nightly 与依赖;这不影响上述已通过的组织 CI 结论。
覆盖、重叠与遗留风险
新增 mock-curl 测试正确覆盖了 registry fallback 的生产函数,但没有覆盖“初始没有 .image.toml 且设置自定义缓存”这一首运行流程;该缺口会触发本次阻塞问题。已检查 base 的 AxVisor 脚本/镜像配置实现及相关开放 PR 搜索,未发现与本改动语义重复或需要依赖的其他开放 PR。除下述问题外,变更看起来局限于启动辅助脚本和文档。
请先修复该问题并补充对应回归测试。
Powered by gpt-5.6-terra
ZR233
left a comment
There was a problem hiding this comment.
本轮按 current head e9dac5503bf97d19a583e0b8474e39acd8e2ee51 增量复核。source 测试污染 workspace 配置的问题已经通过 direct-execution guard 修复,旧线程已关闭;但自定义镜像缓存的首次使用仍有阻塞:
当初始 tmp/axbuild/.image.toml 不存在时,第 219 行不会持久化 TGOS_IMAGE_LOCAL_STORAGE。后续 cargo xtask image pull -S <custom> 虽下载到自定义目录,却会创建指向默认目录的配置;脚本打印的第二步命令在环境变量消失后读取默认缓存,找不到刚下载的镜像。
验证清单:
-
bash -n、git diff --check通过; -
test_bootstrap_registry.sh12/12 通过; - 现有测试没有覆盖“配置初始不存在 + 自定义缓存 + 随后无环境变量运行”的端到端路径;
- 用户文档给出的两步流程在该合法场景不可复现。
请在 pull 后创建/更新持久配置,或让打印命令显式携带同一缓存变量,并补上述首次运行回归。
新工作区设置 TGOS_IMAGE_LOCAL_STORAGE 自定义缓存路径时, 首个 cargo xtask image pull 会创建 .image.toml 但写入默认 local_storage,导致脚本退出后后续命令找不到已下载的镜像。 Changes: - 提取 persist_image_storage_config 函数,支持可选路径参数便于测试 - 在 image pull 完成后持久化 local_storage 到 .image.toml
补首次运行场景的回归测试,覆盖审核要求的端到端链路。 Changes: - Case 7: 配置已存在时 persist 更新 local_storage 并保留其他字段 - Case 8: 配置不存在时 persist 幂等安全 - Case 9: 初始无配置 → pull 创建默认配置 → persist 修正 → 环境变量消失后仍正确
|
已处理本轮 blocking review 指出的自定义缓存未持久化问题。 修改:
新增回归测试(Case 7/8/9):
验证:
@ZR233 @mai-team-app 请求重新审校。 |
There was a problem hiding this comment.
审查结论
本 PR 旨在适配 tg-xtask 重构后的 AxVisor 镜像 registry、修正 cargo xtask axvisor 命令、镜像缓存持久化及中英文快速上手文档。feature-development.md 不适用:这是既有脚本/文档兼容性修复,未增加新的公共能力。
setup_qemu.sh 的 registry fallback、显式 -S 存储目录及 .image.toml 持久化逻辑与当前 scripts/axbuild 的 local_storage 覆盖语义一致;此前相关的 fallback/source/缓存持久化审查意见已由当前实现和新增 mock-curl 测试覆盖。
但仍有一个阻塞问题:x86_64 quick-start 的镜像名/目录布局没有随本 PR 的 registry 迁移完成,详见行内评论。该路径仍被文档和脚本声明为支持的工作流,不能批准。
验证与 CI
- 本地通过:
git diff --check origin/dev...HEAD、三个脚本的bash -n、bash os/axvisor/scripts/test_bootstrap_registry.sh(19 passed, 0 failed)。 - 本地通过:
cargo xtask image pull --help、cargo xtask axvisor qemu --help;首次构建所需依赖已下载。 - 当前 head
51e22bd900d8f2180e482c86bfc632d3497c6b75的组织 CI:61 个 checks 均完成,31 success、30 skipped、0 failure;skipped 为矩阵/路径过滤的预期项。与 AxVisor 相关的 QEMU/检查作业均为 success,未发现 PR 引入的 CI 失败。 - 未运行完整 QEMU:本 PR 的组织 CI 已覆盖 AxVisor 运行矩阵,且本地问题可由 registry 内容和脚本控制流确定复现;新增脚本测试本身已本地执行。
覆盖、既有意见与重叠
新增 test_bootstrap_registry.sh 能直接 source 生产函数并覆盖 registry fallback、幂等性与存储配置持久化;但未覆盖 quick-start.sh 的 x86_64 准备分支,因而没有发现本次遗留问题。此前审查的 registry fallback、存储路径和 source 测试意见在当前 head 已解决;本评论是新的未解决问题。
已核对 base 的 axbuild image CLI/存储实现,并搜索相关开放 PR;未发现与脚本或 registry 迁移重叠的开放变更(#1653 为独立的 AxVisor backtrace 功能)。当前变更不涉及 StarryOS syscall/ABI。审查清单其余项目已完成;唯一未完成项为下方阻塞问题。
Powered by gpt-5.6-terra
The x86_64 quick-start functions (setup_qemu_x86_64 and setup_qemu_x86_64_uefi) still reference the deprecated qemu_x86_64_nimbos image name and paths, but the current registry only provides qemu-x86_64. Without this fix, the setup commands fail to download the correct image and write broken paths into generated config files. Changes: - Rename pull target from qemu_x86_64_nimbos to qemu-x86_64 - Update rootfs.img path references from qemu_x86_64_nimbos/ to qemu-x86_64/ - Update OVMF_CODE.fd candidate path to qemu-x86_64/ - Update UEFI guest config kernel_path to qemu-x86_64/ - Add BASH_SOURCE source guard to allow sourcing for regression tests
There was a problem hiding this comment.
审查结论
本 PR 将 AxVisor 的快速启动脚本和中英文文档迁移到当前 cargo xtask 子命令及 tgosimages 注册表布局:删除遮蔽根级 xtask 的成员别名,修复 axvisor qemu/uboot 调用,统一镜像名、下载目录和生成 VM 配置路径,并增加 registry fallback、缓存持久化与 x86_64 镜像名的回归覆盖。
feature-development.md 适用:这是低风险的既有工作流修复,未新增公共 Rust API 或 StarryOS syscall/Linux ABI(后者不适用)。实现与 scripts/axbuild/src/image.rs、image/config.rs 的 --output-dir、-S/--local-storage、TGOS_IMAGE_LOCAL_STORAGE 优先级一致;当前 registry 也包含 qemu-aarch64、qemu-riscv64、qemu-x86_64。镜像目录、fallback 和 .image.toml 持久化的历史阻塞意见已在当前 head 通过直接 source 生产函数的测试覆盖,未发现遗留问题。
验证:
git diff --check origin/dev...HEAD、四个脚本的bash -n通过;bash os/axvisor/scripts/test_bootstrap_registry.sh:19 passed;bash os/axvisor/scripts/test_quick_start_x86_64.sh:6 passed;- 已安装并运行 ShellCheck:新增 SC2120/SC2119 仅对应测试所需的可选配置参数;
quick-start.sh的 SC2145/SC2016 均为基线已有项,未发现本 PR 引入的实际 shell 行为错误。
当前 head 的组织 CI 汇总为 success=30、skipped=34、cancelled=4、failure=1。格式、spin/sync lint 及 AxVisor QEMU 相关矩阵已成功;失败项为自托管 roc-rk3568-pc-linux 板级作业,未调用本 PR 改动的脚本或文档,未见其与本变更的因果关系。其余 skipped/cancelled 为矩阵/路径选择结果。
已检查既有 review 评论:storage 路径、fallback 在 set -e 下的可达性、source guard、README 子命令和缓存持久化均已解决。对 origin/dev 与相关开放 PR 的 AxVisor/quick-start/镜像迁移范围进行了检索,未发现重复或需先后合并的实现。
待办审计完成:脚本、文档、测试、CI、历史评论和重叠分析均已覆盖;没有未解决的阻塞项。MAINTAINERS 中 AxVisor 与工作流范围对应 ZR233、ZCShou,二者已在请求列表/既有评审中,无需新增请求。
Powered by gpt-5.6-terra
ZR233
left a comment
There was a problem hiding this comment.
本轮复核基于 current head 8c6e086fd89a898d81e5c3ddfbb1c71d31266bbc。
该 PR 恢复 Axvisor quick-start/setup 脚本在 xtask 与新版镜像 registry 下的既有工作流,不新增公共 API/ABI;feature-development.md 已核对,本次属于既有行为的 bug 修复,功能设计分级门槛不适用。StarryOS syscall/Linux ABI、unsafe、依赖解析与 [patch.crates-io] 均不适用。
已确认上一轮两个阻塞项的代码修复成立,并已解决对应过期线程:首次没有 .image.toml 时,pull 后会再次持久化自定义缓存;x86_64 镜像名也已迁移到 qemu-x86_64。回归脚本在 current head 为 19/19 与 6/6;把当前缓存持久化测试放到旧实现 e9dac5503bf97d19a583e0b8474e39acd8e2ee51 上运行时为 15/19、退出 1,current head 为 19/19、退出 0。bash -n 与 git diff --check 通过。
实际工作流验证中,TGOS_IMAGE_LOCAL_STORAGE=/tmp/pr1607-image-cache ./scripts/setup_qemu.sh arceos 在初始无配置时完成下载,生成的 tmp/axbuild/.image.toml 正确记录自定义目录;随后不带环境变量执行脚本打印的 cargo xtask axvisor qemu ...,成功启动并匹配 Hello, world!。但 ./scripts/quick-start.sh qemu-x86_64 setup 后执行 ./scripts/quick-start.sh qemu-x86_64 run --nimbos 会在 QEMU 加载 Axvisor 时退出 1;另有一处自定义路径转义问题,详见 inline comments。由于第一个 x86_64 实际工作流已在共享启动入口失败,其余 NimbOS UEFI/Linux 变体未继续作为通过证据。
current-head CI 有 30 个成功、34 个跳过、4 个因 fail-fast 取消;唯一失败的 ROC-RK3568-PC job 在板卡租约阶段持续报告无可用板卡,最终访问 localhost:2999 失败,未进入本 PR 的 QEMU/镜像逻辑,已补充到基础设施 issue #1666:#1666 (comment) 。本地 cargo xtask axvisor test qemu --arch x86_64 --test-case smoke-vmx 同机通过 1/1,证明 KVM 与当前 x86_64 Axvisor 测试链路可用,也排除了 quick-start 失败只是本机无虚拟化能力。
重复/重叠检查:current base 仍保留旧 quick-start 镜像名与命令,未包含本修复;按 setup_qemu、quick-start、qemu-x86_64、TGOS_IMAGE_LOCAL_STORAGE 检索开放 PR,仅 #1607 命中相同意图,没有发现重复或冲突实现。
结论:两个 current-head 阻塞需要修复并补充能执行真实工作流的回归覆盖后再复核。
|
|
||
| run_axvisor_qemu() { | ||
| run_cmd cargo xtask qemu "$@" | ||
| run_cmd cargo xtask axvisor qemu "$@" |
There was a problem hiding this comment.
【阻塞|x86_64 quick-start 的实际启动链路仍失败】在 current head 上,./scripts/quick-start.sh qemu-x86_64 setup 能完成镜像和配置准备,但随后执行文档化入口 ./scripts/quick-start.sh qemu-x86_64 run --nimbos 时,构建成功后 QEMU 以 Error loading uncompressed kernel without PVH ELF Note 退出 1。对照命令 cargo xtask axvisor test qemu --arch x86_64 --test-case smoke-vmx 在同一机器、同一 head、同一 /dev/kvm 上通过 1/1,因此不是缺少 KVM,而是 quick-start 仍把 Axvisor ELF 交给 legacy -kernel 直启配置;当前测试只 grep 脚本文本,无法观察这个失败。请把 x86_64 quick-start 接到当前可启动的 x86_64/UEFI 流程,或生成 QEMU 直启所需的有效启动制品,并增加会实际执行该入口、在启动失败时退出非零的回归测试。
| persist_image_storage_config() { | ||
| local config_path="${1:-${WORKSPACE_ROOT}/tmp/axbuild/.image.toml}" | ||
| if [ -f "${config_path}" ]; then | ||
| sed -i 's|^local_storage = .*|local_storage = "'"${IMAGE_STORAGE_ROOT}"'"|' "${config_path}" |
There was a problem hiding this comment.
【阻塞|合法的自定义缓存路径会损坏 .image.toml】IMAGE_STORAGE_ROOT 直接插入 sed replacement,没有转义 &、|、反斜杠或 TOML 引号。最小复现把路径设为 /tmp/cache&foo 时,这个替换会把 local_storage = "/default" 写成 local_storage = "/tmp/cachelocal_storage = "/default"foo",后续不带环境变量的 xtask 无法解析/定位缓存。请使用 TOML-aware 更新方式,或同时正确转义 sed replacement 与 TOML 字符串,并增加包含 &、分隔符、反斜杠和引号路径的回归用例。
…path escaping Two blocking issues from review: 1. The x86_64 QEMU runtime configs had uefi=false / to_bin=false, so ostool passed the Axvisor ELF to QEMU's legacy -kernel flag, which requires a PVH ELF note the ELF does not have, and the boot failed with "Error loading uncompressed kernel without PVH ELF Note". Setting both flags to true routes through the UEFI pflash path (auto-downloaded OVMF) that the smoke-vmx test already uses successfully. 2. persist_image_storage_config interpolated IMAGE_STORAGE_ROOT directly into a sed replacement string. Paths containing & | \ or " corrupted .image.toml. Replaced with awk character-by-character construction that properly escapes \ " \n \t for TOML basic strings without sed's replacement semantics. Changes: - Set uefi=true and to_bin=true in qemu-x86_64*.toml workflow configs - Rewrite persist_image_storage_config to use awk instead of sed
…char paths Covers the two fix commits: - test_quick_start_x86_64.sh: assert all four qemu-x86_64*.toml workflow configs carry uefi=true + to_bin=true, so a regression back to the legacy -kernel boot path (PVH ELF Note error) is caught. - test_bootstrap_registry.sh: new Case 10 persists IMAGE_STORAGE_ROOT values containing & | \ " and verifies the TOML round-trips byte-for-byte with all other fields preserved. Changes: - Add test_x86_64_qemu_config_uses_uefi_boot to test_quick_start_x86_64.sh - Add extract_local_storage helper and Case 10 to test_bootstrap_registry.sh
审校意见为低风险改进,不阻塞合入但值得固化:测试断言更精确, 避免误匹配与 CRLF 行尾误判。 Changes: - 锚定 local_storage 提取的 grep 模式为 ^local_storage = ,避免误匹配 local_storage_xxx - 为 extract_local_storage 的 \x01/\x02 哨兵字节假设补充注释 - 放宽 UEFI 配置断言为 ^uefi = true[[:space:]]*$,兼容 CRLF 行尾
同步 upstream/dev 前进了 38 个提交(nvme 块设备迁移 rcore-os#1784、块设备 IRQ 驱动重构 rcore-os#1768 等),解决 PR rcore-os#1607 与 dev 的合并冲突。 Changes: - 合并 dev 到 fix/axvisor-scripts-cargo-commands - 解决 qemu-x86_64.toml 冲突:保留 nvme 设备行 + to_bin=true/uefi=true - 四个 x86_64 运行时配置保持一致(nvme + UEFI pflash 引导) - 回归测试 27 + 10 全部通过
There was a problem hiding this comment.
本 PR 修复 AxVisor 快速启动链路在 xtask/镜像 registry 重构后的失效命令、镜像缓存路径和 x86_64 UEFI 启动配置:脚本改用 cargo xtask image pull / cargo xtask axvisor ...,并新增 registry/cache 回归脚本;四个 x86_64 QEMU 配置统一走 to_bin=true、uefi=true。变更是既有启动工作流的修复,不新增公共接口或平台能力,book/guideline/feature-development.md 不适用。
实现复核:setup_qemu.sh 已使用 axbuild 的 TGOS_IMAGE_LOCAL_STORAGE/.image.toml 约定,pull 后持久化有效路径;registry 的不可达分支不再被 set -e 提前截断;新增测试通过 source 加载生产函数。README 和中英文 quickstart 中的 xtask 层级也已与当前命令结构一致。此前关于 registry fallback、缓存持久化、source 测试边界及 README 命令的合理意见已在当前 head 复核为已修复。
但新增的回归测试没有进入项目自动测试入口,见 inline comment;这是当前唯一阻塞项。
验证:
git diff --check origin/dev...HEAD、四个 shell 文件的bash -n通过;bash os/axvisor/scripts/test_bootstrap_registry.sh:27/27;bash os/axvisor/scripts/test_quick_start_x86_64.sh:10/10;review_pr_helper.py prepare-review确认工作区 HEAD 为fc12ed648df9dc8307881be841ce865e8825e6ce;- CI(当前 head)69 项均完成:35 success、34 skipped、0 failure。skipped 为矩阵/路径选择结果;不过这些成功 check 未执行新增 shell 测试,不能作为其持续覆盖证据。
重复/重叠:检索 axvisor quick-start、setup_qemu.sh 和 UEFI AxVisor 的开放 PR 未发现与本实现重复的候选项;本 PR 与现有 AxVisor 命令/镜像层重构是配套修复。
审查 todo 已完成;没有新增 StarryOS/ArceOS app,因此无需 app 运行验证。请接入测试后重新请求审查。
Powered by gpt-5.6-terra
| @@ -0,0 +1,615 @@ | |||
| #!/usr/bin/env bash | |||
There was a problem hiding this comment.
【阻塞|新增回归测试未接入测试入口】这里开始新增的两个 shell 回归脚本目前没有被任何 CI workflow、xtask 命令或项目测试 runner 调用;检索 .github/workflows/ci.yml 只命中一段被注释的 setup_qemu.sh 示例,当前 69 个成功的 check 不会执行这 37 个断言。因此 registry 回退、缓存持久化和 UEFI 配置可以再次回归而 CI 仍为绿。请把这两个脚本接入适当的 CI/xtask 测试入口(至少覆盖 os/axvisor/scripts/** 变更),并提供当前 head 实际执行该入口的证据。
mai-team-app 阻塞项:test_bootstrap_registry.sh(27 case)与 test_quick_start_x86_64.sh(10 case)未接入任何 CI/xtask 测试入口, 这 37 个断言即使回归 CI 仍为绿。在 static_checks 矩阵新增 run_host 条目执行这两个脚本,门控 ci_checks(过滤已含 os/**), os/axvisor/scripts/** 变更即触发。 Changes: - ci.yml static_checks 新增 "Run axvisor shell regression tests"(ubuntu-latest)
There was a problem hiding this comment.
审查结论
本 PR 修复 AxVisor 快速启动中的 tg-xtask 命令层级、统一镜像注册表/缓存路径与 x86_64 UEFI 启动配置,并将对应的 shell 回归脚本接入 static_checks。影响范围限于 AxVisor 脚本、文档、QEMU TOML、Cargo alias 和 CI;不改变 Rust 公共 API、StarryOS syscall/Linux ABI 或运行时内核契约,变更与现有 tg-xtask image pull 的 -S/--local-storage 和 cargo xtask axvisor 子命令边界一致。feature-development.md 因此不适用(没有新增用户可见能力或共享接口)。
已复核先前的阻塞讨论:镜像缓存现在通过 TGOS_IMAGE_LOCAL_STORAGE 与 -S 保持一致,并在 pull 后持久化;registry 不可达路径在 set -e 下为受控非致命分支;回归测试直接 source 生产脚本;README 的 AxVisor 子命令已完整更正。当前变更未发现新的阻塞问题。
验证:
cargo fmt --check、git diff --check通过;bash -n及test_bootstrap_registry.sh(27/27)、test_quick_start_x86_64.sh(10/10)本地通过;cargo xtask image pull --help与cargo xtask axvisor --help验证命令结构;4 个 x86_64 QEMU TOML 通过tomllib解析;- 当前 head CI 的
Run axvisor shell regression tests / run_host、格式化、spin-lint、sync-lint 均成功。其余跳过项符合矩阵/路径过滤;未见由本 PR 改动导致的失败证据。
重复/重叠检查:基线没有同等的 registry/cache 持久化实现;以 quick-start.sh、TGOS_IMAGE_LOCAL_STORAGE、qemu-x86_64.toml 等关键词检索的开放 PR 未显示与本 PR 相同的实现冲突。测试在 CI 矩阵中被发现并执行,覆盖 registry fallback、缓存持久化/转义、source guard、镜像名称和 UEFI 配置。
审查 todo 已完成;没有遗留阻塞风险或测试缺口。批准合并。
Powered by gpt-5.6-terra
问题
tg-xtask 统一重构和镜像注册表重组后,AxVisor QEMU 快速启动脚本、运行时配置和文档中有多处命令/镜像路径失效,导致 x86_64 路径无法正常启动:
xtask别名遮蔽了仓库根的cargo xtask别名cargo xtask qemu、cargo axvisor image pull与重构后的 axbuild 子命令不一致qemu_x86_64_nimbos已不存在,新注册表统一使用qemu-x86_64local_storage,脚本退出后环境变量消失,后续命令找不到已下载镜像uefi=false/to_bin=false时,ostool 将 Axvisor ELF 传给 QEMU-kernel,因 ELF 缺 PVH note 报 "Error loading uncompressed kernel without PVH ELF Note"persist_image_storage_config用 sed 直接内插路径,&/|/\/"会损坏.image.toml修改
os/axvisor/.cargo/config.toml中过时的本地 xtask 别名cargo xtask qemu→cargo xtask axvisor qemu;cargo axvisor image pull→cargo xtask image pullqemu_x86_64_nimbos→qemu-x86_64,路径tmp/images/qemu-x86_64/resolve_registry_url()/bootstrap_image_registry(),registry 版本经default.toml的[[includes]]动态解析,支持AXVISOR_REGISTRY_FALLBACK_URL兜底-S "${IMAGE_STORAGE_ROOT}"显式指定输出目录;新增persist_image_storage_config在 pull 后持久化路径到.image.tomlqemu-x86_64*.toml)改为to_bin = true/uefi = true,走 UEFI pflash 引导persist_image_storage_config改用 awk 逐字符 TOML 转义,替换有注入问题的 sedtest_quick_start_x86_64.sh回归测试qemu-x86_64.toml冲突按"nvme 设备 + UEFI 引导"解决,4 个配置保持一致static_checks矩阵新增 Run axvisor shell regression tests,门控ci_checks(过滤已含os/**),os/axvisor/scripts/**变更即触发,防止这 37 个断言在 CI 绿色下回归每一步的逻辑
uefi=true时用llvm-objcopy -O binary将 ELF 转 BIN、自动下载 OVMF、经-pflash启动(与已验证的 smoke-vmx 测试一致),绕过-kernel对 PVH note 的强制要求&(整个匹配)与\,无法正确写入特殊字符路径;awk 用substr/length逐字符构造\\/\"/\n/\t,完全避开替换语义if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then使脚本可被测试 source 而不执行主逻辑qemu-x86_64.toml采用 nvme 设备行 + 保留to_bin=true/uefi=true,与自动合并的 kvm/uefi/arceos-uefi 配置一致static_checks与 format/lint 同级,任何os/**改动触发,保证 37 个断言持续被 CI 覆盖兼容性
cargo axvisor image pullcargo xtask image pullcargo xtask qemucargo xtask axvisor qemuqemu_x86_64_nimbosqemu-x86_64-S "${IMAGE_STORAGE_ROOT}"+.image.toml持久化测试
test_bootstrap_registry.sh:27 个 case(mock curl,无网络依赖)&/|/\/"往返不损坏test_quick_start_x86_64.sh:10 个 casecargo xtask image pull qemu-x86_64)uefi=true/to_bin=true(CRLF 容忍)static_checks矩阵),并在当前 head 的 CI run 中实际执行通过验证
quick-start.sh qemu-x86_64 run --nimbos-pflashUEFI 引导,无 PVH 报错,guest 进入用户 shell