Qt 6.11 did not build on either Rocky image, for two unrelated reasons: rocky8 carried ninja 1.8.2, which cannot parse what Qt 6.11 generates -- "multiple outputs aren't (yet?) supported by depslog", a ninja limitation lifted in 1.10. Ninja is now pinned at 1.13.2 from the upstream release binary, for the same reason CMake is: the distro versions spanned 1.8.2 to 1.11.1 and moved under us. rocky9 installed xcb-util-*-devel, a glob that does not match the plain xcb-util-devel package, so the XCB::UTIL target Qt 6.11's xcb platform plugin requires was absent. Qt 6.9 did not ask for it, which is why it appeared only now. build-qt.sh also derives the download path's series from the version, so a bump no longer 404s against the old 6.9 directory. Built on all four images, and jfjoch_viewer links against the static Qt 6.11.1 on both rockys (2708/2708 targets, Qt fully static -- only system X/GL remain dynamic). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B6iekpDa2xiKobEj1R5xnp
Shared build-image steps
docker/rocky8, docker/rocky9, docker/ubuntu2204 and docker/ubuntu2404 differ only in their
package manager, their package list and a few distro-specific extras (DIALS and XDS on rocky9, the
aarch64 cross toolchain on ubuntu2404, the release tooling on rocky8). Everything built from
source is identical in all four, so it lives here and is run by each Dockerfile in this order:
| script | what it installs |
|---|---|
install-cmake.sh |
CMake, pinned, from cmake.org -- the distro CMake is not used |
build-openssl.sh |
static OpenSSL into /opt/openssl-$OPENSSL_VERSION |
build-dbus.sh |
static libdbus into /opt/dbus-$DBUS_VERSION-static |
build-qt.sh |
static Qt 6 into $QT_PREFIX |
install-eigen.sh |
Eigen 3.4 into /opt/eigen-3.4 |
They read their versions from the ARGs of the Dockerfile that runs them, and each one is the verbatim shell that used to be inlined four times. Keeping one copy is the point: the HTTP/1.1 git fix once landed in the two Ubuntu images and neither Rocky one, because there were four copies to remember.
The build context is therefore docker/, not docker/<variant>/ -- see build_images.sh.