Skip to content

Ship a Linux binary that starts on glibc 2.31 and needs no libssl - #40

Merged
O6lvl4 merged 1 commit into
developfrom
fix/portable-linux-35
Sep 28, 2026
Merged

O6lvl4 merged 1 commit into
developfrom
fix/portable-linux-35

Conversation

@O6lvl4

@O6lvl4 O6lvl4 commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

Closes #35.

The Linux release was linked on the Ubuntu 24.04 runner. It asked for glibc 2.39 and libssl.so.3, and so did not start on Debian 12, Ubuntu 22.04 or the python:*-slim images.

  • almide.toml: reqwest with default-features = false, so TLS is rustls only. The only HTTP users (MCP and model endpoints) already use no_proxy(). Dropping the defaults loses http2, charset decoding and macOS system proxy detection.
  • scripts/build-linux.sh: builds in rust:1-bullseye as the caller's user, with the pinned Almide built from its tag in the same container, since the Almide Linux release also needs glibc 2.39. It refuses a binary that needs anything past GLIBC_2.31, or that links libssl or libcrypto.
  • release.yml: the Linux entries build with the script. Integration, strip and package are unchanged and still run on the runner.
  • ci.yml: on Linux, fails if ldd shows libssl or libcrypto.
  • READMEs (en, ja, zh-CN): the glibc 2.31 floor in the install table.

Verified locally

  • Bullseye build: needs GLIBC_2.30, no OpenSSL. porta run starts and refuses a write to /etc on debian:bookworm-slim, python:3.13-slim, ubuntu:22.04 and debian:bullseye-slim.
  • macOS with rustls only: 145 unit tests, the integration suite and escapes.py all pass.
  • Not verified locally: the --user form of the container run, whose first attempt was lost when Docker Desktop went down. This PR's Linux CI does not exercise it either; the next release run will.

🤖 Generated with Claude Code

The Linux release was linked on the Ubuntu 24.04 runner, so it asked for
glibc 2.39 and libssl.so.3 and did not start on Debian 12, Ubuntu 22.04
or the python:*-slim images: most containers an agent runs in.

- reqwest without its default features: TLS is rustls only
- scripts/build-linux.sh builds in Debian bullseye, with the pinned
  Almide built from its tag there, and refuses a result past glibc 2.31
  or one linking OpenSSL
- release.yml builds Linux with it; the integration suite still runs
  the result on the runner
- ci.yml checks that no OpenSSL is linked on Linux
- README: the glibc floor

Closes #35

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@O6lvl4
O6lvl4 merged commit 1230b7d into develop Sep 28, 2026
4 checks passed
@O6lvl4
O6lvl4 deleted the fix/portable-linux-35 branch September 28, 2026 00:26
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.

Linux release binaries need glibc 2.39 and libssl.so.3, so porta does not start on Debian bookworm or python:*-slim

1 participant