fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start - #1194
Conversation
There was a problem hiding this comment.
PR 概览
此 PR 在 os/StarryOS/starryos/src/init.sh 中添加 export TERM=xterm-256color,解决 top 等 TUI 应用程序因缺少 TERM 环境变量而无法识别终端类型、启动时报错退出的问题。
实现逻辑
xterm-256color是 QEMU 串行控制台等虚拟终端环境下最通用的终端类型标识。- init.sh 中已有
HOME、USER、HOSTNAME、PATH等环境变量导出,新增TERM遵循了同一模式。 - 添加位置在
export PATH之前,与其他环境变量保持一致的排列顺序。
CI 状态
| 检查项 | 结论 |
|---|---|
| Detect changed paths | ✅ success |
| Cancel stale CI runs | ✅ success |
| Check formatting / run_host | ✅ success |
| Check formatting / run_container | ⏭️ skipped(与 run_host 互斥) |
| Run sync-lint (run_container) | 🔄 in_progress |
| Run sync-lint (run_host) | ⏭️ skipped(与 run_container 互斥) |
当前无 CI 失败。格式化检查已通过。
重复性与重叠性分析
- 在 base 分支(dev)搜索
TERM相关提交,未发现已有类似设置。 - 当前所有 open PR 中,无其他 PR 修改
init.sh或涉及 TERM 环境变量。 - PR #1194 与任何 open PR 不存在重复、冲突或重叠关系。
审查结论
该变更是对 StarryOS init 脚本中缺失的终端类型环境变量的补全。改动仅一行、语义明确,遵循现有代码风格。CI 通过,无冲突或重复问题。同意合并。
Powered by deepseek-v4-flash
ZR233
left a comment
There was a problem hiding this comment.
这个改动方向本身很小,但当前还缺少合入所需的验证证据。
PR 只在 StarryOS init.sh 中增加 TERM=xterm-256color,用于修复 top 等 TUI 应用启动失败;这是用户可见的 bugfix/app 支持改动。按照项目 review 规则,bugfix 需要有能复现修复点的回归测试,或者至少在 PR body/commit 中给出可复现的非板端验证命令。当前没有新增测试,PR body 也只描述了现象和改动,没有说明在当前 head 上运行过哪个 Starry app/QEMU 命令、预期 marker 是什么、是否实际证明 top 能启动。
远端 CI 当前还有 Test starry aarch64 qemu / run_container 失败;日志显示所有已运行的 system 子测试通过后,grouped runner 又打印 STARRY_GROUPED_TEST_FAILED ... found=0,这个失败形态看起来不像本 PR 这一行 init.sh 引起,但它也没有覆盖 top/TUI 启动场景。因此不能用现有 CI 代替本 PR 的运行验证。
请补充一个可由 CI 或 reviewer 复现的验证:例如把最小 TUI/terminfo 启动检查放到合适的 Starry case,或在 PR body 中写清并实际跑通 cargo xtask starry app/test qemu ... 的命令、架构和 guest 可见成功输出。
重复/重叠检查:搜索 open PR 中的 TERM、init.sh、top、tui 只命中本 PR,未发现重复实现。
|
已在 Linux 上测试 |
There was a problem hiding this comment.
PR #1194 审查
PR 概览:在 StarryOS init.sh 中添加 export TERM=xterm-256color,并新增 apps/starry/top/ 测试用例覆盖四架构(aarch64 / riscv64 / loongarch64 / x86_64),验证 TUI 应用 top 能正常启动。
变更分析(11 文件,+163)
os/StarryOS/starryos/src/init.sh:在HOSTNAME和PATH之间添加export TERM=xterm-256color,位置和格式正确。apps/starry/top/:新增完整的 app 测试,包含top-test.sh、prebuild.sh、四架构的build-*.toml和qemu-*.toml,目录结构和文件命名遵循apps/starry/下已有模式(如diffutils)。
CI 状态
| 检查项 | 结论 |
|---|---|
| Detect changed paths | ✅ success |
| Cancel stale CI runs | ✅ success |
| Run sync-lint / run_container | ✅ success |
| Check formatting / run_host | 🔄 in_progress |
| Check formatting / run_container | ⏭️ skipped |
| Run sync-lint / run_host | ⏭️ skipped |
无 CI 失败。格式化与同步 lint 检查已通过。
重复性检查
搜索 open PR 中涉及 init.sh、TERM、top、tui 的变更,仅命中本 PR,无重复或冲突。
核心问题:top-test.sh 测试逻辑存在缺陷
详见行内评论。2>&1 将 stderr 合并到输出文件中,导致即使 TERM 未设置(top 打印错误信息到 stderr),输出文件仍然非空,测试会错误地报告 PASSED。需要修复为仅捕获 stdout,或检查输出内容中是否包含实际进程列表。
次要问题:
top-test.sh在 QEMU 运行时通过apk add procps安装依赖,需要 guest 网络可达。如果 rootfs 未预装 procps,该操作可能在 CI 环境中超时或失败。建议在prebuild.sh中预装 procps 到 rootfs overlay。build-riscv64gc-unknown-none-elf.toml包含ax-feat/display、ax-feat/rtc、ax-driver/serial、starry-kernel/input、starry-kernel/vsock等额外 feature,而其他架构不需要。虽然无害,但不一致,建议统一或注释说明原因。
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
PR 审查
变更概述:在 StarryOS init.sh 中添加 export TERM=xterm-256color,使 top 等 TUI 应用能正确识别终端类型。同时新增 apps/starry/top/ 测试用例,覆盖 aarch64 / riscv64 / loongarch64 / x86_64 四架构,通过 QEMU 验证 top 能正常启动。
实现逻辑
init.sh在HOSTNAME和PATH之间添加export TERM=xterm-256color,位置与格式与现有环境变量保持一致。top-test.sh测试逻辑正确:安装procps后运行top -n 1,仅捕获 stdout(stderr 已正确重定向到/dev/null),检查输出是否非空来判断 TERM 是否生效。stderr 修复已在当前 commit 中完成(之前 review 提到的2>&1问题已改为2> /dev/null)。- 四架构 build/qemu 配置完全遵循
diffutils等已有 app 的模式,riscv64 的额外 features(ax-feat/display、ax-feat/rtc、ax-driver/serial等)与diffutils的 riscv64 配置完全一致,属于该架构的正常需求。 prebuild.sh使用install -Dm0755,比部分已有 app 的mkdir + cp + chmod更简洁,模式正确。fail_regex正确匹配 panic 和TOP_TEST_FAILED标记,success_regex正确匹配TOP_TEST_PASSED。
验证结果
cargo fmt --check:✅ 通过- 无
[patch.crates-io]问题 - 代码不涉及 Rust 编译(仅 shell 脚本和 TOML 配置),无需 clippy/test
CI 状态
当前 CI(run 27548468477)仍在运行中:
Detect changed paths:✅ successCancel stale CI runs:✅ successCheck formatting / run_host:🔄 in_progress(之前版本已通过)Run sync-lint / run_container:🔄 in_progress- 其余为 expected skipped(互斥 job / container publish)
- 无 CI 失败
重复性与重叠性分析
- 在 dev 分支搜索
TERM、init.sh相关提交,未发现已有类似设置。 - 搜索 open PR 中涉及
TERM、init.sh、top、tui的变更,仅命中本 PR,无重复、冲突或重叠。
之前 review 意见处理
- ZR233 要求补充回归测试或 QEMU 验证:✅ 已通过新增
apps/starry/top/测试套件(四架构)解决。 - mai-team-app[bot] 指出
2>&1问题:✅ 当前 commit 已修复为2> /dev/null。 - 两个 review thread 均已标记为 resolved。
总结
该变更是对 StarryOS init 脚本中缺失的 TERM 环境变量的正确补全,测试遵循项目现有 app 测试模式,所有之前 review 意见均已解决。无阻塞问题,同意合并。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
本轮复核
本 PR 修复 StarryOS TUI 应用(如 top)因缺少 TERM 环境变量而启动失败的 bug:在 os/StarryOS/starryos/src/init.sh 新增 export TERM=xterm-256color。这是一个用户可见的 bugfix。
上一轮阻塞项核对(已解决)
上一轮(2026-06-10)的阻塞是「缺少回归测试,PR body 也未给出可复现的 QEMU/app 验证命令」。当前 head 已解决:
- 新增
apps/starry/top/用例(四架构 build 配置 + qemu toml + prebuild +top-test.sh),作为 TERM 设置的回归测试; top-test.sh安装procps后运行top -n 1,检查其产生输出(无 TERM 时 top 直接报错退出、无输出),打印TOP_TEST_PASSED/TOP_TEST_FAILED;- qemu toml 的
success_regex/fail_regex正确(TOP_TEST_PASSED/TOP_TEST_FAILED)。 - 上一轮关于
top-test.sh的2>&1重定向 thread 也已修复(当前脚本把 stderr 丢弃2> /dev/null,只看 stdout 是否非空)。
实现逻辑
改动本身最小:在 init.sh 的其它 export(HOME/USER/HOSTNAME/PATH)之间加一行 export TERM=xterm-256color。xterm-256color 是 QEMU/串口终端与大多数 TUI 库(ratatui/crossterm)都支持的安全默认值,能让 top 等 ncurses/ratatui 程序正确初始化终端。逻辑正确。
验证(head 30ced98f1)
- CI-missing 运行时验证(本轮实跑):
cargo xtask starry app qemu --arch x86_64 -t top→apk add procps成功 →top -n 1产生输出 →TOP_TEST_PASSED,成功正则命中。这证明 TERM 设置后 top 可正常作为 TUI 启动;在未修复的 init.sh 上该用例会失败(top 无输出)。 - CI 状态:当前 head 的 3 个
Test starry * qemu / run_container失败均为「各 system 子测试全部 PASS,但 grouped runner 命中found=0 / no system tests found→STARRY_GROUPED_TEST_FAILED」,与本 PR 的一行 init.sh 改动无关,且与既有 issue #1199(ci(starry): grouped system QEMU can fail with STARRY_GROUPED_TEST_FAILED after subtests pass)描述完全一致。已在 #1199 追加本 PR 的 run/job 链接与失败证据。 - 本地 lint:
cargo fmt --all --check通过;git diff --check origin/dev...HEAD通过;无[patch.crates-io]。
重复/重叠
检索 TERM/init.sh/terminfo/top TUI 未发现其它 open PR 重复。
其它
mergeStateStatus=BLOCKED为待审核(非DIRTY),当前无合并冲突;maintainerCanModify=true。- 用例覆盖四架构,本地在 x86_64 实跑通过;riscv64/aarch64/loongarch64 与 x86_64 共用同一
top-test.sh,CI 中这些架构的 starry qemu 失败属 #1199 既有 flake,非本 PR 引入。
结论
bugfix 最小且正确,补齐了 TERM 设置的 top TUI 回归用例(本地实跑通过);CI 失败为既有 #1199 grouped system flake,与本 PR 无关;无 patch、无重复、无冲突。准予合入。
…rcore-os#1194) * fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start * test(starry): add top app test case to verify TERM is set for TUI applications
…#1194) * fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start * test(starry): add top app test case to verify TERM is set for TUI applications
…rcore-os#1194) * fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start * test(starry): add top app test case to verify TERM is set for TUI applications
Summary
StarryOS 的
init.sh缺少 TERM 环境变量,导致 top 等 TUI 应用程序启动时无法正确识别终端类型而报错退出。此 PR 在init.sh中添加export TERM=xterm-256color,使 TUI 应用能正常启动。