feat: set VARIATION for rv64/pointer-compression to change tarball name (#223)
- feat: set VARIATION for rv64/pointer-compression to change tarball name
Signed-off-by: Stewart X Addison sxa@ibm.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802032778号
Node.js unofficial-builds project
https://unofficial-builds.nodejs.org/
This project is experimental: its output is not guaranteed to remain consistent and its existence is not guaranteed into the future. This project is in need of a community of maintainers to keep it viable. If you would like to join, please submit pull requests to improve the work here.
About
The unofficial-builds project aims to provide Node.js binaries for some platforms not made available officially by the Node.js project at nodejs.org. Node.js is used on a large variety of platforms, but the Node.js project, in consultation with the Node.js Build Working Group, maintains a limited set of platforms that it tests code on and produces binaries for.
This list of officially supported platforms is available in the Node.js BUILDING.md, where you can also find details in the official nodejs.org binaries section. Some platforms are “supported” in that they are tested by the Node.js test infrastructure, but they don’t have binaries produced for nodejs.org. Other platforms receive minimal or no official support.
unofficial-builds attempts to provide basic Node.js binaries for some platforms that either not supported or only partially supported by Node.js. This project does not provide any guarantees and its results are not rigorously tested. Builds made available at nodejs.org have very high quality standards for code quality, support on the relevant platforms and for timing and methods of delivery. Builds made available by unofficial-builds have minimal or no testing; the platforms may have no inclusion in the official Node.js test infrastructure. These builds are made available for the convenience of their user community but those communities are expected to assist in their maintenance.
Builds
libstdc++package to be installed on Alpine Linux, which is not installed by default. You can add this by runningapk add libstdc++.libstdc++on Alpine (apk add libstdc++).Debugbinaries compiled with--gdb --debug --debug-nodeenabled so that they include debug symbols for native module and core node debugging. Tarballs replace the Releasenodewith a Debug built binary. Designed with GitHub Actionsactions/setup-nodein mind for investigating CI segfaults.--experimental-enable-pointer-compression).armv6zkwhich is suitable for Raspberry Pi devices (1, 1+ and Zero in particular).“Experimental” status for Node.js is defined as:
Therefore, it is possible that unofficial-builds may occasionally fail to produce binaries and fixes to support these platforms may need to be contributed to Node.js.
Release line support
Not all recipes can build for all Node.js release lines. As Node.js evolves, its build requirements increase (newer C++ standards, newer Python versions, etc.), and some of the older toolchains used by these recipes can no longer keep up. This project is community-maintained and relies on contributors to update recipes when they break. Some recipes have been disabled for newer Node.js versions simply because nobody has yet done the work to modernize their build environments. Pull requests to re-enable recipes for newer release lines are welcome.
Builds are published at https://unofficial-builds.nodejs.org/download/release/.
How
This project makes use of a server provided by the Node.js Build Working Group to compile and host binaries. Currently all binaries are produced on that server within specialized Docker containers. The possibility of future expansion to platforms that require alternative infrastructure to build is not excluded.
The server is configured according to the Ansible unofficial-builds role in the nodejs/build repository. This is executed via the create-unofficial-builds.yml playbook.
The build process operates as the
nodejsuser and in/home/nodejswhich has the following layout:bin/- currently only containsdeploy-unofficial-builds.shwhich is responsible for updatingunofficial-builds/with this repository when it’s updated (see below).download/- the directory served at https://unofficial-builds.nodejs.org/download/logs/- the directory served at https://unofficial-builds.nodejs.org/logs/ and containing logs for deploys of this repository github-webhook.log and a directory for each build, identified by a datetime string combined with the Node.js version string of the compiled version. These log directories contain a primarybuild.logand a log file for each compile build “recipe” which is the output of the Docker container for that build.staging/- a directory where build assets are placed by the Docker containers prior to promotion todownload/along with a SHASUMS256.txt file and updated index.json and index.tab files.unofficial-builds/- a clone of this repository, updated automatically whenmainis updated here.var/- where state files are stored for the build queue, build locking and release checking.The build process can be described as:
/recipesdirectory are built by means of the/bin/deploy.shscript which in turn calls the/bin/prepare-images.shscript./bin/periodic.shscript.periodic.shcalls/bin/check-releases.shfor each release line being checked (“release”, “rc”, etc.). Any new versions that check-releases.sh finds are added to the build queue via/bin/queue-push.sh(the build queue uses a locking mechanism to prevent concurrent changes).periodic.shcalls/bin/build-if-queued.shwhich will execute a build if there is at least one build in the queue and no builds are currently running./bin/queue-pop.shis used to atomically remove the next build from the queue. Note that only zero or one build per periodic run is executed. If the queue has more than one build, these will be deferred until later periodic runs.build-if-queued.shencounters a build in the queue that it can execute, it calls/bin/build.shto perform the build. This script iterates through the images that have been pre-built from the/recipesdirectory, starting with the/recipes/fetch-sourcerecipe that fetches the source file for the given version and validates official releases using GPG keys. Optionally, a recipe might have ashould-buildfile which is used to determine if the recipe should run for a specific Node.js version. Each recipe is passed this source and is given a staging directory to place its binaries in. After all recipes are finished, builds are promoted to the https://unofficial-builds.nodejs.org/download/ directory along with a SHASUMS256.txt file and the index.tab and index.json files for that release type are updated.How to add new target
bin/_config.sh. If the build should be prioritized place the recipe higher up and make note of it in the comments of the PR so there is a record of why the build should happen earlier.index.datandindex.jsonto index the new target, you will likely need to modify nodejs-dist-indexer so it understands the new filenames.bin/_config.sh.Manual build triggers
Admins with access to the server can manually trigger a build using the
/bin/queue-push.shcommand. e.g.Optionally it is possible to (re)build recipes for historical versions that are already hosted.
Important: Be aware the re-building historical releases will change the digest in the SHASUMS. A consistent digest is required by some consumers of builds, so certain recipes should not be rebuilt. Notably those that are used by the docker-node project, such as
musl. A change in digest will lead to verification errors downstream. If you are unsure, check with other team members.This can be done by adding the
-rflag to thequeue-push.shcommand. e.g.This places “v16.4.0” into
~/var/build_queuewhich will be read on the next invocation of the build check timer. It may take up to 5 minutes for the build to start, at which point the log should be visible at https://unofficial-builds.nodejs.org/logs/.The same process can be used to queue
rcortestbuilds.Local use
This repository is primarily intended for use on the unofficial-builds server but it can be used locally for testing purposes. The
bin/local_build.shscript is designed to mirror the server build process but with local trigger and for one specific recipe at a time.Setup for local builds
On deploy, this repository is placed within a the
unofficial-buildshome directory, it is intended to operate from a subdirectory of where the assets are build, it’s$workdiris the parent directory of wherever it is located. Thelocal_build.shscript will create some directories within its$workdirso it’s best to create a new directory for it to operate in. So the steps for local build will be in general:$workdirdirectory inside your home as normal user, you will have then:$workdir)local_build.sh)$disttype/$version/ (staging directory for builds, will be created bylocal_build.sh)local_build.sh)e.g. Login as normal user and clone this repository using the following commands to place it within an
unofficial-builds-homedirectory:In the script presented, the
$workdirwill be~/Devel/unofficial-builds-homeand it can be customized with a-w <newdir>argument tolocal_build.sh, with the limitation that this script, although they build Nodejs binaries for other platforms, the commands presented will only execute on a 64-bit Linux environment based on x86 cpus. All of those commands are running as a normal user.Building
Once you have cloned this repository, you can build a specific recipe by running
bin/local_build.shwith the recipe (an existing one or one you create within therecipes/subdirectory) name and the Node.js version you want to build. e.g. (following previous example commands)A successful build will place the source in
$workdir/staging/src/and binaries in$workdir/staging/release/v21.0.0/(where$workdircurrently is~/Devel/unnofficial-builds-home). All of those commands are running as a normal user.You must erase all dockers layers before run a new recipe. Take in considerations that not all recipes can be built for all versions.
Local installation
https://unofficial-builds.nodejs.org/download/ hosts compressed archives that may be downloaded and installed by end-users. Each downloadable archive contains bin/, include/, lib/, share/ directories. There are different ways to install nodejs from the compressed files. Choose one of these methods below.
For frequent production use, please mirror the executables to your own servers.
nvmmethod. The general idea withnvmis this will install the software:However,nvmis looking for an exactly named file which it may not always find.node-v20.9.0-linux-x64.tar.gzinstead ofnode-v20.9.0-linux-x64-glibc-217.tar.gz. Therefore a possible idea is to create a mirror of https://unofficial-builds.nodejs.org/download/release such as https://www.example.com/download/release, including files index.json and index.tab. Rename archives in the mirror sonvmwill recognize them. For example, copynode-v20.9.0-linux-x64-glibc-217.tar.gztonode-v20.9.0-linux-x64.tar.gz. Then an installation would succeed:Team
unofficial-builds is maintained by:
Emeritus