谷歌如何为数十万台设备更新内部 Linux 发行版

出品|开源中国

谷歌内部使用了许多不同的操作系统平台,其中包括 Linux。15 多年前,谷歌选择基于 Ubuntu LTS 构建内部 Linux 发行版 Goobuntu,主要是看中了 Ubuntu 具备用户友好、易于使用的特性,以及提供了许多优秀功能。此外,LTS 会获得 Canonical 提供 2 年以上的安全更新。

根据官方介绍,Goobuntu 是谷歌长期以来一直使用的 Linux 发行版。不过 Ubuntu LTS 的两年更新周期意味着谷歌必须在操作系统 EOL 之前,对超过 10 万台设备中的每台机器进行升级。这是一项非常困难且耗时的工作,毕竟每两年让所有工程师从头开始配置他们的工作空间,这对生产力是严重的打击,并且从经济角度来看也是一个不负责任的选项。

在每个操作系统使用周期内,谷歌还面临软件包重大版本升级的挑战,因为这可能需要对软件配置进行重大改变。为了让这个过程自动化,谷歌工程师编写了一个无人值守的升级工具来处理很多常见的问题。这种 “自动化升级” 意味着大多数谷歌员工无需通过重新安装机器,并重新创建所有配置来手动升级。不过为了实现这一点,谷歌需要对升级过程进行全面测试,并检查所有已更改的主要软件包是否继续运行(在 Ubuntu 中,主要版本之间的升级可能多达数千个软件包)。有时,在发生软件包弃用且工程师必须决定如何推进的情况下,很难提供自动化。

据称,谷歌完成所有 Goobuntu 的升级通常要花费一年的时间,整个过程对于团队来说是一个巨大的压力。而且很多时候他们遇到的一些 bug 已经在上游被修复了,但这些改进却从未被合并到所使用的 LTS 版本。

因此谷歌转向了滚动更新发行版,不过它没有选择知名的滚动更新发行版 Arch Linux,而是基于 Debian 测试分支构建了 gLinux Rodete (Rolling Debian Testing)。

选择 Debian 是因为它有着庞大的社区和软件库,还可以使用 Debian 格式的现有内部软件包和工具。而且 Ubuntu 也是基于 Debian,迁移过去更容易顺畅。

Debian 稳定分支也是差不多两年发布一次大更新,但其测试分支是滚动更新的。滚动更新意味着需要尽可能防止新版本对现有工作流程造成破坏,为了管理从源代码构建所有上游软件包的所有这些复杂任务,谷歌构建了一个名为 Sieve 的工作流系统。通过运行一个虚拟化测试套件,确保核心组件和开发者工作流程都不会被新版本软件包破坏。

谷歌表示,Goobuntu 最后一个版本基于 Ubuntu 14.04 LTS(代号 Trusty)。Rodete 的开发始于 2015 年,2017 年,谷歌开始将机器迁移到 Rodete,并在 2018 年底完成所有迁移。2019 年初关闭了最后一批运行 Goobuntu 的机器。2020 年中,Rodete 完全跟上了 Debian Bullseye 的发布时间。未来谷歌计划与上游 Debian 更紧密地合作,并贡献更多的内部补丁来维护 Debian 软件包生态。

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...