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.snap
和 firefox-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。这需要一个依赖于 LXD
的 snapcraft
工作安装,其安装步骤在 上游有文档记录。