# PR #37689 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[CI] Accept t64-suffixed apt packages in the install skip check
- 合并时间：2026-09-03 11:51
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/37689

---

# 执行摘要

- 一句话：修复 CI 依赖安装脚本在 Ubuntu 24.04 上的包名兼容性问题，避免不必要的 apt-get 更新。
- 推荐动作：这是一个小而精的 CI 优化 PR。虽然代码变更量小，但它解决了一个实际存在的、影响所有 CI 任务效率的痛点（尤其是在网络条件不佳的环境下）。对于关注 CI/CD 基础设施和构建效率的工程师，值得花几分钟精读。它展示了如何通过简单的脚本增强来提升大型项目工具链的健壮性。

# 功能与动机

根据 PR body 描述，问题的根源是：“On Ubuntu 24.04 images `dpkg -l librdmacm1` never matches (the package is `librdmacm1t64`)”，这导致“every job runs `apt-get update` to install nothing; on runners with a slow apt proxy that costs 5+ minutes per job.”。修复旨在消除因包名变更导致的 CI 资源浪费和时间开销。

# 实现拆解

1. **修改入口与核心逻辑调整**：变更集中在一个文件 `scripts/ci/cuda/ci_install_dependency.sh`。核心变更是在现有的 `install_apt_packages` 函数之前，新增了一个辅助函数 `is_apt_package_installed`。此函数接受一个包名作为输入，先尝试用原始包名（`$1`）通过 `dpkg -l` 进行检查，如果失败（即命令返回非零退出码或输出中没有 `^ii` 匹配），则会自动尝试添加 `t64` 后缀的包名（`${1}t64`）再次检查。只要任一检查成功，即返回 `0`（表示已安装），否则返回 `1`。
2. **替换检查逻辑**：在 `install_apt_packages` 函数中，原来的检查逻辑 `dpkg -l "$pkg" 2>/dev/null | grep -q "^ii"` 被替换为调用新函数 `is_apt_package_installed "$pkg"`。这一改动使得 `MISSING_APT_PACKAGES` 数组的构建逻辑能够正确识别 Ubuntu 24.04 上带有 `t64` 后缀的包，从而避免了将已安装的包误判为缺失。
3. **配套变更**：本 PR 没有涉及测试文件、配置文件或部署脚本的修改。变更纯粹是为了提升现有 CI 脚本在特定系统环境下的正确性和鲁棒性。

关键文件：
- `scripts/ci/cuda/ci_install_dependency.sh`（模块 CI 脚本；类别 infra；类型 infrastructure；符号 is_apt_package_installed, install_apt_packages）: 这是 CI 依赖安装的核心脚本，本 PR 的所有变更都集中于此。它控制着 CI 任务启动时软件环境的准备过程，其正确性和效率直接影响所有 CI 任务的耗时。

关键符号：is_apt_package_installed, install_apt_packages

## 关键源码片段

### `scripts/ci/cuda/ci_install_dependency.sh`

这是 CI 依赖安装的核心脚本，本 PR 的所有变更都集中于此。它控制着 CI 任务启动时软件环境的准备过程，其正确性和效率直接影响所有 CI 任务的耗时。

```bash
# 新增的辅助函数，用于处理 Ubuntu 24.04 上 time64 库的包名变更问题。
# 在 Ubuntu 24.04 中，某些库（如 librdmacm1）被重命名为带 `t64` 后缀的形式。
# 标准 `dpkg -l` 无法通过 `Provides` 别名匹配到它们，导致检查失败。
# 此函数尝试检查原始包名和带 `t64` 后缀的包名，任一匹配即认为已安装。
is_apt_package_installed() {
    local name
    # Ubuntu 24.04 renamed time64 libraries (librdmacm1 -> librdmacm1t64);
    # apt-get follows the Provides alias, dpkg -l does not.
    for name in "$1" "${1}t64"; do
        if dpkg -l "$name" 2>/dev/null | grep -q "^ii"; then
            return 0
        fi
    done
    return 1
}

# 在 install_apt_packages 函数内部，检查逻辑被替换为调用新函数。
# 原逻辑 : dpkg -l "$pkg" 2>/dev/null | grep -q "^ii" || MISSING_APT_PACKAGES+=("$pkg")
# 新逻辑 :
is_apt_package_installed "$pkg" || MISSING_APT_PACKAGES+=("$pkg")

```

# 评论区精华

本 PR 在提供的上下文中没有 Review 评论。提交历史显示了 3 次提交：初始实现、精简注释、以及与主分支的合并。这表明变更相对简单直接，可能在合并前已经过初步验证。

- 暂无高价值评论线程

# 风险与影响

- 风险：风险极低。变更仅在一个 CI 辅助脚本中新增了一个幂等的检查函数，逻辑清晰（先检查原名，再检查 `t64` 后缀）。它不会影响依赖安装的最终结果（该装的包依然会安装），只会影响 `apt-get update` 是否被调用。潜在的微小风险是如果未来 Ubuntu 包名再次变更，此函数可能无法覆盖，但这种情况罕见。
- 影响：影响范围集中在 CI/CD 流水线。对于所有运行在 Ubuntu 24.04 镜像上的 CI 任务，尤其是那些安装了 `librdmacm1` 等 time64 库的任务，将直接收益：避免了无效的 `apt-get update`，减少了每个任务数分钟的启动时间，提升了整体 CI 效率和资源利用率。对于使用旧版 Ubuntu 或不需要这些库的任务，无负面影响。
- 风险标记：CI 健壮性提升

# 关联脉络

- PR #35313 [CPU] Update base image to Ubuntu 26.04: 同为 CI 基础设施维护 PR，都涉及 Ubuntu 系统版本 / 镜像相关的调整。
- PR #37672 [CI] Install lmms-eval from PyPI, drop human-eval install, add clone token fallback: 同为 CI 脚本优化 PR，旨在改进 CI 依赖安装的流程和可靠性。
- PR #37522 [CI] Re-enable GB300 jobs: 同为维护 CI 流水线健康性的 PR，确保测试环境和任务的正常运行。