Skip to content

fix(docker): build brotli 1.2.1 on bookworm - #2777

Merged
dunglas merged 2 commits into
mainfrom
fix/docker-bookworm-brotli
Oct 26, 2026
Merged

dunglas merged 2 commits into
mainfrom
fix/docker-bookworm-brotli

Conversation

@dunglas

@dunglas dunglas commented Oct 26, 2026

Copy link
Copy Markdown
Member

Every Bookworm image fails to build on main since d50aecb: cbrotli v1.2.1 uses the shared dictionary API from libbrotli 1.1, and Bookworm ships 1.0.9. No Debian suite provides a newer brotli for Bookworm.

  • When the distro's libbrotli is older than 1.1, the builder compiles brotli 1.2.1 from source (checksum-verified) and the runner ships the shared libraries next to libwatcher. Trixie keeps using the distro package.
  • /usr/local/lib is added first to the loader path when the libraries are bundled. Without it, arm64, arm/v7 and i386 still load the distro 1.0.9, because the multiarch config sorts before libc.conf.
  • PHP's curl in Bookworm images now uses brotli 1.2.1 too, which fixes CVE-2026-111497 there instead of relying on the +deb12u1 backport.

Checked on linux/arm64 (PHP 8.5): FrankenPHP and libcurl resolve libbrotli to /usr/local/lib on Bookworm, and a curl request to Caddy's encode br decodes correctly on both Bookworm and Trixie.

dunglas added a commit that referenced this pull request Oct 26, 2026
#2778)

`TestOutOfMemory_worker` kills the test binary in the Docker images
(`Hard memory limit of 16777216 bytes exhausted`), on every variant. It
also fails on main, but Docker tests only run on PRs labeled "CI: All
jobs", and none ran since #2741
introduced the test.

Worker mode holds four copies of the query string while populating the
superglobals, so the 5 MiB query crosses the 16 MiB hard limit (twice
`memory_limit`). The Tests workflow's PHP build stays just under it.

3 MiB still crosses `memory_limit`, which the test asserts, and stays
under the hard limit: 4 MiB still exits, 2 MiB leaves little margin
above `memory_limit`. Passed 20 times in a row in the Trixie builder
image (plus 5 with `-race`), and with a local PHP 8.5 build.

Unblocks #2777.
Bookworm ships libbrotli 1.0.9, but cbrotli v1.2.1 needs the 1.1 shared
dictionary API, so every bookworm image failed to build. Build brotli
1.2.1 from source when the distro version is too old and ship it in the
runner, which also gives PHP's curl the CVE-2026-111497 fix.
@dunglas
dunglas force-pushed the fix/docker-bookworm-brotli branch from 3b29e2e to a11a364 Compare October 26, 2026 10:49
@dunglas
dunglas merged commit a218681 into main Oct 26, 2026
98 checks passed
@dunglas
dunglas deleted the fix/docker-bookworm-brotli branch October 26, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant