Version 104 (modified by ken@…, 2 years ago) ( diff )




Firefox has a nasty habit of requiring a new profile every few releases. I say this is nasty because logins, current tabs, plugins (even if still supported) and perhaps bookmarks can be lost. In addition, it tends to name the profiles default, then default.default when it creates another. This can also apply when downgrading the version (e.g. going from 69.0 to 68.2.0esr). 73.0 required a new profile, that profile continues to work in 78.0

If you wish to use multiple profiles (or to be able to rename or delete old profiles), open firefox with 'firefox -P'.

You can also tell firefox to use a profile which it warns is old, either by invoking it from a term in xorg using 'MOZ_ALLOW_DOWNGRADE=1 firefox' or by invoking it as 'firefox --allow-downgrade'. The latter invocation has been troublesome in the past but appears to work since 68.2.0 and can be used from a desktop 'launcher'.

For 91.0esr, firefox seems to want to create a new profile when coming from 78esr, but using 'firefox -P' allows it to use the existing profile. If you have created redundant profiles, or wish to rename profiles, 'about:profiles' will open the profile manager to permit this.

Which version should I use ?

In general, BLFS tries to always use latest releases. For firefox up to and including 69.0 the latest version was normally used. But in late 2019 mozilla decided to move to a more-frequent release schedule (eventually 4 weeks instead of 6 or 7 weeks).

Newer versions tended to need newer versions of rust, but this can cause problems with other packages which use rust. In particular, thunderbird releases are based on the firefox esr (extended support releases) code and tended to have code which did not build with the latest version of rust. Nowadays, seamonkey is also in that situation.

There are only a few packages in BLFS which use rust and the editors aim to ensure that all the versions in the book can be built with the same version of rust.

As a result, after firefox-69 the book moved to the esr versions of firefox which for 68esr was technically a downgrade (see details about profiles above), but contained all the relevant security fixes.

You should always use the latest release, either the latest esr or the latest mainline version (or the latest beta for bleeding edge). And you should remember to update your ca-certificates when building a new version of firefox.

Dependencies for 78-ESR series

This information will be removed when legacy firefox-78 is removed from the books.

Although the book is tested with its latest versions of the dependencies it should be possible to use older versions of some packages:

cbindgen >= 0.14.1 should work

icu needs to be >= 67.1

libwebp >= 1.1.0 should work

node.js needs to be at least v10.19.0. The latest node-v10 is v10.23.1. On BLFS-9.0 and 8.4, v10 built using

export CC=clang CXX=clang++ CFLAGS="$CFLAGS -std=c11" CXXFLAGS="$CXXFLAGS -std=c++14"

nss needs to be at least 3.53.1 with its corresponding version of nspr, but there have been various fixes since then, the latest version of nss continues to be recommended.

The minimum rustc version remains at 1.41.0, which was buggy. But you should upgrade rust to rustc-1.52.0 to fix various vulnerabilities and versions less than 1.52.0 will no longer be used for testing. If your version of llvm is less than 9.1, build rustc using its shipped llvm (see

Changes to the build since 78.0

In firefox-81.0, creating the python virtual environments has been separated out. Trying to run ./mach build reports

Consider running 'mach bootstrap' or 'mach create-mach-environment' to create the mach virtualenvs, or set MACH_USE_SYSTEM_PYTHON to use the system Python installation over a virtualenv.

Trying ./mach bootstrap fails:

NotImplementedError: Bootstrap support for this Linux distro not yet available: lfs

I did not want to try the system python option because that looks as if it will use pip to download required packages and perhaps try to install them on the system.

Using './mach create-mach-environment' before running other mach commands (but after the exports) works.

From 78.7.0 I changed the './mach build' invocation to first run './mach configure' (just checking deps and creating the build files ("reticulating splines") to be more consistent with conventional packages, followed by './mach build' after noticing this in an AUR thunderbird build. For those of us who do not have rust on their normal PATH, or have multiple versions of rust, this allows a quick check that all is ok rather than running './mach build', leaving it and coming back to find it failed during the configure.

Withdrawal of ftp

Not a change to the build process, but in 90.0 the ability to use ftp links was removed. If this bothers you, consider using firefox-legacy (currently 78.14.0 - does not work on glibc-2.34) as a short-term workaround until you find an alternative (current seamonkey and falkon permit this, but seamonkey tends to lag behind the firefox vulnerability fixes, while seamonkey requires qtwebengine which is a heavy overhead).

Problems with 91.0 failing to build

On a couple of systems (one fairly recent, one BLFS-10. with necessary updates) 91.0 failed to build - a python test on libgkrust.a reported

TEST-UNEXPECTED-FAIL | check_networking | libgkrust.a |
Identified 1 networking function(s) being imported in the rust static library (getsockname)

This happened with both clang and gcc.

There is now a patch in BLFS which fixes that problem.

Dependencies for 91.0esr series

cbindgen needs to be >= 0.19.0

icu needs to be 69.1

The node.js version now tests for v10.23.1, but node v10 is no longer maintained. Tested with the latest version of node.js in the book.

nspr needs to be >= 4.32.0

nss needs to be >= 3.68 (tested with 3.69.0)

rustc needs to be >= 1.47 but you should use 1.52.0 to fix possible vulnerabilities.

Dependencies for the latest release

This is an attempt to help people who want to keep using the latest upstream release, and will be updated from time to time. It is also a store for any changes which will need to be addressed when the book moves to the next ESR version.

Dependencies for 93.0 (latest upstream stable)

nss now needs to be >= 3.70.0

other minimum versions unchanged.

Dependencies for 94.0beta

nss now needs to be >= 3.71

libwebp should now be >= 1.2.1

rustc now needs to be >= 1.53.0. For me (ken) this is enough to cause me to not spend time to build this at the moment - we will be moving to openssl-3.0, rust needs to be at least 1.55.0 to work with that. We will also be updating to llvm-13, but the update for using system llvm-13 will not arrive in rust until 1.56.0 which is expected on 2021-10-21.

The early betas for 92.0 and 93.0 needed static libstdc++.a to link logalloc-replay (that specifies -static-libstdc++). In later betas that was not compiled. While using a static system lib (outside of rust) is annoying, the expected lifetime of a firefox beta is short and this requirement can be remembered if a vulnerability in libstdc++ is ever disclosed. I assume this requirement will continue for early betas.


Note: See TracWiki for help on using the wiki.