如何使用debuild重新编译Firefox 57 Debian软件包?

我正在尝试在Ubuntu 16.04上重新编译Firefox 57(目标是添加几个补丁)。
我正在执行通常的步骤:
sudo apt-get source firefox
sudo apt-get build-dep firefox
cd firefox-57.0.1+build2/
debuild -us -uc

在构建依赖阶段,我遇到了以下错误:
The following packages have unmet dependencies:
 builddeps:firefox : Depends: cargo (>= 0.20)
                     Depends: rustc (>= 1.19.0)
E: Unable to correct problems, you have held broken packages.

我有所有针对xenial的标准软件源(包括universemultivers),但没有这些软件包。最新的rustc版本是1.17。
我尝试过以下方法:
  1. 在本地安装最新的rustc和cargo,并通过--prepend-path将其路径传递给debuild。
  2. 使用ppa:jonathonf/rustlang全局安装rustc和cargo。
  3. ppa:ubuntu-mozilla-security/ppa安装rustc、cargo和clang/llvm。
但是我遇到了编译错误:
/home/idavydov/src/ff/firefox-57.0.1+build2/obj-x86_64-linux-gnu/dist/include/mozilla/Compiler.h:49:12: fatal error: 'cstddef' file not found, err: true
/home/idavydov/src/ff/firefox-57.0.1+build2/obj-x86_64-linux-gnu/dist/include/mozilla/mozalloc.h:16:12: fatal error: 'new' file not found, err: true
/home/idavydov/src/ff/firefox-57.0.1+build2/obj-x86_64-linux-gnu/dist/include/mozilla/mozalloc.h:16:12: fatal error: 'new' file not found, err: true
...
    stack backtrace:
       0:     0x5584a7075fb3 - std::sys::imp::backtrace::tracing::imp::unwind_backtrace::h8ed7485deb8ab958
                                   at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
       1:     0x5584a7072520 - std::sys_common::backtrace::_print::h3d4f9ea58578e60f
                                   at /checkout/src/libstd/sys_common/backtrace.rs:69
...
      11:     0x5584a707aa9b - std::sys::imp::thread::Thread::new::thread_start::hbaf1b5aa1ca8e3ea
                                   at /checkout/src/liballoc/boxed.rs:736
                                   at /checkout/src/libstd/sys_common/thread.rs:24
                                   at /checkout/src/libstd/sys/unix/thread.rs:90
      12:     0x2b1467a296b9 - start_thread
      13:     0x2b1467f5c3dc - clone
      14:                0x0 - <unknown>

重建Firefox 57 deb在Ubuntu Xenial上需要什么样的编译环境?

我觉得你只需要在编译之前运行sudo apt-get build-dep firefox命令。但是它没有起作用。 - N0rbert
@N0rbert,是的,当我遇到builddep错误时,我就是这样做的。添加mozilla ppa可以解决builddep问题,但是编译过程中仍然会出现错误。 - Iakov Davydov
1个回答

我已经解决了这个问题。有两个问题:
没有构建依赖的软件包
为此,正确的方法是添加相关的ppa:
sudo apt-get source firefox
sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa
sudo apt-get update
sudo apt-get build-dep firefox
cd firefox-57.0.1+build2/
debuild -uc -us -b

编译错误

这很可能与磁盘上可用的空闲空间有关。Firefox需要30GB的可用空间和至少2GB的RAM来进行编译。我在另一台资源充足的机器上尝试了一下,结果正常。