ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nixpkgs Chromium 包维护全指南:上游版本跟踪、构建更新与自动化测试

Nixpkgs Chromium 包维护全指南:上游版本跟踪、构建更新与自动化测试 包管理器操作系统【免费下载链接】nixpkgsNix Packages collection NixOS项目地址https://gitcode.com/GitHub_Trending/ni/nixpkgs点击查看免费下载Chromium 是 Nixpkgs 中最复杂、更新最频繁的桌面浏览器包之一其维护涉及版本锁定、数百个 Git 依赖的哈希解析、Nix 沙箱适配补丁以及 VM 集成测试等多个环节。本指南以 chromium 包目录 的维护文档README.md为骨架结合仓库内真实的更新脚本、锁文件与构建定义系统讲解 Chromium 在 Nixpkgs 中的版本更新流程、安全回移backport规范、测试策略与大版本升级排障方法。读完本文你将掌握如何一键升级 Chromium、如何选择性地运行 NixOS VM 测试、如何处理大版本升级导致的编译失败以及 Chromium 与其他浏览器包google-chrome、ungoogled-chromium、chromedriver、Electron之间的依赖关系。维护者与相关包生态Chromium 包的维护者页面见 README.md 的 Maintainers 一节长期欢迎更多贡献者、测试者与审阅者参与特别点名了以下几类工作专职维护 NixOS stable 通道的维护者提交清理、改进、修复类 PR 的贡献者同时希望尽量降低他人 review 的难度处理陈旧 issue / PR 的人员。在 Nixpkgs 中Chromium 并非孤立存在围绕它构建了完整的浏览器生态且它们共享同一份上游版本信息包与 Chromium 的关系google-chrome通过 Chromium 的upstream-info数据更新版本ungoogled-chromium一套 Chromium 补丁集在 Chromium 的upstream-info中拥有独立条目chromedriver通过 Chromium 的upstream-info更新不参与源码构建且其主版本必须与 Chromium 一致electron-source基于 Chromium 构建的多版本 Electron 源码包复用 Chromium 的-unwrappedderivation这份共享机制在源码中体现为 default.nix 里的默认参数upstream-info ? (lib.importJSON ./info.json).${if !ungoogled then chromium else ungoogled-chromium},也就是说chromium与ungoogled-chromium两个属性都从同一个 info.json 中读取各自的版本与依赖锁定信息electron-source则通过 common.nix 中的isElectron packageName electron分支复用同一套构建框架。这意味着一次上游版本更新会同时影响这一整条浏览器生态链。上游信息与版本数据源维护文档的 Upstream links 一节列出了跟踪 Chromium 上游动态所需的核心资源源码仓库Chromium 官方源码站source.chromium.orgBug 追踪Chromium 官方 Bug 列表bugs.chromium.org发布更新Chrome 版本发布博客chromereleases.googleblog.com支持 Atom / RSS 订阅建议过滤 Stable Channel Update for Desktop 关键词版本历史 APIChrome 版本历史查询接口developer.chrome.com的 Version History 指南发布计划Chromium 版本发布排期表chromiumdash.appspot.com/schedule。这些资源的具体 URL 均记录在 README.md 的 Upstream links 小节中是确认新版本号、评估发布节奏的第一手来源。在 Nixpkgs 仓库内部真正的版本事实由 info.json 承载。以当前锁文件为例chromium条目记录了version如154.0.8037.97对应上游稳定版chromedriver单独记录version及 macOS 两个平台的二进制哈希hash_darwin、hash_darwin_aarch64depsdepot_tools、gn含version/rev/hash以及npmHashDEPSChromium 的全部 Git 依赖清单每个条目包含url、rev、hashsrc主源码还带有recompress: true标记。ungoogled-chromium条目额外携带deps.ungoogled-patchesrev与hash用于锁定补丁集版本。这些数据随后被 common.nix 中的chromiumDeps批量转换为fetchFromGitiles固定输出派生FOD再通过unpackPhaseSnippet在解包阶段逐一铺入构建树。一键更新update.mjs 的工作机制维护文档给出的更新命令极其简洁./pkgs/applications/networking/browsers/chromium/update.py在当前仓库中这个更新入口已经演进为 update.mjs以 zx 脚本形式实现文档描述的历史 Python 脚本update.py即其前身。它读取锁文件 info.json逐个属性chromium、ungoogled-chromium执行以下流程探测上游最新版本通过 Chrome 版本历史 API 查询 Linux 平台稳定通道的最新版本见 update.mjs并过滤fraction 0.5以确保是全面放量的版本ungoogled-chromium则先拉取其 GitHub tags再与 Chromium 稳定版本做交集匹配update.mjs版本比较使用version_greater_than做数值化比较仅当上游版本更新时才继续update.mjs解析依赖通过 depot_tools.py 调用 depot_tools 的gclient_eval递归求值 Chromium 的DEPS文件输出完整的依赖图url / rev 对哈希预取FOD prefetch对每个依赖执行nix-build并从 stderr 中正则提取got: sha256-...哈希见 update.mjs已有哈希的依赖会跨属性复用缓存update.mjs避免重复下载同步锁定将结果写回 info.json通过 Proxy 实现属性赋值即落盘同时更新npmHash、gn、depot_tools等构建工具锁定。更新脚本支持按属性定向更新例如只更新ungoogled-chromium./pkgs/applications/networking/browsers/chromium/update.mjs --ungoogled-chromium也可以显式指定 ungoogled 补丁集的 revision--ungoogled-chromium-rev rev。由于chromedriver必须与 Chromium 主版本一致脚本在更新chromium时会同步获取chromedriver的 macOS 二进制哈希update.mjs保证两个包版本永远配对。更新后必做的验证文档强调运行更新脚本之后至少需要验证nixosTests.chromium或进行基本的手动测试google-chrome它复用upstream-info数据必须确认没有因版本漂移而损坏。另外有一个时间敏感点Chromium 的源码 tarball 往往在发布公告几小时后才可用因此 CI 可能短暂处于失败状态。README 记录了可跟踪 tarball 发布状态的 Chromium 官方 CI 构建器页面publish_tarball与publish_tarball_dispatcher这些信息用于判断上游还没放包而非我们的补丁坏了。跑通全部 VM 集成测试README 提供了两种测试粒度。全部自动化 NixOS VM 测试覆盖 Chromium、ungoogled-chromium 与 Google Chrome 三个浏览器文档明确提示不推荐目前是 6 个测试nix-build nixos/tests/chromium.nix单个测试例如只测ungoogled-chromiumnix-build nixos/tests/chromium.nix -A ungoogled其中-A对应的属性名来自 nixos/tests/chromium.nix 中的channelMap读者可以查阅该文件获取当前可用的全部测试属性。两个注意事项测试 Google Chrome 需要先执行export NIXPKGS_ALLOW_UNFREE1因为其包含专有组件对于自定义构建可以对channelMap进行 override以适配自己的测试矩阵。安全更新与 Backports 规范Chromium 的每一次更新都被视为安全关键因此文档对稳定通道的移植有明确的硬性要求所有更新应尽快移植到 stable 通道当新的稳定版发布后旧版本仍会接受大约一个月的安全更新窗口一个月窗口结束后必须将旧版 Chromium 标记为 insecure文档以提交69e4ae56c4b为参考范例标记 insecure 时必须同时覆盖所有使用upstream-info的浏览器google-chrome、ungoogled-chromium等并确保标记后的测试 job 依然能够成功。这一规范与 Nixpkgs 的meta.knownVulnerabilities机制配合使用是保障 NixOS 用户及时获得安全修复的最后一道防线。大版本升级的已知问题与对策Chromium 在主版本号升级时经常性编译失败文档原话为 regularly breaks on major updates原因集中在两类Nix 构建沙箱差异沙箱内无法通过网络抓取依赖也不使用标准的 FHS 路径很多上游假设因此失效缺失的上游修复需要从其他发行版 backport 补丁。README 明确列出了三个可靠的补丁与排障信息来源Arch Linux 的 Chromium trunk、Gentoo 的www-client/chromium、Fedora 的 chromium rpm 仓库这些都是社区维护 Chromium 构建的一线资料。此外还有一个非常实用的经验法则如果构建因未知编译器 flag 立即失败通常意味着需要升级到新的 LLVM 大版本。这条规则在 common.nix 中得到充分印证——其中按版本区间与 LLVM 版本双重条件挂载了大量补丁例如chromium-147-llvm-22.patch、chromium-149-llvm-22.patch、chromium-152-dawn-llvm-22.patch、chromium-153-llvm-22.patch见 patches 目录条件均为chromiumVersionAtLeast xxx lib.versionOlder llvmVersion 23。也就是说当仓库内的 LLVM 低于 Chromium 要求的版本时通过回退revert上游新引入的编译 flag 来维持构建。类似地针对 Rust 工具链的演进也有对应补丁如chromium-142-bytemuck-rust-1.95.patch、chromium-141-rust.patch、chromium-150-rust.patch说明大版本升级通常要同时协调 CLLVM/Clang与 Rust 两条工具链的版本节奏。Nix 沙箱适配的构建细节除补丁外common.nix 的postPatch阶段还展示了 Chromium 在 Nix 环境下的一整套适配手段可作为理解为什么大版本会坏的参考用仓库提供的 gclient_args.gni 覆盖build/config/gclient_args.gni并关闭checkout_mutter、checkout_glic_e2e_tests、checkout_clusterfuzz_data等非必要 checkout手工生成LASTCHANGE、GPU_LISTS_VERSION、SKIA_COMMIT_HASH、DAWN_VERSION等版本头文件替代上游依赖 git 元数据的lastchange.py用符号链接把 Nixpkgs 的node、java、gperf、rustc、cargo、rustfmt、clang-format、esbuild、crubit等工具塞回 Chromium 期望的third_party/...路径模拟上游的预装工具布局通过replace_gn_files.py --system-libraries让 Chromium 链接系统库如 flac、libjpeg、libxml、libxslt见 common.nix修改 sandbox 相关源码使CHROME_DEVEL_SANDBOX环境变量指向 Nix store 中的沙箱二进制common.nix并在 default.nix 的 wrapper 脚本中动态设置该变量。这些细节解释了 README 中大版本升级需要各种补丁的直接原因也让读者在遇到新的大版本失败时知道该往哪些方向排查。Beta 与 Dev 通道的定位README 对 Beta / Dev 通道的使用边界有明确说明这些通道只用于提前测试和修复构建它们可能随时处于损坏状态may be broken at times绝不允许因为 Beta / Dev 的问题而推迟 stable 通道的更新。也就是说维护者可以将预发布版本作为预警雷达提前发现构建问题但发布节奏必须以 stable 为准绳。这一策略在锁文件层面也得到了体现info.json 只维护chromium与ungoogled-chromium两个稳定属性并无 Beta/Dev 条目。升级后的手工验收清单自动化测试之外README 提供了一套实用的手工测试清单覆盖浏览器各关键子系统检查项手段版本确认chrome://version/GPU 加速chrome://gpu/基础功能浏览、扩展、音视频播放、JavaScript 执行等WebGLget.webgl.org测试页VA-API 硬件视频加速Arch Wiki 的 Chromium 硬件加速指南README 中给出了参考链接可选项目Widevine CDM专有组件、基准测试、Ozone 等这套清单与 browser.nix 中requiredSystemFeatures [ big-parallel ]、timeout 17280048 小时构建超时等元数据配合说明了 Chromium 包在 Nixpkgs 中属于重量级、长时间构建的包任何升级都值得认真对待。总结Nixpkgs 的 Chromium 维护可以概括为三条主线单一数据源info.json 驱动 Chromium / ungoogled-chromium / chromedriver / google-chrome / Electron 的联动、可重复的升级流程update.mjs 完成版本探测、依赖解析与哈希锁定、多层次的验证体系VM 集成测试 手工验收清单 stable 通道安全回移。掌握这些机制后无论是提交一个 Chromium 升级 PR还是排查大版本编译失败你都能沿着本文给出的文件路径快速定位到对应逻辑——这正是这一维护文档沉淀下来的核心工程经验。赞分享包管理器操作系统【免费下载链接】nixpkgsNix Packages collection NixOS项目地址https://gitcode.com/GitHub_Trending/ni/nixpkgs点击查看免费下载相关推荐FastDeploy在线服务优化OpenAI API兼容与vLLM接口完整教程FastDeploy在线服务优化OpenAI API兼容与vLLM接口完整教程 FastDeploy是一款简单易用的深度学习模型部署工具包支持云、移动和边缘人工智能大模型模型推理服务推理引擎模型量化强化学习本地部署Cromite 上游追踪与自动化维护指南从 Chromium 变更到测试套件的协作蓝图Cromite 上游追踪与自动化维护指南从 Chromium 变更到测试套件的协作蓝图 导读 本文以 Cromite 维护者 uazo 的求助清单 doc桌面应用网络安全3周掌握ABAP RAP开发从传统编程到现代化应用构建的完整路径3周掌握ABAP RAP开发从传统编程到现代化应用构建的完整路径 ABAP RESTful应用编程模型RAP正在彻底改变企业级应用开发的方式。如果你还在为示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表