在 Linux 上编译 Firefox

英文文档已转移:https://firefox-source-docs.mozilla.org/setup/linux_build.html

中文翻译基于此文档。

在 Linux 上编译 Firefox

要做的并不复杂,但是在 Linux 上编译 Firefox 有一些先决条件。 你需要:

  1. 64位的 Linux。 您可以通过打开终端窗口进行检查。 如果 uname -m 返回 x86_64,则可以继续。
  2. 接下来,您需要安装 Python 2.7和 Python3.x。 您可以使用 python --version 命令检查是否已经安装。如果没有,可以使用发行版的软件包管理器进行安装。 确保您的系统是最新的!
  3. 最后,一个相当快速的互联网连接和30GB的可用磁盘空间。

快速入门

在 Linux 上进行设置既快速又容易。

请在家目录下创建一个“src”目录(如果还没有):

# 引导脚本需要此目录,但是稍后您可以为 Mozilla 源码选择其他目标目录
mkdir src && cd src

接下来下载 bootstrap.py 脚本并将其保存在上面创建的 src/ 目录中。

# 下载引导脚本
curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -o bootstrap.py

明确不支持在非 Linux 原生的文件系统之上(例如,在已安装的 NTFS 分区上)的 Linux 中编译 Firefox。 尽管这样的编译环境也可能会声称已成功编译,但是并没有,并且这可能很难诊断和修复。

然后在您的终端从该目录中启动引导程序,如下所示:

python bootstrap.py

…并按照提示进行操作。 这将使用 mercurial 克隆源代码。 如果您更喜欢使用 git,请改用以下命令:

python bootstrap.py --vcs=git

让我们来编译 Firefox

你准备好了;现在我们将它们联系在一起。在您的终端中:

cd mozilla-central

如果您不在使用 C/C++ 开发 Firefox,则还可以选择速度更快的 Artifact Builds(神器编译)。 要启用 Artifact Builds,请使用以下选项设置 .mozconfig 文件:

# Automatically download and use compiled C++ components:
# This option will disable C/C++ compilation
ac_add_options --enable-artifact-builds

# Write build artifacts to (not mandatory):
mk_add_options MOZ_OBJDIR=./objdir-frontend

如果计划使用调试器遍历代码,请使用以下选项设置 .mozconfig 文件:

ac_add_options --disable-optimize
ac_add_options --enable-debug

来自 LTS Linux 发行版的较旧的 clang 版本(特别是 clang 6)有时会错误地编译 Firefox,导致启动生成的版本时崩溃。 如果发生这种情况,您可以通过将以下内容添加到 .mozconfig 中来强制使用下载的 ./mach bootstrap 版本的 clang 版本:

export CC=path/to/home/.mozbuild/clang/bin/clang
export CXX=path/to/home/.mozbuild/clang/bin/clang++

最后,运行 build 命令:

./mach build

如果在 Ubuntu 或 Debian 上遇到与 LLVM/Clang 相关的任何错误,请下载最新版本的 LLVM 和 Clang,然后重新运行 ./mach build 命令。

您正在路上,正在从源代码编译自己的 Firefox 副本。 如果需要一段时间,不要气馁; 即使在最快的现代计算机上也要花费一些时间,而在较旧的硬件上则要花费两个小时或更长时间。 使用 --enable-artifact-builds 选项时,编译通常会在几分钟内完成。

现在,乐趣开始了

您已经有了代码,并已经编译了 Firefox。 用 ./mach run 启动它,您就可以开始极客之旅了。下一步由您决定:在 IRC 的 #introduction 频道中加入我们,然后找到一个可以开始处理的 bug 反馈给我们

一般注意事项

  1. 2GB 的 RAM 和2GB 的可用交换空间(swap)是最低要求,而更大的 RAM 总是更好——拥有8GB 或更大的 RAM 将显着缩短编译时间。
  2. 64位 x86 CPU 和64位操作系统。 从2015年初开始,在大多数32位系统上不再可能从源代码上完整编译 Firefox;必需要64位操作系统。 “Artifact Builds”是可能可以成功,但不是受支持的配置。 在 Linux 上,您可以通过在终端中键入“uname -a”来确认。
  3. 要编译 Firefox,需要使用最新版本的 Clang。 您可以在此处详细了解我们使用的功能及其编译器支持
  4. 现在大多数 Linux 发行版都安装了更高版本的 autoconf,编译系统无法使用该更高版本的 autoconf,并报告错误“*** Couldn't find autoconf 2.13.  Stop.”。 但是通常可以使用单独的 autoconf2.13 软件包。 要在基于 Debian 的发行版中安装 autoconf 2.13,请复制此行并将其粘贴到终端窗口中:
$ sudo apt install autoconf2.13

如果您使用的是使用 Fedora 操作系统的计算机,则只需从终端窗口安装以下必备组件:

sudo dnf install @development-tools @c-development autoconf213 gtk2-devel gtk3-devel libXt-devel GConf2-devel dbus-glib-devel yasm-devel alsa-lib-devel pulseaudio-libs-devel

对 Debian/Ubuntu 用户的要求

您需要许多不同的软件包:

# the rust compiler
aptitude install rustc

# the rust package manager
aptitude install cargo

# the required (old) version of autoconf
aptitude install autoconf2.13

# the headers of important libs
aptitude install libgtk-2-dev
aptitude install libgtk-3-dev
aptitude install libgconf2-dev
aptitude install libdbus-glib-1-dev
aptitude install libpulse-dev

# rust dependencies
cargo install cbindgen

# an assembler for compiling webm
aptitude install yasm

一键引导

我们的系统引导脚本可以自动安装所需的依赖项。 您可以通过复制以下行并将其粘贴到终端窗口中来下载并运行它:

wget -q https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O bootstrap.py && python bootstrap.py

注意:将 bootstrap.py 传递到 python 进程的 stdin 会导致 bootstrap 脚本中的交互式提示失败,从而导致 bootstrap 进程失败。 您必须针对本地文件运行 Python。

如果上述命令失败,则通常是由于某些 Linux 发行版附带了过时的根证书列表。 在这种情况下,您应该升级 Linux 发行版或使用浏览器下载文件。 这样可以确保您从正确的来源获得它。 如果您在此过程中遇到错误,请考虑解决一个错误,说明引导程序不起作用,然后直接联系 Mike Hoye <mailto:mhoye@mozilla.com> 寻求帮助。 请包括错误消息和有关您的操作系统的一些详细信息。

如果您已经通过 Mercurial 或 Git 克隆了源代码,则还可以在 bootstrap 命令中使用 mach

./mach bootstrap

常见的引导程序故障

wget: command not found

您可能没有安装 wget(或 curl)。 在这种情况下,您可以通过软件包管理器进行安装:

在基于 Debian 的发行版(如 Ubuntu)上:

sudo apt install wget

在基于 Fedora 的发行版上:

sudo dnf install wget

或者您也可以使用浏览器下载 bootstrap.py,然后使用以下命令运行它:

python bootstrap.py

在某些情况下,自定义命令提示符以包含表情符号或其他非文本符号的用户会发现 bootstrap.py 没有正常运行,并显示 UnicodeDecodeError。 我们已经为此提交了一个错误,但与此同时,如果您遇到此问题,则需要将提示改回无聊的状态。

更多信息

上面的引导脚本支持流行的 Linux 发行版。 如果它不适合您,请参阅 Linux 编译必备组件以获取更多信息。