Prhub

#37689 [CI] Accept t64-suffixed apt packages in the install skip check

原始 PR 作者 hnyls2002 合并时间 2026-09-03 11:51 文件变更 1 提交数 3 评论 5 代码增减 +13 / -1

执行摘要

修复 CI 依赖安装脚本在 Ubuntu 24.04 上的包名兼容性问题,避免不必要的 apt-get 更新。

根据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资源浪费和时间开销。

这是一个小而精的CI优化PR。虽然代码变更量小,但它解决了一个实际存在的、影响所有CI任务效率的痛点(尤其是在网络条件不佳的环境下)。对于关注CI/CD基础设施和构建效率的工程师,值得花几分钟精读。它展示了如何通过简单的脚本增强来提升大型项目工具链的健壮性。

讨论亮点

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

实现拆解

  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 脚本 modified 3.91

关键符号

is_apt_package_installed install_apt_packages

关键源码片段

scripts/ci/cuda/ci_install_dependency.sh infrastructure

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

# 新增的辅助函数,用于处理 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")

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。变更仅在一个CI辅助脚本中新增了一个幂等的检查函数,逻辑清晰(先检查原名,再检查t64后缀)。它不会影响依赖安装的最终结果(该装的包依然会安装),只会影响apt-get update是否被调用。潜在的微小风险是如果未来Ubuntu包名再次变更,此函数可能无法覆盖,但这种情况罕见。

影响范围集中在CI/CD流水线。对于所有运行在Ubuntu 24.04镜像上的CI任务,尤其是那些安装了librdmacm1等time64库的任务,将直接收益:避免了无效的apt-get update,减少了每个任务数分钟的启动时间,提升了整体CI效率和资源利用率。对于使用旧版Ubuntu或不需要这些库的任务,无负面影响。

CI 健壮性提升

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论