Files
source-stack/alpine3.24/Dockerfile
T
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

722 lines
29 KiB
Docker

FROM docker.io/library/alpine:3.24
RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.ustc.edu.cn|g' /etc/apk/repositories \
&& apk add --no-cache \
autoconf \
automake \
build-base \
bzip2 \
ca-certificates \
cmake \
coreutils \
curl \
git \
libtool \
linux-headers \
ninja \
perl \
pkgconf \
tar \
xz
RUN git config --global url."https://wangguofang.net/github.com/".insteadOf "https://github.com/"
RUN curl --fail --location --output boost.tar.bz2 \
https://mirrors.aliyun.com/blfs/conglomeration/boost/boost_1_83_0.tar.bz2 \
&& mkdir src \
&& tar --extract --bzip2 --file=boost.tar.bz2 --directory=src --strip-components=1 \
&& rm boost.tar.bz2 \
&& cd src \
&& ./bootstrap.sh --prefix=/usr/local \
&& ./b2 --jobs="$(nproc)" \
--with-atomic \
--with-chrono \
--with-context \
--with-date_time \
--with-filesystem \
--with-program_options \
--with-regex \
--with-system \
--with-thread \
cflags=-fPIC \
cxxflags=-fPIC \
link=static \
pch=off \
runtime-link=shared \
threading=multi \
variant=release \
install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output openssl.tar.gz \
https://wangguofang.net/github.com/openssl/openssl/archive/openssl-3.0.15.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=openssl.tar.gz --directory=src --strip-components=1 \
&& rm openssl.tar.gz \
&& cd src \
&& ./Configure --prefix=/usr/local --libdir=lib no-shared no-tests -fPIC \
&& make --jobs="$(nproc)" \
&& make install_sw \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output libevent.tar.gz \
https://wangguofang.net/github.com/libevent/libevent/archive/release-2.1.12-stable.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libevent.tar.gz --directory=src --strip-components=1 \
&& rm libevent.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DEVENT__DISABLE_BENCHMARK=ON \
-DEVENT__DISABLE_REGRESS=ON \
-DEVENT__DISABLE_SAMPLES=ON \
-DEVENT__DISABLE_TESTS=ON \
-DEVENT__LIBRARY_TYPE=STATIC \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output zstd.tar.gz \
https://wangguofang.net/github.com/facebook/zstd/archive/v1.5.7.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=zstd.tar.gz --directory=src --strip-components=1 \
&& rm zstd.tar.gz \
&& cmake -G Ninja -S src/build/cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DZSTD_BUILD_CONTRIB=OFF \
-DZSTD_BUILD_PROGRAMS=OFF \
-DZSTD_BUILD_SHARED=OFF \
-DZSTD_BUILD_STATIC=ON \
-DZSTD_BUILD_TESTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output zlib.tar.gz \
https://wangguofang.net/github.com/madler/zlib/archive/v1.3.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=zlib.tar.gz --directory=src --strip-components=1 \
&& rm zlib.tar.gz \
&& cd src \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local --static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output protobuf.tar.gz \
https://wangguofang.net/github.com/protocolbuffers/protobuf/archive/v3.21.12.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=protobuf.tar.gz --directory=src --strip-components=1 \
&& rm protobuf.tar.gz \
&& cmake -G Ninja -S src -B build -Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_BUILD_SHARED_LIBS=OFF \
-Dprotobuf_WITH_ZLIB=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN git clone --branch=REL_2_0_5 --depth=1 https://gitee.com/mirrors/log4cplus.git src \
&& git -C src submodule update --init --depth=1 threadpool \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DLOG4CPLUS_BUILD_TESTING=OFF \
-DWITH_UNIT_TESTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output fmt.tar.gz \
https://wangguofang.net/github.com/fmtlib/fmt/archive/12.2.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=fmt.tar.gz --directory=src --strip-components=1 \
&& rm fmt.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DFMT_DOC=OFF \
-DFMT_TEST=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output spdlog.tar.gz \
https://wangguofang.net/github.com/gabime/spdlog/archive/v1.17.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=spdlog.tar.gz --directory=src --strip-components=1 \
&& rm spdlog.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DSPDLOG_BUILD_BENCH=OFF \
-DSPDLOG_BUILD_EXAMPLE=OFF \
-DSPDLOG_BUILD_TESTS=OFF \
-DSPDLOG_FMT_EXTERNAL=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output magic_enum.tar.gz \
https://wangguofang.net/github.com/Neargye/magic_enum/archive/v0.9.8.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=magic_enum.tar.gz --directory=src --strip-components=1 \
&& rm magic_enum.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DMAGIC_ENUM_OPT_BUILD_EXAMPLES=OFF \
-DMAGIC_ENUM_OPT_BUILD_TESTS=OFF \
-DMAGIC_ENUM_OPT_INSTALL=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output fast_float.tar.gz \
https://wangguofang.net/github.com/fastfloat/fast_float/archive/v8.2.10.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=fast_float.tar.gz --directory=src --strip-components=1 \
&& rm fast_float.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DFASTFLOAT_BENCHMARKS=OFF \
-DFASTFLOAT_INSTALL=ON \
-DFASTFLOAT_TEST=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output sparse-map.tar.gz \
https://wangguofang.net/github.com/Tessil/sparse-map/archive/v0.7.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=sparse-map.tar.gz --directory=src --strip-components=1 \
&& rm sparse-map.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output gflags.tar.gz \
https://wangguofang.net/github.com/gflags/gflags/archive/v2.3.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=gflags.tar.gz --directory=src --strip-components=1 \
&& rm gflags.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_STATIC_LIBS=ON \
-DBUILD_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DINSTALL_HEADERS=ON \
-DINSTALL_SHARED_LIBS=OFF \
-DINSTALL_STATIC_LIBS=ON \
-DREGISTER_INSTALL_PREFIX=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output glog.tar.gz \
https://wangguofang.net/github.com/google/glog/archive/v0.7.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=glog.tar.gz --directory=src --strip-components=1 \
&& rm glog.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DWITH_GFLAGS=ON \
-DWITH_GTEST=OFF \
-DWITH_PKGCONFIG=ON \
-DWITH_UNWIND=none \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output liburing.tar.gz \
https://wangguofang.net/github.com/axboe/liburing/archive/liburing-2.15.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=liburing.tar.gz --directory=src --strip-components=1 \
&& rm liburing.tar.gz \
&& cd src \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local \
&& make --jobs="$(nproc)" ENABLE_SHARED=0 library \
&& make ENABLE_SHARED=0 install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output libaio.tar.gz \
https://releases.pagure.org/libaio/libaio-0.3.113.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libaio.tar.gz --directory=src --strip-components=1 \
&& rm libaio.tar.gz \
&& make --directory=src --jobs="$(nproc)" ENABLE_SHARED=0 \
&& make --directory=src ENABLE_SHARED=0 prefix=/usr/local install \
&& rm -rf src
RUN curl --fail --location --output libdwarf-code.tar.gz \
https://wangguofang.net/github.com/davea42/libdwarf-code/archive/v2.3.2.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libdwarf-code.tar.gz --directory=src --strip-components=1 \
&& rm libdwarf-code.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_DWARFDUMP=OFF \
-DBUILD_DWARFEXAMPLE=OFF \
-DBUILD_DWARFGEN=OFF \
-DBUILD_NON_SHARED=ON \
-DBUILD_SHARED=OFF \
-DDO_TESTING=OFF \
-DENABLE_DECOMPRESSION=ON \
-DPIC_ALWAYS=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output libsodium.tar.gz \
https://wangguofang.net/github.com/jedisct1/libsodium/archive/1.0.20-RELEASE.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libsodium.tar.gz --directory=src --strip-components=1 \
&& rm libsodium.tar.gz \
&& cd src \
&& ./autogen.sh \
&& ./configure --prefix=/usr/local --disable-shared --enable-static --with-pic \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output xxHash.tar.gz \
https://wangguofang.net/github.com/Cyan4973/xxHash/archive/v0.8.3.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=xxHash.tar.gz --directory=src --strip-components=1 \
&& rm xxHash.tar.gz \
&& cmake -G Ninja -S src/cmake_unofficial -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DXXHASH_BUILD_XXHSUM=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output googletest.tar.gz \
https://wangguofang.net/github.com/google/googletest/archive/v1.17.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=googletest.tar.gz --directory=src --strip-components=1 \
&& rm googletest.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_GMOCK=ON \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DINSTALL_GTEST=ON \
-Dgtest_build_samples=OFF \
-Dgtest_build_tests=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output numactl.tar.gz \
https://wangguofang.net/github.com/numactl/numactl/archive/v2.0.19.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=numactl.tar.gz --directory=src --strip-components=1 \
&& rm numactl.tar.gz \
&& cd src \
&& ./autogen.sh \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
# Meta/Facebook ecosystem libraries (Folly, Fizz, Wangle, mvfst, fbthrift,
# CacheLib) are not built on this musl target: they aren't on Meta's
# supported-OS list, and every compile error traced back so far is Folly
# reaching for a glibc-only macro/symbol with no musl branch in its
# portability layer (e.g. off64_t/lseek64/pread64 in
# folly/portability/Unistd.h, __ELF_NATIVE_CLASS in
# folly/debugging/symbolizer/Elf.cpp). Patching around each one as it
# surfaces is more likely to introduce subtle bugs than to reach a solid
# build, so this stack is intentionally left unbuilt on Alpine.
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebook/folly.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
# -DBOOST_LINK_STATIC=ON \
# -DBUILD_BENCHMARKS=OFF \
# -DBUILD_SHARED_LIBS=OFF \
# -DBUILD_TESTS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# -DPYTHON_EXTENSIONS=OFF \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebookincubator/fizz.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src/fizz -B build -DCMAKE_BUILD_TYPE=Release \
# -DBUILD_EXAMPLES=OFF \
# -DBUILD_SHARED_LIBS=OFF \
# -DBUILD_TESTS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# -Dsodium_USE_STATIC_LIBS=ON \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebook/wangle.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src/wangle -B build -DCMAKE_BUILD_TYPE=Release \
# -DBUILD_EXAMPLES=OFF \
# -DBUILD_SHARED_LIBS=OFF \
# -DBUILD_TESTS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebook/mvfst.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
# -DBUILD_SAMPLES=OFF \
# -DBUILD_SHARED_LIBS=OFF \
# -DBUILD_TESTS=OFF \
# -DBUILD_TOOLS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebook/fbthrift.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
# -DBUILD_SHARED_LIBS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# -DTHRIFT_BENCHMARKS=OFF \
# -Denable_tests=OFF \
# -Dthrift_python=OFF \
# -Dthriftpy=OFF \
# -Dthriftpy3=OFF \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
# RUN git clone --branch=v2026.08.03.00 --depth=1 https://github.com/facebook/CacheLib.git src \
# && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \
# cmake -G Ninja -S src/cachelib -B build -DCMAKE_BUILD_TYPE=Release \
# -DBOOST_LINK_STATIC=ON \
# -DBUILD_SHARED_LIBS=OFF \
# -DBUILD_TESTS=OFF \
# -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
# && cmake --build build --parallel "$(nproc)" --target install \
# && rm -rf build src
RUN curl --fail --location --output util-linux.tar.xz \
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.42/util-linux-2.42.2.tar.xz \
&& mkdir src \
&& tar --extract --xz --file=util-linux.tar.xz --directory=src --strip-components=1 \
&& rm util-linux.tar.xz \
&& cd src \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local \
--disable-all-programs \
--disable-bash-completion \
--disable-makeinstall-chown \
--disable-nls \
--disable-shared \
--enable-libuuid \
--enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output libzmq.tar.gz \
https://wangguofang.net/github.com/zeromq/libzmq/archive/v4.3.5.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libzmq.tar.gz --directory=src --strip-components=1 \
&& rm libzmq.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED=OFF \
-DBUILD_STATIC=ON \
-DBUILD_TESTS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DENABLE_CPACK=OFF \
-DENABLE_CURVE=ON \
-DENABLE_DRAFTS=OFF \
-DWITH_DOC=OFF \
-DWITH_DOCS=OFF \
-DWITH_LIBSODIUM=ON \
-DWITH_LIBSODIUM_STATIC=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output czmq.tar.gz \
https://wangguofang.net/github.com/zeromq/czmq/archive/v4.2.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=czmq.tar.gz --directory=src --strip-components=1 \
&& rm czmq.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCZMQ_BUILD_SHARED=OFF \
-DCZMQ_BUILD_STATIC=ON \
-DCZMQ_WITH_LZ4=OFF \
-DCZMQ_WITH_LIBCURL=OFF \
-DCZMQ_WITH_LIBMICROHTTPD=OFF \
-DCZMQ_WITH_NSS=OFF \
-DCZMQ_WITH_SYSTEMD=OFF \
-DCZMQ_WITH_UUID=ON \
-DENABLE_DRAFTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output jsoncpp.tar.gz \
https://wangguofang.net/github.com/open-source-parsers/jsoncpp/archive/1.9.8.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=jsoncpp.tar.gz --directory=src --strip-components=1 \
&& rm jsoncpp.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_OBJECT_LIBS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_STATIC_LIBS=ON \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DJSONCPP_WITH_EXAMPLE=OFF \
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF \
-DJSONCPP_WITH_TESTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output librdkafka.tar.gz \
https://wangguofang.net/github.com/confluentinc/librdkafka/archive/v2.15.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=librdkafka.tar.gz --directory=src --strip-components=1 \
&& rm librdkafka.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DENABLE_LZ4_EXT=OFF \
-DRDKAFKA_BUILD_EXAMPLES=OFF \
-DRDKAFKA_BUILD_STATIC=ON \
-DRDKAFKA_BUILD_TESTS=OFF \
-DWITH_CURL=OFF \
-DWITH_PLUGINS=OFF \
-DWITH_SASL=OFF \
-DWITH_SSL=ON \
-DWITH_ZLIB=ON \
-DWITH_ZSTD=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output json-c.tar.gz \
https://wangguofang.net/github.com/json-c/json-c/archive/json-c-0.19-20260627.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=json-c.tar.gz --directory=src --strip-components=1 \
&& rm json-c.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_APPS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_STATIC_LIBS=ON \
-DBUILD_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DDISABLE_EXTRA_LIBS=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
COPY rapidjson-generic-string-ref-assignment.patch /tmp/
RUN curl --fail --location --output rapidjson.tar.gz \
https://wangguofang.net/github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=rapidjson.tar.gz --directory=src --strip-components=1 \
&& rm rapidjson.tar.gz \
&& git -C src apply /tmp/rapidjson-generic-string-ref-assignment.patch \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DRAPIDJSON_BUILD_DOC=OFF \
-DRAPIDJSON_BUILD_EXAMPLES=OFF \
-DRAPIDJSON_BUILD_TESTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src /tmp/rapidjson-generic-string-ref-assignment.patch
RUN curl --fail --location --output curl.tar.gz \
https://wangguofang.net/github.com/curl/curl/archive/curl-8_21_0.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=curl.tar.gz --directory=src --strip-components=1 \
&& rm curl.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_CURL_EXE=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_LIBCURL_DOCS=OFF \
-DBUILD_MISC_DOCS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_STATIC_LIBS=ON \
-DBUILD_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCURL_BROTLI=OFF \
-DCURL_USE_LIBPSL=OFF \
-DCURL_USE_LIBSSH=OFF \
-DCURL_USE_LIBSSH2=OFF \
-DCURL_USE_OPENSSL=ON \
-DENABLE_CURL_MANUAL=OFF \
-DHTTP_ONLY=ON \
-DUSE_LIBIDN2=OFF \
-DUSE_NGHTTP2=OFF \
-DUSE_NGTCP2=OFF \
-DUSE_QUICHE=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output hiredis.tar.gz \
https://wangguofang.net/github.com/redis/hiredis/archive/v1.4.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=hiredis.tar.gz --directory=src --strip-components=1 \
&& rm hiredis.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DENABLE_ASYNC_TESTS=OFF \
-DENABLE_EXAMPLES=OFF \
-DENABLE_NUGET=OFF \
-DENABLE_SSL=OFF \
-DENABLE_SSL_TESTS=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output gmp.tar.xz \
https://mirrors.ustc.edu.cn/gnu/gmp/gmp-6.3.0.tar.xz \
&& mkdir src \
&& tar --extract --xz --file=gmp.tar.xz --directory=src --strip-components=1 \
&& rm gmp.tar.xz \
&& cd src \
&& CFLAGS="-fPIC -std=gnu17" ./configure --prefix=/usr/local --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output nettle.tar.gz \
https://mirrors.ustc.edu.cn/gnu/nettle/nettle-3.10.2.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=nettle.tar.gz --directory=src --strip-components=1 \
&& rm nettle.tar.gz \
&& cd src \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local --libdir=/usr/local/lib \
--disable-documentation \
--disable-shared \
--enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output gnutls.tar.xz \
https://mirrors.dotsrc.org/gcrypt/gnutls/v3.8/gnutls-3.8.13.tar.xz \
&& mkdir src \
&& tar --extract --xz --file=gnutls.tar.xz --directory=src --strip-components=1 \
&& rm gnutls.tar.xz \
&& cd src \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local \
--with-included-libtasn1 \
--with-included-unistring \
--disable-cxx \
--disable-doc \
--disable-manpages \
--disable-nls \
--disable-shared \
--disable-tests \
--disable-tools \
--enable-static \
--without-brotli \
--without-idn \
--without-p11-kit \
--without-tpm \
--without-tpm2 \
--without-zlib \
--without-zstd \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output libmaxminddb.tar.gz \
https://wangguofang.net/github.com/maxmind/libmaxminddb/archive/1.13.3.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libmaxminddb.tar.gz --directory=src --strip-components=1 \
&& rm libmaxminddb.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DMAXMINDDB_BUILD_BINARIES=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output libyaml.tar.gz \
https://wangguofang.net/github.com/yaml/libyaml/archive/0.2.5.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libyaml.tar.gz --directory=src --strip-components=1 \
&& rm libyaml.tar.gz \
&& cd src \
&& ./bootstrap \
&& CFLAGS=-fPIC ./configure --prefix=/usr/local --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output libxml2.tar.gz \
https://gitlab.gnome.org/GNOME/libxml2/-/archive/v2.15.3/libxml2-v2.15.3.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=libxml2.tar.gz --directory=src --strip-components=1 \
&& rm libxml2.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DLIBXML2_WITH_DOCS=OFF \
-DLIBXML2_WITH_ICU=OFF \
-DLIBXML2_WITH_MODULES=OFF \
-DLIBXML2_WITH_PROGRAMS=OFF \
-DLIBXML2_WITH_PYTHON=OFF \
-DLIBXML2_WITH_TESTS=OFF \
-DLIBXML2_WITH_ZLIB=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output redis-plus-plus.tar.gz \
https://wangguofang.net/github.com/sewenew/redis-plus-plus/archive/1.3.15.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=redis-plus-plus.tar.gz --directory=src --strip-components=1 \
&& rm redis-plus-plus.tar.gz \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DREDIS_PLUS_PLUS_BUILD_SHARED=OFF \
-DREDIS_PLUS_PLUS_BUILD_STATIC=ON \
-DREDIS_PLUS_PLUS_BUILD_STATIC_WITH_PIC=ON \
-DREDIS_PLUS_PLUS_BUILD_TEST=OFF \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
RUN curl --fail --location --output jemalloc.tar.gz \
https://wangguofang.net/github.com/jemalloc/jemalloc/archive/5.3.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=jemalloc.tar.gz --directory=src --strip-components=1 \
&& rm jemalloc.tar.gz \
&& cd src \
&& ./autogen.sh \
&& CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --prefix=/usr/local \
--disable-doc \
--disable-shared \
--enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
RUN curl --fail --location --output makeself.tar.gz \
https://wangguofang.net/github.com/megastep/makeself/archive/release-2.7.1.tar.gz \
&& mkdir src \
&& tar --extract --gzip --file=makeself.tar.gz --directory=src --strip-components=1 \
&& rm makeself.tar.gz \
&& cp src/makeself.sh src/makeself-header.sh /usr/local/bin/ \
&& ln -s makeself.sh /usr/local/bin/makeself \
&& rm -rf src
CMD ["/bin/sh"]