Difference between revisions of "Porting/Tor Browser"

From RCS Wiki
Jump to navigation Jump to search
(One of the libssp.so bugs is fixed)
(Add ESR 60 info)
Line 1: Line 1:
 
Early efforts to port Tor Browser to POWER are underway.  The primary challenge is that Tor Browser uses an unusual build system (rbm) in order to ensure reproducible builds.  While Tor's configuration of rbm can cross-compile for Windows and macOS targets, it is not configured out of the box to cross-compile for GNU/Linux targets.  As a result, our early efforts are focused on modifying Tor's rbm configuration to support cross-compiling for non-x86 GNU/Linux targets; it is expected that this will be useful not only for POWER but also for targets like ARM.
 
Early efforts to port Tor Browser to POWER are underway.  The primary challenge is that Tor Browser uses an unusual build system (rbm) in order to ensure reproducible builds.  While Tor's configuration of rbm can cross-compile for Windows and macOS targets, it is not configured out of the box to cross-compile for GNU/Linux targets.  As a result, our early efforts are focused on modifying Tor's rbm configuration to support cross-compiling for non-x86 GNU/Linux targets; it is expected that this will be useful not only for POWER but also for targets like ARM.
  
Current source code is at https://notabug.org/JeremyRand/tor-browser-build/src/armhf (<code>armhf</code> branch). If you're interested in joining the effort, talk to Jeremy_Rand or Jeremy_Rand_Talos in #talos-workstation.
+
Current source code is at:
 +
 
 +
* ESR 52 version (more stuff works; outdated; only useful for reference purposes): https://notabug.org/JeremyRand/tor-browser-build/src/armhf (<code>armhf</code> branch).
 +
* ESR 60 version (less stuff works; more up to date; development effort should be targeted here): https://notabug.org/JeremyRand/tor-browser-build/src/armhf-esr60 (<code>armhf-esr60</code> branch)
 +
 
 +
If you're interested in joining the effort, talk to Jeremy_Rand or Jeremy_Rand_Talos in #talos-workstation.
  
 
== Build instructions ==
 
== Build instructions ==
 +
 +
=== ESR 52 ===
  
 
<code>./rbm/rbm build firefox --target release --target torbrowser-linux-arm</code>
 
<code>./rbm/rbm build firefox --target release --target torbrowser-linux-arm</code>
 +
 +
=== ESR 60 ===
 +
 +
<code>./rbm/rbm build firefox --target nightly --target torbrowser-linux-arm</code>
  
 
== Errors / Troubleshooting ==
 
== Errors / Troubleshooting ==
Line 11: Line 22:
 
=== Unfixed ===
 
=== Unfixed ===
  
* <code>./firefox: error while loading shared libraries: libssp.so.0: cannot open shared object file: No such file or directory</code>
+
==== Missing libssp.so.0 (affects both ESR 52 and ESR 60) ====
** Workaround: add the <code>Browser</code> directory to your <code>LD_LIBRARY_PATH</code> in order for Tor Browser to find the library.
+
 
** This should be fixable by porting the non-Firefox projects (one of which is responsible for setting the <code>LD_LIBRARY_PATH</code>).
+
<code>./firefox: error while loading shared libraries: libssp.so.0: cannot open shared object file: No such file or directory</code>
 +
 
 +
* Workaround: add the <code>Browser</code> directory to your <code>LD_LIBRARY_PATH</code> in order for Tor Browser to find the library.
 +
* This should be fixable by porting the non-Firefox projects (one of which is responsible for setting the <code>LD_LIBRARY_PATH</code>).
 +
 
 +
==== Segfault immediately on startup (only affects ESR 60) ====
 +
 
 +
gdb output:
 +
 
 +
<nowiki>Starting program: /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/firefox.real
 +
[Thread debugging using libthread_db enabled]
 +
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
 +
 
 +
Program received signal SIGSEGV, Segmentation fault.
 +
0xb201eaaa in ?? ()
 +
from /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/libxul.so
 +
(gdb) bt
 +
#0 0xb201eaaa in ?? ()
 +
from /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/libxul.so
 +
#1 0xb1f66000 in ?? ()
 +
Backtrace stopped: previous frame identical to this frame (corrupt stack?)</nowiki>
 +
 
 +
* Not clear what's causing this.
 +
* A very similar bug occurs with Debian's official <code>firefox-esr</code> version <code>60.2.2esr-1~deb9u1</code> package (<code>SIGSEGV</code> on startup, backtrace shows 2 addresses in <code>libxul.so</code> followed by a corrupt stack).
  
 
=== Fixed ===
 
=== Fixed ===
Line 27: Line 61:
 
== Task list ==
 
== Task list ==
  
* Port this to newer versions of Tor Browser that use Firefox ESR 60.  This will require making Rust work.
+
* Finish porting this to Firefox ESR 60.
 
* Build the projects besides Firefox.
 
* Build the projects besides Firefox.
 
* Generalize the GNU/Linux cross-compiling changes so that they work on target arches besides armhf.  (ppc64be, ppc64le, and aarch64 are all likely to be useful.)
 
* Generalize the GNU/Linux cross-compiling changes so that they work on target arches besides armhf.  (ppc64be, ppc64le, and aarch64 are all likely to be useful.)

Revision as of 23:28, 20 October 2018

Early efforts to port Tor Browser to POWER are underway. The primary challenge is that Tor Browser uses an unusual build system (rbm) in order to ensure reproducible builds. While Tor's configuration of rbm can cross-compile for Windows and macOS targets, it is not configured out of the box to cross-compile for GNU/Linux targets. As a result, our early efforts are focused on modifying Tor's rbm configuration to support cross-compiling for non-x86 GNU/Linux targets; it is expected that this will be useful not only for POWER but also for targets like ARM.

Current source code is at:

If you're interested in joining the effort, talk to Jeremy_Rand or Jeremy_Rand_Talos in #talos-workstation.

Build instructions

ESR 52

./rbm/rbm build firefox --target release --target torbrowser-linux-arm

ESR 60

./rbm/rbm build firefox --target nightly --target torbrowser-linux-arm

Errors / Troubleshooting

Unfixed

Missing libssp.so.0 (affects both ESR 52 and ESR 60)

./firefox: error while loading shared libraries: libssp.so.0: cannot open shared object file: No such file or directory

  • Workaround: add the Browser directory to your LD_LIBRARY_PATH in order for Tor Browser to find the library.
  • This should be fixable by porting the non-Firefox projects (one of which is responsible for setting the LD_LIBRARY_PATH).

Segfault immediately on startup (only affects ESR 60)

gdb output:

Starting program: /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/firefox.real 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0xb201eaaa in ?? ()
from /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/libxul.so
(gdb) bt
#0 0xb201eaaa in ?? ()
from /home/user/Downloads/tor-browser-arm/2018-10-21/Browser/libxul.so
#1 0xb1f66000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
  • Not clear what's causing this.
  • A very similar bug occurs with Debian's official firefox-esr version 60.2.2esr-1~deb9u1 package (SIGSEGV on startup, backtrace shows 2 addresses in libxul.so followed by a corrupt stack).

Fixed

  • /var/tmp/build/firefox-f8f42fea2af3/js/src/jsnativestack.cpp:69:31: error: 'syscall' was not declared in this scope
    • This is because jsnativestack.cpp forgot to #include <unistd.h>. This is fixed in all releases of Tor Browser based on ESR 60. Since we're still using ESR 52 for now, I fixed it by applying a short patch to add the missing include.
  • /var/tmp/build/firefox-f8f42fea2af3/js/src/jsnativestack.cpp:77:27: error: 'getpid' was not declared in this scope
    • Also caused by missing #include <unistd.h> in jsnativestack.cpp; same fixes as above.
  • ./firefox: error while loading shared libraries: libssp.so.0: cannot open shared object file: No such file or directory
    • Workaround: copy libssp.so* from the gcc-cross output tar into the Browser directory of the firefox output.
    • Fixed in the Firefox rbm build script as of 2018 Oct 10.

Task list

  • Finish porting this to Firefox ESR 60.
  • Build the projects besides Firefox.
  • Generalize the GNU/Linux cross-compiling changes so that they work on target arches besides armhf. (ppc64be, ppc64le, and aarch64 are all likely to be useful.)

Upstream Tickets