Firefox Snap 打包

此页面解释了 Firefox 和 Snap 打包格式之间的交互。

上游在哪里

代码参考本身是 mozilla-central,但打包工作在 Canonical 的 firefox-snap 仓库 中进行。

此打包包含一些其他部分和依赖项,包括编译器。它还会重新下载 Mercurial 仓库:这是故意的。

在哪里报告 Bug

所有 Bug 应报告给 Bugzilla 的 第三方打包 组件,并标记为阻塞 snap 元 Bug。

构建过程

虽然存在一个现有的 repackage 任务,但目前它不是最新的,并且无法从 mach 使用(正在 跟踪 此问题),因此不幸的是,现在唯一可行的方法是使用上游工具进行完整重建。

以下步骤应该足够了,假设您已正确设置

虽然文档仍然引用 Multipass,但 Firefox Snap 及其依赖项有一些要求,使其更适合使用 LXD

执行检出时,请记住分支映射

  • edge 是我们的 nightly

  • beta 是我们的 beta

  • stable 是我们的 release

  • esr 是我们的 esr

$ git clone https://github.com/canonical/firefox-snap --branch BRANCH
$ snap run snapcraft

一段时间后,您应该会得到两个文件:firefox-XXX.snapfirefox-XXX.debug。第一个文件是您想要 snap install 的包,第二个文件包含您的调试符号。

然后您可以安装该包

$ sudo snap install --name firefox --dangerous ./path/to/firefox-XXX.snap

如果您想进行并行安装,则可以将 –name firefox 更改为其他名称。这将是您用于 snap run installed-name 的名称,例如,--name firefox_nightly 将要求您运行 snap run firefox_nightly

Snap 有一个插头和插槽的概念,一些插头和插槽会以各种方式自动连接,包括取决于 Snap Store 本身,如果您手动安装为 firefox,它应该会重用它们(但您可能会对您的配置文件进行错误操作)。如果您使用其他名称安装,则 Snap Store 自动连接将不会发生,这可能导致状态损坏。使用商店安装的 Snap 检查 snap connections firefox 应该可以获得您可以复制的准确列表。

CI 覆盖率

目前,Treeherder 上有类似上游的构建。它们每天作为 cron 作业安排,包括

  • 构建 Snap 的 opt/debug 版本

  • 在所有分支上构建它们

  • 运行一些基于 Selenium 的测试

构建定义 基于 Docker

需要注意的是,目前,所有任务都需要在 Docker 下运行。但是,此设置不适用于 Snap,因为它与 SystemD 交互,而 SystemD 不在 Docker 下工作。这就是为什么安装由 install-snap 脚本 处理而不是简单的 sudo snap install,以及为什么我们需要在 破坏性模式 下运行 snap(这没关系,因为我们在 Docker 容器内)。这并不适用于依赖于新可用 Wayland 虚拟机的测试用例。

除了由于设置导致的构建异常外,需要注意的是,这些构建尽可能接近上游。这意味着

  • 它们运行的 mozilla-central 哈希与它们从中构建的源代码不匹配,并且应该检查构建日志以查看 Mercurial 克隆步骤

  • 它使用 Snap 定义中的 clang 构建进行构建

测试定义在 Docker 子目录中。它们使用 Selenium,因为这是上游来自 GitHub Actions 的预先存在的测试所使用的。

它们的覆盖范围确保我们从构建中获得一个基本的工作浏览器。它包括一些以前由 QA 手动运行的测试。

如何在 Try 上进行修改

可以通过 mach try fuzzy --full 搜索 'snap 'upstream 来探索构建和测试任务。Try 做了一些修改以确保我们实际上不会重新下载 Mercurial 仓库并直接重用由 run-task 生成的克隆,这在 run.sh 脚本 中处理。

因此,推送到 Try 基本上就是

$ mach try fuzzy --full -q "'snap 'upstream 'try"

由于构建过程,完整的 opt 构建大约需要 1 小时 45 分钟到 2 小时,而调试构建大约需要 60 分钟,区别在于 opt 构建中使用了 PGO。

如果您需要重用来自 Snap Store 或最新 mozilla-central 或特定成功构建的包,您可以使用 USE_SNAP_FROM_STORE_OR_MC 环境变量;将其设置为 store 将从 Snap Store 下载(警告:Snap Store 上没有调试构建,因此我们拥有的任何 debug 变体实际上都是 opt 构建),将其设置为 TaskCluster 索引值将从索引下载。如果您想要最新的,请将其设置为 latest,或浏览 TaskCluster 索引以查找其他内容。任何 try 都将从最新的 nightly 中提取,而其他内容将从它们各自的分支中提取。

如何在本地进行修改

成功构建后,您还可以通过使用 mach repackage snap 工具进行重新打包来构建 Snap。这需要一个依赖于 LXDsnapcraft 工作安装,其安装步骤在 上游有文档记录