Same pinned versions and options as debian13, installed under lib64
(Python keeps its standard library and lib-dynload in lib/python3.14).
Note in INCLUDED_LIBRARIES.md that alpine3.24 does not build them yet.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Python is built from the python.org tarball against the pinned OpenSSL,
zlib, Zstd, SQLite and libffi; it does not pass --libdir because the
standard library and lib-dynload must stay under lib/python3.14. SQLite
is static, so its link flags are taken from pkg-config --static.
libffi is built with --disable-multi-os-directory so it installs into
the multiarch directory instead of lib/lib.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Build the static client libraries (libsybdb, libct) from the official
release tarball with OpenSSL; ODBC, the command-line apps, server and
pool are disabled.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Build the wg and wg-quick CLI from the upstream tag snapshot; only the
rocky9 image builds it for now.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Build from the official autoconf amalgamation in debian13, rocky9 and
alpine3.24; rocky9-system uses the distribution sqlite-devel.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install libraries from Rocky Linux 9, CRB and EPEL instead of building
from source; packages missing from those repositories are skipped.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install ${PREFIX}/share/source-stack/source-stack.cmake as the last step. It
mirrors the image's ENV block (prefix, pkg-config and library paths under
lib64) for CMake and can restrict lookups to the prefix with
GW_SOURCE_STACK_ONLY.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
--enable-fat selects the optimized code at run time, so the static
library also works on x86_64 CPUs without AVX, BMI2 or ADX. It is
ignored on architectures that do not support it, such as aarch64.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install ${PREFIX}/share/source-stack/source-stack.cmake as the last step. It
mirrors the image's ENV block (prefix, pkg-config and library paths) for
CMake and can restrict lookups to the prefix with GW_SOURCE_STACK_ONLY.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace the hard-coded /usr/local with a PREFIX build argument (default
/usr/local) and add a MULTIARCH argument for the Debian multiarch library
directory. The toolchain only searches /usr/local by default, so export
PATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, LIBRARY_PATH, PKG_CONFIG_PATH,
CMAKE_PREFIX_PATH and CMAKE_INSTALL_PREFIX for other prefixes. build.sh
passes PREFIX and derives MULTIARCH from uname -m.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add xsimd, Thrift, Snappy, LZ4 and Arrow/Parquet before DuckDB, in the
same order as debian13, using lib64 as the library directory.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sources that ship one archive per architecture live in their own
sources/<name>/ directory and are mounted as a whole, so adding other
sources never invalidates their build layer.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Download the per-architecture Rust tarball into sources/rust/ and have the
rocky9 and debian13 Dockerfiles bind that directory and pick the archive
with uname -m. This drops the architecture-neutral hard link and keeps the
Rust layer's cache key independent of other source archives.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Share the debian13 patch content, renamed to libevent-libdir-install.patch,
so the install directory follows CMAKE_INSTALL_LIBDIR instead of a
hardcoded lib64. On Rocky Linux GNUInstallDirs already defaults it to
lib64, so the Dockerfile does not need to pass it.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Make the libevent install patch take CMAKE_INSTALL_LIBDIR instead of
hardcoding lib/x86_64-linux-gnu, and rename it to
libevent-libdir-install.patch.
- Replace every hardcoded x86_64-linux-gnu in the debian13 Dockerfile with
$(gcc -dumpmachine).
- Download the Rust tarball for `uname -m` and expose it to the Dockerfiles
as the architecture-neutral rust-1.99.1.tar.xz (a hard link refreshed on
every run), because podman cannot expand ARG in a --mount source.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Build the ui extension (pinned duckdb-ui commit for DuckDB 1.5.6) into
DuckDB on debian13 and rocky9 so the shell supports -ui.
- Add fetch-sources.sh, which downloads source archives with aria2c into the
git-ignored sources/ repository.
- debian13: replace per-dependency downloads with
RUN --mount=type=bind,from=sources, passed by build.sh through
--build-context, so archives are not stored in image layers.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install aria2 in the image and fetch Boost from the Aliyun and official
mirrors, limited to one connection per host.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add pinned xsimd 14.2.0, Apache Thrift v0.22.0 (C++ library only),
Snappy 1.2.2, LZ4 v1.10.0, and Apache Arrow 25.0.1 with Parquet as
static PIC builds. Arrow uses ARROW_DEPENDENCY_SOURCE=SYSTEM so no
dependencies are fetched implicitly, disables the bundled jemalloc and
mimalloc allocators, and enables Parquet encryption via OpenSSL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M5XtQocmT1zExJBt4oh3YK
Mirrors rocky9's curl-based fetching and consistent-libdir goals but
adapted to Debian's own conventions: replaces git clone with curl
tarball downloads (matching rocky9's URLs), drops sha256sum checks, and
installs every vendored library under /usr/local/lib/x86_64-linux-gnu
instead of rocky9's lib64.
lib64 was tried first but abandoned: on Debian, CMake's find_package()
Config-mode search, find_library(), and pkg-config's default search
path all detect /etc/debian_version and never look in lib64 (that's an
RHEL-only default), so cross-package lookups like spdlog finding fmt
or folly's FindLibEvent.cmake kept failing. lib/x86_64-linux-gnu is
Debian's native multiarch path and is found by all three mechanisms
with no extra CMAKE_PREFIX_PATH/PKG_CONFIG_PATH workarounds, verified
by building the full image end to end.
libevent-lib64-install.patch is renamed and retargeted at
lib/x86_64-linux-gnu since libevent hardcodes "lib" in its CMake
install rules with no override flag. CacheLib keeps building its
default interface/cachebench targets (no patch needed here, unlike
rocky9).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UV2yJRkL6CnChX3D2zhoXH
Verified every third-party build step by building and inspecting the
resulting image, and fixed each one that landed in /usr/local/lib
instead of /usr/local/lib64: CMake projects got -DLIB_INSTALL_DIR,
-DCMAKE_INSTALL_LIBDIR, -DLIBRARY_INSTALL_DIR or -DLIB_SUFFIX as
appropriate, autotools projects got --libdir=/usr/local/lib64, and
libevent (which hardcodes lib with no override) is now patched via
libevent-lib64-install.patch before building. Also drops the boost/
libaio/util-linux/gmp/nettle/gnutls/libproxyprotocol checksum checks,
removes the now-unused lib->lib64 copy fallback, and switches libxml2
to the wangguofang.net GitHub mirror since gitlab.gnome.org is
unreachable from the build environment.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QUU2cEU5XgLpfGVN8Jpa7d
Switch rocky9's GitHub-hosted dependency downloads from `git clone` to
curl-fetched release tarballs via the wangguofang.net proxy, matching
the approach already used in alpine3.24/Dockerfile. log4cplus keeps
git clone since it needs a submodule checkout.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WE1kAAo7iusPxLSuu88HaU
Build libunwind 1.8.3 as a static library before jemalloc, then
configure jemalloc with --enable-prof --enable-prof-libunwind so the
static libjemalloc.a can dump heap profiles with accurate stack
traces.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sd7pBDVxQENBX1CP2z6Lip
Switches the remaining gh-proxy.com references (rockylinux9, debian13) to
wangguofang.net for consistency with alpine3.24, and points the libaio
0.3.113 download at the Tsinghua mirror instead of releases.pagure.org for
faster access from mainland China.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019T6ypNZ1EUpKJQkXLopojx
Upstream ships only a Makefile with no install target, so each image
compiles src/proxy_protocol.c with -fPIC, archives it into
libproxyprotocol.a, and installs the header manually, matching this
project's static-PIC-library convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016Xj6cCTEVsr5PM43uTsbq8
Its ThreadPool submodule already comes from
github.com/log4cplus/ThreadPool, so pull the main repo from the
canonical github.com/log4cplus/log4cplus too, keeping both fetches
consistently routed through the wangguofang.net/github.com proxy
instead of mixing sources. Verified with a full build.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGpSs9pKTbvPkmFvBaWhBp
Delete the commented-out Folly/Fizz/Wangle/mvfst/fbthrift/CacheLib RUN
blocks instead of carrying them as dead code; keep a short explanatory
comment in the Dockerfile and move the fuller rationale to
INCLUDED_LIBRARIES.md, scoped explicitly to alpine3.24 since debian13
and rockylinux9 are glibc-based and build the full Meta stack.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGpSs9pKTbvPkmFvBaWhBp
Replace every git-clone-based dependency fetch with a plain
curl-and-extract of the corresponding tagged source archive (GitHub
repos via the wangguofang.net/github.com proxy's /archive/<ref>.tar.gz,
libxml2 via GitLab's -/archive/ endpoint), verified one at a time
bottom-up so each change stayed isolated and cheap to test against the
build cache. This avoids the git protocol/proxy round-trip per
dependency and matches the plain curl+tar pattern already used
elsewhere in this Dockerfile (boost, libaio, gmp, nettle, gnutls,
util-linux).
log4cplus keeps git clone, since it needs `git submodule update --init`
for its ThreadPool dependency, which a source archive can't provide.
Folly/Fizz/Wangle/mvfst/fbthrift/CacheLib remain untouched and
commented out.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGpSs9pKTbvPkmFvBaWhBp
Mirrors the same pinned third-party library build sequence as debian13/
on Alpine 3.24, targeting musl libc, with the fixes needed to get the
whole non-Meta stack building cleanly:
- Adjusts the package install step for apk; builds makeself from a
pinned source tag since it isn't packaged for stable Alpine releases;
adds coreutils so GNU realpath (needed by liburing's configure script)
is available in place of busybox's; drops sha256 checksum verification
on curl-fetched archives.
- CMake on 3.24 is 4.x, which removed compatibility with
cmake_minimum_required() versions below 3.5. Adds
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 (CMake's own sanctioned workaround,
not a source patch) to every cmake configure call so unmigrated
CMakeLists.txt in our pinned dependencies still configure.
- GCC on 3.24 is 15, which defaults to C23; C23 redefines an empty `()`
in a function declaration to mean "no parameters" instead of the old
K&R "unspecified parameters", which breaks a decades-old conftest in
GMP 6.3.0's configure. Pins GMP's build to -std=gnu17 to restore the
old semantics for that one dependency.
- Switches the GitHub mirror from gh-proxy.com (which started rejecting
some repos with a content-filter 403 in this environment) to the
project's own reverse proxy at wangguofang.net/github.com/.
Folly/Fizz/Wangle/mvfst/fbthrift/CacheLib are left commented out: their
portability layer reaches for glibc-only macros/symbols in multiple
places with no musl branch (off64_t/lseek64/pread64 in
folly/portability/Unistd.h, __ELF_NATIVE_CLASS in
folly/debugging/symbolizer/Elf.cpp, and likely more further in), and
patching each one as it surfaces risks introducing subtle bugs in code
we don't own. The reasoning is recorded inline for anyone revisiting
this later.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGpSs9pKTbvPkmFvBaWhBp