Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
@yao-pkg/pkg-fetch
Advanced tools
A utility to fetch or build patched Node binaries used by pkg to generate executables. This repo hosts prebuilt binaries in Releases.
Node | Platform | Architectures | Minimum OS version |
---|---|---|---|
81, 101, 121, 14, 16, 18 | alpine | x64, arm64 | 3.7.3, other distros with musl libc >= 1.1.18 |
81, 101, 121, 14, 16, 18 | linux | x64 | Enterprise Linux 7, Ubuntu 14.04, Debian jessie, other distros with glibc >= 2.17 |
81, 101, 121, 14, 16, 18 | linux | arm64 | Enterprise Linux 8, Ubuntu 18.04, Debian buster, other distros with glibc >= 2.27 |
81, 101, 121, 14, 16, 18 | linuxstatic | x64, arm64 | Any distro with Linux Kernel >= 2.6.32 (>= 3.10 strongly recommended) |
16, 18 | linuxstatic | armv72 | Any distro with Linux Kernel >= 2.6.32 (>= 3.10 strongly recommended) |
81, 101, 121, 14, 16, 18 | macos | x64 | 10.13 |
14, 16, 18 | macos | arm643 | 11.0 |
81, 101, 121, 14, 16, 18 | win | x64 | 8.1 |
14, 16, 18 | win | arm64 | 10 |
[1]: end-of-life, may be removed in the next major release.
[2]: best-effort basis, not semver-protected.
[3]: mandatory code signing is enforced by Apple.
We do not expect this project to have vulnerabilities of its own. Nonetheless, as this project distributes prebuilt Node.js binaries,
Node.js security vulnerabilities affect binaries distributed by this project, as well.
Like most of you, this project does not have access to advance/private disclosures of Node.js security vulnerabilities. We can only closely monitor the public security advisories from the Node.js team. It takes time to build and release a new set of binaries, once a new Node.js version has been released.
It is possible for this project to fall victim to a supply chain attack.
This project deploys multiple defense measures to ensure that the safe binaries are delivered to users:
pkg-fetch
rejects the binary if it does not match the hardcoded hash.pkg-fetch
package on npm is strictly permission-controlled
Clone Node.js as a sibling to your current pkg-fetch
clone
git clone -b v18.13.0 --single-branch https://github.com/nodejs/node.git
cd node
Attempt to apply the closest patch (e.g. applying the existing patch for 18.12.1 when trying to generate a new patch for 18.13.0)
git apply ..\pkg-fetch\patches\node.v18.12.1.cpp.patch --reject
git add -A
git diff --staged --src-prefix=node/ --dst-prefix=node/ > ..\pkg-fetch\patches\node.v18.13.0.cpp.patch
Usually when a patch is rejected, it's because the context around the changes
was refactored slightly since the last patched version. This is not usually
complicated to resolve, but requires a human to interpret the changes since the
last version pkg
was patched against, compared with the version you wish to
create a patch for.
One method is to pull up the diff for the file where the rejects apply for the
changes between the last tag (e.g. v18.12.1 to use the previous example) and the
tag you want a patch for (e.g. v18.13.0 to use the previous example). Alongside
this, have the .rej
file and go through each rejected hunk by hunk and use
your best judgement to determine how it should apply against the new tag.
Save you results, and export the overall git diff with the commands from the example above.
The expectation is that a patch applies cleanly, with no delta or offsets from the source repo.
When making a change to a patch file, it is possible to apply that patch without building by running
yarn applyPatches --node-range node18
where the --node-range
can be specified to apply patches for the version of
node for which you are updating patches. If unspecified, the latest node version
in patches.json will be used.
Ultimately, the patch should result in fully functional node binary, but the
applyPatches
script can be used to quickly iterate just the application of
the patches you are updating without needing to wait for the full build to
complete.
You can use the yarn start
script to build the binary locally, which is helpful
when updating patches to ensure functionality before pushing patch updates for
review.
For example:
yarn start --node-range node18 --arch x64 --output dist
Var | Description |
---|---|
PKG_BUILD_PATH | Directory to use to clone and build nodejs binaries. Default to system temporary directory |
PKG_CACHE_PATH | Path to pkg-cache. Default to ~/.pkg-cache |
PKG_IGNORE_TAG | Ignore tag folder when checking local binary path |
PKG_NODE_PATH | Custom path to the local nodejs binary to use |
HTTPS_PROXY | Optional HTTPS proxy to use when fetching binaries |
HTTP_PROXY | Optional HTTP proxy to use when fetching binaries |
MAKE_JOB_COUNT | Number of parallel jobs when building binaries (value passed to make -j option). Default to number of cpus |
CFLAGS | Flags to use when invoking C compiler |
CXXFLAGS | Flags to use when invoking C++ compiler |
STRIP | Path to strip command. Default to strip |
FAQs
Compiles and stores base binaries for pkg
We found that @yao-pkg/pkg-fetch demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.