Skip to content

Commit

Permalink
Improve libc presence detection (#6170)
Browse files Browse the repository at this point in the history
**What's the problem this PR addresses?**

On certain Linux distributions, `/usr/bin/ldd` does not contain the
string "GLIBC", but "libc". This is the case in popular distros such as
openSUSE, Amazon Linux, Fedora, RHEL, Arch, and more. On these
distributions, the current version of yarn falls back to
`process.report.getReport()`, which is known to have performance issues
in some instances.

**How did you fix it?**

Add a check for the presence of the value `libc` in addition to the
existing check for `GLIBC`. This allows more Linux users to benefit from
the fast-path that does not rely on `process.report.getReport()`.

**Checklist**
<!--- Don't worry if you miss something, chores are automatically
tested. -->
<!--- This checklist exists to help you remember doing the chores when
you submit a PR. -->
<!--- Put an `x` in all the boxes that apply. -->
- [x] I have read the [Contributing
Guide](https://yarnpkg.com/advanced/contributing).

<!-- See
https://yarnpkg.com/advanced/contributing#preparing-your-pr-to-be-released
for more details. -->
<!-- Check with `yarn version check` and fix with `yarn version check
-i` -->
- [x] I have set the packages that need to be released for my changes to
be effective.

<!-- The "Testing chores" workflow validates that your PR follows our
guidelines. -->
<!-- If it doesn't pass, click on it to see details as to what your PR
might be missing. -->
- [x] I will check that all automated PR checks pass before the PR gets
reviewed.
  • Loading branch information
dstaley authored Mar 27, 2024
1 parent c9d5a4c commit a3e5695
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
34 changes: 34 additions & 0 deletions .yarn/versions/99b02b00.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
releases:
"@yarnpkg/cli": patch
"@yarnpkg/core": patch

declined:
- "@yarnpkg/plugin-compat"
- "@yarnpkg/plugin-constraints"
- "@yarnpkg/plugin-dlx"
- "@yarnpkg/plugin-essentials"
- "@yarnpkg/plugin-exec"
- "@yarnpkg/plugin-file"
- "@yarnpkg/plugin-git"
- "@yarnpkg/plugin-github"
- "@yarnpkg/plugin-http"
- "@yarnpkg/plugin-init"
- "@yarnpkg/plugin-interactive-tools"
- "@yarnpkg/plugin-link"
- "@yarnpkg/plugin-nm"
- "@yarnpkg/plugin-npm"
- "@yarnpkg/plugin-npm-cli"
- "@yarnpkg/plugin-pack"
- "@yarnpkg/plugin-patch"
- "@yarnpkg/plugin-pnp"
- "@yarnpkg/plugin-pnpm"
- "@yarnpkg/plugin-stage"
- "@yarnpkg/plugin-typescript"
- "@yarnpkg/plugin-version"
- "@yarnpkg/plugin-workspace-tools"
- "@yarnpkg/builder"
- "@yarnpkg/doctor"
- "@yarnpkg/extensions"
- "@yarnpkg/nm"
- "@yarnpkg/pnpify"
- "@yarnpkg/sdks"
2 changes: 1 addition & 1 deletion packages/yarnpkg-core/sources/nodeUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ function getLibc() {
// Since the getReport can be prohibitely expensive (it also queries DNS which, if misconfigured, can take a long time to timeout),
// we first check if the ldd binary is glibc or musl, and only then run the getReport() if we can't determine the libc variant.
if (typeof header !== `undefined`) {
if (header && header.includes(`GLIBC`))
if (header && (header.includes(`GLIBC`) || header.includes(`libc`)))
return `glibc`;
if (header && header.includes(`musl`)) {
return `musl`;
Expand Down

0 comments on commit a3e5695

Please sign in to comment.