mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 14:57:38 +00:00
## 上一版为什么没解决
第一版加了 `Acquire::http::Timeout=60` + `Retries=3` + step 6 分钟超时。
CI 实测结果:
15:39:48 需要安装: gcc-aarch64-linux-gnu
15:46:01 ##[error]The action '安装 C 工具链(已装则跳过)' has timed out after 6 minutes.
**依然卡满 6 分钟**,而且日志里**一个 apt 输出都没有** —— 因为 `-qq` 把
所有输出静默了。两个结论:
1. `Acquire::*Timeout` 只管**单个连接**,不管 apt 整体 —— 源重试、DPKG 锁
等待、依赖计算都不受它约束,所以它拦不住这类卡死
2. `-qq` 让卡死**完全不可观测**:既看不到卡在哪个源,也看不到在下载什么。
不可观测正是它能悄悄拖满超时的原因
(顺带证明"已装则跳过"这条是有效的:cmake/clang 都在镜像里,只列出了
`gcc-aarch64-linux-gnu` 一项要装。)
## 这一版改法
| 改动 | 理由 |
|---|---|
| 去掉 `-qq`,保留可读进度 | 下次卡死必须能看出卡在哪,否则无从诊断 |
| `timeout 120 apt-get update` | **外层硬超时**,强制结束,不依赖 apt 自身行为 |
| `timeout 180 apt-get install` | 同上;120+180=300s 配 step 5 分钟正好 |
| 失败即 `exit 1` + `::error::`,不重试整段 | 宁可红一次让人看见,不要用重试掩盖真实问题 |
| `--no-install-recommends` 保留 | 减少下载量与依赖面 |
## 本地实测
| 验证 | 结果 |
|---|---|
| YAML 可解析 | ✅ |
| `timeout 3 sleep 60` 行为 | ✅ 3 秒强制结束,退出码 124,可被 `if !` 捕获 |
| "已装则跳过"分支 | ✅ 「✅ 跳过 apt-get」 |
| 上一版缺工具 `[SKIP] ... exit 0` 风险 | ✅ 已复现并拦截(见前一提交) |
## 仍待 CI 验证
这一版的真实效果只有在 runner 上才知。若这次仍然卡满,说明 `timeout` 对
sudo+apt 组合失效(可能性低),届时改用「换源」或「预装镜像」方案。