Skip to content

IBX-12474: Moved Docker images off end-of-life Debian 11 - #68

Merged
alongosz merged 7 commits into
4.6from
ibx-12474-debian-bullseye-eol
Sep 8, 2026
Merged

IBX-12474: Moved Docker images off end-of-life Debian 11#68
alongosz merged 7 commits into
4.6from
ibx-12474-debian-bullseye-eol

Conversation

@alongosz

@alongosz alongosz commented Sep 7, 2026

Copy link
Copy Markdown
Member

Caution

🎫 Issue IBX-12474

Related PRs:

Description:

Debian 11 (bullseye) reached end of LTS on 2026-08-31. Its packages are being removed from deb.debian.org while the indexes still advertise them, so apt-get install fails with a 404 on a random subset. Which packages fail depends on the Fastly node the runner hits, so re-running a job is a lottery, not a fix.

That's what turns all 8 build-and-publish legs red. It happens inside the container, so it has nothing to do with the ubuntu-26.04 runner change in #66.

  • Moved php/Dockerfile-8.18.4 to php:X-fpm-bookworm (libicu67 -> libicu72)
  • Pinned apt to snapshot.debian.org (20260828T000000Z) in php/Dockerfile-7.3, 7.4 and 8.0
  • Moved docker/Dockerfile-varnish7 to varnish:7.4 (bookworm) with varnish-modules 0.23.0
  • Moved docker/Dockerfile-varnish to debian:bookworm-slim (varnish=6.0.12-1~bookworm) — cherry-picked from IBX-12474: Moved Varnish image to Debian 12 (bookworm) #67
  • [GHA] Authenticated Composer against GitHub in the Test image step with an App token — unrelated to Debian, see the note below

There are no bookworm variants of php:7.3, 7.4 and 8.0, so those three have to stay on bullseye. The snapshot pin is what the official PHP images ship commented out in /etc/apt/sources.list themselves, so it's not a new trick. archive.debian.org would be nicer, but it only carries bullseye main — bullseye-security isn't there yet. Worth switching once it lands.

varnish-modules has to match the Varnish minor 1:1 (releases), so bumping the base image alone isn't enough. 0.20.0 doesn't compile against 7.4.

docker/Dockerfile-varnish is cherry-picked from #67 (authored by @KamilSznajdrowicz), which is now closed as superseded by this PR. All three bullseye-based images move here in one go.

Note

This PR also carries an unrelated CI fix touching .github/workflows/ci.yaml and bin/ci/test.sh, so the diff is wider than the title suggests.

The Test image step passed no GitHub credentials at all, so Composer inside the container reached github.com anonymously and failed whenever the shared runner IP was rate limited:

In AuthHelper.php line 152:
  Could not authenticate against github.com

It took out the 8.0 leg twice while this PR was being verified. The token has to travel as COMPOSER_AUTH into the container, because that is where composer actually runs — a host-side composer config github-oauth.github.com, the way browser-tests.yml does it, would never reach it.

Kept here rather than in its own PR because a separate PR could not have reached green CI to prove the fix works.

Verified locally, all with --no-cache:

  • 🟢 bin/ci/build.sh for every (php, node) pair in the matrix — 8.4/22, 8.3/22, 8.3/20, 8.0/20, 7.4/20, 7.3/20 — plus 8.1/20 and 8.2/20
  • 🟢 docker/Dockerfile-varnish7 builds, reports Debian 12 with varnish 7.4.3 and libvmod_xkey.so installed
  • 🟢 no 404 in any of the builds
  • 🟢 all 9 checks green on CI, with Generate token succeeding on all 8 legs — run 34213936786

For QA:

Review. The real check is the Varnish legs in ibexa/http-cache#90 and ibexa/dashboard#195 once this reaches 4.6 — this repo's CI builds neither Varnish image (build.sh only builds php/Dockerfile-*), so both Varnish changes rest on local builds until then.

What changes behaviourally, worth a sanity pass:

  • PHP 8.1-8.4 move Debian 11 -> 12: glibc, libicu (67 -> 72) and the rest of the system libraries change version.
  • Dockerfile-varnish7 moves Varnish 7.1 -> 7.4, with varnish-modules 0.20.0 -> 0.23.0. That is a real Varnish upgrade, not just a base OS bump — varnish7.vcl and the xkey purge path are what to exercise.
  • Dockerfile-varnish moves Debian 11 -> 12 but stays on Varnish 6.0.12, so only the base OS changes there.
  • PHP 7.3, 7.4 and 8.0 stay on Debian 11 with apt pinned to a snapshot, so their package versions are frozen as of 2026-08-28.

Documentation:

No documentation required.

🤖 Generated with Claude Code

Base automatically changed from ibx-11778-gha-workflows-update to 4.6 September 8, 2026 13:00
alongosz and others added 5 commits September 8, 2026 15:00
Debian 11 (bullseye) reached end of LTS on 2026-08-31. Its packages are
being removed from deb.debian.org while the indexes still advertise
them, so apt-get install fails with sporadic 404s.

php:8.1-8.4-fpm-bookworm exist, so these images can simply move to
Debian 12. libicu67 is bullseye-only and becomes libicu72; every other
package in the list keeps its name.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Same bullseye end-of-LTS breakage as the bookworm move, but there are
no php:7.3, 7.4 or 8.0 bookworm variants, so these three have to stay
on Debian 11.

Point apt at snapshot.debian.org, taken a few days before the EOL, and
disable the Valid-Until check that the snapshot Release files no longer
pass. The official PHP images ship these very lines commented out in
/etc/apt/sources.list.

archive.debian.org would be the nicer target, but it only carries
bullseye main so far - bullseye-security is not there yet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
varnish:7.1 is bullseye based, so it broke the same way. varnish:7.4 is
the first 7.x tag built on bookworm.

varnish-modules releases map 1:1 onto Varnish minors, so bumping the
base image alone is not enough - 0.20.0 fails to compile against 7.4 in
vmod_header. 0.23.0 is the matching release.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SonarCloud flagged the snapshot sources as clear-text (docker:S5332).
ca-certificates ships in the php base images already, so apt can reach
snapshot.debian.org over https without an extra bootstrap step.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SonarCloud docker:S7031. Rewriting sources.list is only meaningful for
the apt-get that follows it, so the two belong in one instruction. RUN
count per file is now the same as before the snapshot pin was added.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Test image step passed no credentials, so Composer inside the
container reached github.com anonymously and failed whenever the shared
runner IP was rate limited:

  In AuthHelper.php line 152:
    Could not authenticate against github.com

Generates an App token and forwards it as COMPOSER_AUTH into the
container, since that is where composer actually runs - a host-side
composer config would not reach it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@alongosz
alongosz force-pushed the ibx-12474-debian-bullseye-eol branch from c390c5e to 6c1f3e0 Compare September 8, 2026 13:00
Debian 11 (bullseye) reached end of LTS on 2026-08-31, and its archive is
now being decommissioned. `deb.debian.org` and `security.debian.org` still
publish the bullseye package indexes, but individual `.deb` files are already
disappearing from the pools, so `apt-get install` fails with a 404 mid-build:

    E: Failed to fetch .../g/gnupg2/gpgsm_2.2.27-2+deb11u3_amd64.deb  404  Not Found
    E: Failed to fetch .../g/gnupg2/gnupg_2.2.27-2+deb11u3_all.deb    404  Not Found
    Unable to install GPG! ... Repository installation aborted.

This breaks the `varnish` leg of Browser tests in every product repository
that uses `doc/docker/varnish.yml`. The 404s come and go depending on which
Fastly node the runner hits, so re-running the job is a lottery rather than
a fix.

Varnish 6.0 LTS is unchanged - `varnish`/`varnish-dev` 6.0.12 are published
for bookworm as well, so only the base OS moves here.

Verified locally (`docker build --platform linux/amd64`):
 - the packagecloud script installs GPG and the Varnish repo without 404s
 - all build dependencies resolve on bookworm
 - `varnish-modules` 0.15.0 still compiles, `libvmod_xkey.so` is installed
 - resulting image reports Debian 12 with `varnish 6.0.12-1~bookworm`

The same change is needed on 5.0 and 6.0, where the file is identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Sep 8, 2026

Copy link
Copy Markdown

Quality Gate Passed Quality Gate passed

Issues
0 New issues
4 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarQube Cloud

@alongosz
alongosz merged commit 05a569b into 4.6 Sep 8, 2026
9 checks passed
@alongosz
alongosz deleted the ibx-12474-debian-bullseye-eol branch September 8, 2026 13:37
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.

8 participants