Skip to content

fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start - #1194

Merged
ZR233 merged 2 commits into
rcore-os:devfrom
WellDown64:fix/terminfo
Jun 16, 2026
Merged

fix(tui): set TERM in init.sh so TUI applications(e.g. top) can start#1194
ZR233 merged 2 commits into
rcore-os:devfrom
WellDown64:fix/terminfo

Conversation

@WellDown64

Copy link
Copy Markdown
Contributor

Summary

StarryOS 的 init.sh 缺少 TERM 环境变量,导致 top 等 TUI 应用程序启动时无法正确识别终端类型而报错退出。此 PR 在 init.sh 中添加 export TERM=xterm-256color,使 TUI 应用能正常启动。

@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 概览

此 PR 在 os/StarryOS/starryos/src/init.sh 中添加 export TERM=xterm-256color,解决 top 等 TUI 应用程序因缺少 TERM 环境变量而无法识别终端类型、启动时报错退出的问题。

实现逻辑

  • xterm-256color 是 QEMU 串行控制台等虚拟终端环境下最通用的终端类型标识。
  • init.sh 中已有 HOMEUSERHOSTNAMEPATH 等环境变量导出,新增 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 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

这个改动方向本身很小,但当前还缺少合入所需的验证证据。

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 中的 TERMinit.shtoptui 只命中本 PR,未发现重复实现。

Comment thread os/StarryOS/starryos/src/init.sh
@WellDown64

Copy link
Copy Markdown
Contributor Author

已在 Linux 上测试

$ echo $TERM
xterm-256color

$ TERM= top         # 将 TERM 设置为空,运行 top,无输出直接退出

@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 #1194 审查

PR 概览:在 StarryOS init.sh 中添加 export TERM=xterm-256color,并新增 apps/starry/top/ 测试用例覆盖四架构(aarch64 / riscv64 / loongarch64 / x86_64),验证 TUI 应用 top 能正常启动。

变更分析(11 文件,+163)

  1. os/StarryOS/starryos/src/init.sh:在 HOSTNAMEPATH 之间添加 export TERM=xterm-256color,位置和格式正确。
  2. apps/starry/top/:新增完整的 app 测试,包含 top-test.shprebuild.sh、四架构的 build-*.tomlqemu-*.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.shTERMtoptui 的变更,仅命中本 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/displayax-feat/rtcax-driver/serialstarry-kernel/inputstarry-kernel/vsock 等额外 feature,而其他架构不需要。虽然无害,但不一致,建议统一或注释说明原因。

Powered by mimo-v2.5-pro

Comment thread apps/starry/top/top-test.sh Outdated

@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 审查

变更概述:在 StarryOS init.sh 中添加 export TERM=xterm-256color,使 top 等 TUI 应用能正确识别终端类型。同时新增 apps/starry/top/ 测试用例,覆盖 aarch64 / riscv64 / loongarch64 / x86_64 四架构,通过 QEMU 验证 top 能正常启动。

实现逻辑

  • init.shHOSTNAMEPATH 之间添加 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/displayax-feat/rtcax-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:✅ success
  • Cancel stale CI runs:✅ success
  • Check formatting / run_host:🔄 in_progress(之前版本已通过)
  • Run sync-lint / run_container:🔄 in_progress
  • 其余为 expected skipped(互斥 job / container publish)
  • 无 CI 失败

重复性与重叠性分析

  • 在 dev 分支搜索 TERMinit.sh 相关提交,未发现已有类似设置。
  • 搜索 open PR 中涉及 TERMinit.shtoptui 的变更,仅命中本 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 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

本轮复核

本 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.sh2>&1 重定向 thread 也已修复(当前脚本把 stderr 丢弃 2> /dev/null,只看 stdout 是否非空)。

实现逻辑

改动本身最小:在 init.sh 的其它 export(HOME/USER/HOSTNAME/PATH)之间加一行 export TERM=xterm-256colorxterm-256color 是 QEMU/串口终端与大多数 TUI 库(ratatui/crossterm)都支持的安全默认值,能让 top 等 ncurses/ratatui 程序正确初始化终端。逻辑正确。

验证(head 30ced98f1)

  • CI-missing 运行时验证(本轮实跑):cargo xtask starry app qemu --arch x86_64 -t topapk 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 foundSTARRY_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、无重复、无冲突。准予合入。

@ZR233
ZR233 merged commit cee423a into rcore-os:dev Jun 16, 2026
47 of 50 checks passed
@github-actions github-actions Bot mentioned this pull request Jun 16, 2026
fzg-23 pushed a commit to fzg-23/tgoskits that referenced this pull request Jun 16, 2026
…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
This was referenced Jun 22, 2026
luodeb pushed a commit that referenced this pull request Jun 30, 2026
…#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
aptacc2421 pushed a commit to aptacc2421/tgoskits that referenced this pull request Jul 30, 2026
…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
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.

2 participants