Skip to content

feat(starry-nixos): add Stage-2 NixOS userspace baseline - #1923

Open
silicalet wants to merge 73 commits into
rcore-os:devfrom
silicalet:004-add-starry-nixos
Open

feat(starry-nixos): add Stage-2 NixOS userspace baseline#1923
silicalet wants to merge 73 commits into
rcore-os:devfrom
silicalet:004-add-starry-nixos

Conversation

@silicalet

@silicalet silicalet commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

问题

现有 apps/starry/nix 只能在 Alpine 用户态中提供 Nix/nixpkgs;它不能证明 StarryOS 能启动由 NixOS 声明生成的 Stage-2 用户态,也无法让 systemd 作为 PID 1 管理声明的系统状态。缺少独立 rootfs 边界时,Axbuild 的预构建流程还会复制并改写 Alpine 镜像,无法可靠地区分 NixOS 系统工件与 Alpine 覆盖层。

修改

  • 新增 opt-in、仅 x86_64apps/starry/nixos:使用锁定的 NixOS flake 在主机构建并校验独立 ext4 rootfs,记录闭包、架构和镜像 provenance。
  • 在 Axbuild 增加 AppOwned rootfs 准备契约:只接受应用构建器发布且已验证的工件;构建、目标或 provenance 不匹配时直接失败,不复制 Alpine rootfs、不改写 APK 配置、不注入覆盖层。
  • 为 StarryOS 增加仅 NixOS app 选择的 PID-1 启动路径,运行生成的 NixOS Stage-2 /init;未选择该 feature 的应用保持原有 shell PID-1 和 rootfs 行为。
  • 增加 x86_64 QEMU UEFI 接受用例。声明式 marker 服务在 PID 1、激活系统引用、账户/包、multi-user.target 都验证后才输出唯一成功记录,并在输出后强制关机使 QEMU 正常结束。
  • 根据真实启动中暴露的 Linux 语义差异,在所属 StarryOS 内核边界修复 procfd、ramfs、statx/mount ID、cgroup、Unix socket、epoll、proc sysctl、挂载命名空间通知等行为;每项修复都有对应的确定性 Starry 回归用例和兼容性记录。
  • 删除与当前内核语义矛盾的 bugfix-proc-sysctl-writable-limitspid_maxmax_map_count 尚未接入资源上限实施,写入必须返回 EOPNOTSUPP;保留并在 LoongArch QEMU 执行 bugfix-proc-sysctl-unsupported-limits 覆盖该契约。
  • 补充 rootfs 使用说明、支持边界、回滚方式和兼容性证据。该能力明确称为实验性 NixOS-style userspace personality,不宣称完整 NixOS 兼容性。

设计与替代方案

设计材料:specs/004-add-starry-nixos/{spec,plan,research,data-model,quickstart}.md

  • 保持 Alpine-plus-Nix 现状不能启动 NixOS Stage-2 或验证 systemd PID 1,因此不能满足目标。
  • 复用默认 Alpine rootfs 或在其上注入 NixOS 文件会混淆 provenance,并会污染既有应用路径;因此选择应用自有的、锁定输入生成的 rootfs。
  • 在用户态掩盖 systemd 失败会产生假成功;实际 Linux 语义缺口均在内核所有者边界修复,并以聚焦回归验证。当前仍保留的 udevd unit-local sandbox override 与临时 machine-ID 例外记录了触发条件和恢复条件。

验证

声明/风险 命令或证据 通过条件
rootfs 工件发布与 provenance 校验 bash apps/starry/nixos/build-rootfs.sh --self-test STARRY_NIXOS_ARTIFACT_SELF_TEST_PASSED
NixOS 配置格式 nixfmt --check apps/starry/nixos/configuration.nix 退出码 0
Stage-2 端到端启动与有界完成 STARRY_NIXOS_REUSE_ROOTFS=1 direnv exec . cargo xtask starry app qemu -t nixos --arch x86_64 QEMU 使用 -smp 8,顺序输出 pid1activationsystemdmarkerSTARRY_NIXOS_SYSTEM_PASSED,文件系统同步后退出码 0
LoongArch proc sysctl 写入语义 cargo xtask starry test qemu --arch loongarch64 -c qemu/system/bugfix-proc-sysctl-unsupported-limits(CI 容器) STARRY_SYSTEM_TEST_PASSED: /usr/bin/starry-test-suit/bugfix-proc-sysctl-unsupported-limitsSTARRY_GROUPED_TESTS_PASSED
内核兼容性修复 test-suit/starryos/qemu/system/bugfix-*cgroup-basic 中新增/更新回归 每个记录的差异从修复前确定性失败变为通过;具体 Linux oracle、命令和重访条件见 apps/starry/nixos/compatibility.md

已知边界:只支持 x86_64 QEMU UEFI/NVMe;不提供 installer、NixOS kernel/initrd/bootloader、来宾内 rebuild 或 generation switching、桌面、网络服务栈、持久 machine ID 或 aarch64 支持。若验收运行出现 shell、部分 phase、失败单元、panic/fatal、超时或成功 marker 后仍未退出,均视为失败。

回滚

功能默认为关闭。移除或禁用 NixOS app/build 配置及其生成的受管镜像即可;其他应用继续使用原有 rootfs 选择和 shell PID-1 路径,未共享或修改 Alpine 镜像。

补充:x86_64 qemu/system 稳定性修复

  • 修复 set_ptrace_syscall_stop 分两阶段发布 stop 记录的竞争:waitpid(..., WNOHANG) 可能在 syscall 标记写入前观察到普通 SIGTRAP,导致 PTRACE_O_TRACESYSGOOD 状态从预期的 0x857f 退化为 0x57f。现在普通 stop 与 syscall stop 都在一次加锁中完整发布。
  • 在 exec 提交点让 PTRACE_EVENT_EXEC 与 legacy exec SIGTRAP 二选一,并确保切换到新页表后才释放旧地址空间。
  • 验证:ptrace 目标用例连续 10/10 通过;cargo xtask starry test qemu --arch x86_64 -c qemu/system 为 432/432;cargo xtask clippy --package starry-kernel 为 25/25;cargo fmt --all --checkgit diff --check 通过。

补充:SMP 新任务放置回归修复

  • 提交 e4411b657 将所有新任务默认改为跨 CPU 轮转,虽然修复了 Starry 用户任务首次入队集中在创建者 CPU 的问题,但也让普通 ArceOS ax_std 线程首次从远端 CPU 启动,触发 riscv64 memtest 回归。
  • 现在 spawn_task_with() 恢复为优先当前 CPU 的默认语义,保留普通内核和 ArceOS 线程的初始局部性;新增显式 spawn_task_with_balanced(),只由 Starry clone/fork 创建独立用户任务时使用。
  • 已运行任务的 wake 路径仍优先其上次运行 CPU;run queue 的 Release/Acquire 发布逻辑保持不变,避免选择尚未初始化的 AP 队列。
  • 验证:cargo xtask arceos test qemu --arch riscv64 完整通过(Rust 18/18、C 7/7,包含 memtest: parallel allocations OKmemtest: cross CPU free OK);LoongArch qemu/system/bugfix-smp-new-task-placement 通过;cargo xtask clippy --package ax-task 17/17、cargo xtask clippy --package starry-kernel 25/25;格式和 diff 检查通过。

补充:开发环境缓存控制

  • .envrc 启用 nix_direnv_manual_reload,进入仓库不再因 tracked 文件变化自动重复求值 flake。需要刷新环境时显式执行 nix-direnv-reload
  • 本轮 QEMU 和 clippy 构建输出均挂载到会话专用的 /tmp 目录,验证结束后已清理;未新增或清理 .ci-cache 内容,也未执行 Nix 构建或 Nix store 垃圾回收。

# Conflicts:
#	os/StarryOS/kernel/src/pseudofs/proc.rs
#	os/arceos/modules/axfs-ng/src/file/handle.rs
#	test-suit/starryos/qemu/system/bugfix-proc-sys-kernel-hostname/src/main.c
…dd-starry-nixos

# Conflicts:
#	os/StarryOS/kernel/src/pseudofs/proc.rs
@mai-team-app
mai-team-app Bot requested a review from ZCShou August 7, 2026 11:29

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 升级,新增 x86_64 StarryNixOS Stage-2、app-owned rootfs/Axbuild 准备与 QEMU 验收,同时带入 StarryOS VFS、proc、任务、网络、epoll 的 Linux ABI 修复以及 someboot 启动熵链路。

book/guideline/feature-development.md 与 Starry syscall 指南均适用:前者对应新的 PID 1/rootfs/UEFI-NVMe 运行路径,后者对应改动的用户可见 VFS、xattr、clone3、execve、time、epoll 等语义。NixOS app 与默认 Alpine rootfs 隔离,新增 system C 用例处于 system/<subcase>/{CMakeLists.txt,src} 布局,根 CMake 可发现;未发现 [patch.crates-io]。不过存在下列阻塞性重复/冲突风险。

本地验证:review_pr_helper.py prepare-reviewgit diff --check origin/dev...HEADcargo fmt --all --checkbash apps/starry/nixos/build-rootfs.sh --self-test 均通过。已运行 app CLI 的配置解析复核;Nix/direnv/nixfmt 不在环境中,下载 nixfmt 也未成功,故未将 Stage-2 QEMU 验收表述为本地通过。组织当前 HEAD 的 checks 不是全绿(75 项中有 1 个 failure、若干 cancelled/skipped;失败项为 Axvisor self-hosted board),不能替代本 PR 声明的 NixOS x86_64 QEMU 验收。

重叠分析:base 中没有 apps/starry/nixos 或 AppOwned rootfs;相关开放 PR 中 #1904 仍在 open,且已实现同一可信 boot entropy/boot_id 链路和同名 system 回归。因此本 PR 与 #1904 在启动/ABI 契约上冲突,不是可独立合入的重复实现。此前评论中关于临时 specs/ 设计资料的争议已考虑,未将其作为本轮独立 finding。

待解决项见行内评论:请明确以 #1904 或本 PR 为唯一所有者,移除另一条重复链路(或明确取代并关闭 #1904),然后在合入后的基线上重新验证。其余检查中未发现额外的确定性阻塞问题。

Powered by gpt-5.6-terra


static BOOT_ENTROPY: StaticCell<Option<BootEntropy>> = StaticCell::uninit();

pub(crate) fn capture() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(重复/冲突风险):这里重新引入了可信启动熵链路,而开放的 #1904 已负责同一 boot_id 功能(UEFI RNG/FDT rng-seedsomeboot → somehal → axplat-dyn → ax-hal 传递、可选 proc 节点及同名回归)。两条 PR 同时修改同一启动与用户可见 ABI 合约会产生重复实现和不明确的合并顺序。请以 #1904 为唯一所有者并从本 PR 删除该组改动,或明确取代并关闭 #1904,然后在合入后的基线上重新验证。

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

反正1904也approve了,已经连带1901转为非open状态

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

先等我修一下loongarch的qemu/system

@silicalet

Copy link
Copy Markdown
Contributor Author

补充说明:x86_64 qemu/system 的偶发失败已在提交 b1be20017 中修复。

根因是 set_ptrace_syscall_stop() 原先分两次加锁发布 stop:先插入普通 stop,再补写 is_syscall/syscall_no。测试通过 waitpid(..., WNOHANG) 主动轮询时可能观察到中间状态,使 PTRACE_O_TRACESYSGOOD 丢失,返回普通 SIGTRAP 状态 0x57f,而不是预期的 0x857f。修复后 syscall stop 在一次加锁中完整发布;同时在 exec 提交点让 PTRACE_EVENT_EXEC 与 legacy exec trap 二选一,并保证切换新页表后再释放旧地址空间。

验证结果:

  • ptrace 目标用例连续 10/10 通过
  • cargo xtask starry test qemu --arch x86_64 -c qemu/system:432/432,grouped tests passed
  • cargo xtask clippy --package starry-kernel:25/25
  • cargo fmt --all --checkgit diff --check 通过

当前测试命令挂载了 /opt/qemu-kvm,但未将其加入 PATH,因此上述完整结果使用的是 TCG。直接启用该 KVM 二进制目前会在 devpts/pty 测试附近触发另一项独立的整机重启问题,不作为本次问题的规避方案。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 升级,新增 x86_64 StarryNixOS Stage-2/app-owned rootfs/Axbuild-QEMU 路径,并合入 StarryOS 的 VFS、proc、任务、网络、epoll 等 Linux ABI 兼容改动及 someboot 启动熵传递。

book/guideline/feature-development.md 适用:这是包含 PID 1、rootfs、UEFI/NVMe 和跨层 ABI 的高风险功能;Starry syscall 指南亦适用于这些用户可见 ABI 改动。实现采用 app-owned rootfs,与默认 Alpine 路径隔离;新增 qemu/system C 用例的 system/<subcase>/{CMakeLists.txt,src} 布局可由根 CMake 发现,grouped wrapper 会以失败 marker 传递子用例失败。未发现 [patch.crates-io]。除下列问题外,改动未显示会改变其他 app 的默认 rootfs 契约。

本地验证通过:review_pr_helper.py prepare-reviewgit diff --check origin/dev...HEADcargo fmt --all --checkbash apps/starry/nixos/build-rootfs.sh --self-testcargo test -p someboot --lib(52 项)、以及 Axbuild 的 AppOwned rootfs 与 matcher 定向单测。未将这些结果当作 Stage-2 来宾启动证据:环境有 QEMU,但没有 Nix/direnv;按文档尝试官方 Nix 安装器时,root 安装需要不可用的 sudo 来创建 /nix。当前 HEAD 的组织 CI run 结论为 failure,失败 job 是 Axvisor self-hosted board 的 Run command,与本 PR 的新 NixOS app 无直接关联;该 PR CI 也未成功证明新的 app 运行。

已考虑先前评论:关于缺失 specs/ 的评论已由作者说明不应提交该私有 planning 目录,因此不再作为本轮独立 finding。关于 boot entropy 的先前评论仍有效:#1904 当前仍为 open,且与本分支实现重叠。重复/开放 PR 搜索中未发现另一条 StarryNixOS/AppOwned rootfs 实现;base 也没有等价 app。剩余阻塞项见两条行内评论:补齐可复现的当前 HEAD NixOS QEMU 验收,并明确 #1904 与本 PR 的唯一所有权。

Powered by gpt-5.6-terra

Comment thread apps/starry/nixos/README.md Outdated
```bash
apps/starry/nixos/build-rootfs.sh --self-test
TMPDIR="$PWD/.ci-cache/tmp" \
direnv exec . cargo xtask starry app qemu -t nixos --arch x86_64

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(app 运行验证):第 50 行声明的 direnv exec . cargo xtask starry app qemu -t nixos --arch x86_64 是新增 app 的唯一端到端验收,但当前 HEAD 未有可复现的执行证据。审查环境具备 QEMU、但没有 Nix/direnv;按文档尝试安装 Nix 又因 root 安装器依赖不可用的 sudo 创建 /nix 而停止。当前 PR CI 也没有成功覆盖该 app(失败项是无关的 Axvisor board job)。请提供可用的 Nix/Lix+direnv 准备路径,或将构建锁定镜像并运行该 x86_64 QEMU 命令加入 PR CI,确认来宾按顺序输出全部 Stage-2 marker。builder/matcher 单测不能替代真实来宾启动。

static BOOT_ENTROPY: StaticCell<Option<BootEntropy>> = StaticCell::uninit();

pub(crate) fn capture() {
let entropy = select_boot_entropy(uefi_entropy(), crate::fdt::boot_entropy())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(重复/冲突风险):第 18 行所在的可信启动熵/boot_id 链路与仍处于 open 状态的 #1904 完全重叠。#1904 当前 HEAD 为 a4b133b,其说明称该实现从本分支拆出;本分支历史又已合并 upstream/pr/1904 并包含同一提交。即使 #1904 已获批准,两个开放 PR 同时拥有同一启动协议和 procfs ABI 仍会造成重复合入和顺序不明确。请在合入本 PR 前关闭或明确标记 #1904 被取代,或移除重复链路并基于唯一的已合入实现整理。

@silicalet

Copy link
Copy Markdown
Contributor Author

CI 中 LoongArch 的失败已定位并修复于提交 e4411b657

这不是 ptrace 修复的架构回归。bugfix-smp-new-task-placement 在 LoongArch、aarch64 和 riscv64 上均报告:

Observed 1 CPU(s) across 8 concurrent workers
FAIL: unpinned new tasks remained on one CPU

根因是 spawn_task_with() 使用通用 select_run_queue(),该选择器为保持缓存局部性优先当前 CPU,导致所有新建任务首次入队都集中在创建者 CPU;这些任务阻塞后又由同一生产者唤醒,原有 wake 选择再次优先生产者 CPU。

修复内容:

  • 新任务使用独立的 round-robin 选择,在 affinity 允许且已发布的 run queue 间分散
  • wake 路径优先任务上次运行 CPU,保留实际局部性并避免批量唤醒重新聚集
  • 通过 Release/Acquire 标记 run queue 已初始化,避免启动阶段选择未发布的 AP 队列

验证:

  • cargo xtask starry test qemu --arch loongarch64 -c qemu/system/bugfix-smp-new-task-placement:通过
  • x86_64 同一回归此前观察到 4 个 CPU,并在 432/432 完整系统测试中通过
  • cargo xtask clippy --package ax-task:17/17
  • cargo fmt --all --checkgit diff --check:通过

第一次 clippy 尝试因本地磁盘已满报 No space left on device;清理 Cargo dev/debug 生成缓存后,同一命令完整通过。

@silicalet

silicalet commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

补充说明:后续验证发现,提交 e4411b657 对默认任务创建语义的修改范围过大。它解决了 Starry 新用户任务集中在单个 CPU 的问题,但同时使普通 ArceOS 线程首次从远端 CPU 启动,导致 riscv64 CI 的 memtest 在跨线程分配路径回归。

现已通过签名提交 7d55e2b67 收窄边界:

  • spawn_task_with() 恢复优先当前 CPU,保持普通 ArceOS/内核任务的初始局部性;
  • 新增 spawn_task_with_balanced(),仅由 Starry clone/fork 显式选择跨 ready CPU 的初始均衡放置;
  • 已有 wake-last-CPU 与 run queue Release/Acquire 发布逻辑保持不变。

验证结果:

  • cargo xtask arceos test qemu --arch riscv64:Rust 18/18、C 7/7,memtest 的并行分配和跨 CPU 释放均通过;
  • cargo xtask starry test qemu --arch loongarch64 -c qemu/system/bugfix-smp-new-task-placement:通过;
  • cargo xtask clippy --package ax-task:17/17;
  • cargo xtask clippy --package starry-kernel:25/25;
  • cargo fmt --all --checkgit diff --check:通过。

另有签名提交 4677641b1.envrc 启用 nix_direnv_manual_reload,避免进入仓库或 tracked 文件变化时反复自动求值 flake;需要刷新时显式执行 nix-direnv-reload。本轮隔离构建目录已清理,未改动 .ci-cache 或 Nix store。

@silicalet

Copy link
Copy Markdown
Contributor Author

CI run 31237781391 的结果补充:

  • ArceOS riscv64 QEMU job 已通过。
  • Starry LoongArch、x86_64、riscv64 QEMU job 的日志在被取消前一直输出 STARRY_SYSTEM_TEST_PASSED;LoongArch 最后进入 test-vfork,随后收到 context canceled,没有出现测试失败 marker。
  • 该 run 中最先失败的是无关的 Test axvisor self-hosted board phytiumpi-linux / run_host,之后 workflow 取消了其余长任务,因此 GitHub 将这些 job 显示为 failure/cancelled。
  • 当前账号没有仓库管理员权限,GitHub API 不允许只重跑该 LoongArch job(HTTP 403)。本地独立验证 cargo xtask starry test qemu --arch loongarch64 -c qemu/system/bugfix-smp-new-task-placement 已通过。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 版本升级,新增了 x86_64 StarryNixOS Stage-2 用户态、app-owned rootfs/Axbuild 准备和 QEMU 验收配置,并包含 StarryOS VFS、proc、任务、网络、epoll 等 Linux ABI 路径及启动熵链路的兼容性修复。

book/guideline/feature-development.md 适用:这是新增 PID 1/rootfs/UEFI-NVMe 运行路径的高风险能力;book/guideline/starry/syscall.md 也适用,因为改动覆盖用户可见的 VFS、xattr、clone/exec、time、epoll 等语义。实现将 NixOS rootfs 与默认 Alpine 路径隔离,新增 system C 用例保持 system/<subcase>/{CMakeLists.txt,src} 布局并由根 CMake 发现;未发现 [patch.crates-io]。但下述 app 运行验证缺口仍阻塞合入。

验证:固定 HEAD 4677641b100975019553732120680e006b84ca53 与 review helper 的 prepare-review 均通过;git diff --check origin/dev...HEADcargo fmt --all --checkbash -n apps/starry/nixos/build-rootfs.shbash apps/starry/nixos/build-rootfs.sh --self-test 通过。后者只覆盖工件校验脚本,不能证明 Nix closure 构建或来宾 Stage-2 行为。当前组织 CI 的格式/静态检查通过,但没有证据表明 NixOS app 的实际 x86_64 QEMU 工作流在本 HEAD 上执行;检查矩阵还包含预期跳过/取消项,不能替代该验收。环境中的 nixdirenv 不可用;尝试的工具链准备未在本轮完成,因此未将 app 运行表述为通过。

既有评论已审阅:此前关于缺失 specs/ 设计入口的评论仍对应当前 HEAD(路径不存在),但作者已说明不希望该自定义目录入库;本次不将它作为独立 finding。此前 #1904 的启动熵重复风险已因本分支合入该 PR 的变更而不再是独立冲突。base 中未见等价 apps/starry/nixos / AppOwned rootfs 能力;#1904 是已合并进本分支的相关启动熵来源,未发现仍需要以重复 PR 阻塞的同类开放实现。

影响范围包括 StarryOS 默认 rootfs 选择、QEMU/NVMe 启动、PID 1/systemd 所依赖的 syscall/proc/VFS 合约,以及新增的回归用例。除以下 app 运行验证外,静态审查未确认另一项确定性阻塞缺陷。

待解决问题:

阻塞:本 PR 新增并声明支持 apps/starry/nixos 的 x86_64 QEMU Stage-2 工作流,但当前 HEAD 无法按 README 的命令完成实际运行。环境中没有 nix/direnvbuild-rootfs.sh --self-test 只覆盖工件校验辅助逻辑,不能替代构建 Nix closure、启动 QEMU 和观察来宾成功标记。现有组织 CI 也没有提供该 app 在当前 HEAD 执行 STARRY_NIXOS_REUSE_ROOTFS=1 direnv exec . cargo xtask starry app qemu -t nixos --arch x86_64 的证据。请提供可复现的受支持环境,或新增在当前 PR 上执行此命令并保留完整 phase/退出证据的 CI;否则新增 app 的实际可用性仍无法验证。

Todo 审计:约束/指南、HEAD、差异、既有评论、CI、重复分析、测试布局和失败传播均已完成;新增 app 的准备与实际 QEMU 运行因上述环境和 CI 证据缺失而为阻塞项。建议由测试/rootfs、Starry syscall 与文件系统/调度领域维护者继续复核。

Powered by gpt-5.6-terra

@silicalet

Copy link
Copy Markdown
Contributor Author

原来没有.envrc说明根本没人用direnv, 这个东西性质和nix flake + devShell一样只是提供一个开发环境

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 新增 x86_64 StarryNixOS Stage-2 用户态、app-owned rootfs/axbuild 准备与 QEMU 验收,同时包含 StarryOS 的 VFS、proc、任务、网络、epoll 等 Linux ABI 修复及 someboot 启动熵链路;不是 release 版本升级 PR。

feature-development.md 适用:这是新的 PID 1/rootfs/UEFI-NVMe 运行路径和跨层 ABI 行为,属于高风险功能;starry/syscall.md 也适用,因为改动涉及 VFS、xattr、clone、execve、time、epoll 等用户可见语义。新增 app 与默认 Alpine rootfs 隔离,新增 system C case 保持 system/<subcase>/{CMakeLists.txt,src} 布局且根 CMake 可发现;未发现 [patch.crates-io]。base 中没有等价的 NixOS app/AppOwned rootfs;此前 #1904 的启动熵重叠已通过合并进入本分支,不再是未解决的开放 PR 冲突。

本地验证:git diff --check origin/dev...HEADcargo fmt --all --checkbash apps/starry/nixos/build-rootfs.sh --self-test 均通过。按文档的 flake Nix 配置执行 x86_64 app 工作流后,已完成 rootfs 发布、StarryOS 构建、QEMU 启动,并观察到有序 pid1activationsystemdmarkerSTARRY_NIXOS_SYSTEM_PASSED,文件系统干净卸载且命令退出 0。已审阅已有评论;早期关于缺失 specs 和 #1904 重叠的前提已不再适用,未将它们作为本轮阻塞项。

组织 CI 当前不是全绿:该 HEAD 的 CI run 31239034341 中,Test starry loongarch64 qemu / run_container 失败;其他格式检查等有成功记录,部分矩阵项按条件 skipped/cancelled。失败 job 位于本 PR 的 Starry/QEMU 改动范围,尚无证据可证明无关;请先解决以下问题。

剩余阻塞项:

  • 当前 HEAD 的 LoongArch Starry QEMU CI 失败(下列 finding)。

除该 CI 失败外,本轮未确认其他确定性阻塞问题。

Powered by gpt-5.6-terra

@silicalet

Copy link
Copy Markdown
Contributor Author

已 push 签名提交 8085673d5

验证结果:

  • cargo xtask clippy --package ax-task:17/17 通过。
  • x86_64 定向 qemu/system/test-pidfd-open:通过。
  • LoongArch 定向 qemu/system/test-rawmutex-handoff:通过。
  • x86_64 完整 qemu/system:432/432、1/1 case 通过。

LoongArch 完整 qemu/system 已开始执行,但按要求在本次 x86_64 通过后中断,因此没有将其描述为全量通过。修复内容是调度队列选择只使用 ready queue,并在当前 CPU ready 且满足 affinity 时安全回退;同时让 pidfd 线程测试在线程退出前完成 PIDFD_THREAD 检查。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 版本升级,新增 x86_64 StarryNixOS Stage-2 用户态、app-owned rootfs/Axbuild 准备和 QEMU 验收路径,同时改动 StarryOS 的 VFS、proc、任务、网络、epoll 等用户可见 Linux ABI 路径与 someboot 启动熵链路。

book/guideline/feature-development.md 适用:该功能包含新的 PID 1/rootfs/UEFI-NVMe 运行路径和跨层 ABI 语义,按规范属于高风险功能;Starry syscall 指南也适用于 VFS、xattr、clone3、execve、time、epoll 等改动。阻塞项见行内评论:当前 HEAD 的活动设计入口无法解析,必须修复或移除。

审查与验证:已核对 base dev 与固定 HEAD 8085673d598a9b8daec3266eb1683a65bfedc97fprepare-reviewgit diff --check origin/dev...HEAD、NixOS rootfs 的 build-rootfs.sh --self-test 通过。新增 qemu/system/<subcase>/{CMakeLists.txt,src} 布局与根 CMake 的发现规则一致;未发现 [patch.crates-io]。当前环境缺少 Nix、direnv、nixfmt 与 QEMU,不能完成文档声明的 x86_64 Stage-2 实机 QEMU 运行;组织 CI 当前也不是全绿(75 个 check:success=26、failure=1、cancelled=11、skipped=37),因此不能将其替代为该 app 的完整验收。失败/取消项需在后续修复后结合当前 HEAD 重新确认其与本 PR 的关系。

已阅读既有 review/comments:此前关于悬空 specs/ 入口的合理评论在当前 HEAD 仍未解决;先前关于 boot entropy 与 #1904 的重叠,经本 PR 合入 #1904 的提交后不再作为独立阻塞项。基线未发现等价的 apps/starry/nixos 或 app-owned rootfs;开放 PR 搜索没有发现另一个同一 NixOS/app-owned-rootfs 实现。

剩余风险是高风险功能的有效设计入口缺失,以及因环境与非全绿 CI 尚未独立复现 Stage-2 QEMU 验收。请先修复行内问题,然后重新执行并报告文档所列 x86_64 QEMU 命令及受影响回归。

Powered by gpt-5.6-terra

Comment thread AGENTS.md Outdated
<!-- SPECKIT START -->
## Active SpecKit Plan

- Active planning artifact: `specs/004-add-starry-nixos/plan.md`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(文档/设计入口):这里新增的活动计划路径 specs/004-add-starry-nixos/plan.md 在当前 HEAD 不存在。该 PR 引入 Stage-2 PID 1、app-owned rootfs/UEFI-NVMe 运行路径及跨层 ABI 变更,属于需要可独立审查设计材料的高风险范围;而这个悬空入口既无法提供审查依据,也会误导后续开发者。请删除该无效 SpecKit 段落,或将实际的设计材料以稳定路径随 PR 提交,并确保引用在当前 HEAD 可解析。

@silicalet

Copy link
Copy Markdown
Contributor Author

本地补充验证 Axvisor x86_64 QEMU(Podman + KVM + .ci-cache):

  • 容器通过 --device /dev/kvm 使用宿主 KVM;Cargo/Rustup 复用 .ci-cache/cargo.ci-cache/rustup,Axvisor 镜像缓存使用独立的 .ci-cache/axbuild-tmp/podman-axvisor
  • cargo xtask axvisor test qemu --arch x86_64 --test-case smoke-svm:通过,Axvisor 正常启动,NVMe/rootfs 读写校验成功。
  • cargo xtask axvisor test qemu --arch x86_64 --test-case direct-acpi-svm:通过,嵌套 Linux 正常启动并输出 AXVISOR_X86_DIRECT_ACPI_PASSED
  • 当前宿主为 AMD-V,仅能验证 SVM 路径;VMX case 需要 Intel VMX/KVM 主机。

CI run 31243198596 中的 VMX job 93068038367 结论是 cancelled,没有产生 Axvisor/QEMU 功能错误;它是在 test_checks 矩阵中其他 job 失败后被 fail-fast: true 连带取消。板卡失败应与 Axvisor QEMU 结果分开判断。

测试后的 /tmp target 和解压 rootfs 已清理,仅保留约 181 MiB 可复用压缩镜像缓存。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 新增 x86_64 StarryNixOS Stage-2、应用自有 rootfs/Axbuild 准备流程与 QEMU 验收配置,同时包含 StarryOS VFS、proc、任务、网络、epoll 等 Linux ABI 修复,以及 someboot 启动熵与 ArceOS 调度改动;不是 release 升级 PR。

book/guideline/feature-development.md 适用,风险等级为高:该变更新增 PID 1/rootfs/UEFI-NVMe 运行路径并修改跨层用户可见 ABI。book/guideline/starry/syscall.md 也适用(VFS、xattr、clone/clone3、execve、time、epoll、socket、proc 等)。新 system C 用例均采用 system/<subcase>/{CMakeLists.txt,src} 布局,根 CMake 能发现并安装;未发现 [patch.crates-io]。app 与默认 Alpine rootfs 的实现路径隔离,AppOwned builder 对路径和目标也做了显式校验。

本地验证:review_pr_helper.py test(7/7)和 prepare-review 通过;git diff --check origin/dev...HEAD 通过。bash apps/starry/nixos/build-rootfs.sh --self-test 通过。实际运行文档的 app 命令:先补装缺失的 nix-bin,再执行 NIX_CONFIG='experimental-features = nix-command flakes' cargo xtask starry app qemu -t nixos --arch x86_64;构建锁定 NixOS rootfs 和 Starry 二进制在 240 秒后超时,尚未进入 QEMU,因而没有得到 guest marker 证据。此前缺少 nix 时同一命令也明确以 required command 'nix' is unavailable 失败。该运行限制不替代下列确定性重复问题。

组织 CI 当前 HEAD 的 workflow run 31251124921 结论为 failure;75 个 check 中存在 1 个 failure、若干 cancelled/skipped,不能作为本 PR 声明的 NixOS x86_64 QEMU 成功证据。格式化检查成功;当前环境没有重复运行已成功的广泛 CI。此前 review 已指出 spec 路径问题;作者已说明不应将自定义 spec 目录作为仓库要求,本轮不将其作为独立 finding。

重叠分析:base 没有 apps/starry/nixos 或 AppOwned rootfs。开放 PR #1904 却仍存在,且当前分支提交 0200f6a81 已合并其 boot entropy/boot_id 实现;这是本次阻塞项。除该项外,此轮在所审查的 app runner、测试发现和代表性 VFS/proc/task/epoll/平台实现中未发现另一项已证实的阻塞缺陷。

待解决问题见行内评论。NixOS app 运行、完整逐 syscall 权威标准映射及完整 QEMU 回归需在唯一所有者的最终基线上重新完成。维护者路由:apps/test-suit/scripts/docs/ 匹配 ZCShou,platforms/ 匹配 bullhh,Starry syscall/app 范围匹配 YanLien。

最终 todo 审计:约束、实现、测试布局/发现、重复分析、CI 与实际 app 命令均已完成并记录;唯一阻塞项为 #1904 的重复所有权;完整 QEMU 未完成的原因和命令如上。

Powered by gpt-5.6-terra


static BOOT_ENTROPY: StaticCell<Option<BootEntropy>> = StaticCell::uninit();

pub(crate) fn capture() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(重复/合并风险):本分支已在 0200f6a81 合并开放 PR #1904,而这里继续携带相同的 boot entropy/boot_id 链路;#1904 目前仍开放并宣称同一 someboot → somehal → axplat-dyn → ax-hal 接口和回归。按 feature-development.md,开放 PR 的重复/冲突不能在所有权不明时合入。请明确本 PR 取代 #1904 并关闭后者,或从这里移除该组改动,保证该启动/用户可见 ABI 契约只有一个合入所有者;然后在最终基线上重新验证。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 版本升级,新增 x86_64 StarryNixOS Stage-2/app-owned rootfs 与 QEMU 验收路径,并修改 StarryOS 的 VFS、proc、任务、网络、epoll Linux ABI 路径和 someboot 启动熵链路。默认 Alpine rootfs 路径仍保持隔离;新增 qemu/system C 用例处于根 CMake 可发现的 system/<subcase>/{CMakeLists.txt,src} 布局。

book/guideline/feature-development.md 适用:这是高风险的新 PID 1/rootfs/UEFI-NVMe 跨层能力。Starry syscall 指南也适用(VFS、xattr、clone3、execve、time、epoll 等用户可见语义);本轮检查了对应实现与新增回归用例的发现/失败传播,除下列问题外未确认额外阻塞。

本地验证:review_pr_helper.py prepare-reviewgit diff --check origin/dev...HEADcargo fmt --all --checkbash apps/starry/nixos/build-rootfs.sh --self-testcargo clippy --manifest-path platforms/someboot/Cargo.toml --all-features -- -D warnings 均通过。安装 nix-bin/direnv 后,带 --extra-experimental-features 'nix-command flakes'nix flake show --no-write-lock-file ./apps/starry/nixos 可以解析;但 README 的默认 cargo xtask starry app qemu -t nixos --arch x86_64 在 rootfs builder 处失败,未到达 QEMU。STARRY_NIXOS_REUSE_ROOTFS=1 路径也因干净工作区没有已发布 manifest 而正确拒绝,不能替代默认构建验收。

组织 CI 当前 HEAD 有 1 个失败:self-hosted 的 Check formatting / run_hostcargo publish --workspace --dry-run --no-verifykbpf-basic -> ax-errno 版本解析处退出;本地格式检查通过,且本 PR 没有改动 Cargo.lock 或该依赖声明,因此该失败没有证据表明由本 PR 引入。其他可见静态检查成功,若干 host/container matrix 项按配置跳过;但 CI 并未运行这个 NixOS Stage-2 app 工作流,不能替代上面的本地验收。

既有评论已复核:早期关于缺失 specs/ 的评论不再作为本轮独立 finding;此前 #1904 的 boot entropy 重叠已经通过合并提交 0200f6a81 纳入本分支。base 中不存在等价的 apps/starry/nixos/AppOwned rootfs;相关开放 PR 搜索未发现仍需协调的同一实现。未发现 [patch.crates-io]

待解决项见行内评论:补齐 Nix feature 启动方式并在干净环境重新执行完整 app/QEMU 验收。完成后应验证 STARRY_NIXOS_PHASE=pid1activationsystemdmarkerSTARRY_NIXOS_SYSTEM_PASSED,以及相关系统回归。

Powered by gpt-5.6-terra

require_command nix

local image toplevel
toplevel="$(nix build --no-link --print-out-paths "path:$app_dir#system")"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(可复现性):这里的默认 app 构建流程直接执行 nix build,但没有启用 nix-command/flakes。在干净 Ubuntu 环境安装 nix-bindirenv 后,带 --extra-experimental-features 'nix-command flakes'nix flake show 能解析同一 flake;按 README 的默认 cargo xtask starry app qemu -t nixos --arch x86_64 则在此处报 experimental Nix feature 'nix-command' is disabled 并退出,rootfs 和 QEMU 都不会启动。请让脚本显式传递所需 feature(build/eval 均覆盖),或提供等价的可靠入口配置,并在干净环境重跑文档化的完整验收命令。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 不是 release 版本升级,新增 x86_64 StarryNixOS Stage-2 app、app-owned rootfs/QEMU 流程,并包含 Starry VFS、proc、任务、网络、epoll 的用户可见 ABI 修复及 someboot 启动熵链路。

book/guideline/feature-development.md 与 Starry syscall 指南均适用:前者对应新的 PID 1/rootfs/UEFI-NVMe 路径,后者对应本次 VFS、xattr、clone、execve、time、epoll 等语义。新增 system C 用例均处于 system/<subcase>/{CMakeLists.txt,src} 的当前 runner 布局,根 CMake 可发现;未发现本 PR 新增的 [patch.crates-io]。base 中未见等价的 NixOS app/AppOwned rootfs;此前 boot entropy 与 #1904 的重叠已通过本分支合并该 PR 解决。既有有关缺失 specs/ 的线程已考虑,作者明确不希望把该类设计材料提交为仓库内容,故不将其作为本轮独立 finding。

本地完成:review_pr_helper.py prepare-reviewgit diff --check origin/dev...HEADbash apps/starry/nixos/build-rootfs.sh --self-test、QEMU app CLI 构建/帮助检查均通过。实际执行 README 的 TMPDIR="$PWD/.ci-cache/tmp" cargo xtask starry app qemu -t nixos --arch x86_64 后,axbuild 调用 builder 并因缺少 nix 退出,因此没有完成来宾启动。当前 HEAD 组织 CI 共 75 个 checks(包含成功、跳过、取消和一个失败);格式检查成功,但 Starry x86_64 QEMU 检查被取消,不能证明新的 NixOS Stage-2 场景。失败的 Axvisor 自托管板卡项不触及本 PR 的 NixOS/Starry 变更;本轮阻塞结论不依赖它。

覆盖方面:新增系统用例和 axbuild matcher 测试证明发现、安装与成功/失败正则的基本契约,但不能代替 app 的完整 rootfs 构建与 QEMU PID 1 运行。此前 review 线程中关于 NixOS app/启动熵的内容已复核;boot entropy 的开放 PR 重叠已被合并,设计材料争议不重复提出。剩余阻塞项见行内评论。

审查清单:约束、diff、AppOwned rootfs、system test 布局、SMP/启动熵和代表性 syscall 实现均已检查;x86_64 NixOS QEMU 运行因上述 builder 环境失败而未完成,故不能批准。后续领域复核已保留现有 ZCShou、YanLien、bullhh 请求;它们分别匹配 tests/rootfs/axbuild、apps/syscall 和 platforms 路径。

Powered by gpt-5.6-terra

## Build and validate

From the repository root:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(新增 app 的运行验证):项目规则要求新增 Starry app 在当前 HEAD 完成文档化的准备和 QEMU 运行。我按这里的流程执行 TMPDIR="$PWD/.ci-cache/tmp" cargo xtask starry app qemu -t nixos --arch x86_64,axbuild 已调用构建脚本,但在构建阶段因 required command 'nix' is unavailable 退出。--self-test 虽通过,却不会构建镜像或启动来宾;当前 HEAD 的组织 CI 中 Starry x86_64 QEMU 检查也被取消,不能替代该验收。请提供可复现的 Nix/Lix 构建与当前 HEAD QEMU 运行证据(包含顺序成功标记),或让文档化命令使用可验证的受管工件后再合入。

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这是环境问题,制作nixos镜像你还不用nix?

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 新增 x86_64 StarryNixOS Stage-2 应用、app-owned rootfs/Axbuild 准备与 QEMU 验收,并同步包含 StarryOS VFS、proc、任务、网络、epoll 的 Linux ABI 修复及 someboot 启动熵链路;不是 release 版本升级。

feature-development.md 适用:这是包含 PID 1/rootfs/UEFI-NVMe 运行路径的高风险功能。当前 HEAD 已提供长期设计文档 docs/docs/architecture/starryos/nixos-stage2.md、应用 README 与兼容性台账;其目标、非目标、隔离的 rootfs 所有权、回滚和验收边界可审查。Starry syscall 指南也适用于 VFS、xattr、clone3、execve、time、epoll 等用户可见语义;新增 system C 用例位于 system/<subcase>/{CMakeLists.txt,src},可由根 CMake 发现,且现有 grouped runner 的失败标记与正则能传播失败。未发现 [patch.crates-io]

验证:review_pr_helper.py prepare-review、helper 自测、git diff --check origin/dev...HEAD 均通过;组织 CI 的格式检查和多个目标测试已成功,按要求未重复运行大型本地测试。当前 75 个 check 中仍有 1 个失败和若干 cancelled/skipped;已核对其并非本行重复问题的替代验证。Nix/direnv 在审查环境不可用,因此未将本地 Stage-2 QEMU 运行作为已完成证据;PR 文档记录了受支持的 x86_64 QEMU 验收命令与成功标记。

既有评论已复核:先前关于缺失设计材料的评论已由当前 HEAD 的架构文档、README 与兼容性台账解决;但 boot ID 相关的重复/冲突评论仍有效。基础分支没有等价 boot-entropy 实现,而开放 PR #1904 仍拥有同一启动/procfs ABI,当前 PR 的历史又已合并该 PR,故不能视为独立变更。

待解决问题见行内评论:请先确定该启动/ABI 链路的唯一 PR 所有者并消除 #1904 的开放重复,再在最终基线上验证。其它已审查表面未发现额外确定性阻塞项。

审核清单:规范、当前 HEAD、历史评论、组织 CI、NixOS 应用/rootfs、syscall/VFS、启动与 SMP、测试发现/失败传播、依赖 patch、基线及开放 PR 重叠均已完成;无需补充 reviewer,ZCShou、YanLien、bullhh 已在请求列表中。

Powered by gpt-5.6-terra


static BOOT_ENTROPY: StaticCell<Option<BootEntropy>> = StaticCell::uninit();

pub(crate) fn capture() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(重复/冲突风险):此处的可信启动熵/boot_id 链路已通过本 PR 的 Merge remote-tracking branch 'upstream/pr/1904' 合并进入当前头,但 #1904 仍处于 open 状态,仍以同一启动与 procfs ABI 为目标。两个开放 PR 同时拥有同一实现会使合并顺序和唯一所有者不明确,也有重复合入风险。请在合入本 PR 前关闭或明确标记 #1904 被取代,或移除本 PR 中已合入的重复链路并由唯一 PR 维护;之后在最终基线上重新验证 boot ID 回归。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant