从源代码构建Firefox

我只是想获取代码,编辑一些东西,然后构建它,就这样,为什么这么复杂呢?
我尝试了这个指南,看起来是我需要的,但是如果你看原始指南,它完全不同且复杂,使用了bzr等工具。
我按照脚本进行操作:
sudo apt-get build-dep firefox
sudo apt-get install -y fakeroot
apt-get source firefox
# here it gets firefox_55.0.2+build1-0ubuntu0.16.04.1.debian.tar.xz, firefox_55.0.2+build1-0ubuntu0.16.04.1.dsc and firefox_55.0.2+build1.orig.tar.xz
tar xf firefox_55.0.2+build1-0ubuntu0.16.04.1.debian.tar.xz
tar xf firefox_55.0.2+build1.orig.tar.xz
vim debian/config/mozconfig.in
# trying to fix https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1710993
# echo 'ac_add_options --enable-alsa' >> debian/config/mozconfig.in
dpkg-buildpackage -b -us -uc
# some bugs of missing SOURCE_CHANGESET file
touch SOURCE_CHANGESET
dpkg-buildpackage -b -us -uc
# some issues with missing browser/config/version.txt file
ln -s firefox-55.0.2+build1 browser
touch browser/config/version.txt
dpkg-buildpackage -b -us -uc

这似乎取决于很多地方,并且不断批评消息 debian/build/rules.mk:366: *** 我们不在完整的源目录中。请使用"TARBALL=<path_to_orig.tar.bzr>"。停止。

我在同一个目录中提取文件,源代码就在那里,我现在不需要更改任何其他软件包,我该如何构建它?


3欢迎来到“从源代码构建”的世界,这是一个复杂的过程。 - mikewhatever
1你试过在之前设置 TARBALL=/path/to/orig.tar.bzr 吗? - dessert
@dessert 我没有任何 .bzr 文件。 - Tiago Pimenta
我认为你的 firefox_55.0.2+build1.orig.tar.xz 是正确的版本 - 或者是另一个版本,试一下就知道了。 - dessert
@dessert 我试过了,它似乎是一个类似于git的源代码管理工具,可能正在尝试下载更多的代码。 - Tiago Pimenta
你是想要构建发布版本的指令还是开发版本的指令? - andrew.46
@andrew.46 我打算解决一个问题并进行测试,不需要正式发布,我会生成一个补丁并发送给社区,让他们应用并生成一个发布版本。 - Tiago Pimenta
@TiagoPimenta 好的,所以我已经创建了一个答案,其中涉及构建Firefox的开发版本,如果您要将补丁发送到上游,则需要此版本。如果您只是将补丁发送给Ubuntu / Debian的打包人员,则不需要这么多步骤 :) - andrew.46
1个回答

编译Firefox(“Nightly”)的开发版本需要进行一些仔细的准备工作。(这是制作补丁和改进“上游”时最好使用的版本)。在Ubuntu的生产环境之外,务必远离此任务,并强烈建议使用专用于此任务的虚拟机。
下面的技术已在运行Ubuntu Zesty Zerus 17.04的专用虚拟机上进行了测试!始终使用最新版本的Ubuntu来编译Firefox是最好的选择,因为所需的依赖大多数都相当现代化。我没有对无尽的构建选项进行调试,但请随意在您自己的构建中进行尝试!
注意:构建系统需要大量的RAM和大量的磁盘空间。我建议8GB的RAM、30GB的可用磁盘空间以及虚拟机允许的尽可能多的核心数,这种组合在我的系统上确实有效。请注意:如果RAM、硬盘空间和可用核心较少,则构建系统将失败...
1. 构建依赖:
首先安装一些构建依赖,从最新稳定的rust编译器开始:
wget -O - https://static.rust-lang.org/rustup.sh | sh

然后从Ubuntu软件仓库进行更标准的安装:
sudo apt-get install autoconf2.13 libgtk-3-dev mercurial llvm-4.0 clang-4.0 \
libgconf2-dev libdbus-glib-1-dev libpulse-dev yasm build-essential libgtk2.0-dev \
libxt-dev

2. 克隆 Firefox 开发仓库:

接下来,克隆 Firefox Mercurial 仓库时,可以边下载边泡杯茶:

cd $HOME && hg clone https://hg.mozilla.org/mozilla-central

3. 构建 Firefox:

最后,要构建源代码本身,可以泡一杯茶,可能还可以吃个三明治,因为即使在最快的电脑上,这个过程也需要很长时间:

cd $HOME/mozilla-central && ./mach build

当这个完成后,您应该看到这条消息:
43:58.38 We know it took a while, but your build finally finished successfully!
To view resource usage of the build, run |mach resource-usage|.
To take your build for a test drive, run: |mach run|

除了一些旅行建议的链接之外,

4. 运行Firefox:

现在只需运行:

cd $HOME/mozilla-central && ./mach run

而且你正在运行最新的Firefox开发版本!现在你可以开始修改源代码,如果你的补丁符合要求,你就可以提交它们,并将你的工作纳入这个伟大的浏览器。

5. 更新源代码:

你应该定期更新源代码,方法是切换到源代码目录并使用标准的Mercurial仓库命令进行更新。以下一行命令可以帮助你完成这个操作:

cd $HOME/mozilla-central && hg pull && hg update

这是我自己系统上的标准更新运行情况:
andrew@ithaca:~/mozilla-central$ hg pull
pulling from https://hg.mozilla.org/mozilla-central
searching for changes
adding changesets
adding manifests
adding file changes
added 767 changesets with 4619 changes to 3590 files                            
(run 'hg update' to get a working copy)
andrew@ithaca:~/mozilla-central$ hg update
3581 files updated, 0 files merged, 141 files removed, 0 files unresolved

重新编译之后,您应该按照以下步骤进行操作:
cd $HOME/mozilla-central && ./mach build

或许在重新编译期间去散个步吧 :).
6. 无理取闹的截图:
下面是我在我的17.04系统上运行的最新的“夜间版”的屏幕截图:

enter image description here

并记住:“玩得开心!!”

注意事项:

  • 贡献给Mozilla代码库:将你的补丁合并到Firefox代码库的起步步骤...
  • Mozilla Firefox:Linux构建准备:这个项目的一个很好的入门,尽管需要进行一些修改和添加。我无法让bootstrap.py安装程序正常工作,所以提供了手动操作的说明。
  • Ubuntu 17.04中的Rust编译器版本太旧,因此提供了从Rust官网直接安装的说明。Rust每6周发布一次,所以对于喜欢最新版本的人来说,这可能是更好的选择。一些注意事项在这里...
  • Firefox Nightly:关于Firefox Nightly开发和发布模型的更多详细信息。

дЄЇдїАдєИйЬАи¶БдљњзФ®--no-check-certificateжЭ•дЄЛиљљhttps://static.rust-lang.org/rustup.shпЉЯдљњзФ®`wget`дЉЉдєОеПѓдї•ж≠£еЄЄдЄЛиљљиАМжЧ†йЬАиѓ•йАЙй°єгАВ - Eliah Kagan
@EliahKagan 对我来说也是一样的,但在自动签名认证的https网站上是必需的,我相信他这样做是出于关心。 安德鲁,请耐心等待,昨天由于没有足够的可用空间,我无法完成构建,它占用了超过4GB的空间,今天我再次进行,很快我会接受你的答案。 - Tiago Pimenta
@EliahKagan 在我的全新虚拟机上,wget在没有这个选项的情况下失败了,是不是我需要更新证书? - andrew.46
1@andrew.46 我有点怀疑,但不能确定。如果你在虚拟机上升级软件包,错误会消失吗?我在两台运行不同操作系统的机器上尝试过(Ubuntu中使用wget,在Windows中使用Firefox下载),并且连接了不同的互联网,没有看到任何错误或警告。如果--no-check-certificate标志不需要的话,我认为应该将其删除,因为在下载和运行shell脚本的管道中存在这个标志可能对某些用户造成安全问题(中间人攻击),或者在未来可能会引起不安(就像我一样!)。 - Eliah Kagan
@EliahKagan 好吧,我已经删除了它... - andrew.46
@TiagoPimenta 编译起来有点麻烦! - andrew.46