Commit Graph
61 Commits
Author SHA1 Message Date
GuofangandClaude Sonnet 5.5 729ada5769 Generate a CMake file that locates the debian13 dependencies
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>
2026-10-28 09:56:57 +08:00
guofangandClaude Sonnet 5.5 54d072edd4 Map macOS arm64 to aarch64 for the debian13 multiarch directory
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 21:36:07 +08:00
guofangandClaude Sonnet 5.5 071bea3b30 Map macOS arm64 to aarch64 when fetching the Rust archive
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 21:13:07 +08:00
guofangandClaude Sonnet 5.5 b5c1dd25d4 Add fallback download mirrors for Boost
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 20:57:03 +08:00
GuofangandClaude Sonnet 5.5 f18e95dace Make the debian13 install prefix configurable
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>
2026-10-27 16:39:15 +08:00
GuofangandClaude Sonnet 5.5 8f24cf0e17 Build Apache Arrow/Parquet and its dependencies on rocky9
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>
2026-10-27 13:49:48 +08:00
GuofangandClaude Sonnet 5.5 0bd9d85880 Document the per-architecture source directory convention
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>
2026-10-27 09:57:54 +08:00
GuofangandClaude Sonnet 5.5 eb0e3ba5d9 Mount the Rust archive from its own sources/rust directory
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>
2026-10-27 09:54:32 +08:00
GuofangandClaude Sonnet 5.5 4fbd9daa30 Remove the test directory
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 08:59:18 +08:00
GuofangandClaude Sonnet 5.5 195a389f8a Parameterize the rocky9 libevent install patch by CMAKE_INSTALL_LIBDIR
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>
2026-10-27 08:58:00 +08:00
GuofangandClaude Sonnet 5.5 b21f7db67b Derive debian13 library dir and Rust package from the architecture
- 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>
2026-10-27 08:52:07 +08:00
GuofangandClaude Sonnet 5.5 7f34cfcf9c Build log4cplus from source archives instead of git clone
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:39:51 +08:00
GuofangandClaude Sonnet 5.5 766d039a12 Document the duckdb-ui exception to the separate-step rule
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:38:18 +08:00
GuofangandClaude Sonnet 5.5 d5cd8b4665 Move debian13 Rust installation to the same position as rocky9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:36:11 +08:00
GuofangandClaude Sonnet 5.5 b50918a3f3 Pass the DuckDB version explicitly so the ui extension picks the 1.5 API
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:28:54 +08:00
GuofangandClaude Sonnet 5.5 ee653608bc Install Rust in rocky9 from the standalone tarball in sources
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:09:19 +08:00
GuofangandClaude Sonnet 5.5 7effb46516 Import alpine3.24 source archives via the sources build context
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:07:51 +08:00
GuofangandClaude Sonnet 5.5 5f0422f3f0 Import rocky9 source archives via the sources build context
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:07:02 +08:00
GuofangandClaude Sonnet 5.5 df7af62648 Build DuckDB with the ui extension and import sources via a build context
- 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>
2026-10-26 14:02:15 +08:00
GuofangandClaude Sonnet 5.5 659dd05269 Add DuckDB build to rocky9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 14:36:47 +08:00
GuofangandClaude Sonnet 5.5 9a2b8b5db4 Add DuckDB build to debian13 and drop Boost submodule rule from AGENTS.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 14:30:19 +08:00
Guofang b3676923c3 Update CMake installation paths to use /usr/local for libraries and pkgconfig 2026-10-22 16:01:39 +08:00
Guofang 5222ae6843 Replace Rust installation with aria2 downloads from multiple mirrors 2026-10-22 14:40:05 +08:00
GuofangandClaude Sonnet 5.5 86f11507e1 Download gmp and nettle with aria2 using USTC and Tsinghua mirrors
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 12:14:46 +08:00
GuofangandClaude Sonnet 5.5 97dc5c4561 Download Boost with aria2 using two mirrors
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>
2026-10-21 12:14:46 +08:00
GuofangandClaude Sonnet 5.5 7f2ad60c18 Fix missing line continuation in Rust installation step
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 12:14:46 +08:00
Guofang dd06661179 Add Rust installation with USTC mirrors and symlink binaries in Dockerfile 2026-09-24 15:32:18 +08:00
GuofangandClaude Opus 5.5 aa85a6f77b Build Apache Arrow and Parquet from source in debian13 image
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
2026-09-24 15:17:12 +08:00
Guofang d00a3b9544 Add Dockerfile and build script for source stack image creation 2026-09-21 09:58:46 +08:00
GuofangandClaude Sonnet 5 1170f8f353 Use USTC EPEL mirror and upgrade packages in rocky9 Dockerfile
Port the EPEL mirror rewrite from develop's test/Dockerfile, and run
dnf upgrade before cleaning the cache.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012LvSM3NjBSCNsRwDpWeGfu
2026-09-21 09:48:21 +08:00
Guofang 3a0bb4e0c8 Add 'which' package to installation in Dockerfiles for Debian and Rocky9 2026-09-20 14:26:26 +08:00
Guofang eb8ac43354 Update Rust installation process in Dockerfile to use USTC mirrors 2026-09-18 13:14:20 +08:00
Guofang 0563551eed Remove architecture-specific SHA256 checks for rustup installation in Dockerfile 2026-09-18 11:14:41 +08:00
Guofang 524b90737e Refactor build scripts to consistently use Podman for image building 2026-09-18 09:52:47 +08:00
GuofangandClaude Sonnet 5 52ea874506 Fetch debian13 sources via curl and unify libs under lib/x86_64-linux-gnu
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
2026-09-17 16:48:53 +08:00
GuofangandClaude Sonnet 5 ef0079c3ee Install all vendored libraries into lib64 consistently
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
2026-09-17 15:25:07 +08:00
GuofangandClaude Sonnet 5 a425237759 Fetch rocky9 GitHub sources via curl through wangguofang.net proxy
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
2026-09-17 14:08:08 +08:00
GuofangandClaude Sonnet 5 e685a177d5 Enable jemalloc heap profiling with libunwind backtraces
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
2026-09-17 13:59:41 +08:00
GuofangandClaude Sonnet 5 195ad299cd Rename rockylinux9 build directory to rocky9
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 12:09:19 +08:00
GuofangandClaude Sonnet 5 30f1a3f771 Use wangguofang.net proxy and Tsinghua mirror for GitHub and libaio downloads
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
2026-09-14 16:09:12 +08:00
Guofang 0852115a0e Update log4cplus clone URL to use GitHub instead of Gitee 2026-09-14 16:00:31 +08:00
Guofang 56ba35005d Add rpm-build to the Rocky Linux 9 Dockerfile dependencies 2026-09-14 15:40:56 +08:00
GuofangandClaude Sonnet 5 3c1f37e1d5 Add libproxyprotocol to the Debian, Rocky, and Alpine build environments
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
2026-09-14 15:15:52 +08:00
GuofangandClaude Sonnet 5 874c6ead1b Clone log4cplus from GitHub instead of the gitee mirror
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
2026-09-12 17:22:27 +08:00
GuofangandClaude Sonnet 5 c6d2f963d2 Remove dead Meta ecosystem build steps from the Alpine Dockerfile
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
2026-09-12 17:12:20 +08:00
GuofangandClaude Sonnet 5 1f23774796 Fetch source archives instead of git clone in the Alpine image
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
2026-09-12 17:06:42 +08:00
GuofangandClaude Sonnet 5 d1ce99a0d0 Add Alpine (musl) build environment alongside Debian 13 and Rocky Linux 9
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
2026-09-12 17:05:45 +08:00
Guofang e384a71dc9 Add epel-release and makeself to Dockerfile dependencies 2026-09-10 13:54:57 +08:00
Guofang 056b7dc854 Add CXXFLAGS to jemalloc configuration for static build 2026-09-10 08:48:50 +08:00
GuofangandClaude Sonnet 5 951ebf0907 Build jemalloc from source instead of via package manager
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QKAbAkPvqqKCRZKXtZAvTx
2026-09-07 13:03:27 +08:00