Repository navigation
Firefox is built with Node.js's release build, a layer no zone gets - #516
Merged
Merged
Conversation
ESR 153's configure takes --disable-nodejs, but its build runs Node.js for the devtools debugger's modules all the same, so the browser's build stopped there. The node layer unpacks the program alone from Node.js's linux-x64 build, whose checksum list a releaser's pinned key signs, and the browser's mozconfig names it. verify_sums fetches a cached checksum list again when it does not name the file: Node.js names every release's list SHASUMS256.txt, so the one cached for a release would refuse the next.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong
The browser's second build round stopped at the devtools debugger's generated modules: Firefox ESR 153 runs Node.js there.
--disable-nodejsonly gets configure past a missing Node.js (it warns), and the build then fails over an hour later.What changed
nodelayer (build/images/node.sh,image_ships=no). It takes onlybin/nodefrom Node.js's linux-x64 release build and puts it in/usr/lib/node-24; npm and the headers are not needed. Its check runs a script, since--versionreturns before the engine starts, so a node that cannot run in the build chroot fails in this layer within seconds.build/images/browser.sh) is built overnode.--disable-nodejsis dropped, and the mozconfig exportsNODEJS=/usr/lib/node-${V_NODE%%.*}/bin/node, following the pin as thellvmpath followsV_LLVM. In ESR 153'sbuild/moz.configure/node.configure,NODEJSis an environment option, and without--disable-nodejsa node that is missing or older than 12.22.12 is aFatalCheckError. So a wrong path stops configure at the start, not an hour into the build.V_NODE=24.22.0(an LTS line). Its row intools/fetch-sources.shissums:SHASUMS256.txt.sig. The tarball's digest is inbuild/images/sources.lock. The currency rule readshttps://nodejs.org/dist/index.json, keeping the major (major).SHASUMS256.txt. The row takes the.sigbeside it, a detached signature. The.ascis the list clearsigned, andis_pgp_signaturewould not take it: gpg's packet listing of it shows a literal data packet and no signature packet, so the source would be unverifiable. Richard Lau's keyC82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93Csigns 24.22.0. It is pinned inPINNED_FPRS, as listed in https://github.com/nodejs/node#release-keys. Itsoriginrow intools/key-provenance.tsvtakes the key from the nodejs/release-keys repository. A later release signed by another releaser needs that releaser's key pinned the same way. The run would refuse it until then.verify_sumscaches a list under its own name in.signatures, and CI restores that directory by prefix. Every Node.js release names its listSHASUMS256.txt, so after a bump the cached list would be the previous release's and would refuse the new tarball. A cached list that does not name the file is now dropped with its signature and fetched again. The versioned lists (cmake, pixman, cairo) are unaffected.docs/design/browser-and-graphics.mdnow listsnodeamong the browser's layers, with its floor. Its build paragraph no longer says--disable-nodejsspares the build.How checked
https://nodejs.org/dist/v24.22.0/SHASUMS256.txtand its.sig. The list givescc2f601c…5008fornode-v24.22.0-linux-x64.tar.xz, which is the lock's line. The.signames issuer fingerprintC82FA3AE…B93Cas a v4 primary, with no subkey. gpg verifies it (GOODSIG,VALIDSIG, made 2026-10-14) against the key from the release-keys URL in theoriginrow. The same fingerprint is in the README's release keys.node.configureatFIREFOX_153_5_0esr_RELEASEfor theNODEJSoption and the fatal path.tools/tests/verify-signatures.shhas a new case: one release's list is cached under a name the next release's list shares. With the oldverify_sums, its second run fails ("does not match a digest in SHASUMS256.txt"). A fix that kept the old signature would fail it as a bad signature. The existing case "a file the signed list does not name fails" still fails as before, after one more fetch. CI runs the suite; I did not run it on the laptop.bash -npasses on each changed script. The design document is wrapped at its width. CI's strict signature step will fetch the new row from nodejs.org and verify it.