Skip to content

fix(release): build Linux CLI on ubuntu-22.04 (glibc 2.35) so binaries run on older distros - #2330

Merged
nicoloboschi merged 1 commit into
vectorize-io:mainfrom
r266-tech:fix-release-rust-cli-glibc-floor-2321
Jun 23, 2026
Merged

fix(release): build Linux CLI on ubuntu-22.04 (glibc 2.35) so binaries run on older distros#2330
nicoloboschi merged 1 commit into
vectorize-io:mainfrom
r266-tech:fix-release-rust-cli-glibc-floor-2321

Conversation

@r266-tech

Copy link
Copy Markdown
Contributor

Problem (#2321)

The released Linux hindsight CLI binaries are built by the release-rust-cli job on glibc-2.39 GitHub runners:

  • x86_64-unknown-linux-gnuubuntu-latest (= Ubuntu 24.04, glibc 2.39)
  • aarch64-unknown-linux-gnuubuntu-24.04-arm (glibc 2.39)

cargo build --release links dynamically against the build host's glibc, so the shipped binary requires GLIBC_2.39, which only Ubuntu 24.04 / Debian 13 provide. On anything older it fails at startup exactly as reported:

hindsight: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by hindsight)

Fix

Pin both Linux build legs to ubuntu-22.04 (glibc 2.35), the oldest GitHub-hosted Ubuntu runner:

  • ubuntu-latestubuntu-22.04 (amd64)
  • ubuntu-24.04-armubuntu-22.04-arm (arm64)

ubuntu-22.04-arm is a maintained GitHub-hosted arm64 runner label (actions/runner-images), so the arm64 leg keeps shipping. No Cargo.toml / TLS / dependency changes. macOS targets are untouched.

This restores runnability on Ubuntu 22.04+, Debian 12, RHEL/Rocky/Alma 9, etc.

Scope / what this does not cover

The reporter's ### Option A suggested Ubuntu 20.04 (glibc 2.31), but GitHub retired the ubuntu-20.04 hosted runner in April 2025, so 22.04 (glibc 2.35) is the lowest floor reachable with hosted runners. This therefore does not fix systems on glibc < 2.35 — Ubuntu 20.04 (2.31), Debian 11, RHEL/CentOS 8 (2.28), or Alpine.

For full coverage including those, the reporter's ### Option B (the fully-static x86_64-unknown-linux-musl target) is the complete fix. That's a larger change — hindsight-cli pulls reqwest with default features (native-tls/OpenSSL), so musl-static would mean default-features = false + rustls-tls, i.e. a TLS-stack swap worth reviewing on its own. Happy to send that as a follow-up if you'd prefer the broader floor; this PR is the clean, low-risk improvement that fixes the large majority of current LTS/enterprise deployments.

Addresses #2321 (leaving the issue open in case you want the musl path for glibc < 2.35).

@nicoloboschi nicoloboschi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. glibc backward-compat means binaries built on 2.35 run on 2.35+ (incl. current 24.04 runners), so this strictly widens compatibility with no regression. ubuntu-22.04-arm is a valid hosted arm64 label. OpenSSL/musl full-portability path correctly deferred to the Option B follow-up.

@nicoloboschi
nicoloboschi merged commit 0d60f0c into vectorize-io:main Jun 23, 2026
84 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants